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-31 10:46:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-base (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-base"

Wed Dec 31 10:46:24 2025 rev:126 rq:1324797 version:1.26.10

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-base/gstreamer-plugins-base.changes
    2025-12-10 15:29:41.960138926 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1928/gstreamer-plugins-base.changes
  2025-12-31 10:46:30.064209106 +0100
@@ -1,0 +2,20 @@
+Tue Dec 30 09:37:34 UTC 2025 - Bjørn Lie <[email protected]>
+
+- Update to version 1.26.10:
+  + basetextoverlay: Don't negotiate if caps haven't changed
+  + codec-utils: Update mime codec strings
+  + fdmemory: Fix size calculation when sharing
+  + gl elements add a yellow bar on JPEGs with non-even heights
+  + glimagesink: Fix handling of odd height buffers
+  + glwindow_cocoa: fix window not closing (w/o user window handle)
+  + opusenc: Simplify Vorbis channel layout mapping code and fix
+    7.1 layout & use surround multistream encoder
+  + parsebin: Improve debug logging
+  + playbin3: ensure GST_EVENT_SELECT_STREAMS event is sent to
+    collection source
+  + tagdemux: propagate seek event seqnum to upstream
+  + videodecoder: Don't assume the ALLOCATION query contains a pool
+  + videodecoder, videoaggregator: Fix handling of buffer pool
+    configuration failures
+
+-------------------------------------------------------------------

Old:
----
  gst-plugins-base-1.26.9.obscpio

New:
----
  gst-plugins-base-1.26.10.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer-plugins-base.spec ++++++
--- /var/tmp/diff_new_pack.836AKY/_old  2025-12-31 10:46:30.732236487 +0100
+++ /var/tmp/diff_new_pack.836AKY/_new  2025-12-31 10:46:30.732236487 +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.9
+Version:        1.26.10
 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.836AKY/_old  2025-12-31 10:46:30.776238288 +0100
+++ /var/tmp/diff_new_pack.836AKY/_new  2025-12-31 10:46:30.784238615 +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.9</param>
+    <param name="revision">1.26.10</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.9.obscpio -> gst-plugins-base-1.26.10.obscpio 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/NEWS 
new/gst-plugins-base-1.26.10/NEWS
--- old/gst-plugins-base-1.26.9/NEWS    2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/NEWS   2025-12-25 15:44:26.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.9 and was 
released on 01 December 2025.
+The latest bug-fix release in the stable 1.26 series is 1.26.10 and was 
released on 25 December 2025
 
 See https://gstreamer.freedesktop.org/releases/1.26/ for the latest version of 
this document.
 
-Last updated: Monday 01 December 2025, 17:00 UTC (log)
+Last updated: Thursday 25 December 2025, 15:00 UTC (log)
 
 ## Introduction
 
@@ -3120,6 +3120,191 @@
 -   List of Merge Requests applied in 1.26.9
 -   List of Issues fixed in 1.26.9
 
+1.26.10
+
+The tenth 1.26 bug-fix release (1.26.10) was released on 25 December 2025.
+
+This release only contains bugfixes and it should be safe to update from 
1.26.x.
+
+Highlighted bugfixes in 1.26.10
+
+-   curlhttpsrc fixes and improvements
+-   decklinkvideosink: Fix frame completion callbacks for firmware 14.3+
+-   flac: Fix 6.1 and 7.1 channel layouts and support encoding and decoding of 
32-bit audio
+-   glimagesink: Fix handling of odd height buffers
+-   matroskademux: make maximum allowed block size large enough to support 4k 
uncompressed video
+-   mxf: Add support for custom Sony XDCAM video variant
+-   opusenc: multichannel and surround sound handling improvements
+-   playbin3: HLS/DASH stream selection handling improvements to fix disabling 
and re-enabling of audio/video streams with
+    adaptivedemux2
+-   qtmux: robust recording mode space left estimation fixes for streams that 
start with a timestamp offset
+-   splitmuxsrc seeking improvements
+-   Support FLAC audio in DASH manifests
+-   Python bindings: fix regression where buffers were no longer writable in 
pad probe callbacks
+-   cerbero: add python bindings for GstApp; Windows installer improvements
+-   Various bug fixes,build fixes,memory leak fixes,and other stability and 
reliability improvements
+
+gstreamer
+
+-   pipeline: Improve resource cleanup logic for clock objects
+-   filesink: fix the build with recent mingw-w64
+-   basetransform, basesrc: Fix handling of buffer pool configuration failures
+
+gst-plugins-base
+
+-   basetextoverlay: Don’t negotiate if caps haven’t changed
+-   codec-utils: Update mime codec strings
+-   fdmemory: Fix size calculation when sharing
+-   gl elements add a yellow bar on JPEGs with non-even heights
+-   glimagesink: Fix handling of odd height buffers
+-   glwindow_cocoa: fix window not closing (w/o user window handle)
+-   opusenc: Simplify Vorbis channel layout mapping code and fix 7.1 layout & 
use surround multistream encoder
+-   parsebin: Improve debug logging
+-   playbin3: ensure GST_EVENT_SELECT_STREAMS event is sent to collection 
source
+-   tagdemux: propagate seek event seqnum to upstream
+-   videodecoder: Don’t assume the ALLOCATION query contains a pool
+-   videodecoder, videoaggregator: Fix handling of buffer pool configuration 
failures
+
+gst-plugins-good
+
+-   adaptivedemux2: Initialize start bitrate for dashdemux2 and hlsdemux2
+-   dashdemux2: Unknown codec ‘flac’ when streaming a DASH MPD manifest with a 
mp4 FLAC file
+-   deinterlace: Improve pool configuration
+-   flac: Fix 6.1 / 7.1 channel layouts
+-   flacdec: Don’t forbid S32 sample size (0x07) unnecessarily
+-   flacenc: Support S32 samples
+-   flacdec: Decode 32-bit FLAC files
+-   level: fix crash if no caps have been sent
+-   level: Floating point exception (core dumped) when sending buffers without 
caps
+-   matroskademux: Bump maximum block size from 15MB to 32MB to allow 4k raw 
video
+-   matroskamux: Fix some more thread-safety issues
+-   matroskamux: Fix thread-safety issues when requesting new pads
+-   matroskamux: pad->track handling results in segmentation fault
+-   mxfdemux / aiffparse / matroskaparse: Remove segment closing on 
non-flushing seeks
+-   qtdemux: Use gst_util_uint64_scale to scale guint64
+-   qtmux: Fix robust recording estimates
+-   splitmuxsrc - fix for seeking / flushing deadlock
+-   v4l2object: Add support for colorimetry 1:4:16:3
+-   wavenc: Fix downstream negotiation
+-   wavparse: prevent setting empty strings as title tag
+
+gst-plugins-bad
+
+-   aesenc / aesdec: use correct format specifier for buffer size in debug log
+-   analytics: Fix build on MSVC by using libm dependency
+-   curlhttpsrc: Various fixes
+-   decklinkvideosink: Fix frame completion callbacks for firmware 14.3+
+-   dtlsdec: mark generated cert agent with GST_OBJECT_FLAG_MAY_BE_LEAKED
+-   fdkaacdec: Assertion on handling unsupported channel layouts
+-   fdkaacdec: Invalidate channel_types/indices when setting a known config
+-   hlssink: Guard NULL structure and use gst_structure_has_name()
+-   midiparse: Fix a couple of potential out-of-bounds reads
+-   mpegtsmux: Fix potential deadlock changing pmt-interval
+-   mxfdemux: reconsider “closing running segment” for non flushing seeks
+-   mxfdemux / aiffparse / matroskaparse: Remove segment closing on 
non-flushing seeks
+-   mxfdemux: Simplify timestamp tracking
+-   mxfdemux: send event SegmentDone for segment seeks
+-   mxfmpeg: Add custom Sony picture essence coding UL
+-   playbin3: ensure GST_EVENT_SELECT_STREAMS event is sent to collection 
source
+-   vabasedec: Don’t assert when negotiating based on a gap event before the 
first buffer
+-   vkformat: Add VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 format
+-   webrtc: Keep a ref of the ICEStream in the TransportStream
+-   GstPlay: set_audio_track_enabled / set_video_track_enabled not functioning 
for adaptivedemux2 sources
+-   video: decoders: Fix possible crash when flushing H265/H266 decoder
+
+gst-plugins-ugly
+
+-   No changes
+
+GStreamer Rust plugins
+
+-   cctost2038anc: Fix typo with c_not_y_channel property documentation
+-   dav1d: Stop iteration after finding first working pool
+-   dav1d: Various fixes to allocation query handling
+-   gtk4paintablesink: Propose a udmabuf pool / allocator if upstream asks for 
sysmem
+-   gtk4: Fix typo in odd-size subsample workaround
+-   rtp: Update to rtcp-types 0.3
+-   st2038combiner: Some fixes
+-   st2038extractor: Add always-add-st2038-pad property
+-   threadshare: allow disabling the IPv4 or IPv6 socket in ts-udpsink
+-   threadshare: Update to flume 0.12
+-   tracers: add function and signal for writing logs to PadPushTimings
+-   version-helper: Update to toml_edit 0.24
+-   webrtc: mark static caps with GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED
+-   webrtcsink: don’t upscale when mitigating low bitrate
+-   Fix new clippy 1.92 warnings
+-   Update dependencies
+
+gst-libav
+
+-   avviddec: Various fixes to allocation query handling
+-   avviddec: Aggregate GstVideoAlignment on top of the meta api params, 
instead of overriding them
+-   avviddec: Set video alignment to internal pool
+
+gst-rtsp-server
+
+-   No changes
+
+gstreamer-vaapi
+
+-   No changes
+
+gstreamer-sharp
+
+-   No changes
+
+gst-python
+
+-   Override GstPadProbeInfo to get writable objects
+-   Misc improvements
+-   More typing fixes
+-   1.26.2 breaks Python bindings: No longer able to modify Gst.Buffer 
metadata in pad probe callbacks
+
+gst-editing-services
+
+-   python: More typing fixes
+
+gst-devtools,gst-validate + gst-integration-testsuites
+
+-   dotsviewer: Update Rust dependencies
+
+gst-examples
+
+-   webrtc: Update Rust dependencies
+
+gstreamer-docs
+
+-   No changes
+
+Development build environment
+
+-   No changes
+
+Cerbero build tool and packaging changes in 1.26.10
+
+-   pkg-config: Ship it in the devel package
+-   recipe: Update License enums to SPDX expressions
+-   recipes: Fix GPL categorization of some plugins
+-   recipes: Fix stray devel files making it into runtime
+-   recipes: add GstApp python binding
+-   Modernize MSI license.rtf formatting
+-   Use ninja for all cmake recipes by default instead of GNU make
+-   ci: Mark a racy xcode toolchain bug for retrying
+
+Contributors to 1.26.10
+
+Aaron Boxer, Brad Reitmeyer, Christoph Reiter, Doug Nazar, F. Duncanh, 
François Laignel, Haejung Hwang, Hou Qi, Hyunjun Ko,
+Jakub Adam, Jan Schmidt, Jeongmin Kwak, Jerome Colle, L. E. Segovia, Mathieu 
Duponchelle, Nicolas Dufresne, Nirbheek Chauhan,
+Philippe Normand, Piotr Brzeziński, Pratik Pachange, Robert Mader, Sanchayan 
Maity, Sebastian Dröge, Stéphane Cerveau, Thibault
+Saunier, Tim-Philipp Müller, Tobias Schlager, Vivia Nikolaidou, Wilhelm 
Bartel, Xavier Claessens, Yun Liu,
+
+… 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.10
+
+-   List of Merge Requests applied in 1.26.10
+-   List of Issues fixed in 1.26.10
+
 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/RELEASE 
new/gst-plugins-base-1.26.10/RELEASE
--- old/gst-plugins-base-1.26.9/RELEASE 2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/RELEASE        2025-12-25 15:44:26.000000000 
+0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-plugins-base 1.26.9.
+This is GStreamer gst-plugins-base 1.26.10.
 
 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.9/ext/opus/gstopuscommon.c 
new/gst-plugins-base-1.26.10/ext/opus/gstopuscommon.c
--- old/gst-plugins-base-1.26.9/ext/opus/gstopuscommon.c        2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopuscommon.c       2025-12-25 
15:44:26.000000000 +0100
@@ -73,6 +73,20 @@
       GST_AUDIO_CHANNEL_POSITION_LFE1},
 };
 
