From b2602a459bba43f103872a072b5ee91685e70c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 17 Aug 2018 16:33:52 +0300 Subject: [PATCH] audiobuffersplit: Keep track of resync time separately If we drain after a discont, the discont time given by the stream synchronizer is already the time after the discontinuity. But we need to drain all pending data based on the previous discont time instead. --- gst/audiobuffersplit/gstaudiobuffersplit.c | 7 ++----- gst/audiobuffersplit/gstaudiobuffersplit.h | 1 + 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.c b/gst/audiobuffersplit/gstaudiobuffersplit.c index d73e391dac..225fb9b7bc 100644 --- a/gst/audiobuffersplit/gstaudiobuffersplit.c +++ b/gst/audiobuffersplit/gstaudiobuffersplit.c @@ -328,11 +328,7 @@ gst_audio_buffer_split_output (GstAudioBufferSplit * self, gboolean force, GstFlowReturn ret = GST_FLOW_OK; GstClockTime resync_time; - GST_OBJECT_LOCK (self); - resync_time = - gst_audio_stream_align_get_timestamp_at_discont (self->stream_align); - GST_OBJECT_UNLOCK (self); - + resync_time = self->resync_time; size = samples_per_buffer * bpf; /* If we accumulated enough error for one sample, include one @@ -425,6 +421,7 @@ gst_audio_buffer_split_handle_discont (GstAudioBufferSplit * self, self->current_offset = 0; self->accumulated_error = 0; + self->resync_time = GST_BUFFER_PTS (buffer); } return ret; diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.h b/gst/audiobuffersplit/gstaudiobuffersplit.h index 10bbdc80df..ae24b8fff7 100644 --- a/gst/audiobuffersplit/gstaudiobuffersplit.h +++ b/gst/audiobuffersplit/gstaudiobuffersplit.h @@ -53,6 +53,7 @@ struct _GstAudioBufferSplit { GstAdapter *adapter; GstAudioStreamAlign *stream_align; + GstClockTime resync_time; guint64 current_offset; /* offset from start time in samples */ guint samples_per_buffer;