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.
diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.c b/gst/audiobuffersplit/gstaudiobuffersplit.c
index fd3f809..e2a4167 100644
--- a/gst/audiobuffersplit/gstaudiobuffersplit.c
+++ b/gst/audiobuffersplit/gstaudiobuffersplit.c
@@ -328,11 +328,7 @@
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
@@ -418,6 +414,7 @@
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 10bbdc8..ae24b8f 100644
--- a/gst/audiobuffersplit/gstaudiobuffersplit.h
+++ b/gst/audiobuffersplit/gstaudiobuffersplit.h
@@ -53,6 +53,7 @@
GstAdapter *adapter;
GstAudioStreamAlign *stream_align;
+ GstClockTime resync_time;
guint64 current_offset; /* offset from start time in samples */
guint samples_per_buffer;