diff options
author | Edward Hervey <edward@collabora.com> | 2014-06-11 09:38:00 +0200 |
---|---|---|
committer | Edward Hervey <edward@collabora.com> | 2014-06-11 09:41:50 +0200 |
commit | 6be887783ee50b69b9f6afd4abe339220f43eea6 (patch) | |
tree | b98b599942b57cb0b58729c72c8270c9712df0b4 /gst/mpegtsdemux/mpegtspacketizer.c | |
parent | 0020a9344d53a5298c486817171f3aecf6c55249 (diff) | |
download | gstreamer-plugins-bad-6be887783ee50b69b9f6afd4abe339220f43eea6.tar.gz |
mpegtspacketizer: Use first group for handling reference pcr
If _set_current_pcr_offset gets called after a flushing seek, we ended
up using the current group for delta calculation ... whereas we should
be using the first group to calculate shifts.
Also add an early exit if there are no changes to apply
Diffstat (limited to 'gst/mpegtsdemux/mpegtspacketizer.c')
-rw-r--r-- | gst/mpegtsdemux/mpegtspacketizer.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index fe657556c..7785711fc 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -2364,7 +2364,11 @@ mpegts_packetizer_set_current_pcr_offset (MpegTSPacketizer2 * packetizer, pcr_offset = GSTTIME_TO_PCRTIME (offset); - group = pcrtable->current->group; + /* Pick delta from *first* group */ + if (pcrtable->groups) + group = pcrtable->groups->data; + else + group = pcrtable->current->group; GST_DEBUG ("Current group PCR %" GST_TIME_FORMAT " (offset %" G_GUINT64_FORMAT " pcr_offset %" GST_TIME_FORMAT, GST_TIME_ARGS (PCRTIME_TO_GSTTIME (group->first_pcr)), @@ -2374,6 +2378,10 @@ mpegts_packetizer_set_current_pcr_offset (MpegTSPacketizer2 * packetizer, /* Remember the difference between previous initial pcr_offset and * new initial pcr_offset */ delta = pcr_offset - group->pcr_offset; + if (delta == 0) { + GST_DEBUG ("No shift to apply"); + return; + } GST_DEBUG ("Shifting groups by %" GST_TIME_FORMAT " for new initial pcr_offset %" GST_TIME_FORMAT, GST_TIME_ARGS (PCRTIME_TO_GSTTIME (delta)), GST_TIME_ARGS (offset)); |