+/* Taken from opus_multistream_encoder.c.
+ *
+ * These are also the values returned by 
opus_multistream_surround_encoder_init() */
+const GstOpusVorbisLayout gst_opus_vorbis_channel_map[8] = {
+  {1, 0, {0}},                  /* 1: mono */
+  {1, 1, {0, 1}},               /* 2: stereo */
+  {2, 1, {0, 2, 1}},            /* 3: 1-d surround */
+  {2, 2, {0, 1, 2, 3}},         /* 4: quadraphonic surround */
+  {3, 2, {0, 4, 1, 2, 3}},      /* 5: 5-channel surround */
+  {4, 2, {0, 4, 1, 2, 3, 5}},   /* 6: 5.1 surround */
+  {4, 3, {0, 4, 1, 2, 3, 5, 6}},        /* 7: 6.1 surround */
+  {5, 3, {0, 6, 1, 2, 3, 4, 5, 7}},     /* 8: 7.1 surround */
+};
+
 const char *gst_opus_channel_names[] = {
   "mono",
   "front left",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/gstopuscommon.h 
new/gst-plugins-base-1.26.10/ext/opus/gstopuscommon.h
--- old/gst-plugins-base-1.26.9/ext/opus/gstopuscommon.h        2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopuscommon.h       2025-12-25 
15:44:26.000000000 +0100
@@ -27,6 +27,12 @@
 G_BEGIN_DECLS
 
 extern const GstAudioChannelPosition gst_opus_channel_positions[][8];
+typedef struct {
+  gint n_streams;
+  gint n_coupled;
+  guint8 mapping[8];
+} GstOpusVorbisLayout;
+extern const GstOpusVorbisLayout gst_opus_vorbis_channel_map[8];
 extern const char *gst_opus_channel_names[];
 extern void gst_opus_common_log_channel_mapping_table (GstElement *element,
     GstDebugCategory * category, const char *msg,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/gstopusdec.c 
new/gst-plugins-base-1.26.10/ext/opus/gstopusdec.c
--- old/gst-plugins-base-1.26.9/ext/opus/gstopusdec.c   2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopusdec.c  2025-12-25 
15:44:26.000000000 +0100
@@ -279,6 +279,7 @@
 {
   GstCaps *caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (dec));
   GstStructure *s;
+  GstAudioChannelPosition gst_pos[64];
   GstAudioInfo info;
 
   if (caps) {
@@ -375,23 +376,21 @@
 
   /* pass valid order to audio info */
   if (pos) {
-    memcpy (dec->opus_pos, pos, sizeof (pos[0]) * dec->n_channels);
-    gst_audio_channel_positions_to_valid_order (dec->opus_pos, 
dec->n_channels);
+    memcpy (gst_pos, pos, sizeof (pos[0]) * dec->n_channels);
+    gst_audio_channel_positions_to_valid_order (gst_pos, dec->n_channels);
+    memcpy (dec->opus_pos, pos, dec->n_channels * sizeof (*dec->opus_pos));
+    dec->needs_reorder =
+        memcmp (pos, gst_pos, dec->n_channels * sizeof (*gst_pos)) != 0;
+  } else {
+    dec->needs_reorder = FALSE;
   }
 
   /* set up source format */
   gst_audio_info_init (&info);
   gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S16,
-      dec->sample_rate, dec->n_channels, pos ? dec->opus_pos : NULL);
+      dec->sample_rate, dec->n_channels, pos ? gst_pos : NULL);
   gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dec), &info);
 
