summaryrefslogtreecommitdiff
path: root/gst/mpegtsdemux/mpegtspacketizer.c
diff options
context:
space:
mode:
authorEdward Hervey <edward@collabora.com>2014-06-11 09:38:00 +0200
committerEdward Hervey <edward@collabora.com>2014-06-11 09:41:50 +0200
commit6be887783ee50b69b9f6afd4abe339220f43eea6 (patch)
treeb98b599942b57cb0b58729c72c8270c9712df0b4 /gst/mpegtsdemux/mpegtspacketizer.c
parent0020a9344d53a5298c486817171f3aecf6c55249 (diff)
downloadgstreamer-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.c10
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));