From b1dab0fce1fc265e02c2985ef64ba77f3508b8dd Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Sat, 12 Sep 2009 19:25:36 +0200 Subject: dvdemux: Set DISCONT flag on buffers when REC_ST flag is set. Also add a few branch prediction macros --- ext/dv/gstdvdemux.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'ext') diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c index 90de4175..6f33ac60 100644 --- a/ext/dv/gstdvdemux.c +++ b/ext/dv/gstdvdemux.c @@ -1213,20 +1213,21 @@ gst_dvdemux_demux_audio (GstDVDemux * dvdemux, GstBuffer * buffer, dv_decode_full_audio (dvdemux->decoder, data, dvdemux->audio_buffers); - if ((num_samples = dv_get_num_samples (dvdemux->decoder)) > 0) { + if (G_LIKELY ((num_samples = dv_get_num_samples (dvdemux->decoder)) > 0)) { gint16 *a_ptr; gint i, j; GstBuffer *outbuf; gint frequency, channels; - if (dvdemux->audiosrcpad == NULL) + if (G_UNLIKELY (dvdemux->audiosrcpad == NULL)) dvdemux->audiosrcpad = gst_dvdemux_add_pad (dvdemux, &audio_src_temp); /* get initial format or check if format changed */ frequency = dv_get_frequency (dvdemux->decoder); channels = dv_get_num_channels (dvdemux->decoder); - if ((frequency != dvdemux->frequency) || (channels != dvdemux->channels)) { + if (G_UNLIKELY ((frequency != dvdemux->frequency) + || (channels != dvdemux->channels))) { GstCaps *caps; dvdemux->frequency = frequency; @@ -1264,6 +1265,8 @@ gst_dvdemux_demux_audio (GstDVDemux * dvdemux, GstBuffer * buffer, dvdemux->audio_offset += num_samples; GST_BUFFER_OFFSET_END (outbuf) = dvdemux->audio_offset; + if (dvdemux->new_media) + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dvdemux->audiosrcpad)); ret = gst_pad_push (dvdemux->audiosrcpad, outbuf); @@ -1285,7 +1288,7 @@ gst_dvdemux_demux_video (GstDVDemux * dvdemux, GstBuffer * buffer, gboolean wide; GstFlowReturn ret = GST_FLOW_OK; - if (dvdemux->videosrcpad == NULL) + if (G_UNLIKELY (dvdemux->videosrcpad == NULL)) dvdemux->videosrcpad = gst_dvdemux_add_pad (dvdemux, &video_src_temp); /* get params */ @@ -1339,6 +1342,8 @@ gst_dvdemux_demux_video (GstDVDemux * dvdemux, GstBuffer * buffer, GST_BUFFER_OFFSET_END (outbuf) = dvdemux->video_offset + 1; GST_BUFFER_DURATION (outbuf) = duration; + if (dvdemux->new_media) + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dvdemux->videosrcpad)); GST_DEBUG ("pushing video %" GST_TIME_FORMAT, @@ -1405,8 +1410,7 @@ gst_dvdemux_demux_frame (GstDVDemux * dvdemux, GstBuffer * buffer) data = GST_BUFFER_DATA (buffer); dv_parse_packs (dvdemux->decoder, data); - if (G_UNLIKELY (dv_is_new_recording (dvdemux->decoder, data))) - dvdemux->new_media = TRUE; + dvdemux->new_media = dv_is_new_recording (dvdemux->decoder, data); /* does not take ownership of buffer */ aret = ret = gst_dvdemux_demux_audio (dvdemux, buffer, duration); -- cgit