-  /* but we still need the opus order for later reordering */
-  if (pos) {
-    memcpy (dec->opus_pos, pos, sizeof (pos[0]) * dec->n_channels);
-  } else {
-    dec->opus_pos[0] = GST_AUDIO_CHANNEL_POSITION_INVALID;
-  }
-
   dec->info = info;
 
   return TRUE;
@@ -817,7 +816,7 @@
   if (gst_buffer_get_size (outbuf) == 0) {
     gst_buffer_unref (outbuf);
     outbuf = NULL;
-  } else if (dec->opus_pos[0] != GST_AUDIO_CHANNEL_POSITION_INVALID) {
+  } else if (dec->needs_reorder) {
     gst_audio_buffer_reorder_channels (outbuf, GST_AUDIO_FORMAT_S16,
         dec->n_channels, dec->opus_pos, dec->info.position);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/gstopusdec.h 
new/gst-plugins-base-1.26.10/ext/opus/gstopusdec.h
--- old/gst-plugins-base-1.26.9/ext/opus/gstopusdec.h   2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopusdec.h  2025-12-25 
15:44:26.000000000 +0100
@@ -58,6 +58,7 @@
   gint16 r128_gain;
 
   GstAudioChannelPosition opus_pos[64];
+  gboolean needs_reorder;
   GstAudioInfo info;
 
   guint8 n_streams;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/gstopusenc.c 
new/gst-plugins-base-1.26.10/ext/opus/gstopusenc.c
--- old/gst-plugins-base-1.26.9/ext/opus/gstopusenc.c   2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopusenc.c  2025-12-25 
15:44:26.000000000 +0100
@@ -480,53 +480,19 @@
     mapping[n] = n;
 }
 
