Fix svace issues 77/115077/1
authorGilbok Lee <gilbok.lee@samsung.com>
Thu, 16 Feb 2017 08:02:23 +0000 (17:02 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Thu, 16 Feb 2017 08:02:25 +0000 (17:02 +0900)
memory leak on test suite code

Change-Id: I51f85c6c3a0f6bb7f66ab3f251c31811aeb5b165

test/mediamuxer_test_gst.c

index 729ab9c..1eb3590 100644 (file)
@@ -82,10 +82,10 @@ typedef struct _CustomData {
 /* Demuxer audio-appsink buffer receive callback */
 static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
 {
-       GstBuffer *buffer;
-       media_format_h audfmt;
-       media_packet_h aud_pkt;
-       guint8 *dptr;
+       GstBuffer *buffer = NULL;
+       media_format_h audfmt = NULL;
+       media_packet_h aud_pkt = NULL;
+       guint8 *dptr = NULL;
        static int count = 0;
        GstSample *sample;
        uint64_t ns;
@@ -113,6 +113,7 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_format_create(&audfmt)) {
                                g_print("media_format_create failed\n");
+                               gst_buffer_unmap(buffer, &map);
                                return;
                        }
 
@@ -123,14 +124,14 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
                                        || strncmp(data_sink, "21", 2) == 0 || strncmp(data_sink, "22", 2) == 0)) {
                                if (media_format_set_audio_mime(audfmt, MEDIA_FORMAT_AAC_LC)) {
                                        g_print("media_format_set_audio_mime failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else if (g_str_has_prefix(new_pad_type_aud, "audio/AMR-WB")
                                && strncmp(data_sink, "42", 2) == 0) {
                                g_print("For amr-wb, setting encoded media type as MEDIA_FORMAT_AMR_WB\n");
                                if (media_format_set_audio_mime(audfmt, MEDIA_FORMAT_AMR_WB)) {
                                        g_print("media_format_set_audio_mime failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else if (g_str_has_prefix(new_pad_type_aud, "audio/AMR")
                                && (strncmp(data_sink, "23", 2) == 0 || strncmp(data_sink, "24", 2) == 0
@@ -138,14 +139,14 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
                                g_print("For amr-nb, setting encoded media type as MEDIA_FORMAT_AMR_NB\n");
                                if (media_format_set_audio_mime(audfmt, MEDIA_FORMAT_AMR_NB)) {
                                        g_print("media_format_set_audio_mime failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else if (g_str_has_prefix(new_pad_type_aud, "audio/x-wav")
                                && strncmp(data_sink, "31", 2) == 0) {
                                g_print("creating audio-wav\n");
                                if (media_format_set_audio_mime(audfmt, MEDIA_FORMAT_PCM)) {
                                        g_print("media_format_set_audio_mime failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                                if (media_format_set_audio_bit(audfmt, 16))
                                        g_print("wav media_format_set_audio_bit failed\n");
@@ -158,12 +159,12 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_create(audfmt, NULL, NULL, &aud_pkt)) {
                                g_print("create audio media_packet failed\n");
-                               return;
+                               goto ERROR1;
                        }
 
                        if (media_packet_alloc(aud_pkt)) {
                                g_print("audio media_packet alloc failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        media_packet_get_buffer_data_ptr(aud_pkt, (void **)&dptr);
@@ -171,13 +172,13 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_set_buffer_size(aud_pkt, (uint64_t)(map.size))) {
                                g_print("audio set_buffer_size failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_get_buffer_size(aud_pkt, &ns)) {
                                g_print("unable to set the buffer size actual =%d, fixed %"PRIu64"\n",
                                        (unsigned int)map.size, ns);
-                               return;
+                               goto ERROR2;
                        }
 
                        if (strncmp(data_sink, "31", 2) == 0 || strncmp(data_sink, "wav", 3) == 0) {
@@ -196,28 +197,28 @@ static void __audio_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_set_pts(aud_pkt, buffer->pts)) {
                                g_print("unable to set the pts\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_dts(aud_pkt, buffer->dts)) {
                                g_print("unable to set the dts\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_duration(aud_pkt, buffer->duration)) {
                                g_print("unable to set the duration\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_flags(aud_pkt, key)) {
                                g_print("unable to set the flag size\n");
-                               return;
+                               goto ERROR2;
                        }
 
 SET_CAPS:
                        if (media_packet_set_extra(aud_pkt, aud_caps)) {
                                g_print("unable to set the audio codec data \n");
-                               return;
+                               goto ERROR2;
                        }
 
                        /* Print count and size to indicate a received buffer */
@@ -227,17 +228,22 @@ SET_CAPS:
                        if (validate_multitrack)
                                mediamuxer_write_sample(myMuxer, track_index_aud2, aud_pkt);
 
-                       media_packet_destroy(aud_pkt);
                }
        }
+ERROR2:
+       media_packet_destroy(aud_pkt);
+ERROR1:
+       media_format_unref(audfmt);
+       gst_buffer_unmap(buffer, &map);
+       return;
 }
 
 /* Demuxer video-appsink buffer receive callback */
 static void __video_app_sink_callback(GstElement *sink, CustomData *data)
 {
-       GstBuffer *buffer;
-       media_format_h vidfmt;
-       media_packet_h vid_pkt;
+       GstBuffer *buffer NULL;
+       media_format_h vidfmt = NULL;
+       media_packet_h vid_pkt = NULL;
        uint64_t ns;
        static int count = 0;
        int key;
@@ -262,6 +268,7 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
                if (gst_buffer_map(buffer, &map, GST_MAP_READ)) {
                        if (media_format_create(&vidfmt)) {
                                g_print("media_format_create failed\n");
+                               gst_buffer_unmap(buffer, &map);
                                return;
                        }
                        g_print("video data_sink = %s\n", data_sink);
@@ -272,21 +279,21 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
                                        || strncmp(data_sink, "21", 2) == 0 || strncmp(data_sink, "23", 2) == 0)) {
                                if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_H264_SP)) {
                                        g_print("media_format_set_video_mime to H264_SP failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else if (g_str_has_prefix(new_pad_type_vid, "video/mpeg")
                                && strncmp(data_sink, "13", 2) == 0) {
                                g_print("For mpeg4, setting encoded media type as MEDIA_FORMAT_MPEG4_SP\n");
                                if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_MPEG4_SP)) {
                                        g_print("media_format_set_video_mime to MPEG4_SP failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else if (g_str_has_prefix(new_pad_type_vid, "video/x-h263")
                                && (strncmp(data_sink, "12", 2) == 0 || strncmp(data_sink, "22", 2) == 0 || strncmp(data_sink, "24", 2) == 0)) {
                                g_print("For h263, setting encoded media type as MEDIA_FORMAT_H263\n");
                                if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_H263)) {
                                        g_print("media_format_set_vidio_mime failed\n");
-                                       return;
+                                       goto ERROR1;
                                }
                        } else
                                g_print("Unsupported encoded video mime. Currently muxer supports:h263, h264 & mpeg4\n");
@@ -306,7 +313,7 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
                        ret = ret && gst_structure_get_int(caps_struc, "height", &video_height);
                        if (!ret) {
                                g_print("Failed to retrive video width/height. returning. \n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (count == 0)
@@ -316,17 +323,17 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
                        /* frame rate is came from the caps filter of demuxer */
                        if (media_format_set_video_frame_rate(vidfmt, 30)) {
                                g_print("media_format_set_video_frame_rate failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_create(vidfmt, NULL, NULL, &vid_pkt)) {
                                g_print("create video media_packet failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_alloc(vid_pkt)) {
                                g_print("video media_packet alloc failed\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        media_packet_get_buffer_data_ptr(vid_pkt, (void**)&dptr);
@@ -334,47 +341,53 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_set_buffer_size(vid_pkt, (uint64_t)(map.size))) {
                                g_print("video set_buffer_size failed\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        if (media_packet_get_buffer_size(vid_pkt, &ns)) {
                                g_print("unable to set the buffer size actual =%d, fixed %"PRIu64"\n",
                                        (unsigned int)map.size, ns);
-                               return;
+                               goto ERROR3;
                        }
 
                        if (media_packet_set_pts(vid_pkt, buffer->pts)) {
                                g_print("unable to set the pts\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        if (media_packet_set_dts(vid_pkt, buffer->dts)) {
                                g_print("unable to set the dts\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        if (media_packet_set_duration(vid_pkt, buffer->duration)) {
                                g_print("unable to set the duration\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        if (media_packet_set_flags(vid_pkt, key)) {
                                g_print("unable to set the flag size\n");
-                               return;
+                               goto ERROR3;
                        }
                        if (media_packet_set_extra(vid_pkt, vid_caps)) {
                                g_print("unable to set the video codec data e\n");
-                               return;
+                               goto ERROR3;
                        }
 
                        /* Print count and size to indicate a received buffer */
                        g_print("Received video buffer count : %4d (size : %5"PRIu64", pts : %12"PRIu64")\n",
                                        ++count, ns, buffer->pts);
                        mediamuxer_write_sample(myMuxer, track_index_vid, vid_pkt);
-                       media_packet_destroy(vid_pkt);
                }
        }
-
+ERROR3:
+       media_packet_destroy(vid_pkt);
+ERROR2:
+       gst_caps_unref(vid_caps_gst);
+ERROR1:
+       media_format_unref(vidfmt);
+       gst_buffer_unmap(buffer, &map);
+       return;
 }
 
 /* demuxer audio appsink eos callback */
@@ -445,12 +458,13 @@ void __text_app_sink_callback(GstElement *sink, CustomData *data)
                if (gst_buffer_map(buffer, &map, GST_MAP_READ)) {
                        if (media_format_create(&textfmt)) {
                                g_print("media_format_create(&textfmt) failed\n");
+                               gst_buffer_unmap(buffer, &map);
                                return;
                        }
 
                        if (media_format_set_text_mime(textfmt, MEDIA_FORMAT_TEXT_MP4)) {
                                g_print("media_format_set_text_mime failed\n");
-                               return;
+                               goto ERROR1;
                        }
 
                        if (!GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT)) {
@@ -463,12 +477,12 @@ void __text_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_create(textfmt, NULL, NULL, &text_pkt)) {
                                g_print("create text media_packet failed\n");
-                               return;
+                               goto ERROR1;
                        }
 
                        if (media_packet_alloc(text_pkt)) {
                                g_print("text media_packet_alloc failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        media_packet_get_buffer_data_ptr(text_pkt, (void**)&dptr);
@@ -476,37 +490,37 @@ void __text_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (media_packet_set_buffer_size(text_pkt, (uint64_t)(map.size))) {
                                g_print("text set_buffer_size failed\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_get_buffer_size(text_pkt, &ns)) {
                                g_print("unable to get the buffer size actual");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_codec_data(text_pkt, sub_caps, strlen(sub_caps)+1)) {
                                g_print("unable to set the text codec data e\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_pts(text_pkt, buffer->pts)) {
                                g_print("unable to set the pts\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_dts(text_pkt, buffer->dts)) {
                                g_print("unable to set the dts\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_duration(text_pkt, buffer->duration)) {
                                g_print("unable to set the duration\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        if (media_packet_set_flags(text_pkt, key)) {
                                g_print("unable to set the flag size\n");
-                               return;
+                               goto ERROR2;
                        }
 
                        /* Print count and size to indicate a received buffer */
@@ -514,10 +528,16 @@ void __text_app_sink_callback(GstElement *sink, CustomData *data)
                                        ++count, ns, buffer->pts);
 
                        mediamuxer_write_sample(myMuxer, track_index_text, text_pkt);
-                       media_packet_destroy(text_pkt);
                }
        }
 
+ERROR2:
+       media_packet_destroy(text_pkt);
+ERROR1:
+       media_format_unref(textfmt);
+       gst_buffer_unmap(buffer, &map);
+       return;
+
 }
 
 
@@ -685,6 +705,7 @@ int demux_audio()
 
        if (!data.pipeline || !data.source || !data.demuxer || !data.audioqueue || !data.audio_appsink) {
                g_print("Test-Suite: One gst-element can't be created. Exiting\n");
+               g_main_loop_unref(loop_dmx);
                return -1;
        }
 
@@ -702,6 +723,7 @@ int demux_audio()
        /* we link the elements together */
        if (!gst_element_link_many(data.source, data.demuxer, data.audioqueue, data.audio_appsink, NULL)) {
                g_print("Demuxer pipeline link failed\n");
+               g_main_loop_unref(loop_dmx);
                return -1;
        }
 
@@ -765,6 +787,7 @@ int demux_mp4()
                || !data.dummysink || !data.videoqueue || !data.audio_appsink || !data.video_appsink
                || !data.textqueue || !data.text_appsink) {
                g_print("Test-Suite: One gst-element can't be created. Exiting\n");
+               g_main_loop_unref(loop_dmx);
                return -1;
        }