From: Gilbok Lee Date: Thu, 16 Feb 2017 08:02:23 +0000 (+0900) Subject: Fix svace issues X-Git-Tag: accepted/tizen/3.0/common/20170220.125656~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f5dc9d554e565afb0d4f2b24f79cd35eaa12fae;p=platform%2Fcore%2Fapi%2Fmediamuxer.git Fix svace issues memory leak on test suite code Change-Id: I51f85c6c3a0f6bb7f66ab3f251c31811aeb5b165 --- diff --git a/test/mediamuxer_test_gst.c b/test/mediamuxer_test_gst.c index 729ab9c..1eb3590 100644 --- a/test/mediamuxer_test_gst.c +++ b/test/mediamuxer_test_gst.c @@ -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; }