-static int
-gst_opus_enc_find_channel_position (GstOpusEnc * enc, const GstAudioInfo * 
info,
-    GstAudioChannelPosition position)
-{
-  int n;
-  for (n = 0; n < enc->n_channels; ++n) {
-    if (GST_AUDIO_INFO_POSITION (info, n) == position) {
-      return n;
-    }
-  }
-  return -1;
-}
-
-static int
-gst_opus_enc_find_channel_position_in_vorbis_order (GstOpusEnc * enc,
-    GstAudioChannelPosition position)
-{
-  int c;
-
-  for (c = 0; c < enc->n_channels; ++c) {
-    if (gst_opus_channel_positions[enc->n_channels - 1][c] == position) {
-      GST_INFO_OBJECT (enc,
-          "Channel position %s maps to index %d in Vorbis order",
-          gst_opus_channel_names[position], c);
-      return c;
-    }
-  }
-  GST_WARNING_OBJECT (enc,
-      "Channel position %d is not representable in Vorbis order", position);
-  return -1;
-}
-
 static void
 gst_opus_enc_setup_channel_mappings (GstOpusEnc * enc,
     const GstAudioInfo * info)
 {
 #define MAPS(idx,pos) (GST_AUDIO_INFO_POSITION (info, (idx)) == 
GST_AUDIO_CHANNEL_POSITION_##pos)
 
-  int n;
-
   GST_DEBUG_OBJECT (enc, "Setting up channel mapping for %d channels",
       enc->n_channels);
 
   /* Start by setting up a default trivial mapping */
   enc->n_stereo_streams = 0;
-  gst_opus_enc_setup_trivial_mapping (enc, enc->encoding_channel_mapping);
-  gst_opus_enc_setup_trivial_mapping (enc, enc->decoding_channel_mapping);
+  enc->needs_reorder = FALSE;
+  gst_opus_enc_setup_trivial_mapping (enc, enc->channel_mapping);
 
   /* For one channel, use the basic RTP mapping */
   if (enc->n_channels == 1 && !enc->unpositioned) {
@@ -546,95 +512,45 @@
     return;
   }
 
-  /* For channels between 3 and 8, we use the Vorbis mapping if we can
-     find a permutation that matches it. Mono and stereo will have been taken
-     care of earlier, but this code also handles it. There are two mappings.
-     One maps the input channels to an ordering which has the natural pairs
-     first so they can benefit from the Opus stereo channel coupling, and the
-     other maps this ordering to the Vorbis ordering. */
+  /* For channels between 3 and 8, we use the Vorbis mapping if we can. */
   if (enc->n_channels >= 3 && enc->n_channels <= 8 && !enc->unpositioned) {
-    int c0, c1, c0v, c1v;
-    int mapped;
-    gboolean positions_done[256];
-    static const GstAudioChannelPosition pairs[][2] = {
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-      {GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER},
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER},
-      {GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-          GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
-    };
-    size_t pair;
-
-    GST_DEBUG_OBJECT (enc,
-        "In range for the Vorbis mapping, building channel mapping tables");
-
-    enc->n_stereo_streams = 0;
-    mapped = 0;
-    for (n = 0; n < 256; ++n)
-      positions_done[n] = FALSE;
-
-    /* First, find any natural pairs, and move them to the front */
-    for (pair = 0; pair < G_N_ELEMENTS (pairs); ++pair) {
-      GstAudioChannelPosition p0 = pairs[pair][0];
-      GstAudioChannelPosition p1 = pairs[pair][1];
-      c0 = gst_opus_enc_find_channel_position (enc, info, p0);
-      c1 = gst_opus_enc_find_channel_position (enc, info, p1);
-      if (c0 >= 0 && c1 >= 0) {
-        /* We found a natural pair */
-        GST_DEBUG_OBJECT (enc, "Natural pair '%s/%s' found at %d %d",
-            gst_opus_channel_names[p0], gst_opus_channel_names[p1], c0, c1);
-        /* Find where they map in Vorbis order */
-        c0v = gst_opus_enc_find_channel_position_in_vorbis_order (enc, p0);
-        c1v = gst_opus_enc_find_channel_position_in_vorbis_order (enc, p1);
-        if (c0v < 0 || c1v < 0)
-          goto unpositioned;
-
-        enc->encoding_channel_mapping[mapped] = c0;
-        enc->encoding_channel_mapping[mapped + 1] = c1;
-        enc->decoding_channel_mapping[c0v] = mapped;
-        enc->decoding_channel_mapping[c1v] = mapped + 1;
-        enc->n_stereo_streams++;
-        mapped += 2;
-        positions_done[p0] = positions_done[p1] = TRUE;
-      }
-    }
-
-    /* Now add all other input channels as mono streams */
-    for (n = 0; n < enc->n_channels; ++n) {
-      GstAudioChannelPosition position = GST_AUDIO_INFO_POSITION (info, n);
-
-      /* if we already mapped it while searching for pairs, nothing else
-         needs to be done */
-      if (!positions_done[position]) {
-        int cv;
-        GST_DEBUG_OBJECT (enc, "Channel position %d is not mapped yet, adding",
-            position);
-        cv = gst_opus_enc_find_channel_position_in_vorbis_order (enc, 
position);
-        if (cv < 0)
-          goto unpositioned;
-        enc->encoding_channel_mapping[mapped] = n;
-        enc->decoding_channel_mapping[cv] = mapped;
-        mapped++;
-      }
-    }
+    const GstAudioChannelPosition *opus_positions =
+        gst_opus_channel_positions[enc->n_channels - 1];
+    GstAudioChannelPosition gst_positions[8];
+
+    memcpy (gst_positions, opus_positions, sizeof (gst_positions));
+    gst_audio_channel_positions_to_valid_order (gst_positions, 
enc->n_channels);
+
+    if (memcmp (gst_positions, info->position,
+            enc->n_channels * sizeof (*gst_positions)) != 0)
+      goto unpositioned;
+
+    memcpy (enc->channel_mapping,
+        gst_opus_vorbis_channel_map[enc->n_channels - 1].mapping,
+        enc->n_channels);
+    enc->n_stereo_streams =
+        gst_opus_vorbis_channel_map[enc->n_channels - 1].n_coupled;
+
+    /* We always reorder our input to the Vorbis channel order. While the
+     * normal (non-surround) multistream encoder can do reordering itself:
+     *
+     *   * Only the surround encoder has additional surround support that
+     *     saves bandwidth,
+     *   * Various specs and implementations only assume the "default"
+     *     positions, and e.g. for the MPEG-TS mapping this has short forms
+     *     in the signalling
+     */
+    memcpy (enc->opus_pos, opus_positions, sizeof (enc->opus_pos));
+    enc->needs_reorder =
+        memcmp (opus_positions, gst_positions,
+        enc->n_channels * sizeof (*gst_positions)) != 0;
 
 #ifndef GST_DISABLE_GST_DEBUG
     GST_INFO_OBJECT (enc,
         "Mapping tables built: %d channels, %d stereo streams", 
enc->n_channels,
         enc->n_stereo_streams);
     gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), 
opusenc_debug,
-        "Encoding mapping table", enc->n_channels,
-        enc->encoding_channel_mapping);
-    gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), 
opusenc_debug,
-        "Decoding mapping table", enc->n_channels,
-        enc->decoding_channel_mapping);
+        "Mapping table", enc->n_channels, enc->channel_mapping);
 #endif
 
     enc->channel_mapping_family = 1;
