[0.1.20] resolve coverity issue 50/153650/1 submit/tizen/20170929.104425
authorEunhae Choi <eunhae1.choi@samsung.com>
Thu, 28 Sep 2017 10:57:53 +0000 (19:57 +0900)
committereunhae choi <eunhae1.choi@samsung.com>
Fri, 29 Sep 2017 05:03:59 +0000 (05:03 +0000)
Change-Id: I133bd3fa78feaa2c694af04eb7f730497340b270
(cherry picked from commit 4ef72050d6f02ebbe7e1a2f273d752c1f3e7e5d8)

packaging/capi-media-streamer.spec
src/media_streamer_gst.c

index bae1aab331fe4fe51ec1abc1ba9481e9cb1106cf..3a73e2b48405d612230d6c956d5bf2cedb73b7be 100644 (file)
@@ -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
index 5171d3debfdd83e6d8238deb56a02be7a5cad608..b61fbda863b425142f9920b37509f7e3c0d72f04 100644 (file)
@@ -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]);
                }