Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gstreamer for openSUSE:Factory checked in at 2024-01-05 21:40:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer (Old) and /work/SRC/openSUSE:Factory/.gstreamer.new.28375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer" Fri Jan 5 21:40:01 2024 rev:92 rq:1136819 version:1.22.8 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer/gstreamer.changes 2023-11-17 20:49:02.872060673 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer.new.28375/gstreamer.changes 2024-01-05 21:40:08.411486996 +0100 @@ -1,0 +2,26 @@ +Thu Jan 4 07:50:55 UTC 2024 - Antonio Larrosa <alarr...@suse.com> + +- Update to version 1.22.8: + + Highlighted bugfixes in 1.22.8 + - Security fixes for the AV1 video codec parser + - avdec video decoder: fix another possible deadlock with + FFmpeg 6.1 + - qtdemux: reverse playback and seeking fixes for files with + raw audio streams + - v4l2: fix "newly allocated buffer ... is not free" warning + log flood + - GstPlay + GstPlayer library fixes + - dtls: Fix build failure on Windows when compiling against + OpenSSL 3.2.0 + - d3d11screencapturesrc: Fix wrong color with HDR enabled + - Cerbero build tool: More python 3.12 string escape warning + fixes; make sure to bundle build tools as well + - various bug fixes, build fixes, memory leak fixes, and other + stability and reliability improvements + + gstreamer + - buffer: Unref memories before metas + - pad: Recheck pads when linking after temporary unlock + - baseparse: Fixes to buffers extracted from adapter +- Rebase reduce-required-meson.patch + +------------------------------------------------------------------- Old: ---- gstreamer-1.22.7.tar.xz New: ---- gstreamer-1.22.8.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer.spec ++++++ --- /var/tmp/diff_new_pack.CFDHoW/_old 2024-01-05 21:40:09.271518443 +0100 +++ /var/tmp/diff_new_pack.CFDHoW/_new 2024-01-05 21:40:09.271518443 +0100 @@ -1,7 +1,7 @@ # # spec file for package gstreamer # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %define gst_branch 1.0 Name: gstreamer -Version: 1.22.7 +Version: 1.22.8 Release: 0 Summary: Streaming-Media Framework Runtime License: LGPL-2.1-or-later ++++++ gstreamer-1.22.7.tar.xz -> gstreamer-1.22.8.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/ChangeLog new/gstreamer-1.22.8/ChangeLog --- old/gstreamer-1.22.7/ChangeLog 2023-11-13 12:04:53.789374600 +0100 +++ new/gstreamer-1.22.8/ChangeLog 2023-12-18 13:10:07.420446000 +0100 @@ -1,3 +1,81 @@ +=== release 1.22.8 === + +2023-12-18 12:09:37 +0000 Tim-Philipp Müller <t...@centricular.com> + + * NEWS: + * RELEASE: + * gstreamer.doap: + * meson.build: + Release 1.22.8 + +2023-11-27 13:16:47 +0100 Jan Alexander Steffens (heftig) <jan.steff...@ltnglobal.com> + + * libs/gst/base/gstbaseparse.c: + baseparse: Reset metadata for reverse playback fragment buffers + Don't let the adapter leak uncontrollable values. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5720> + +2023-11-27 12:29:08 +0100 Jan Alexander Steffens (heftig) <jan.steff...@ltnglobal.com> + + * libs/gst/base/gstbaseparse.c: + 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5720> + +2023-03-15 09:11:51 -0400 Xavier Claessens <xavier.claess...@collabora.com> + + * gst/gstbuffer.c: + * tests/check/gst/gstbufferpool.c: + gstbuffer: Add parent meta when a copy shares memory with parent + When copying a buffer, for example with gst_buffer_make_writable(), the + new buffer might reference the same GstMemory as the src buffer, + making those memories not writable. If the src buffer gets disposed + first it should return to its buffer pool, but since some of its + memories are not writable it gets discarded and new buffer/memory gets + allocated. + Solves this by making the new buffer keep a reference to the src buffer, + that ensures that by the time the src buffer gets disposed no other + buffer are referencing its memories and it can thus return safely to its + pool. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5696> + +2023-03-09 22:18:12 -0800 Xavier Claessens <xavier.claess...@collabora.com> + + * gst/gstbuffer.c: + * tests/check/gst/gstbufferpool.c: + gstbuffer: Unref memories before metas + gst_buffer_add_parent_buffer_meta() is used when a GstBuffer uses + GstMemory from another buffer that was allocated from a pool. In that + case we want to make sure the buffer returns to the pool when the memory + is writable again, otherwise a copy of the memory is created. That means + the child buffer must drop its ref to the memory first, then drop the + ref to parent buffer so it can return to the pool when it is the only + owner of the memory. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5696> + +2023-11-15 10:03:52 +0000 Daniel Moberg <danie...@axis.com> + + * gst/gstpad.c: + gstpad: Recheck pads when linking after temporary unlock + This commit makes sure that pads are valid for linking + after the pads has been temporarily unlocked in the linking process. + Not doing this opens up for a race condition where + pads potentially can be linked twice. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5678> + +2023-11-13 14:57:09 +0000 Tim-Philipp Müller <t...@centricular.com> + + * meson.build: + Back to development + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5650> + === release 1.22.7 === 2023-11-13 11:04:22 +0000 Tim-Philipp Müller <t...@centricular.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/NEWS new/gstreamer-1.22.8/NEWS --- old/gstreamer-1.22.7/NEWS 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/NEWS 2023-12-18 13:09:37.000000000 +0100 @@ -2,13 +2,13 @@ GStreamer 1.22.0 was originally released on 23 January 2023. -The latest bug-fix release in the stable 1.22 series is 1.22.7 and was -released on 13 November 2023. +The latest bug-fix release in the stable 1.22 series is 1.22.8 and was +released on 18 December 2023. See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Monday 13 November 2023, 10:00 UTC (log) +Last updated: Monday 18 December 2023, 11:00 UTC (log) Introduction @@ -2582,6 +2582,160 @@ - List of Merge Requests applied in 1.22.7 - List of Issues fixed in 1.22.7 +1.22.8 + +The eight 1.22 bug-fix release (1.22.8) was released on 18 December +2023. + +This release only contains bugfixes and security fixes and it should be +safe to update from 1.22.x. + +Highlighted bugfixes in 1.22.8 + +- Security fixes for the AV1 video codec parser +- avdec video decoder: fix another possible deadlock with FFmpeg 6.1 +- qtdemux: reverse playback and seeking fixes for files with raw audio + streams +- v4l2: fix ânewly allocated buffer ⦠is not freeâ warning log flood +- GstPlay + GstPlayer library fixes +- dtls: Fix build failure on Windows when compiling against OpenSSL + 3.2.0 +- d3d11screencapturesrc: Fix wrong color with HDR enabled +- Cerbero build tool: More python 3.12 string escape warning fixes; + make sure to bundle build tools as well +- various bug fixes, build fixes, memory leak fixes, and other + stability and reliability improvements + +gstreamer + +- buffer: Unref memories before metas +- pad: Recheck pads when linking after temporary unlock +- baseparse: Fixes to buffers extracted from adapter + +gst-plugins-base + +- appsrc: Fix flow return when buffer is dropped +- audioringbuffer: Donât try to map MONO channel +- encoding-target: Properly free when missing type field in + parse_encoding_profile +- pbutils: Donât include default vp9 parameters in resulting codec + mime string +- videorate: Donât forget last_ts on caps changes + +gst-plugins-good + +- dcaparse: keep upstream buffer meta +- rtpklvdepay: Recover after invalid fragmented KLV unit +- matroska-demux: fix accumulated base offset in segment seeks +- qtdemux: fix bug report URL +- qtdemux: Donât overflow sample index +- qtdemux: Fix reverse playback for pcm audio stream +- qtdemux: Ignore raw audio streams when adjusting seek +- qtdemux: Under-seeking to a key unit in certain (encoded by Adobe + products) ProRes movies (macOS x86_64 & arm64, Windows x86_64, â¦) +- rtpac3depay: should output audio/x-ac3 not audio/ac3 +- rtp: Fix incorrect RTP channel order lookup by name +- v4l2bufferpool: add lock as atomic operation for seek + +gst-plugins-bad + +- aesenc: Fix IV length addition to output buffer length +- av1parser: Fix array sizes in scalability structure +- camerabin: Fix source updates with user filters +- codecparsers: av1: Clip max tile rows and cols values +- dtlscertificate: Define WINSOCKAPI before including windows.h +- d3d11: fix building with address sanitizer +- d3d11screencapturesrc: Fix wrong color with HDR enabled +- h264decoder: Fix GstVideoCodecFrame leak +- ladspa: Make RDF parsing truly optional +- rtponviftimestamp: Fix drop-out-of-segment=false mode +- qsvdecoder: Fix stream format detection +- webrtcsdp: Remove fingerprint validation that doesnât make sense +- GstPlay: Automatically flush the bus when disposing the signal + adapter +- GstPlayer: Without dispatcher emit signals directly instead of via + the default main context + +gst-plugins-ugly + +- No changes + +gst-plugins-rs + +- threadshare: Fix a deadlock in used-socket notification +- threadshare: Fix a typo while logging +- webrtcsink: donât panic on failure to request pad from webrtcbin +- ndi: Remove wrong Clone impl on RecvInstance +- ndi: Donât mark private type as public +- fallbacksrc: Fix timeout scheduling + +gst-libav + +- avviddec: Unlock stream lock while waiting for decoded frame. Fixes + potential deadlock +- avviddec: Calculate latency only for fixed framerate + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- No changes + +gst-validate + gst-integration-testsuites + +- No changes + +gst-examples + +- No changes + +Development build environment + +- No changes + +Cerbero build tool and packaging changes in 1.22.8 + +- cerbero: Fix some more python 3.12 string escape warnings +- cerbero: Fix bundle-source not including build-tools recipes, fix + CalledProcessError handling +- pango: Add Perl interpreter consistency check + +Contributors to 1.22.8 + +Alessandro Bono, Alexander Slobodeniuk, Arun Raghavan, Benjamin +Gaignard, Daniel Moberg, Dongyun Seo, Doug Nazar, Guillaume Desmottes, +Hosang Lee, Jan Alexander Steffens (heftig), jeri.li, Jimmy Ohn, L. E. +Segovia, Mathieu Duponchelle, Nicolas Dufresne, Nirbheek Chauhan, +Olivier Crête, Philippe Normand, Piotr BrzeziÅski, Rabindra Harlalka, +Robert Mader, Robin Gustavsson, Sebastian Dröge, Seungha Yang, Stefan +Brüns, Tim-Philipp Müller, Xavier Claessens, + +⦠and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.22.8 + +- List of Merge Requests applied in 1.22.8 +- List of Issues fixed in 1.22.8 + Schedule for 1.24 Our next major feature release will be 1.24, and 1.23 will be the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/RELEASE new/gstreamer-1.22.8/RELEASE --- old/gstreamer-1.22.7/RELEASE 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/RELEASE 2023-12-18 13:09:37.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer core 1.22.7. +This is GStreamer core 1.22.8. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/gst/gstbuffer.c new/gstreamer-1.22.8/gst/gstbuffer.c --- old/gstreamer-1.22.7/gst/gstbuffer.c 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/gst/gstbuffer.c 2023-12-18 13:09:37.000000000 +0100 @@ -546,6 +546,7 @@ GstMetaItem *walk; gsize bufsize; gboolean region = FALSE; + gboolean sharing_mem = FALSE; g_return_val_if_fail (dest != NULL, FALSE); g_return_val_if_fail (src != NULL, FALSE); @@ -649,6 +650,9 @@ return FALSE; } + /* Indicates if dest references any of src memories. */ + sharing_mem |= (newmem == mem); + _memory_add (dest, -1, newmem); left -= tocopy; } @@ -662,6 +666,10 @@ gst_buffer_remove_memory_range (dest, dest_len, -1); return FALSE; } + + /* If we were sharing memory and the merge is no-op, we are still sharing. */ + sharing_mem &= (mem == GST_BUFFER_MEM_PTR (dest, 0)); + _replace_memory (dest, len, 0, len, mem); } } @@ -710,6 +718,14 @@ } } + if (sharing_mem && src->pool != NULL) { + /* The new buffer references some of src's memories. We have to ensure that + * src buffer does not return to its buffer pool as long as its memories are + * used by other buffers. That would cause the buffer to be discarted by the + * pool because its memories are not writable. */ + gst_buffer_add_parent_buffer_meta (dest, src); + } + return TRUE; } @@ -789,6 +805,15 @@ GST_CAT_LOG (GST_CAT_BUFFER, "finalize %p", buffer); + /* free our memory */ + len = GST_BUFFER_MEM_LEN (buffer); + for (i = 0; i < len; i++) { + gst_memory_unlock (GST_BUFFER_MEM_PTR (buffer, i), GST_LOCK_FLAG_EXCLUSIVE); + gst_mini_object_remove_parent (GST_MINI_OBJECT_CAST (GST_BUFFER_MEM_PTR + (buffer, i)), GST_MINI_OBJECT_CAST (buffer)); + gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i)); + } + /* free metadata */ for (walk = GST_BUFFER_META (buffer); walk; walk = next) { GstMeta *meta = &walk->meta; @@ -807,15 +832,6 @@ * itself */ msize = GST_BUFFER_SLICE_SIZE (buffer); - /* free our memory */ - len = GST_BUFFER_MEM_LEN (buffer); - for (i = 0; i < len; i++) { - gst_memory_unlock (GST_BUFFER_MEM_PTR (buffer, i), GST_LOCK_FLAG_EXCLUSIVE); - gst_mini_object_remove_parent (GST_MINI_OBJECT_CAST (GST_BUFFER_MEM_PTR - (buffer, i)), GST_MINI_OBJECT_CAST (buffer)); - gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i)); - } - /* we set msize to 0 when the buffer is part of the memory block */ if (msize) { #ifdef USE_POISONING diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/gst/gstpad.c new/gstreamer-1.22.8/gst/gstpad.c --- old/gstreamer-1.22.7/gst/gstpad.c 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/gst/gstpad.c 2023-12-18 13:09:37.000000000 +0100 @@ -2378,22 +2378,18 @@ } } -/* FIXME leftover from an attempt at refactoring... */ -/* call with the two pads unlocked, when this function returns GST_PAD_LINK_OK, - * the two pads will be locked in the srcpad, sinkpad order. */ +/* check that pads does not have any exisiting links + * and that hierarchy is valid for linking. + * + * The LOCK should be held on both pads + */ static GstPadLinkReturn -gst_pad_link_prepare (GstPad * srcpad, GstPad * sinkpad, GstPadLinkCheck flags) +gst_pad_link_check_relations (GstPad * srcpad, GstPad * sinkpad, + GstPadLinkCheck flags) { - GST_CAT_INFO (GST_CAT_PADS, "trying to link %s:%s and %s:%s", - GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad)); - - GST_OBJECT_LOCK (srcpad); - if (G_UNLIKELY (GST_PAD_PEER (srcpad) != NULL)) goto src_was_linked; - GST_OBJECT_LOCK (sinkpad); - if (G_UNLIKELY (GST_PAD_PEER (sinkpad) != NULL)) goto sink_was_linked; @@ -2403,12 +2399,6 @@ && !gst_pad_link_check_hierarchy (srcpad, sinkpad)) goto wrong_hierarchy; - /* check pad caps for non-empty intersection */ - if (!gst_pad_link_check_compatible_unlocked (srcpad, sinkpad, flags)) - goto no_format; - - /* FIXME check pad scheduling for non-empty intersection */ - return GST_PAD_LINK_OK; src_was_linked: @@ -2418,7 +2408,6 @@ GST_DEBUG_PAD_NAME (GST_PAD_PEER (srcpad))); /* we do not emit a warning in this case because unlinking cannot * be made MT safe.*/ - GST_OBJECT_UNLOCK (srcpad); return GST_PAD_LINK_WAS_LINKED; } sink_was_linked: @@ -2428,23 +2417,57 @@ GST_DEBUG_PAD_NAME (GST_PAD_PEER (sinkpad))); /* we do not emit a warning in this case because unlinking cannot * be made MT safe.*/ - GST_OBJECT_UNLOCK (sinkpad); - GST_OBJECT_UNLOCK (srcpad); return GST_PAD_LINK_WAS_LINKED; } wrong_hierarchy: { GST_CAT_INFO (GST_CAT_PADS, "pads have wrong hierarchy"); - GST_OBJECT_UNLOCK (sinkpad); - GST_OBJECT_UNLOCK (srcpad); return GST_PAD_LINK_WRONG_HIERARCHY; } -no_format: - { +} + +/* FIXME leftover from an attempt at refactoring... */ +/* call with the two pads unlocked, when this function returns GST_PAD_LINK_OK, + * the two pads will be locked in the srcpad, sinkpad order. */ +static GstPadLinkReturn +gst_pad_link_prepare (GstPad * srcpad, GstPad * sinkpad, GstPadLinkCheck flags) +{ + GstPadLinkReturn result; + + GST_CAT_INFO (GST_CAT_PADS, "trying to link %s:%s and %s:%s", + GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad)); + + GST_OBJECT_LOCK (srcpad); + GST_OBJECT_LOCK (sinkpad); + + /* Check pads state, not already linked and correct hierachy. */ + result = gst_pad_link_check_relations (srcpad, sinkpad, flags); + if (result != GST_PAD_LINK_OK) + goto unlock_and_return; + + /* check pad caps for non-empty intersection */ + if (!gst_pad_link_check_compatible_unlocked (srcpad, sinkpad, flags)) { GST_CAT_INFO (GST_CAT_PADS, "caps are incompatible"); + result = GST_PAD_LINK_NOFORMAT; + goto unlock_and_return; + } + + /* Need to recheck our pads since gst_pad_link_check_compatible_unlocked might have temporarily unlocked them. + Keeping the first check, because gst_pad_link_check_compatible_unlocked potentially is an expensive operation + which gst_pad_link_check_relations is not. */ + result = gst_pad_link_check_relations (srcpad, sinkpad, flags); + if (result != GST_PAD_LINK_OK) + goto unlock_and_return; + + /* FIXME check pad scheduling for non-empty intersection */ + + return GST_PAD_LINK_OK; + +unlock_and_return: + { GST_OBJECT_UNLOCK (sinkpad); GST_OBJECT_UNLOCK (srcpad); - return GST_PAD_LINK_NOFORMAT; + return result; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/gstreamer.doap new/gstreamer-1.22.8/gstreamer.doap --- old/gstreamer-1.22.7/gstreamer.doap 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/gstreamer.doap 2023-12-18 13:09:37.000000000 +0100 @@ -40,6 +40,16 @@ <release> <Version> + <revision>1.22.8</revision> + <branch>1.22</branch> + <name></name> + <created>2023-12-18</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.8.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.22.7</revision> <branch>1.22</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/libs/gst/base/gstbaseparse.c new/gstreamer-1.22.8/libs/gst/base/gstbaseparse.c --- old/gstreamer-1.22.7/libs/gst/base/gstbaseparse.c 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/libs/gst/base/gstbaseparse.c 2023-12-18 13:09:37.000000000 +0100 @@ -2289,6 +2289,10 @@ outbuf = gst_buffer_make_writable (outbuf); GST_BUFFER_PTS (outbuf) = pts; GST_BUFFER_DTS (outbuf) = dts; + GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE; + GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_FLAGS (outbuf) = 0; parse->priv->buffers_head = g_slist_prepend (parse->priv->buffers_head, outbuf); outbuf = NULL; @@ -2728,6 +2732,7 @@ 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); @@ -2735,7 +2740,7 @@ GST_BUFFER_OFFSET (dest) = GST_BUFFER_OFFSET (src); GST_BUFFER_DURATION (dest) = GST_BUFFER_DURATION (src); GST_BUFFER_OFFSET_END (dest) = GST_BUFFER_OFFSET_END (src); - GST_MINI_OBJECT_FLAGS (dest) = GST_MINI_OBJECT_FLAGS (src); + GST_BUFFER_FLAGS (dest) = GST_BUFFER_FLAGS (src); } else { gst_adapter_flush (parse->priv->adapter, size); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/meson.build new/gstreamer-1.22.8/meson.build --- old/gstreamer-1.22.7/meson.build 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/meson.build 2023-12-18 13:09:37.000000000 +0100 @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.22.7', + version : '1.22.8', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/po/gstreamer-1.0.pot new/gstreamer-1.22.8/po/gstreamer-1.0.pot --- old/gstreamer-1.22.7/po/gstreamer-1.0.pot 2023-11-13 12:04:53.513370500 +0100 +++ new/gstreamer-1.22.8/po/gstreamer-1.0.pot 2023-12-18 13:10:07.144442000 +0100 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gstreamer-1.22.7\n" +"Project-Id-Version: gstreamer-1.22.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-11-13 11:04+0000\n" +"POT-Creation-Date: 2023-12-18 12:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <l...@li.org>\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/po/gstreamer.pot new/gstreamer-1.22.8/po/gstreamer.pot --- old/gstreamer-1.22.7/po/gstreamer.pot 2023-11-13 12:04:53.513370500 +0100 +++ new/gstreamer-1.22.8/po/gstreamer.pot 2023-12-18 13:10:07.144442000 +0100 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gstreamer-1.22.7\n" +"Project-Id-Version: gstreamer-1.22.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-11-13 11:04+0000\n" +"POT-Creation-Date: 2023-12-18 12:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <l...@li.org>\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gstreamer-1.22.7/tests/check/gst/gstbufferpool.c new/gstreamer-1.22.8/tests/check/gst/gstbufferpool.c --- old/gstreamer-1.22.7/tests/check/gst/gstbufferpool.c 2023-11-13 12:04:22.000000000 +0100 +++ new/gstreamer-1.22.8/tests/check/gst/gstbufferpool.c 2023-12-18 13:09:37.000000000 +0100 @@ -336,6 +336,114 @@ GST_END_TEST; +GST_START_TEST (test_parent_meta) +{ + GstBufferPool *pool; + GstBuffer *buf1, *buf2, *buf3; + GstMemory *mem; + gint buf1_dcount = 0; + gint buf2_dcount = 0; + + pool = create_pool (1, 0, 0); + fail_unless (pool); + gst_buffer_pool_set_active (pool, TRUE); + + fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf1, + NULL) == GST_FLOW_OK); + buffer_track_destroy (buf1, &buf1_dcount); + + /* Create a 2nd buffer reffing the same memory. Set parent meta to make sure + * buf1 does not return to pool until buf2 is destroyed. */ + mem = gst_buffer_get_memory (buf1, 0); + buf2 = gst_buffer_new (); + gst_buffer_append_memory (buf2, mem); + gst_buffer_add_parent_buffer_meta (buf2, buf1); + buffer_track_destroy (buf2, &buf2_dcount); + + /* buf1 is still reffed by the meta */ + gst_buffer_unref (buf1); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 0); + + /* buf2 gets destroyed and buf1 returns to pool */ + gst_buffer_unref (buf2); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 1); + + /* buf1 should be recycled with the same memory */ + fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf3, + NULL) == GST_FLOW_OK); + fail_unless_equals_pointer (buf1, buf3); + fail_unless_equals_pointer (mem, gst_buffer_peek_memory (buf3, 0)); + + gst_buffer_unref (buf3); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 1); + + gst_buffer_pool_set_active (pool, FALSE); + gst_object_unref (pool); + fail_unless_equals_int (buf1_dcount, 1); + fail_unless_equals_int (buf2_dcount, 1); +} + +GST_END_TEST; + +GST_START_TEST (test_make_writable_parent_meta) +{ + GstBufferPool *pool; + GstBuffer *buf1, *buf2, *buf3; + GstMemory *mem1, *mem2; + gint buf1_dcount = 0; + gint buf2_dcount = 0; + + pool = create_pool (1, 0, 0); + fail_unless (pool); + gst_buffer_pool_set_active (pool, TRUE); + + fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf1, + NULL) == GST_FLOW_OK); + buffer_track_destroy (buf1, &buf1_dcount); + + /* Make buf1 not writable and copy it */ + gst_buffer_ref (buf1); + buf2 = gst_buffer_make_writable (buf1); + buffer_track_destroy (buf2, &buf2_dcount); + fail_unless (buf1 != buf2); + fail_unless (gst_buffer_is_writable (buf2)); + + /* buf1 and buf2 should be sharing the same memory */ + mem1 = gst_buffer_peek_memory (buf1, 0); + mem2 = gst_buffer_peek_memory (buf2, 0); + fail_unless_equals_pointer (mem1, mem2); + + /* buf1 is still reffed by the meta */ + gst_buffer_unref (buf1); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 0); + + /* buf2 gets destroyed and buf1 returns to pool */ + gst_buffer_unref (buf2); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 1); + + /* buf1 should be recycled with the same memory */ + fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf3, + NULL) == GST_FLOW_OK); + fail_unless_equals_pointer (buf1, buf3); + fail_unless_equals_pointer (mem1, gst_buffer_peek_memory (buf3, 0)); + + gst_buffer_unref (buf3); + fail_unless_equals_int (buf1_dcount, 0); + fail_unless_equals_int (buf2_dcount, 1); + + gst_buffer_pool_set_active (pool, FALSE); + gst_object_unref (pool); + fail_unless_equals_int (buf1_dcount, 1); + fail_unless_equals_int (buf2_dcount, 1); +} + +GST_END_TEST; + static Suite * gst_buffer_pool_suite (void) { @@ -355,6 +463,8 @@ tcase_add_test (tc_chain, test_pool_config_validate); tcase_add_test (tc_chain, test_flushing_pool_returns_flushing); tcase_add_test (tc_chain, test_no_deadlock_for_buffer_discard); + tcase_add_test (tc_chain, test_parent_meta); + tcase_add_test (tc_chain, test_make_writable_parent_meta); return s; } ++++++ reduce-required-meson.patch ++++++ --- /var/tmp/diff_new_pack.CFDHoW/_old 2024-01-05 21:40:09.739535556 +0100 +++ /var/tmp/diff_new_pack.CFDHoW/_new 2024-01-05 21:40:09.743535702 +0100 @@ -1,10 +1,10 @@ -Index: gstreamer-1.22.7/meson.build +Index: gstreamer-1.22.8/meson.build =================================================================== ---- gstreamer-1.22.7.orig/meson.build -+++ gstreamer-1.22.7/meson.build +--- gstreamer-1.22.8.orig/meson.build ++++ gstreamer-1.22.8/meson.build @@ -1,6 +1,6 @@ project('gstreamer', 'c', - version : '1.22.7', + version : '1.22.8', - meson_version : '>= 0.62', + meson_version : '>= 0.61', default_options : [ 'warning_level=1',