@@ -651,8 +567,7 @@
   else
     GST_INFO_OBJECT (enc, "Unpositioned mapping, all channels mono");
 
-  gst_opus_enc_setup_trivial_mapping (enc, enc->encoding_channel_mapping);
-  gst_opus_enc_setup_trivial_mapping (enc, enc->decoding_channel_mapping);
+  gst_opus_enc_setup_trivial_mapping (enc, enc->channel_mapping);
   enc->channel_mapping_family = 255;
   enc->n_stereo_streams = 0;
 
@@ -678,9 +593,7 @@
               &stream_count, &coupled_count, channel_mapping)
           && stream_count + coupled_count == enc->n_channels) {
         enc->n_stereo_streams = coupled_count;
-        memcpy (enc->decoding_channel_mapping, channel_mapping,
-            sizeof (channel_mapping));
-        memcpy (enc->encoding_channel_mapping, channel_mapping,
+        memcpy (enc->channel_mapping, channel_mapping,
             sizeof (channel_mapping));
       }
 
@@ -696,9 +609,7 @@
       "Mapping tables built: %d channels, %d stereo streams", enc->n_channels,
       enc->n_stereo_streams);
   gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Encoding mapping table", enc->n_channels, 
enc->encoding_channel_mapping);
-  gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Decoding mapping table", enc->n_channels, 
enc->decoding_channel_mapping);
+      "Mapping table", enc->n_channels, enc->channel_mapping);
 #endif
 
 #undef MAPS
@@ -762,17 +673,36 @@
   GST_INFO_OBJECT (enc, "Mapping tables built: %d channels, %d stereo streams",
       enc->n_channels, enc->n_stereo_streams);
   gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Encoding mapping table", enc->n_channels, 
enc->encoding_channel_mapping);
-  gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Decoding mapping table", enc->n_channels, 
enc->decoding_channel_mapping);
+      "Mapping table", enc->n_channels, enc->channel_mapping);
 #endif
 
-  enc->state = opus_multistream_encoder_create (enc->sample_rate,
-      enc->n_channels, enc->n_channels - enc->n_stereo_streams,
-      enc->n_stereo_streams, enc->encoding_channel_mapping,
-      enc->audio_type, &error);
-  if (!enc->state || error != OPUS_OK)
-    goto encoder_creation_failed;
+#ifdef HAVE_LIBOPUS_1_1
+  if (enc->channel_mapping_family == 1) {
+    int streams, coupled_streams;
+    guint8 mapping[8];
+
+    enc->state = opus_multistream_surround_encoder_create (enc->sample_rate,
+        enc->n_channels, enc->channel_mapping_family,
+        &streams, &coupled_streams, mapping, enc->audio_type, &error);
+
+    if (!enc->state || error != OPUS_OK)
+      goto encoder_creation_failed;
+
+    /* We set all these values according to the Vorbis channel mapping family
+     * so this should really never fail */
+    if (streams != enc->n_channels - enc->n_stereo_streams ||
+        coupled_streams != enc->n_stereo_streams ||
+        memcmp (mapping, enc->channel_mapping, enc->n_channels) != 0)
+      goto encoder_creation_failed;
+  } else
+#endif
+  {
+    enc->state = opus_multistream_encoder_create (enc->sample_rate,
+        enc->n_channels, enc->n_channels - enc->n_stereo_streams,
+        enc->n_stereo_streams, enc->channel_mapping, enc->audio_type, &error);
+    if (!enc->state || error != OPUS_OK)
+      goto encoder_creation_failed;
+  }
 
   opus_multistream_encoder_ctl (enc->state, OPUS_SET_BITRATE (enc->bitrate), 
0);
   opus_multistream_encoder_ctl (enc->state, OPUS_SET_BANDWIDTH 
(enc->bandwidth),
@@ -802,7 +732,7 @@
   header = gst_codec_utils_opus_create_header (enc->sample_rate,
       enc->n_channels, enc->channel_mapping_family,
       enc->n_channels - enc->n_stereo_streams, enc->n_stereo_streams,
-      enc->decoding_channel_mapping, lookahead, 0);
+      enc->channel_mapping, lookahead, 0);
   tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc));
   if (!tags)
     tags = empty_tags = gst_tag_list_new_empty ();
@@ -1025,8 +955,13 @@
       memcpy (mdata, bdata, bsize);
       data = mdata;
     } else {
-      data = bdata;
-      size = bsize;
+      if (enc->needs_reorder) {
+        data = mdata = g_memdup2 (bdata, bsize);
+        size = bytes;
+      } else {
+        data = bdata;
+        size = bsize;
+      }
 
       /* Adjust for lookahead here */
       if (enc->pending_lookahead) {
@@ -1087,6 +1022,16 @@
         trim_end);
   }
 
