/* 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;
if (media_format_create(&audfmt)) {
g_print("media_format_create failed\n");
+ gst_buffer_unmap(buffer, &map);
return;
}
|| 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
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");
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);
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) {
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 */
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;
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);
|| 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");
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)
/* 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);
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 */
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)) {
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);
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 */
++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;
+
}
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;
}
/* 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;
}
|| !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;
}