summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-05-25 15:36:38 +0300
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-09-25 09:34:39 +0000
commit4889cff7839d385610c6a56be79d705796f40d12 (patch)
treef00a4c3fd0110e04e541cb8ae3b078d5fe361169
parentf7d8d61a4cf0f5f3b2884c2914311d2915448fc5 (diff)
downloadgstreamer-plugins-bad-4889cff7839d385610c6a56be79d705796f40d12.tar.gz
audiobuffersplit: Unset DISCONT flag if not discontinuous
And also set/unset the RESYNC flag accordingly. It can happen that the flag is preserved by GstAdapter from the input buffer. For example if a big input buffer is split into many small ones, each of the small ones would have the flag set. All other buffer flags seem safe to keep here if they were set, including the GAP flag. Also ensure that the buffer is actually writable before changing any flags or metadata on it. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1605>
-rw-r--r--gst/audiobuffersplit/gstaudiobuffersplit.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.c b/gst/audiobuffersplit/gstaudiobuffersplit.c
index 8d7767a65..d27dcf7e5 100644
--- a/gst/audiobuffersplit/gstaudiobuffersplit.c
+++ b/gst/audiobuffersplit/gstaudiobuffersplit.c
@@ -377,10 +377,15 @@ gst_audio_buffer_split_output (GstAudioBufferSplit * self, gboolean force,
size = MIN (size, avail);
buffer = gst_adapter_take_buffer (self->adapter, size);
+ buffer = gst_buffer_make_writable (buffer);
/* After a reset we have to set the discont flag */
if (self->current_offset == 0)
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ GST_BUFFER_FLAG_SET (buffer,
+ GST_BUFFER_FLAG_DISCONT | GST_BUFFER_FLAG_RESYNC);
+ else
+ GST_BUFFER_FLAG_UNSET (buffer,
+ GST_BUFFER_FLAG_DISCONT | GST_BUFFER_FLAG_RESYNC);
resync_time_diff =
gst_util_uint64_scale (self->current_offset, GST_SECOND, rate);