+  if (enc->needs_reorder) {
+    const GstAudioInfo *info =
+        gst_audio_encoder_get_audio_info (GST_AUDIO_ENCODER (enc));
+
+    g_assert (mdata);
+    g_assert (info->channels == enc->n_channels);
+    gst_audio_reorder_channels (mdata, size, GST_AUDIO_FORMAT_S16,
+        enc->n_channels, info->position, enc->opus_pos);
+  }
+
   gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
 
   outsize =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/gstopusenc.h 
new/gst-plugins-base-1.26.10/ext/opus/gstopusenc.h
--- old/gst-plugins-base-1.26.9/ext/opus/gstopusenc.h   2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/gstopusenc.h  2025-12-25 
15:44:26.000000000 +0100
@@ -84,9 +84,10 @@
   guint16               lookahead, pending_lookahead;
 
   guint8                channel_mapping_family;
-  guint8                encoding_channel_mapping[256];
-  guint8                decoding_channel_mapping[256];
+  guint8                channel_mapping[256];
   guint8                n_stereo_streams;
+  GstAudioChannelPosition opus_pos[64];
+  gboolean              needs_reorder;
 };
 
 struct _GstOpusEncClass {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/ext/opus/meson.build 
new/gst-plugins-base-1.26.10/ext/opus/meson.build
--- old/gst-plugins-base-1.26.9/ext/opus/meson.build    2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/opus/meson.build   2025-12-25 
15:44:26.000000000 +0100
@@ -28,9 +28,14 @@
                       allow_fallback: true, default_options: ['docs=disabled'])
 
 if opus_dep.found()
