summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2018-08-17 16:33:52 +0300
committerSebastian Dröge <sebastian@centricular.com>2018-08-17 16:40:16 +0300
commitb2602a459bba43f103872a072b5ee91685e70c71 (patch)
tree62b6a28f1a19e927f831c93feab3e7f0aa46f0ed
parent186870d10ad58c2dc95f5f50a16f29bc1f47bd51 (diff)
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.
-rw-r--r--gst/audiobuffersplit/gstaudiobuffersplit.c7
-rw-r--r--gst/audiobuffersplit/gstaudiobuffersplit.h1
2 files changed, 3 insertions, 5 deletions
diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.c b/gst/audiobuffersplit/gstaudiobuffersplit.c
index d73e391da..225fb9b7b 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 10bbdc80d..ae24b8fff 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;