From 297a5f09b10159b47df03cf7438d89fe0f77ef5c Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 15 Feb 2021 17:22:47 +0100 Subject: [PATCH] libs: audio: Fix gst_audio_buffer_truncate meta handling In the non-interleaved case, it made `buffer` writable but then changed the meta of the non-writable buffer. Part-of: --- gst-libs/gst/audio/audio.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/audio/audio.c b/gst-libs/gst/audio/audio.c index 9c7ed04262..440a4e87da 100644 --- a/gst-libs/gst/audio/audio.c +++ b/gst-libs/gst/audio/audio.c @@ -290,6 +290,10 @@ gst_audio_buffer_truncate (GstBuffer * buffer, gint bpf, gsize trim, if (samples == orig_samples) return buffer; + GST_DEBUG ("Truncating %" G_GSIZE_FORMAT " to %" G_GSIZE_FORMAT + " (trim start %" G_GSIZE_FORMAT ", end %" G_GSIZE_FORMAT ")", + orig_samples, samples, trim, orig_samples - trim - samples); + if (!meta || meta->info.layout == GST_AUDIO_LAYOUT_INTERLEAVED) { /* interleaved */ ret = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, trim * bpf, @@ -301,7 +305,7 @@ gst_audio_buffer_truncate (GstBuffer * buffer, gint bpf, gsize trim, } else { /* non-interleaved */ ret = gst_buffer_make_writable (buffer); - meta = gst_buffer_get_audio_meta (buffer); + meta = gst_buffer_get_audio_meta (ret); meta->samples = samples; for (i = 0; i < meta->info.channels; i++) { meta->offsets[i] += trim * bpf / meta->info.channels;