Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gstreamer-plugins-base for
openSUSE:Factory checked in at 2025-12-10 15:29:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-base (Old)
and /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-base"
Wed Dec 10 15:29:13 2025 rev:125 rq:1321734 version:1.26.9
Changes:
--------
---
/work/SRC/openSUSE:Factory/gstreamer-plugins-base/gstreamer-plugins-base.changes
2025-11-13 17:26:00.939657302 +0100
+++
/work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1939/gstreamer-plugins-base.changes
2025-12-10 15:29:41.960138926 +0100
@@ -1,0 +2,31 @@
+Sun Dec 7 08:16:18 UTC 2025 - Bjørn Lie <[email protected]>
+
+- Update to version 1.26.9:
+ + allocators: drmdumb: Keep dmabuf mapped
+ + alsadeviceprovider: Fix device name leak
+ + audiovisualizer: Use break instead of goto for escape logic
+ + decodebin3:
+ - Clear previous collection on input
+ - Consider certain meta caps in decodebin3 as raw format to
+ avoid warnings
+ + decodebin3: Protect again NULL dereference if input slot can't
+ be mapped
+ + glbasesrc: Add unlock handling for non-negotiated cases
+ + glcolorconvert: Fix memory leak in _create_shader
+ + gldownload: Keep dmabuf mapped
+ + glfiltershader: Add missing unlock
+ + glstereosplit: Add missing unlock for exceptional case
+ + pbutils: Fix bit shifting when generate hevc mime codec string
+ + rtpbaseaudiopay: Consider RESYNC flag as discontinuity too
+ + rtpbasedepayload: Add missing unlock in error code path
+ + uridecodebin3:
+ - Add null check of play items in purge
+ - Add missing unlock
+ + urisourcebin: Fix initial values of min_byte_level and
+ min_time_level variables
+ + videoencoder: Fix warning of uninitialized buffer
+ + gst-play-1.0:
+ - Fix printing of missing plugin details
+ - Add missing unlock for invalid track type
+
+-------------------------------------------------------------------
Old:
----
gst-plugins-base-1.26.8.obscpio
New:
----
gst-plugins-base-1.26.9.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gstreamer-plugins-base.spec ++++++
--- /var/tmp/diff_new_pack.Ev4QqE/_old 2025-12-10 15:29:42.724171248 +0100
+++ /var/tmp/diff_new_pack.Ev4QqE/_new 2025-12-10 15:29:42.728171418 +0100
@@ -20,7 +20,7 @@
%define gst_branch 1.0
%define gstreamer_req_version %(echo %{version} | sed -e "s/+.*//")
Name: gstreamer-plugins-base
-Version: 1.26.8
+Version: 1.26.9
Release: 0
Summary: GStreamer Streaming-Media Framework Plug-Ins
License: GPL-2.0-or-later AND LGPL-2.1-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Ev4QqE/_old 2025-12-10 15:29:42.764172941 +0100
+++ /var/tmp/diff_new_pack.Ev4QqE/_new 2025-12-10 15:29:42.768173110 +0100
@@ -5,7 +5,7 @@
<param
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
<param name="subdir">subprojects/gst-plugins-base</param>
<param name="filename">gst-plugins-base</param>
- <param name="revision">1.26.8</param>
+ <param name="revision">1.26.9</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">v?(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
++++++ gst-plugins-base-1.26.8.obscpio -> gst-plugins-base-1.26.9.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/NEWS
new/gst-plugins-base-1.26.9/NEWS
--- old/gst-plugins-base-1.26.8/NEWS 2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/NEWS 2025-12-01 18:27:07.000000000 +0100
@@ -2,11 +2,11 @@
GStreamer 1.26.0 was originally released on 11 March 2025.
-The latest bug-fix release in the stable 1.26 series is 1.26.8 and was
released on 10 November 2025.
+The latest bug-fix release in the stable 1.26 series is 1.26.9 and was
released on 01 December 2025.
See https://gstreamer.freedesktop.org/releases/1.26/ for the latest version of
this document.
-Last updated: Monday 10 November 2025, 17:00 UTC (log)
+Last updated: Monday 01 December 2025, 17:00 UTC (log)
## Introduction
@@ -2940,12 +2940,192 @@
- List of Merge Requests applied in 1.26.8
- List of Issues fixed in 1.26.8
+1.26.9
+
+The ninth 1.26 bug-fix release (1.26.9) was released on 01 December 2025.
+
+This release only contains bugfixes and it should be safe to update from
1.26.x.
+
+Highlighted bugfixes in 1.26.9
+
+- playback: playbin3 and decodebin3 stability fixes
+- Ancillary metadata handling fixes for AJA playout and Blackmagic Decklink
capture cards
+- HLS and DASH adaptive streaming clients stability improvements
+- gst-play-1.0 will now print details of any missing plugins again
+- gtk4paintablesink: Add property to fine-tune reconfiguration behaviour on
window-resize
+- macOS device monitoring: fix potential crash when probing for audio devices
+- macOS video decoder stability improvements
+- NDI source: fix audio corruption for non-interleaved audio with stride
padding
+- Add SMPTE ST291-1 ancillary metadata RTP payloader and depayloader
+- Add ST-2038 metadata combiner and extractor
+- webrtcsink: support hardware-accelerated encoders from the va VA-API plugin
+- spotifysrc: fix the Spotify integration by using Spotify’s extended
metadata endpoint
+- Python bindings cross compilation fixes
+- cerbero: add Visual Studio 2026 support, fix building on drives other than
C:, and ship svtjpegxs plugin on Windows
+- Various bug fixes, build fixes, memory leak fixes, and other stability and
reliability improvements
+
+gstreamer
+
+- info: Force comparison to same types
+- queue: Use GST_PTR_FORMAT everywhere
+- streamcollection: Fix race condition between disconnecting notify proxy
and notifications
+- value: Fix GstAllocationParams string serialisation on 32-bit architectures
+
+gst-plugins-base
+
+- allocators: drmdumb: Keep dmabuf mapped
+- alsadeviceprovider: Fix device name leak
+- audiovisualizer: Use break instead of goto for escape logic
+- decodebin3: Clear previous collection on input
+- decodebin3: Consider certain meta caps in decodebin3 as raw format to
avoid warnings
+- decodebin3: Protect again NULL dereference if input slot can’t be mapped
+- glbasesrc: Add unlock handling for non-negotiated cases
+- glcolorconvert: Fix memory leak in _create_shader
+- gldownload: Keep dmabuf mapped
+- glfiltershader: Add missing unlock
+- glstereosplit: Add missing unlock for exceptional case
+- pbutils: Fix bit shifting when generate hevc mime codec string
+- rtpbaseaudiopay: Consider RESYNC flag as discontinuity too
+- rtpbasedepayload: Add missing unlock in error code path
+- uridecodebin3: Add null check of play items in purge
+- urisourcebin: Add missing unlock
+- urisourcebin: Fix initial values of min_byte_level and min_time_level
variables
+- videoencoder: fix warning of uninitialized buffer
+
+Tools:
+
+- gst-play-1.0: fix printing of missing plugin details
+- gst-play-1.0: Add missing unlock for invalid track type
+
+gst-plugins-good
+
+- adaptivedemux2: Fix a crash on rapid state changes, and startup busy
waiting
+- hlsdemux2: Keep streams with different names
+- hlsdemux2: error out instead of asserting on negative stream time
+- hlsdemux2: Not all subtitles are present in track/collection. Usage of
FORCE EXT-X-MEDIA field
+- osxaudio: Remove unnecessary if, add comment about GstDevice lifetime
+- osxaudio: Various fixes, incl a potential crash when probing
+- v4l2allocator: Add KEEP_MAPPED flag to the allocated buffers
+- v4l2videoenc: Fix codec frame leak on error
+
+gst-plugins-bad
+
+- Add missing G_DECLS symbols to gstvkqueue and gstvkcommandqueue
+- ajasink, decklinkvideosrc: Fix some GstAncillaryMeta handling bugs
+- analyticsmeta: Initialize span to avoid undefined behavior
+- GstPlay: Fixed wrong initial position update interval configuration
+- id3tag: Fix resource leak
+- mpegtsmux: Avoid infinite recursion writing PCR packets
+- mxfdemux: Fix typo on mxf_ffv1_create_caps
+- mxfmux: Fix memset usage
+- mpegtsmux: segfaults when bitrate is configured lower than bitrate that’s
coming in
+- osxaudio: Various fixes, incl a potential crash when probing
+- scte-section: fix missing cleanup on splice component parse failure
+- tsdemux: expose audio GstStream for DTS
+- va, unixfdsrc: keep dmabufs mapped
+- vkh265dec: Fix a typo
+- vkvideo-private: Replace GstBuffer with GstMemory array for video sessions
+- vtdec: Fix race condition in decoder draining. Fluster runs were unstable
+
+gst-plugins-ugly
+
+- rmdemux: Remove unnecessary condition
+
+GStreamer Rust plugins
+
+- analytics splitter/combiner: Remove the separate fields to events and
buffer
+- audiornnoise: copy input metadatas to ouput buffer
+- closedcaption: cctost2038anc: Support alignment
+- closedcaption: st2038ancdemux: Support alignment
+- closedcaption: st2038ancmux: Support frame alignment
+- closedcaption: st2038: Forward frame rate in caps where available
+- closedcaption: Add ST-2038 combiner and extractor element
+- closedcaption: st2038extractor: Some fixes
+- closedcaption: st2038combiner: Some fixes
+- gif: Update to gif 0.14
+- gtk4: Add property to control reconfigure on window-resize behavior
+- gtk4: Fix compile warning
+- fmp4, mp4: Implement GstChildProxy for MP4Mux and FMP4Mux
+- fmp4: Update to dash-mpd 0.19
+- ndisrcdemux: fix audio corruption with non-interleaved stride padding
+- net/quinn: Update web-transport-quinn and fix flaky QUIC test
+- rtp: Add SMPTE ST291-1 (ANC) RTP payloader and depayloader
+- spotify: bump librespot 0.8.0
+- webrtcsink: Don’t let recalculate_latency block tokio worker thread
+- webrtcsink: support va encoders
+- Update dependencies
+- meson: fix build when GTK is not present
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-python
+
+- gst-python: fix cross-compiling
+- python: Add some typing annotation to overrides
+
+gst-editing-services
+
+- No changes
+
+gst-devtools, gst-validate + gst-integration-testsuites
+
+- debug-viewer: Make 0x prefix optional thread ID regexes
+
+gst-examples
+
+- No changes
+
+gstreamer-docs
+
+- No changes
+
+Development build environment
+
+- libsoup wrap: remove fallback gio-unix on windows build
+- webrtc-audio-processing wrap: Fix build with abseil-cpp 202508
+
+Cerbero build tool and packaging changes in 1.26.9
+
+- Add support for Visual Studio 2026 (Insiders)
+- Fix extraction on Windows when building on a different drive than C:, bump
pixman and pygobject
+- cookbook: List all the dependencies when listed in reverse
+- gst-plugins-bad: actually build svtjpegxs plugin on 64-bit Windows
+
+Contributors to 1.26.9
+
+Artem Martus, Chengfa Wang, Dominique Leroux, Dongjoo Kim, Doug Nazar, Edward
Hervey, Gang Zhao, Hyunjun Ko, Jaehoon Lee, Jakub
+Adam, Jan Schmidt, Jeongmin Kwak, Jerome Colle, Jihoon Lee, Jordan Yelloz, L.
E. Segovia, Matthew Semeniuk, Max Goltzsche,
+Michael Olbrich, Monty C, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête,
Philippe Normand, Pratik Pachange, Qian Hu (胡骞),
+Robert Mader, Ruben Gonzalez, Sanchayan Maity, Santiago Carot-Nemesio,
Sebastian Dröge, Seungha Yang, Stéphane Cerveau,
+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.26.9
+
+- List of Merge Requests applied in 1.26.9
+- List of Issues fixed in 1.26.9
+
Schedule for 1.28
Our next major feature release will be 1.28, and 1.27 will be the unstable
development version leading up to the stable 1.28
release. The development of 1.27/1.28 will happen in the git main branch of
the GStreamer mono repository.
-The schedule for 1.28 is yet to be decided, but we’re aiming for a release
towards the end of 2025.
+For 1.28 we’re aiming for feature freeze in December 2025 and then the new
stable 1.28.0 release in January 2026.
1.28 will be backwards-compatible to the stable 1.26, 1.24, 1.22, 1.20, 1.18,
1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0
release series.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/RELEASE
new/gst-plugins-base-1.26.9/RELEASE
--- old/gst-plugins-base-1.26.8/RELEASE 2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/RELEASE 2025-12-01 18:27:07.000000000 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-base 1.26.8.
+This is GStreamer gst-plugins-base 1.26.9.
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/gst-plugins-base-1.26.8/docs/plugins/gst_plugins_cache.json
new/gst-plugins-base-1.26.9/docs/plugins/gst_plugins_cache.json
--- old/gst-plugins-base-1.26.8/docs/plugins/gst_plugins_cache.json
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/docs/plugins/gst_plugins_cache.json
2025-12-01 18:27:07.000000000 +0100
@@ -9882,7 +9882,7 @@
"construct": false,
"construct-only": false,
"controllable": false,
- "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata",
+ "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata; meta/x-klv; meta/x-id3; meta/x-st-2038",
"mutable": "null",
"readable": true,
"type": "GstCaps",
@@ -10205,7 +10205,7 @@
"construct": false,
"construct-only": false,
"controllable": false,
- "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata",
+ "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata; meta/x-klv; meta/x-id3; meta/x-st-2038",
"mutable": "null",
"readable": true,
"type": "GstCaps",
@@ -11877,7 +11877,7 @@
"construct": false,
"construct-only": false,
"controllable": false,
- "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata",
+ "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata; meta/x-klv; meta/x-id3; meta/x-st-2038",
"mutable": "null",
"readable": true,
"type": "GstCaps",
@@ -12195,7 +12195,7 @@
"construct": false,
"construct-only": false,
"controllable": false,
- "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata",
+ "default": "video/x-raw(ANY); audio/x-raw(ANY);
text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub;
subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708;
application/x-onvif-metadata; meta/x-klv; meta/x-id3; meta/x-st-2038",
"mutable": "null",
"readable": true,
"type": "GstCaps",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/ext/alsa/gstalsadeviceprovider.c
new/gst-plugins-base-1.26.9/ext/alsa/gstalsadeviceprovider.c
--- old/gst-plugins-base-1.26.8/ext/alsa/gstalsadeviceprovider.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/ext/alsa/gstalsadeviceprovider.c
2025-12-01 18:27:07.000000000 +0100
@@ -56,7 +56,7 @@
if (snd_pcm_open (&handle, device_name, stream, SND_PCM_NONBLOCK) < 0) {
GST_ERROR_OBJECT (provider, "Could not open device %s for inspection!",
device_name);
- free (device_name);
+ g_free (device_name);
return NULL;
}
@@ -89,6 +89,7 @@
snd_card_get_longname (card, &longname);
device = gst_alsa_device_new (longname, caps, device_name, stream, props);
+ g_free (device_name);
free (longname);
snd_pcm_close (handle);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/ext/gl/gstgldownloadelement.c
new/gst-plugins-base-1.26.9/ext/gl/gstgldownloadelement.c
--- old/gst-plugins-base-1.26.8/ext/gl/gstgldownloadelement.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/ext/gl/gstgldownloadelement.c 2025-12-01
18:27:07.000000000 +0100
@@ -1208,7 +1208,8 @@
info = g_new0 (struct DmabufInfo, 1);
info->dmabuf =
- gst_dmabuf_allocator_alloc (download->dmabuf_allocator, fd, size);
+ gst_dmabuf_allocator_alloc_with_flags (download->dmabuf_allocator,
+ fd, size, GST_FD_MEMORY_FLAG_KEEP_MAPPED);
info->stride = stride;
info->offset = offset;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/ext/gl/gstglfiltershader.c
new/gst-plugins-base-1.26.9/ext/gl/gstglfiltershader.c
--- old/gst-plugins-base-1.26.8/ext/gl/gstglfiltershader.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/ext/gl/gstglfiltershader.c 2025-12-01
18:27:07.000000000 +0100
@@ -505,6 +505,7 @@
return shader;
}
+ GST_OBJECT_UNLOCK (filtershader);
return NULL;
print_error:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/ext/gl/gstglstereosplit.c
new/gst-plugins-base-1.26.9/ext/gl/gstglstereosplit.c
--- old/gst-plugins-base-1.26.8/ext/gl/gstglstereosplit.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/ext/gl/gstglstereosplit.c 2025-12-01
18:27:07.000000000 +0100
@@ -215,8 +215,10 @@
case GST_STATE_CHANGE_NULL_TO_READY:
g_rec_mutex_lock (&stereosplit->context_lock);
if (!gst_gl_ensure_element_data (element, &stereosplit->display,
- &stereosplit->other_context))
+ &stereosplit->other_context)) {
+ g_rec_mutex_unlock (&stereosplit->context_lock);
return GST_STATE_CHANGE_FAILURE;
+ }
gst_gl_display_filter_gl_api (stereosplit->display, SUPPORTED_GL_APIS);
g_rec_mutex_unlock (&stereosplit->context_lock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/gst/playback/gstdecodebin3.c
new/gst-plugins-base-1.26.9/gst/playback/gstdecodebin3.c
--- old/gst-plugins-base-1.26.8/gst/playback/gstdecodebin3.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst/playback/gstdecodebin3.c 2025-12-01
18:27:07.000000000 +0100
@@ -353,8 +353,8 @@
* be avoided */
gboolean input_is_parsed;
- /* List of events that need to be pushed once we get the first
- * GST_EVENT_STREAM_COLLECTION */
+ /* List of events that need to be pushed once we get the
+ * GST_EVENT_STREAM_COLLECTION for a GstStream */
GList *events_waiting_for_collection;
/* input buffer probe for detecting whether input has caps or not */
@@ -566,6 +566,8 @@
GstStateChange transition);
static gboolean gst_decodebin3_send_event (GstElement * element,
GstEvent * event);
+static const gchar *stream_in_collection (GstStreamCollection * collection,
+ const gchar * sid);
static void gst_decode_bin_update_factories_list (GstDecodebin3 * dbin);
@@ -991,8 +993,9 @@
SELECTION_LOCK (input->dbin);
gst_decodebin_input_link_to_slot (input);
SELECTION_UNLOCK (input->dbin);
- } else
+ } else {
gst_object_unref (stream);
+ }
}
}
break;
@@ -1824,8 +1827,9 @@
gst_bin_remove (GST_BIN (dbin), input->identity);
gst_clear_object (&input->identity);
}
- if (input->collection)
+ if (input->collection) {
gst_clear_object (&input->collection);
+ }
if (input->input_probe) {
gst_pad_remove_probe (input->ghost_sink, input->input_probe);
@@ -1984,6 +1988,8 @@
}
gst_query_unref (q);
+ INPUT_LOCK (dbin);
+
/* FIXME : We force `decodebin3` to upstream selection mode if *any* of
the
inputs is. This means things might break if there's a mix */
if (input->upstream_selected)
@@ -2002,8 +2008,24 @@
/* Make sure group ids will be recalculated */
input->group_id = GST_GROUP_ID_INVALID;
- INPUT_LOCK (dbin);
recalculate_group_id (dbin);
+
+ GstStream *stream = NULL;
+
+ gst_event_parse_stream (event, &stream);
+ if (stream) {
+ const gchar *stream_id = gst_stream_get_stream_id (stream);
+ if (input->collection != NULL
+ && !stream_in_collection (input->collection, stream_id)) {
+ GST_DEBUG_OBJECT (sinkpad,
+ "Stream %" GST_PTR_FORMAT
+ " is from a new collection on this input", stream);
+ /* This is a stream from a new collection. Invalidate the old
collection */
+ gst_clear_object (&input->collection);
+ }
+ gst_object_unref (stream);
+ }
+
INPUT_UNLOCK (dbin);
break;
}
@@ -2567,7 +2589,7 @@
}
static const gchar *
-stream_in_collection (GstStreamCollection * collection, gchar * sid)
+stream_in_collection (GstStreamCollection * collection, const gchar * sid)
{
guint i, len;
@@ -3636,6 +3658,14 @@
MultiQueueSlot *slot =
gst_decodebin_get_slot_for_input_stream_locked (dbin, input_stream);
+ if (!slot) {
+ GST_ERROR_OBJECT (dbin,
+ "Fatal, could not get a multiqueue slot for input stream");
+ GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL),
+ ("Fatal, could not get a multiqueue slot for input stream"));
+ return;
+ }
+
if (slot->input != NULL && slot->input != input_stream) {
GST_ERROR_OBJECT (slot->dbin, "Input stream is already linked to a slot");
return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/gst/playback/gstrawcaps.h
new/gst-plugins-base-1.26.9/gst/playback/gstrawcaps.h
--- old/gst-plugins-base-1.26.8/gst/playback/gstrawcaps.h 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst/playback/gstrawcaps.h 2025-12-01
18:27:07.000000000 +0100
@@ -35,7 +35,10 @@
"subpicture/x-pgs; " \
"closedcaption/x-cea-608; " \
"closedcaption/x-cea-708; " \
- "application/x-onvif-metadata; "
+ "application/x-onvif-metadata; " \
+ "meta/x-klv; " \
+ "meta/x-id3; " \
+ "meta/x-st-2038; "
G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst/playback/gsturidecodebin3.c
new/gst-plugins-base-1.26.9/gst/playback/gsturidecodebin3.c
--- old/gst-plugins-base-1.26.8/gst/playback/gsturidecodebin3.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst/playback/gsturidecodebin3.c 2025-12-01
18:27:07.000000000 +0100
@@ -2031,7 +2031,8 @@
free_play_item (dec, item);
}
- dec->output_item = dec->input_item = dec->play_items->data;
+ dec->output_item = dec->input_item =
+ (dec->play_items ? dec->play_items->data : NULL);
dec->output_item->posted_about_to_finish = FALSE;
PLAY_ITEMS_UNLOCK (dec);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst/playback/gsturisourcebin.c
new/gst-plugins-base-1.26.9/gst/playback/gsturisourcebin.c
--- old/gst-plugins-base-1.26.8/gst/playback/gsturisourcebin.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst/playback/gsturisourcebin.c 2025-12-01
18:27:07.000000000 +0100
@@ -1040,8 +1040,9 @@
get_queue_statistics (GstURISourceBin * urisrc)
{
GstStructure *ret = NULL;
- guint min_byte_level = 0, max_byte_level = 0;
- guint64 min_time_level = 0, max_time_level = 0;
+ gboolean has_queue_stats = FALSE;
+ guint min_byte_level = G_MAXUINT32, max_byte_level = 0;
+ guint64 min_time_level = G_MAXUINT64, max_time_level = 0;
gdouble avg_byte_level = 0., avg_time_level = 0.;
guint i = 0;
GList *iter, *cur;
@@ -1061,6 +1062,8 @@
g_object_get (slot->queue, "current-level-bytes", &byte_limit,
"current-level-time", &time_limit, NULL);
+ has_queue_stats = TRUE;
+
if (byte_limit < min_byte_level)
min_byte_level = byte_limit;
if (byte_limit > max_byte_level)
@@ -1078,6 +1081,11 @@
}
GST_URI_SOURCE_BIN_UNLOCK (urisrc);
+ if (!has_queue_stats) {
+ min_byte_level = 0;
+ min_time_level = 0;
+ }
+
ret = gst_structure_new ("application/x-urisourcebin-stats",
"minimum-byte-level", G_TYPE_UINT, (guint) min_byte_level,
"maximum-byte-level", G_TYPE_UINT, (guint) max_byte_level,
@@ -2125,6 +2133,7 @@
info->demuxer = gst_element_factory_make ("parsebin", NULL);
if (!info->demuxer) {
+ GST_URI_SOURCE_BIN_UNLOCK (urisrc);
post_missing_plugin_error (GST_ELEMENT_CAST (urisrc), "parsebin");
return FALSE;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/allocators/gstdrmdumb.c
new/gst-plugins-base-1.26.9/gst-libs/gst/allocators/gstdrmdumb.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/allocators/gstdrmdumb.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/allocators/gstdrmdumb.c
2025-12-01 18:27:07.000000000 +0100
@@ -156,8 +156,8 @@
if (ret)
goto export_fd_failed;
- dmamem = gst_dmabuf_allocator_alloc (alloc->dmabuf_alloc, prime_fd,
- gst_memory_get_sizes (mem, NULL, NULL));
+ dmamem = gst_dmabuf_allocator_alloc_with_flags (alloc->dmabuf_alloc,
prime_fd,
+ gst_memory_get_sizes (mem, NULL, NULL), GST_FD_MEMORY_FLAG_KEEP_MAPPED);
GST_DEBUG_OBJECT (alloc, "Exported bo handle %d as %d", drmmem->handle,
prime_fd);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/gl/gstglbasesrc.c
new/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglbasesrc.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/gl/gstglbasesrc.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglbasesrc.c 2025-12-01
18:27:07.000000000 +0100
@@ -405,6 +405,7 @@
if (!gst_video_frame_map (&out_frame, &src->out_info, buffer,
GST_MAP_WRITE | GST_MAP_GL)) {
+ g_rec_mutex_unlock (&src->priv->context_lock);
return GST_FLOW_NOT_NEGOTIATED;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/gl/gstglcolorconvert.c
new/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglcolorconvert.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/gl/gstglcolorconvert.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglcolorconvert.c
2025-12-01 18:27:07.000000000 +0100
@@ -3061,6 +3061,7 @@
g_free (version_str);
g_free (tmp);
gst_object_unref (ret);
+ g_string_free (str, TRUE);
return NULL;
}
g_free (tmp);
@@ -3072,6 +3073,7 @@
g_free (version_str);
gst_object_unref (stage);
gst_object_unref (ret);
+ g_string_free (str, TRUE);
return NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/codec-utils.c
new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/codec-utils.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/codec-utils.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/codec-utils.c
2025-12-01 18:27:07.000000000 +0100
@@ -3075,8 +3075,8 @@
}
profile_tier_level = data + 1;
- profile_space = (profile_tier_level[0] & 0x11) >> 6;
- tier_flag = (profile_tier_level[0] & 0x001) >> 5;
+ profile_space = (profile_tier_level[0] >> 6) & 0x03;
+ tier_flag = (profile_tier_level[0] >> 5) & 0x01;
profile_idc = (profile_tier_level[0] & 0x1f);
compat_flags = GST_READ_UINT32_BE (data + 2);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/descriptions.c
new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/descriptions.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/descriptions.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/descriptions.c
2025-12-01 18:27:07.000000000 +0100
@@ -339,6 +339,7 @@
/* metadata */
{"application/x-onvif-metadata", "ONVIF Timed Metadata", FLAG_METADATA, ""},
{"meta/x-klv", "KLV Metadata", FLAG_METADATA, ""},
+ {"meta/x-st-2038", "ST-2038 Ancillary Data", FLAG_METADATA, ""},
};
static const gchar *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/gstaudiovisualizer.c
new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/gstaudiovisualizer.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/pbutils/gstaudiovisualizer.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/gstaudiovisualizer.c
2025-12-01 18:27:07.000000000 +0100
@@ -1077,21 +1077,21 @@
bpf = GST_AUDIO_INFO_BPF (&scope->ainfo);
if (bpf == 0) {
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto beach;
+ goto not_negotiated;
}
- gst_adapter_push (scope->priv->adapter, buffer);
-
g_mutex_lock (&scope->priv->config_lock);
- /* this is what we want */
- sbpf = scope->req_spf * bpf;
-
inbuf = scope->priv->inbuf;
+
/* FIXME: the timestamp in the adapter would be different */
gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
+ gst_adapter_push (scope->priv->adapter, buffer);
+
+ /* this is what we want */
+ sbpf = scope->req_spf * bpf;
+
/* this is what we have */
avail = gst_adapter_available (scope->priv->adapter);
GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
@@ -1190,7 +1190,7 @@
if (!klass->render (scope, inbuf, &outframe)) {
ret = GST_FLOW_ERROR;
gst_video_frame_unmap (&outframe);
- goto beach;
+ break;
} else {
/* run various post processing (shading and geometric transformation)
*/
/* FIXME: SHADER assumes 32bpp */
@@ -1214,11 +1214,9 @@
/* we want to take less or more, depending on spf : req_spf */
if (avail - sbpf >= sbpf) {
gst_adapter_flush (scope->priv->adapter, sbpf);
- gst_adapter_unmap (scope->priv->adapter);
} else if (avail >= sbpf) {
/* just flush a bit and stop */
gst_adapter_flush (scope->priv->adapter, (avail - sbpf));
- gst_adapter_unmap (scope->priv->adapter);
break;
}
avail = gst_adapter_available (scope->priv->adapter);
@@ -1229,13 +1227,13 @@
g_mutex_unlock (&scope->priv->config_lock);
-beach:
return ret;
/* ERRORS */
not_negotiated:
{
GST_DEBUG_OBJECT (scope, "Failed to renegotiate");
+ gst_buffer_unref (buffer);
return GST_FLOW_NOT_NEGOTIATED;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
new/gst-plugins-base-1.26.9/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
2025-12-01 18:27:07.000000000 +0100
@@ -853,7 +853,8 @@
priv = payload->priv;
timestamp = GST_BUFFER_PTS (buffer);
- discont = GST_BUFFER_IS_DISCONT (buffer);
+ discont = GST_BUFFER_IS_DISCONT (buffer)
+ || GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_RESYNC);
if (discont) {
GST_DEBUG_OBJECT (payload, "Got DISCONT");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/rtp/gstrtpbasedepayload.c
new/gst-plugins-base-1.26.9/gst-libs/gst/rtp/gstrtpbasedepayload.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/rtp/gstrtpbasedepayload.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/rtp/gstrtpbasedepayload.c
2025-12-01 18:27:07.000000000 +0100
@@ -1408,6 +1408,7 @@
GST_WARNING_OBJECT (depayload, "RTP header extension (%s) could "
"not read payloaded data", GST_OBJECT_NAME (ext));
gst_object_unref (ext);
+ GST_OBJECT_UNLOCK (depayload);
goto out;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/video/gstvideoencoder.c
new/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoencoder.c
--- old/gst-plugins-base-1.26.8/gst-libs/gst/video/gstvideoencoder.c
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoencoder.c
2025-12-01 18:27:07.000000000 +0100
@@ -2720,12 +2720,14 @@
if (encoder_class->pre_push)
ret = encoder_class->pre_push (encoder, frame);
+ if (ret != GST_FLOW_OK)
+ goto done;
+
gst_video_encoder_transform_meta_unlocked (encoder, frame);
/* Get an additional ref to the buffer, which is going to be pushed
* downstream, the original ref is owned by the frame */
- if (ret == GST_FLOW_OK)
- buffer = gst_buffer_ref (frame->output_buffer);
+ buffer = gst_buffer_ref (frame->output_buffer);
/* Release frame so the buffer is writable when we push it downstream
* if possible, i.e. if the subclass does not hold additional references
@@ -2734,11 +2736,9 @@
gst_video_encoder_release_frame_unlocked (encoder, frame);
frame = NULL;
- if (ret == GST_FLOW_OK) {
- GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
- ret = gst_pad_push (encoder->srcpad, buffer);
- GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
- }
+ GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+ ret = gst_pad_push (encoder->srcpad, buffer);
+ GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
done:
/* handed out */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-plugins-base-1.26.8/gst-libs/gst/video/gstvideoencoder.h
new/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoencoder.h
--- old/gst-plugins-base-1.26.8/gst-libs/gst/video/gstvideoencoder.h
2025-11-10 18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoencoder.h
2025-12-01 18:27:07.000000000 +0100
@@ -181,7 +181,7 @@
* @finish: Optional.
* Called to request subclass to dispatch any pending
remaining
* data (e.g. at EOS).
- * @pre_push: Optional.
+ * @pre_push: Optional.
* Allows subclass to push frame downstream in whatever
* shape or form it deems appropriate. If not provided,
* provided encoded frame data is simply pushed downstream.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/gst-plugins-base.doap
new/gst-plugins-base-1.26.9/gst-plugins-base.doap
--- old/gst-plugins-base-1.26.8/gst-plugins-base.doap 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/gst-plugins-base.doap 2025-12-01
18:27:07.000000000 +0100
@@ -36,6 +36,16 @@
<release>
<Version>
+ <revision>1.26.9</revision>
+ <branch>1.26</branch>
+ <name></name>
+ <created>2025-12-01</created>
+ <file-release
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.26.9.tar.xz"
/>
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.26.8</revision>
<branch>1.26</branch>
<name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/meson.build
new/gst-plugins-base-1.26.9/meson.build
--- old/gst-plugins-base-1.26.8/meson.build 2025-11-10 18:22:05.000000000
+0100
+++ new/gst-plugins-base-1.26.9/meson.build 2025-12-01 18:27:07.000000000
+0100
@@ -1,5 +1,5 @@
project('gst-plugins-base', 'c',
- version : '1.26.8',
+ version : '1.26.9',
meson_version : '>= 1.4',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/tests/check/libs/pbutils.c
new/gst-plugins-base-1.26.9/tests/check/libs/pbutils.c
--- old/gst-plugins-base-1.26.8/tests/check/libs/pbutils.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/tests/check/libs/pbutils.c 2025-12-01
18:27:07.000000000 +0100
@@ -1554,6 +1554,22 @@
gst_caps_unref (caps);
gst_buffer_unref (buffer);
+ /* h265 with specific profile space and tier flag */
+ codec_data_len = sizeof (h265_sample_codec_data);
+ codec_data = g_memdup2 (h265_sample_codec_data, codec_data_len);
+ codec_data[1] = 0x61;
+ codec_data[12] = 0x96;
+
+ buffer = gst_buffer_new_wrapped (codec_data, codec_data_len);
+ caps =
+ gst_caps_new_simple ("video/x-h265", "stream-format", G_TYPE_STRING,
+ "hvc1", "codec_data", GST_TYPE_BUFFER, buffer, NULL);
+ mime_codec = gst_codec_utils_caps_get_mime_codec (caps);
+ fail_unless_equals_string (mime_codec, "hvc1.A1.6.H150.B0");
+ g_free (mime_codec);
+ gst_caps_unref (caps);
+ gst_buffer_unref (buffer);
+
/* av1 */
caps = gst_caps_new_empty_simple ("video/x-av1");
mime_codec = gst_codec_utils_caps_get_mime_codec (caps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-plugins-base-1.26.8/tools/gst-play.c
new/gst-plugins-base-1.26.9/tools/gst-play.c
--- old/gst-plugins-base-1.26.8/tools/gst-play.c 2025-11-10
18:22:05.000000000 +0100
+++ new/gst-plugins-base-1.26.9/tools/gst-play.c 2025-12-01
18:27:07.000000000 +0100
@@ -501,8 +501,17 @@
}
break;
}
- case GST_MESSAGE_ELEMENT:
- {
+ case GST_MESSAGE_ELEMENT:{
+ if (gst_is_missing_plugin_message (msg)) {
+ gchar *desc;
+
+ desc = gst_missing_plugin_message_get_description (msg);
+ gst_print ("Missing plugin: %s\n", desc);
+ g_free (desc);
+ play->missing = g_list_prepend (play->missing, gst_message_ref (msg));
+ break;
+ }
+ // Will return GST_NAVIGATION_MESSAGE_INVALID if it's not a navigation
message
GstNavigationMessageType mtype = gst_navigation_message_get_type (msg);
if (mtype == GST_NAVIGATION_MESSAGE_EVENT) {
GstEvent *ev = NULL;
@@ -684,14 +693,6 @@
break;
}
default:
- if (gst_is_missing_plugin_message (msg)) {
- gchar *desc;
-
- desc = gst_missing_plugin_message_get_description (msg);
- gst_print ("Missing plugin: %s\n", desc);
- g_free (desc);
- play->missing = g_list_append (play->missing, gst_message_ref (msg));
- }
break;
}
@@ -1289,6 +1290,7 @@
}
break;
default:
+ g_mutex_unlock (&play->selection_lock);
return;
}
++++++ gst-plugins-base.obsinfo ++++++
--- /var/tmp/diff_new_pack.Ev4QqE/_old 2025-12-10 15:29:45.760299691 +0100
+++ /var/tmp/diff_new_pack.Ev4QqE/_new 2025-12-10 15:29:45.796301215 +0100
@@ -1,5 +1,5 @@
name: gst-plugins-base
-version: 1.26.8
-mtime: 1762795325
-commit: 16d77e12ad213ef24e76a8cc34d347b8221c9975
+version: 1.26.9
+mtime: 1764610027
+commit: f313fae193089408e278c0dd3450145e5a12307b