From: Eunhae Choi Date: Thu, 28 Sep 2017 10:57:53 +0000 (+0900) Subject: [0.1.20] resolve coverity issue X-Git-Tag: submit/tizen/20170929.104425^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ad35c543d215820e438f013ca7a4ee044b3fa3b;p=platform%2Fcore%2Fapi%2Fmediastreamer.git [0.1.20] resolve coverity issue Change-Id: I133bd3fa78feaa2c694af04eb7f730497340b270 (cherry picked from commit 4ef72050d6f02ebbe7e1a2f273d752c1f3e7e5d8) --- diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index bae1aab..3a73e2b 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -1,6 +1,6 @@ Name: capi-media-streamer Summary: A Media Streamer API -Version: 0.1.19 +Version: 0.1.20 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_streamer_gst.c b/src/media_streamer_gst.c index 5171d3d..b61fbda 100644 --- a/src/media_streamer_gst.c +++ b/src/media_streamer_gst.c @@ -1055,6 +1055,18 @@ GstElement *__ms_node_element_create(node_plug_s *plug_info, media_streamer_node GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info, media_streamer_node_type_e type) { + GstElement *video_scale = NULL; + GstElement *video_convert = NULL; + GstElement *encoder_elem = NULL; + GstElement *encoder_parser = NULL; + GstElement *encoder_bin = NULL; + gboolean gst_ret = FALSE; + const gchar *src_type = NULL; + node_plug_s encoder_info = {0,}; + node_plug_s parser_info = {0,}; + node_info_s node_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_VIDEO_PARSER}; + media_format_mimetype_e encoder_type = MEDIA_FORMAT_MAX; + GstCaps *enc_caps = plug_info->src_caps; if (!enc_caps) { enc_caps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT); @@ -1062,32 +1074,40 @@ GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info, media_stre } /* Creating Scaler, Converter */ - GstElement *video_scale = __ms_element_create(DEFAULT_VIDEO_SCALE, NULL); - GstElement *video_convert = __ms_element_create(DEFAULT_VIDEO_CONVERT, NULL); + video_scale = __ms_element_create(DEFAULT_VIDEO_SCALE, NULL); + video_convert = __ms_element_create(DEFAULT_VIDEO_CONVERT, NULL); /* Creating Video Encoder */ - node_info_s *node_klass_type = __ms_node_get_klass_by_its_type(type); - node_plug_s encoder_info = {node_klass_type, enc_caps, plug_info->sink_caps, NULL}; - GstElement *encoder_elem = __ms_element_create_from_ini(&encoder_info, type); + encoder_info.info = __ms_node_get_klass_by_its_type(type); + encoder_info.src_caps = enc_caps; + encoder_info.sink_caps = plug_info->sink_caps; + encoder_info.exclude_names = NULL; + + encoder_elem = __ms_element_create_from_ini(&encoder_info, type); if (!encoder_elem) encoder_elem = __ms_element_create_by_registry(&encoder_info, type); /* Creating Video Parser */ - node_info_s node_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_VIDEO_PARSER}; - node_plug_s parser_info = {&node_info, enc_caps, enc_caps, NULL}; - GstElement *encoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); + parser_info.info = &node_info; + parser_info.src_caps = enc_caps; + parser_info.sink_caps = enc_caps; + parser_info.exclude_names = NULL; + + encoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); if (!encoder_parser) encoder_parser = __ms_element_create_by_registry(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); /* Creating bin - Video Encoder */ - gboolean gst_ret = FALSE; - GstElement *encoder_bin = gst_bin_new("video_encoder"); - ms_retvm_if(!video_convert || !video_scale || !encoder_elem || !encoder_bin || !encoder_parser, (GstElement *) NULL, "Error: creating elements for video encoder bin"); + encoder_bin = gst_bin_new("video_encoder"); + + if (!video_convert || !video_scale || !encoder_elem || !encoder_parser || !encoder_bin) { + ms_error("Error: creating elements for video encoder bin"); + goto ERROR; + } /* Settings if H264 format is set*/ - const gchar *src_type; MS_GET_CAPS_TYPE(enc_caps, src_type); - media_format_mimetype_e encoder_type = __ms_convert_string_format_to_media_format(src_type); + encoder_type = __ms_convert_string_format_to_media_format(src_type); if (encoder_type == MEDIA_FORMAT_H264_SP) { g_object_set(GST_OBJECT(encoder_parser), "config-interval", H264_PARSER_CONFIG_INTERVAL, NULL); g_object_set(G_OBJECT(encoder_elem), "tune", H264_ENCODER_ZEROLATENCY, NULL); @@ -1102,43 +1122,71 @@ GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info, media_stre if (gst_ret != TRUE) { ms_error("Failed to link elements into encoder_bin"); MS_SAFE_UNREF(encoder_bin); + return NULL; } __ms_add_ghostpad(encoder_parser, "src", encoder_bin, "src"); __ms_add_ghostpad(video_convert, "sink", encoder_bin, "sink"); return encoder_bin; + +ERROR: + + MS_SAFE_UNREF(video_convert); + MS_SAFE_UNREF(video_scale); + MS_SAFE_UNREF(encoder_elem); + MS_SAFE_UNREF(encoder_parser); + MS_SAFE_UNREF(encoder_bin); + + return NULL; } GstElement *__ms_video_decoder_element_create(node_plug_s *plug_info, media_streamer_node_type_e type) { + gboolean is_hw_codec = FALSE; + GstElement *last_elem = NULL; + GstElement *decoder_elem = NULL; + GstElement *decoder_parser = NULL; + GstElement *decoder_queue = NULL; + GstElement *video_conv = NULL; + GstElement *video_scale = NULL; + GstElement *decoder_bin = NULL; + node_plug_s decoder_info = {0,}; + node_plug_s parser_info = {0,}; + node_info_s nodes_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_VIDEO_PARSER}; + media_format_mimetype_e decoder_type = MEDIA_FORMAT_MAX; + gboolean gst_ret = FALSE; + const gchar *sink_type = NULL; + GstCaps *dec_caps = plug_info->sink_caps; if (!dec_caps) { dec_caps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT); ms_debug("No Video decoding format is set! Deafault will be: [%s]", MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT); } - gboolean is_hw_codec = FALSE; - GstElement *last_elem = NULL; - /* Creating Video Decoder */ - node_info_s *node_klass_type = __ms_node_get_klass_by_its_type(type); - node_plug_s decoder_info = {node_klass_type, plug_info->src_caps, dec_caps, NULL}; - GstElement *decoder_elem = __ms_element_create_from_ini(&decoder_info, MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER); + decoder_info.info = __ms_node_get_klass_by_its_type(type);; + decoder_info.src_caps = plug_info->src_caps; + decoder_info.sink_caps = dec_caps; + decoder_info.exclude_names = NULL; + + decoder_elem = __ms_element_create_from_ini(&decoder_info, MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER); if (!decoder_elem) decoder_elem = __ms_element_create_by_registry(&decoder_info, MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER); /* Creating Video Parser */ - node_info_s nodes_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_VIDEO_PARSER}; - node_plug_s parser_info = {&nodes_info, dec_caps, dec_caps, NULL}; - GstElement *decoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); + parser_info.info = &nodes_info; + parser_info.src_caps = dec_caps; + parser_info.sink_caps = dec_caps; + parser_info.exclude_names = NULL; + + decoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); if (!decoder_parser) decoder_parser = __ms_element_create_by_registry(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); /* Settings if H264 format is set*/ - const gchar *sink_type; MS_GET_CAPS_TYPE(dec_caps, sink_type); - media_format_mimetype_e decoder_type = __ms_convert_string_format_to_media_format(sink_type); + decoder_type = __ms_convert_string_format_to_media_format(sink_type); if (decoder_type == MEDIA_FORMAT_H264_SP) g_object_set(G_OBJECT(decoder_parser), "config-interval", H264_PARSER_CONFIG_INTERVAL, NULL); @@ -1146,10 +1194,13 @@ GstElement *__ms_video_decoder_element_create(node_plug_s *plug_info, media_stre is_hw_codec = TRUE; /* Creating bin - Video Decoder */ - gboolean gst_ret = FALSE; - GstElement *decoder_bin = gst_bin_new("video_decoder"); - GstElement *decoder_queue = __ms_element_create("queue", NULL); - ms_retvm_if(!decoder_elem || !decoder_queue || !decoder_bin || !decoder_parser, (GstElement *) NULL, "Error: creating elements for video decoder bin"); + decoder_queue = __ms_element_create("queue", NULL); + decoder_bin = gst_bin_new("video_decoder"); + + if (!decoder_elem || !decoder_queue || !decoder_parser || !decoder_bin) { + ms_error("Error: creating elements for video decoder bin"); + goto ERROR; + } /* Adding elements to bin Audio Encoder */ gst_bin_add_many(GST_BIN(decoder_bin), decoder_queue, decoder_elem, decoder_parser, NULL); @@ -1162,9 +1213,13 @@ GstElement *__ms_video_decoder_element_create(node_plug_s *plug_info, media_stre last_elem = decoder_elem; if (!is_hw_codec) { - GstElement *video_conv = __ms_element_create("videoconvert", NULL); - GstElement *video_scale = __ms_element_create("videoscale", NULL); - ms_retvm_if(!video_conv || !video_scale, (GstElement *) NULL, "Error: creating elements for video decoder bin"); + video_conv = __ms_element_create("videoconvert", NULL); + video_scale = __ms_element_create("videoscale", NULL); + if (!video_conv || !video_scale) { + ms_error("Error: creating elements for video decoder bin"); + goto ERROR; + } + gst_bin_add_many(GST_BIN(decoder_bin), video_conv, video_scale, NULL); gst_ret = gst_element_link_many(decoder_elem, video_conv, video_scale, NULL); if (gst_ret != TRUE) { @@ -1179,29 +1234,51 @@ GstElement *__ms_video_decoder_element_create(node_plug_s *plug_info, media_stre __ms_add_ghostpad(decoder_queue, "sink", decoder_bin, "sink"); return decoder_bin; + +ERROR: + + MS_SAFE_UNREF(decoder_elem); + MS_SAFE_UNREF(decoder_queue); + MS_SAFE_UNREF(decoder_parser); + MS_SAFE_UNREF(video_conv); + MS_SAFE_UNREF(video_scale); + MS_SAFE_UNREF(decoder_bin); + + return NULL; } GstElement *__ms_audio_encoder_element_create(node_plug_s *plug_info, media_streamer_node_type_e type) { - GstCaps *enc_caps = plug_info->src_caps; + gboolean gst_ret = FALSE; + GstElement *audio_convert = NULL; + GstElement *audio_resample = NULL; + GstElement *audio_filter = NULL; + GstElement *audio_postenc_convert = NULL; + GstElement *audio_encoder = NULL; + GstElement *audio_enc_bin = NULL; + node_plug_s plug_info_encoder = {0,}; gchar *encoder_name = NULL; + GstCaps *audioCaps = NULL; + + GstCaps *enc_caps = plug_info->src_caps; if (!enc_caps) { enc_caps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT); ms_debug("No Audio encoding format is set! Deafault will be: [%s]", MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT); } - gboolean gst_ret = FALSE; - /* Creating Converter, Resampler, Filter */ - GstElement *audio_convert = __ms_element_create(DEFAULT_AUDIO_CONVERT, NULL); - GstElement *audio_resample = __ms_element_create(DEFAULT_AUDIO_RESAMPLE, NULL); - GstElement *audio_filter = __ms_element_create(DEFAULT_FILTER, NULL); - GstElement *audio_postenc_convert = __ms_element_create(DEFAULT_AUDIO_CONVERT, NULL); + audio_convert = __ms_element_create(DEFAULT_AUDIO_CONVERT, NULL); + audio_resample = __ms_element_create(DEFAULT_AUDIO_RESAMPLE, NULL); + audio_filter = __ms_element_create(DEFAULT_FILTER, NULL); + audio_postenc_convert = __ms_element_create(DEFAULT_AUDIO_CONVERT, NULL); /* Creating Audio Encoder */ - node_info_s *node_klass_type = __ms_node_get_klass_by_its_type(type); - node_plug_s plug_info_encoder = {node_klass_type, enc_caps, plug_info->sink_caps, NULL}; - GstElement *audio_encoder = __ms_element_create_from_ini(&plug_info_encoder, type); + plug_info_encoder.info = __ms_node_get_klass_by_its_type(type); + plug_info_encoder.src_caps = enc_caps; + plug_info_encoder.sink_caps = plug_info->sink_caps; + plug_info_encoder.exclude_names = NULL; + + audio_encoder = __ms_element_create_from_ini(&plug_info_encoder, type); if (!audio_encoder) audio_encoder = __ms_element_create_by_registry(&plug_info_encoder, type); @@ -1211,10 +1288,13 @@ GstElement *__ms_audio_encoder_element_create(node_plug_s *plug_info, media_stre MS_SAFE_GFREE(encoder_name); /* Creating bin - Audio Encoder */ - GstElement *audio_enc_bin = gst_bin_new("audio_encoder"); - ms_retvm_if(!audio_convert || !audio_postenc_convert || !audio_filter || !audio_encoder || !audio_enc_bin, (GstElement *) NULL, "Error: creating elements for encoder bin"); + audio_enc_bin = gst_bin_new("audio_encoder"); + if (!audio_convert || !audio_postenc_convert || !audio_filter || !audio_resample || !audio_encoder || !audio_enc_bin) { + ms_error("Error: creating elements for audio encoder bin"); + goto ERROR; + } - GstCaps *audioCaps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_AUDIO_RAW_FORMAT); + audioCaps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_AUDIO_RAW_FORMAT); g_object_set(G_OBJECT(audio_filter), "caps", audioCaps, NULL); gst_caps_unref(audioCaps); @@ -1230,10 +1310,32 @@ GstElement *__ms_audio_encoder_element_create(node_plug_s *plug_info, media_stre __ms_add_ghostpad(audio_convert, "sink", audio_enc_bin, "sink"); return audio_enc_bin; +ERROR: + + MS_SAFE_UNREF(audio_convert); + MS_SAFE_UNREF(audio_resample); + MS_SAFE_UNREF(audio_postenc_convert); + MS_SAFE_UNREF(audio_filter); + MS_SAFE_UNREF(audio_encoder); + MS_SAFE_UNREF(audio_enc_bin); + + return NULL; + } GstElement *__ms_audio_decoder_element_create(node_plug_s *plug_info, media_streamer_node_type_e type) { + gboolean gst_ret = FALSE; + GstElement *decoder_bin = NULL; + GstElement *decoder_elem = NULL; + GstElement *decoder_parser = NULL; + GstElement *decoder_queue = NULL; + GstElement *audio_conv = NULL; + GstElement *audio_resample = NULL; + node_plug_s decoder_info = {0,}; + node_plug_s parser_info = {0,}; + node_info_s nodes_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_AUDIO_PARSER}; + GstCaps *dec_caps = plug_info->sink_caps; if (!dec_caps) { dec_caps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT); @@ -1241,24 +1343,32 @@ GstElement *__ms_audio_decoder_element_create(node_plug_s *plug_info, media_stre } /* Creating Audio Decoder */ - node_info_s *node_klass_type = __ms_node_get_klass_by_its_type(type); - node_plug_s decoder_info = {node_klass_type, plug_info->src_caps, dec_caps, NULL}; - GstElement *decoder_elem = __ms_element_create_from_ini(&decoder_info, MEDIA_STREAMER_NODE_TYPE_AUDIO_DECODER); + decoder_info.info = __ms_node_get_klass_by_its_type(type); + decoder_info.src_caps = plug_info->src_caps; + decoder_info.sink_caps = dec_caps; + decoder_info.exclude_names = NULL; + + decoder_elem = __ms_element_create_from_ini(&decoder_info, MEDIA_STREAMER_NODE_TYPE_AUDIO_DECODER); if (!decoder_elem) decoder_elem = __ms_element_create_by_registry(&decoder_info, MEDIA_STREAMER_NODE_TYPE_AUDIO_DECODER); /* Creating Audio Parser */ - node_info_s nodes_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_AUDIO_PARSER}; - node_plug_s parser_info = {&nodes_info, dec_caps, dec_caps, NULL}; - GstElement *decoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); + parser_info.info = &nodes_info; + parser_info.src_caps = dec_caps; + parser_info.sink_caps = dec_caps; + parser_info.exclude_names = NULL; + + decoder_parser = __ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); if (!decoder_parser) decoder_parser = __ms_element_create_by_registry(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER); /* Creating bin - Audio Decoder */ - gboolean gst_ret = FALSE; - GstElement *decoder_bin = gst_bin_new("audio_decoder"); - GstElement *decoder_queue = __ms_element_create("queue", NULL); - ms_retvm_if(!decoder_elem || !decoder_queue || !decoder_bin || !decoder_parser, (GstElement *) NULL, "Error: creating elements for audio decoder bin"); + decoder_bin = gst_bin_new("audio_decoder"); + decoder_queue = __ms_element_create("queue", NULL); + if (!decoder_elem || !decoder_queue || !decoder_parser || !decoder_bin) { + ms_error("Error: creating elements for audio decoder bin"); + goto ERROR; + } /* Adding elements to bin Audio Encoder */ gst_bin_add_many(GST_BIN(decoder_bin), decoder_queue, decoder_elem, decoder_parser, NULL); @@ -1269,9 +1379,13 @@ GstElement *__ms_audio_decoder_element_create(node_plug_s *plug_info, media_stre return NULL; } - GstElement *audio_conv = __ms_element_create("audioconvert", NULL); - GstElement *audio_resample = __ms_element_create("audioresample", NULL); - ms_retvm_if(!audio_conv || !audio_resample, (GstElement *) NULL, "Error: creating elements for audio decoder bin"); + audio_conv = __ms_element_create("audioconvert", NULL); + audio_resample = __ms_element_create("audioresample", NULL); + if (!audio_conv || !audio_resample) { + ms_error("Error: creating elements for audio decoder bin"); + goto ERROR; + } + gst_bin_add_many(GST_BIN(decoder_bin), audio_conv, audio_resample, NULL); gst_ret = gst_element_link_many(decoder_elem, audio_conv, audio_resample, NULL); if (gst_ret != TRUE) { @@ -1284,6 +1398,16 @@ GstElement *__ms_audio_decoder_element_create(node_plug_s *plug_info, media_stre __ms_add_ghostpad(decoder_queue, "sink", decoder_bin, "sink"); return decoder_bin; +ERROR: + + MS_SAFE_UNREF(decoder_elem); + MS_SAFE_UNREF(decoder_queue); + MS_SAFE_UNREF(decoder_parser); + MS_SAFE_UNREF(audio_conv); + MS_SAFE_UNREF(audio_resample); + MS_SAFE_UNREF(decoder_bin); + + return NULL; } GstElement *__ms_rtp_element_create(void) @@ -1692,6 +1816,10 @@ int __ms_pipeline_create(media_streamer_s *ms_streamer) if (ms_streamer->ini.gst_args) { int i = 0; for ( ; ms_streamer->ini.gst_args[i]; ++i) { + if (*argc <= i+1) { + ms_error("need to check, prevent overrun"); + break; + } argv[i+1] = ms_streamer->ini.gst_args[i]; ms_debug("Add [%s] gstreamer parameter.", argv[i+1]); }