From a2533d2556e388ce6f04337553bd069ecb7afb51 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 27 Nov 2023 12:29:08 +0100 Subject: [PATCH] baseparse: Add missing gst_buffer_make_writable When the subclass attempts to finish without an explicit `out_buffer`, we take a buffer from our adapter. We need to make this buffer writable before copying the metadata. This led to data races such as in the following pipeline, which randomly messed up the buffer PTS: gst-launch-1.0 -e audiotestsrc timestamp-offset=5555 num-buffers=100 \ ! opusenc ! tee name=t ! queue ! opusparse ! fakesink silent=0 \ t. ! queue ! opusparse ! fakesink silent=0 -v | grep '0000, dur' Part-of: --- subprojects/gstreamer/libs/gst/base/gstbaseparse.c | 1 + 1 file changed, 1 insertion(+) diff --git a/subprojects/gstreamer/libs/gst/base/gstbaseparse.c b/subprojects/gstreamer/libs/gst/base/gstbaseparse.c index 4e7c46e..8f3e152 100644 --- a/subprojects/gstreamer/libs/gst/base/gstbaseparse.c +++ b/subprojects/gstreamer/libs/gst/base/gstbaseparse.c @@ -2728,6 +2728,7 @@ gst_base_parse_finish_frame (GstBaseParse * parse, GstBaseParseFrame * frame, GstBuffer *src, *dest; frame->out_buffer = gst_adapter_take_buffer (parse->priv->adapter, size); + frame->out_buffer = gst_buffer_make_writable (frame->out_buffer); dest = frame->out_buffer; src = frame->buffer; GST_BUFFER_PTS (dest) = GST_BUFFER_PTS (src); -- 2.7.4