summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2009-09-12 19:25:36 +0200
committerEdward Hervey <bilboed@bilboed.com>2009-09-12 19:26:56 +0200
commitb1dab0fce1fc265e02c2985ef64ba77f3508b8dd (patch)
treed5cdb5a6495f2933096b44d4dc390479d4bb5d8b /ext
parent7c2489ca77edaf9f9af407d1a165b9da480f6647 (diff)
dvdemux: Set DISCONT flag on buffers when REC_ST flag is set.
Also add a few branch prediction macros
Diffstat (limited to 'ext')
-rw-r--r--ext/dv/gstdvdemux.c16
1 files changed, 10 insertions, 6 deletions
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);