+  opus_defines = []
+  if opus_dep.version().version_compare('>=1.1')
+    opus_defines += ['-DHAVE_LIBOPUS_1_1']
+  endif
+
   gstopus = library('gstopus',
     opus_sources,
-    c_args : gst_plugins_base_args,
+    c_args : gst_plugins_base_args + opus_defines,
     link_args : noseh_link_args,
     include_directories: [configinc, libsinc],
     dependencies : [pbutils_dep, tag_dep, audio_dep, gst_dep, gst_base_dep, 
opus_dep, libm],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/ext/pango/gstbasetextoverlay.c 
new/gst-plugins-base-1.26.10/ext/pango/gstbasetextoverlay.c
--- old/gst-plugins-base-1.26.9/ext/pango/gstbasetextoverlay.c  2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/ext/pango/gstbasetextoverlay.c 2025-12-25 
15:44:26.000000000 +0100
@@ -1042,8 +1042,18 @@
 gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay, GstCaps * caps)
 {
   GstVideoInfo info;
+  GstCaps *prev_caps;
   gboolean ret = FALSE;
 
+  prev_caps = gst_pad_get_current_caps (overlay->video_sinkpad);
+  if (prev_caps && gst_caps_is_equal (prev_caps, caps)) {
+    GST_DEBUG_OBJECT (overlay, "Caps didn't change, ignoring");
+    gst_clear_caps (&prev_caps);
+    return TRUE;
+  }
+
+  gst_clear_caps (&prev_caps);
+
   if (!gst_video_info_from_caps (&info, caps))
     goto invalid_caps;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/gst/playback/gstparsebin.c 
new/gst-plugins-base-1.26.10/gst/playback/gstparsebin.c
--- old/gst-plugins-base-1.26.9/gst/playback/gstparsebin.c      2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst/playback/gstparsebin.c     2025-12-25 
15:44:26.000000000 +0100
@@ -4072,11 +4072,12 @@
 gst_parse_pad_update_caps (GstParsePad * parsepad, GstCaps * caps)
 {
   if (caps && parsepad->active_stream) {
-    GST_DEBUG_OBJECT (parsepad, "Storing caps %" GST_PTR_FORMAT
-        " on stream %" GST_PTR_FORMAT, caps, parsepad->active_stream);
-
-    if (gst_caps_is_fixed (caps))
+    if (gst_caps_is_fixed (caps)) {
+      GST_DEBUG_OBJECT (parsepad, "Storing caps %" GST_PTR_FORMAT
+          " on stream %" GST_PTR_FORMAT, caps, parsepad->active_stream);
       gst_stream_set_caps (parsepad->active_stream, caps);
+    }
+
     /* intuit a type */
     if (gst_stream_get_stream_type (parsepad->active_stream) ==
         GST_STREAM_TYPE_UNKNOWN) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/gst/playback/gstplaybin3.c 
new/gst-plugins-base-1.26.10/gst/playback/gstplaybin3.c
--- old/gst-plugins-base-1.26.9/gst/playback/gstplaybin3.c      2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst/playback/gstplaybin3.c     2025-12-25 
15:44:26.000000000 +0100
@@ -1859,9 +1859,11 @@
 
     GST_PLAY_BIN3_UNLOCK (playbin);
 
-    /* Send this event directly to uridecodebin, so it works even
-     * if uridecodebin didn't add any pads yet */
-    res = gst_element_send_event (playbin->uridecodebin, event);
+    /* Send this event directly to collection_source, so it works even
+     * if collection_source didn't add any pads yet */
+    res =
+        gst_element_send_event ((GstElement *) playbin->collection_source,
+        event);
 
     return res;
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst/videotestsrc/gstvideotestsrc.c 
new/gst-plugins-base-1.26.10/gst/videotestsrc/gstvideotestsrc.c
--- old/gst-plugins-base-1.26.9/gst/videotestsrc/gstvideotestsrc.c      
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst/videotestsrc/gstvideotestsrc.c     
2025-12-25 15:44:26.000000000 +0100
@@ -994,6 +994,11 @@
   if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
     gst_buffer_pool_config_add_option (config,
         GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+    if (gst_buffer_pool_has_option (pool,
+            GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT))
+      gst_buffer_pool_config_add_option (config,
+          GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
   }
   gst_buffer_pool_set_config (pool, config);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/allocators/gstfdmemory.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/allocators/gstfdmemory.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/allocators/gstfdmemory.c   
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/allocators/gstfdmemory.c  
2025-12-25 15:44:26.000000000 +0100
@@ -194,7 +194,7 @@
     parent = (GstMemory *) mem;
 
   if (size == -1)
-    size = gmem->maxsize - offset;
+    size = gmem->size - offset;
 
   sub = g_new0 (GstFdMemory, 1);
   /* the shared memory is always readonly */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m 
new/gst-plugins-base-1.26.10/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
--- old/gst-plugins-base-1.26.9/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m       
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m      
2025-12-25 15:44:26.000000000 +0100
@@ -257,6 +257,13 @@
 
   [view removeFromSuperview];
 
+  if (!window_cocoa->priv->external_view) {
+    GstGLNSWindow *internal_win_id =
+        (__bridge GstGLNSWindow *) window_cocoa->priv->internal_win_id;
+
+    [internal_win_id close];
+  }
+
   CFBridgingRelease (window_cocoa->priv->internal_win_id);
   CFBridgingRelease (window_cocoa->priv->internal_view);
   window_cocoa->priv->internal_win_id = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglutils.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/gl/gstglutils.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/gl/gstglutils.c    2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/gl/gstglutils.c   2025-12-25 
15:44:26.000000000 +0100
@@ -626,17 +626,6 @@
   const GstVideoFormatInfo *finfo = info->finfo;
   gint comp[GST_VIDEO_MAX_COMPONENTS];
   gint padded_height;
-  gsize plane_size;
-
-  gst_video_format_info_component (info->finfo, plane, comp);
-
-  padded_height = info->height;
-
-  if (align)
-    padded_height += align->padding_top + align->padding_bottom;
-
-  padded_height =
-      GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo, comp[0], padded_height);
 
   if (GST_VIDEO_FORMAT_INFO_IS_TILED (finfo)) {
     gsize stride;
@@ -648,12 +637,23 @@
     y_tiles = GST_VIDEO_TILE_Y_TILES (stride);
     tile_size = GST_VIDEO_FORMAT_INFO_TILE_SIZE (info->finfo, plane);
 
-    plane_size = x_tiles * y_tiles * tile_size;
-  } else {
-    plane_size = GST_VIDEO_INFO_PLANE_STRIDE (info, plane) * padded_height;
+    return x_tiles * y_tiles * tile_size;
   }
 
-  return plane_size;
+  gst_video_format_info_component (info->finfo, plane, comp);
+
+  padded_height = info->height;
+  if (align)
+    padded_height += align->padding_top + align->padding_bottom;
+
+  /* Round according to the UV vertical subsampling */
+  padded_height =
+      GST_ROUND_UP_N (padded_height, 1 << 
info->finfo->h_sub[GST_VIDEO_COMP_U]);
+
+  padded_height =
+      GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo, comp[0], padded_height);
+
+  return GST_VIDEO_INFO_PLANE_STRIDE (info, plane) * padded_height;
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/codec-utils.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/pbutils/codec-utils.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/pbutils/codec-utils.c      
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/pbutils/codec-utils.c     
2025-12-25 15:44:26.000000000 +0100
@@ -3541,14 +3541,26 @@
     } else {
       mime_codec = g_strdup ("mp4a.40");
     }
+  } else if (g_strcmp0 (media_type, "audio/x-ac3") == 0) {
+    mime_codec = g_strdup ("ac-3");
+  } else if (g_strcmp0 (media_type, "audio/x-eac3") == 0) {
+    mime_codec = g_strdup ("ec-3");
+  } else if (g_strcmp0 (media_type, "audio/x-ac4") == 0) {
+    mime_codec = g_strdup ("ac-4");
   } else if (g_strcmp0 (media_type, "audio/x-opus") == 0) {
     mime_codec = g_strdup ("opus");
+  } else if (g_strcmp0 (media_type, "audio/x-flac") == 0) {
+    mime_codec = g_strdup ("flac");
   } else if (g_strcmp0 (media_type, "audio/x-mulaw") == 0) {
     mime_codec = g_strdup ("ulaw");
   } else if (g_strcmp0 (media_type, "audio/x-adpcm") == 0) {
     if (g_strcmp0 (gst_structure_get_string (caps_st, "layout"), "g726") == 0) 
{
       mime_codec = g_strdup ("g726");
     }
+  } else if (g_strcmp0 (media_type, "application/ttml+xml") == 0) {
+    mime_codec = g_strdup ("stpp");
+  } else if (g_strcmp0 (media_type, "application/x-subtitle-vtt") == 0) {
+    mime_codec = g_strdup ("wvtt");
   }
 
 done:
@@ -3713,6 +3725,9 @@
       /* ETSI TS 102 366 v1.4.1 - Digital Audio Compression (AC-3, Enhanced 
AC-3) Standard, Annex F */
       caps = gst_caps_new_empty_simple ("audio/x-eac3");
       break;
+    case GST_MAKE_FOURCC ('a', 'c', '-', '4'):
+      caps = gst_caps_new_empty_simple ("audio/x-ac4");
+      break;
     case GST_MAKE_FOURCC ('s', 't', 'p', 'p'):
       /* IMSC1-conformant TTM XML */
       caps = gst_caps_new_empty_simple ("application/ttml+xml");
@@ -3739,6 +3754,9 @@
       /* Opus */
       caps = gst_caps_new_empty_simple ("audio/x-opus");
       break;
+    case GST_MAKE_FOURCC ('f', 'l', 'a', 'c'):
+      caps = gst_caps_new_empty_simple ("audio/x-flac");
+      break;
     case GST_MAKE_FOURCC ('u', 'l', 'a', 'w'):
       /* ulaw */
       caps = gst_caps_new_empty_simple ("audio/x-mulaw");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/tag/gsttagdemux.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/tag/gsttagdemux.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/tag/gsttagdemux.c  2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/tag/gsttagdemux.c 2025-12-25 
