summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2021-02-15 17:22:47 +0100
committerTim-Philipp Müller <tim@centricular.com>2021-02-17 00:02:58 +0000
commitee0f9de6ad06d424dab46bc163d3b332785f6fa4 (patch)
treeab08ff1fa510304eb67211601701609510b28f8a
parentb62278bcfdec932202ba41a2988e24a0f6d9bcb0 (diff)
downloadgstreamer-plugins-base-ee0f9de6ad06d424dab46bc163d3b332785f6fa4.tar.gz
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1036>
-rw-r--r--gst-libs/gst/audio/audio.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gst-libs/gst/audio/audio.c b/gst-libs/gst/audio/audio.c
index 9c7ed0426..440a4e87d 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;