15:44:26.000000000 +0100
@@ -1001,6 +1001,7 @@
     }
     upstream = gst_event_new_seek (rate, format, flags,
         start_type, start, stop_type, stop);
+    gst_event_set_seqnum (upstream, gst_event_get_seqnum (event));
     res = gst_pad_push_event (tagdemux->priv->sinkpad, upstream);
   } else if (format == GST_FORMAT_TIME &&
       tagdemux->priv->state == GST_TAG_DEMUX_STREAMING &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoaggregator.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/video/gstvideoaggregator.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideoaggregator.c 
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/video/gstvideoaggregator.c        
2025-12-25 15:44:26.000000000 +0100
@@ -2798,10 +2798,17 @@
 
     /* If change are not acceptable, fallback to generic pool */
     if (!gst_buffer_pool_config_validate_params (config, caps, size, min, 
max)) {
+      gst_structure_free (config);
+      gst_clear_object (&pool);
+    } else if (!gst_buffer_pool_set_config (pool, config)) {
+      gst_clear_object (&pool);
+    }
+
+    if (!pool) {
       GST_DEBUG_OBJECT (agg, "unsupported pool, making new pool");
 
-      gst_object_unref (pool);
       pool = gst_video_buffer_pool_new ();
+      config = gst_buffer_pool_get_config (pool);
       gst_buffer_pool_config_set_params (config, caps, size, min, max);
       gst_buffer_pool_config_set_allocator (config, allocator, &params);
 
@@ -2809,10 +2816,10 @@
         gst_buffer_pool_config_add_option (config,
             GST_BUFFER_POOL_OPTION_VIDEO_META);
       }
-    }
 
-    if (!gst_buffer_pool_set_config (pool, config))
-      goto config_failed;
+      if (!gst_buffer_pool_set_config (pool, config))
+        goto config_failed;
+    }
   }
 
   if (update)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideodecoder.c 
new/gst-plugins-base-1.26.10/gst-libs/gst/video/gstvideodecoder.c
--- old/gst-plugins-base-1.26.9/gst-libs/gst/video/gstvideodecoder.c    
2025-12-01 18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-libs/gst/video/gstvideodecoder.c   
2025-12-25 15:44:26.000000000 +0100
@@ -4277,16 +4277,23 @@
     /* If change are not acceptable, fallback to generic pool */
     if (!gst_buffer_pool_config_validate_params (config, outcaps, size, min,
             max)) {
-      GST_DEBUG_OBJECT (decoder, "unsupported pool, making new pool");
+      gst_structure_free (config);
+      gst_clear_object (&pool);
+    } else if (!gst_buffer_pool_set_config (pool, config)) {
+      gst_clear_object (&pool);
+    }
 
-      gst_object_unref (pool);
+    if (!pool) {
+      GST_DEBUG_OBJECT (decoder, "unsupported pool, making new pool");
       pool = gst_video_buffer_pool_new ();
+
+      config = gst_buffer_pool_get_config (pool);
       gst_buffer_pool_config_set_params (config, outcaps, size, min, max);
       gst_buffer_pool_config_set_allocator (config, allocator, &params);
-    }
 
-    if (!gst_buffer_pool_set_config (pool, config))
-      goto config_failed;
+      if (!gst_buffer_pool_set_config (pool, config))
+        goto config_failed;
+    }
   }
 
   if (update_allocator)
@@ -4389,9 +4396,11 @@
   }
   decoder->priv->pool = pool;
 
-  /* and activate */
-  GST_DEBUG_OBJECT (decoder, "activate pool %" GST_PTR_FORMAT, pool);
-  gst_buffer_pool_set_active (pool, TRUE);
+  if (pool) {
+    /* and activate */
+    GST_DEBUG_OBJECT (decoder, "activate pool %" GST_PTR_FORMAT, pool);
+    gst_buffer_pool_set_active (pool, TRUE);
+  }
 
 done:
   if (query)
@@ -4606,6 +4615,9 @@
     }
   }
 
+  if (!decoder->priv->pool)
+    goto fallback;
+
   flow = gst_buffer_pool_acquire_buffer (decoder->priv->pool, &buffer, NULL);
 
   if (flow != GST_FLOW_OK) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/gst-plugins-base.doap 
new/gst-plugins-base-1.26.10/gst-plugins-base.doap
--- old/gst-plugins-base-1.26.9/gst-plugins-base.doap   2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-plugins-base-1.26.10/gst-plugins-base.doap  2025-12-25 
15:44:26.000000000 +0100
@@ -36,6 +36,16 @@
 
  <release>
   <Version>
+   <revision>1.26.10</revision>
+   <branch>1.26</branch>
+   <name></name>
+   <created>2025-12-25</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.26.10.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.26.9</revision>
    <branch>1.26</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-plugins-base-1.26.9/meson.build 
new/gst-plugins-base-1.26.10/meson.build
--- old/gst-plugins-base-1.26.9/meson.build     2025-12-01 18:27:07.000000000 
+0100
+++ new/gst-plugins-base-1.26.10/meson.build    2025-12-25 15:44:26.000000000 
+0100
@@ -1,5 +1,5 @@
 project('gst-plugins-base', 'c',
-  version : '1.26.9',
+  version : '1.26.10',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])

++++++ gst-plugins-base.obsinfo ++++++
--- /var/tmp/diff_new_pack.836AKY/_old  2025-12-31 10:46:32.856323407 +0100
+++ /var/tmp/diff_new_pack.836AKY/_new  2025-12-31 10:46:32.864323735 +0100
@@ -1,5 +1,5 @@
 name: gst-plugins-base
-version: 1.26.9
-mtime: 1764610027
-commit: f313fae193089408e278c0dd3450145e5a12307b
+version: 1.26.10
+mtime: 1766673866
+commit: bfdc62185e243d3633aa916187a566d03a587792
 

Reply via email to