Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-plugins-libav for 
openSUSE:Factory checked in at 2025-12-31 10:46:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-libav (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-plugins-libav.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-plugins-libav"

Wed Dec 31 10:46:33 2025 rev:67 rq:1324800 version:1.26.10

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-plugins-libav/gstreamer-plugins-libav.changes
  2025-12-10 15:30:07.873235177 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-plugins-libav.new.1928/gstreamer-plugins-libav.changes
        2025-12-31 10:46:56.757301467 +0100
@@ -1,0 +2,9 @@
+Tue Dec 30 09:44:30 UTC 2025 - Bjørn Lie <[email protected]>
+
+- Update to version 1.26.10:
+  + 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
+
+-------------------------------------------------------------------

Old:
----
  gst-libav-1.26.9.obscpio

New:
----
  gst-libav-1.26.10.obscpio

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

Other differences:
------------------
++++++ gstreamer-plugins-libav.spec ++++++
--- /var/tmp/diff_new_pack.obxM68/_old  2025-12-31 10:46:57.561334369 +0100
+++ /var/tmp/diff_new_pack.obxM68/_new  2025-12-31 10:46:57.561334369 +0100
@@ -19,7 +19,7 @@
 %define gst_branch 1.0
 
 Name:           gstreamer-plugins-libav
-Version:        1.26.9
+Version:        1.26.10
 Release:        0
 Summary:        A ffmpeg/libav plugin for GStreamer
 License:        LGPL-2.1-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.obxM68/_old  2025-12-31 10:46:57.601336006 +0100
+++ /var/tmp/diff_new_pack.obxM68/_new  2025-12-31 10:46:57.605336170 +0100
@@ -5,7 +5,7 @@
     <param 
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
     <param name="subdir">subprojects/gst-libav</param>
     <param name="filename">gst-libav</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-libav-1.26.9.obscpio -> gst-libav-1.26.10.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-libav-1.26.9/NEWS new/gst-libav-1.26.10/NEWS
--- old/gst-libav-1.26.9/NEWS   2025-12-01 18:27:07.000000000 +0100
+++ new/gst-libav-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-libav-1.26.9/RELEASE 
new/gst-libav-1.26.10/RELEASE
--- old/gst-libav-1.26.9/RELEASE        2025-12-01 18:27:07.000000000 +0100
+++ new/gst-libav-1.26.10/RELEASE       2025-12-25 15:44:26.000000000 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-libav 1.26.9.
+This is GStreamer gst-libav 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-libav-1.26.9/ext/libav/gstavviddec.c 
new/gst-libav-1.26.10/ext/libav/gstavviddec.c
--- old/gst-libav-1.26.9/ext/libav/gstavviddec.c        2025-12-01 
18:27:07.000000000 +0100
+++ new/gst-libav-1.26.10/ext/libav/gstavviddec.c       2025-12-25 
15:44:26.000000000 +0100
@@ -840,11 +840,9 @@
  * support video meta and video alignment */
 static void
 gst_ffmpegvideodec_prepare_dr_pool (GstFFMpegVidDec * ffmpegdec,
-    GstBufferPool * pool, GstVideoInfo * info, GstStructure * config)
+    GstVideoInfo * info, GstAllocationParams * params,
+    GstVideoAlignment * align)
 {
-  GstAllocationParams params;
-  GstVideoAlignment align;
-  GstAllocator *allocator = NULL;
   gint width, height;
   gint linesize_align[AV_NUM_DATA_POINTERS];
   gint i;
@@ -857,18 +855,14 @@
   avcodec_align_dimensions2 (ffmpegdec->context, &width, &height,
       linesize_align);
 
-  align.padding_top = 0;
-  align.padding_left = 0;
-  align.padding_right = width - GST_VIDEO_INFO_WIDTH (info);
-  align.padding_bottom = height - GST_VIDEO_INFO_HEIGHT (info);
-
+  align->padding_right =
+      MAX (align->padding_right, width - GST_VIDEO_INFO_WIDTH (info));
   /* add extra padding to match libav buffer allocation sizes */
-  align.padding_bottom++;
-
-  gst_buffer_pool_config_get_allocator (config, &allocator, &params);
+  align->padding_bottom =
+      MAX (align->padding_bottom, height - GST_VIDEO_INFO_HEIGHT (info) + 1);
 
   max_align = DEFAULT_STRIDE_ALIGN;
-  max_align |= params.align;
+  max_align |= params->align;
 
   for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
     if (linesize_align[i] > 0)
@@ -876,23 +870,19 @@
   }
 
   for (i = 0; i < GST_VIDEO_MAX_PLANES; i++)
-    align.stride_align[i] = max_align;
+    align->stride_align[i] |= max_align;
 
-  params.align = max_align;
-
-  gst_buffer_pool_config_set_allocator (config, allocator, &params);
+  params->align = max_align;
 
   GST_DEBUG_OBJECT (ffmpegdec, "aligned dimension %dx%d -> %dx%d "
       "padding t:%u l:%u r:%u b:%u, stride_align %d:%d:%d:%d",
       GST_VIDEO_INFO_WIDTH (info),
-      GST_VIDEO_INFO_HEIGHT (info), width, height, align.padding_top,
-      align.padding_left, align.padding_right, align.padding_bottom,
-      align.stride_align[0], align.stride_align[1], align.stride_align[2],
-      align.stride_align[3]);
+      GST_VIDEO_INFO_HEIGHT (info), width, height, align->padding_top,
+      align->padding_left, align->padding_right, align->padding_bottom,
+      align->stride_align[0], align->stride_align[1], align->stride_align[2],
+      align->stride_align[3]);
 
-  gst_buffer_pool_config_add_option (config,
-      GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
-  gst_buffer_pool_config_set_video_alignment (config, &align);
+  gst_video_info_align (info, align);
 }
 
 static void
@@ -900,6 +890,7 @@
     AVFrame * picture, GstVideoInterlaceMode interlace_mode)
 {
   GstAllocationParams params = DEFAULT_ALLOC_PARAM;
+  GstVideoAlignment align;
   GstVideoInfo info;
   GstVideoFormat format;
   GstCaps *caps;
@@ -949,12 +940,16 @@
   config = gst_buffer_pool_get_config (ffmpegdec->internal_pool);
 
   caps = gst_video_info_to_caps (&info);
+
+  gst_video_alignment_reset (&align);
+  gst_ffmpegvideodec_prepare_dr_pool (ffmpegdec, &info, &params, &align);
   gst_buffer_pool_config_set_params (config, caps, info.size, 2, 0);
   gst_buffer_pool_config_set_allocator (config, NULL, &params);
+  gst_buffer_pool_config_set_video_alignment (config, &align);
   gst_buffer_pool_config_add_option (config, 
GST_BUFFER_POOL_OPTION_VIDEO_META);
+  gst_buffer_pool_config_add_option (config,
+      GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
 
-  gst_ffmpegvideodec_prepare_dr_pool (ffmpegdec,
-      ffmpegdec->internal_pool, &info, config);
   /* generic video pool never fails */
   gst_buffer_pool_set_config (ffmpegdec->internal_pool, config);
   gst_caps_unref (caps);
@@ -2476,151 +2471,258 @@
 }
 
 static gboolean
+gst_ffmpegviddec_try_pool (GstFFMpegVidDec * ffmpegdec, GstCaps * caps,
+    const GstVideoInfo * info, GstAllocator * allocator,
+    const GstAllocationParams * params, GstBufferPool * pool, guint * size,
+    guint min, guint max, gboolean have_videometa,
+    GstVideoAlignment * downstream_align)
+{
+  GstStructure *config;
+  gboolean have_alignment;
+
+  config = gst_buffer_pool_get_config (pool);
+
+  gst_buffer_pool_config_set_allocator (config, allocator, params);
+  gst_buffer_pool_config_set_params (config, caps, *size, min, max);
+
+  have_videometa = have_videometa &&
+      gst_buffer_pool_has_option (pool, GST_BUFFER_POOL_OPTION_VIDEO_META);
+  if (have_videometa)
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+  have_alignment =
+      gst_buffer_pool_has_option (pool, 
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+  if (have_videometa && have_alignment) {
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+    gst_buffer_pool_config_set_video_alignment (config, downstream_align);
+  }
+
+  /* Check if we can directly render to pool allocated buffers */
+  if (have_videometa && have_alignment
+      && gst_ffmpegviddec_can_direct_render (ffmpegdec)) {
+    gboolean working_pool;
+    GstStructure *config_copy = gst_structure_copy (config);
+    GstVideoInfo aligned_info = *info;
+    GstVideoAlignment aligned_align = *downstream_align;
+    GstAllocationParams aligned_params = *params;
+    guint aligned_size;
+
+    gst_ffmpegvideodec_prepare_dr_pool (ffmpegdec, &aligned_info,
+        &aligned_params, &aligned_align);
+    aligned_size = MAX (*size, aligned_info.size);
+
+    gst_buffer_pool_config_set_allocator (config_copy, allocator,
+        &aligned_params);
+    gst_buffer_pool_config_set_params (config_copy, caps, aligned_size, min,
+        max);
+    gst_buffer_pool_config_add_option (config_copy,
+        GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+    gst_buffer_pool_config_set_video_alignment (config_copy, &aligned_align);
+
+    working_pool = TRUE;
+    if (!gst_buffer_pool_set_config (pool, config_copy)) {
+      config_copy = gst_buffer_pool_get_config (pool);
+
+      if (!gst_buffer_pool_config_validate_params (config_copy, caps,
+              aligned_size, min, max)) {
+        gst_structure_free (config_copy);
+        working_pool = FALSE;
+      } else if (!gst_buffer_pool_set_config (pool, config_copy)) {
+        working_pool = FALSE;
+      }
+    }
+
+    if (working_pool) {
+      GstFlowReturn ret;
+      GstBuffer *tmp;
+
+      if (gst_buffer_pool_set_active (pool, TRUE)) {
+        ret = gst_buffer_pool_acquire_buffer (pool, &tmp, NULL);
+        if (ret == GST_FLOW_OK) {
+          GstVideoMeta *vmeta = gst_buffer_get_video_meta (tmp);
+          gboolean same_stride = TRUE;
+          guint i;
+
+          for (i = 0; i < vmeta->n_planes; i++) {
+            if (vmeta->stride[i] != ffmpegdec->stride[i]) {
+              same_stride = FALSE;
+              break;
+            }
+          }
+
+          gst_buffer_unref (tmp);
+
+          if (same_stride) {
+            GST_DEBUG_OBJECT (ffmpegdec, "Enabling direct rendering");
+            gst_structure_free (config);
+            if (ffmpegdec->internal_pool)
+              gst_object_unref (ffmpegdec->internal_pool);
+            ffmpegdec->internal_pool = gst_object_ref (pool);
+            ffmpegdec->pool_width = GST_VIDEO_INFO_WIDTH (&aligned_info);
+            ffmpegdec->pool_height = MAX (GST_VIDEO_INFO_HEIGHT 
(&aligned_info),
+                ffmpegdec->context->coded_height);
+            ffmpegdec->pool_info = aligned_info;
+            *size = aligned_size;
+            return TRUE;
+          } else {
+            GST_DEBUG_OBJECT (ffmpegdec,
+                "Can't enable direct rendering because of stride mismatch");
+          }
+        }
+
+        gst_buffer_pool_set_active (pool, FALSE);
+      }
+    }
+  }
+  // Otherwise at least try making use of this pool
+  if (!gst_buffer_pool_set_config (pool, config)) {
+    config = gst_buffer_pool_get_config (pool);
+
+    if (!gst_buffer_pool_config_validate_params (config, caps, *size, min, 
max)) {
+      gst_structure_free (config);
+      return FALSE;
+    } else if (!gst_buffer_pool_set_config (pool, config)) {
+      return FALSE;
+    }
+  }
+
+  return TRUE;
+}
+
+static gboolean
 gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * 
query)
 {
   GstFFMpegVidDec *ffmpegdec = GST_FFMPEGVIDDEC (decoder);
   GstVideoCodecState *state;
-  GstBufferPool *pool;
+  GstBufferPool *pool = NULL;
   guint size, min, max;
-  GstStructure *config;
-  gboolean have_pool, have_videometa, have_alignment, update_pool = FALSE;
+  gboolean have_videometa;
+  gboolean update_pool, update_allocator;
+  guint videometa_idx;
   GstAllocator *allocator = NULL;
   GstAllocationParams params = DEFAULT_ALLOC_PARAM;
-
-  have_pool = (gst_query_get_n_allocation_pools (query) != 0);
-
-  if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
-          query))
-    return FALSE;
+  GstVideoAlignment downstream_align;
+  const GstVideoInfo *info;
+  guint n_pools;
 
   state = gst_video_decoder_get_output_state (decoder);
+  info = &state->info;
+  size = info->size;
 
   if (gst_query_get_n_allocation_params (query) > 0) {
     gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
     params.align = MAX (params.align, DEFAULT_STRIDE_ALIGN);
+    update_allocator = TRUE;
   } else {
-    gst_query_add_allocation_param (query, allocator, &params);
+    allocator = NULL;
+    update_allocator = FALSE;
   }
 
-  gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+  have_videometa =
+      gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE,
+      &videometa_idx);
+  gst_video_alignment_reset (&downstream_align);
+  if (have_videometa) {
+    const GstStructure *params;
 
-  /* Don't use pool that can't grow, as we don't know how many buffer we'll
-   * need, otherwise we may stall */
-  if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
-    gst_object_unref (pool);
-    pool = gst_video_buffer_pool_new ();
-    max = 0;
-    update_pool = TRUE;
-    have_pool = FALSE;
-
-    /* if there is an allocator, also drop it, as it might be the reason we
-     * have this limit. Default will be used */
-    if (allocator) {
-      gst_object_unref (allocator);
-      allocator = NULL;
+    gst_query_parse_nth_allocation_meta (query, videometa_idx, &params);
+
+    if (params && gst_structure_has_name (params, "video-meta")) {
+      gst_buffer_pool_config_get_video_alignment (params, &downstream_align);
     }
   }
 
-  config = gst_buffer_pool_get_config (pool);
-  gst_buffer_pool_config_set_params (config, state->caps, size, min, max);
-  gst_buffer_pool_config_set_allocator (config, allocator, &params);
-
-  have_videometa =
-      gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
+  n_pools = gst_query_get_n_allocation_pools (query);
+  update_pool = n_pools != 0;
 
-  if (have_videometa)
-    gst_buffer_pool_config_add_option (config,
-        GST_BUFFER_POOL_OPTION_VIDEO_META);
+  for (guint i = 0; i < n_pools; i++) {
+    gst_query_parse_nth_allocation_pool (query, i, &pool, &size, &min, &max);
 
-  have_alignment =
-      gst_buffer_pool_has_option (pool, 
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
-
-  /* If we have videometa, we never have to copy */
-  if (have_videometa && have_pool && have_alignment &&
-      gst_ffmpegviddec_can_direct_render (ffmpegdec)) {
-    GstStructure *config_copy = gst_structure_copy (config);
-
-    gst_ffmpegvideodec_prepare_dr_pool (ffmpegdec, pool, &state->info,
-        config_copy);
+    /* Don't use pool that can't grow, as we don't know how many buffer we'll
+     * need, otherwise we may stall */
+    if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
+      max = 0;
+      gst_clear_object (&pool);
+      /* if there is an allocator, also drop it, as it might be the reason we
+       * have this limit. Default will be used */
+      gst_clear_object (&allocator);
+      continue;
+    }
 
-    /* FIXME validate and retry */
-    if (gst_buffer_pool_set_config (pool, config_copy)) {
-      GstFlowReturn ret;
-      GstBuffer *tmp;
+    if (!pool)
+      continue;
 
-      gst_buffer_pool_set_active (pool, TRUE);
-      ret = gst_buffer_pool_acquire_buffer (pool, &tmp, NULL);
-      if (ret == GST_FLOW_OK) {
-        GstVideoMeta *vmeta = gst_buffer_get_video_meta (tmp);
-        gboolean same_stride = TRUE;
-        guint i;
-
-        for (i = 0; i < vmeta->n_planes; i++) {
-          if (vmeta->stride[i] != ffmpegdec->stride[i]) {
-            same_stride = FALSE;
-            break;
-          }
-        }
+    size = MAX (size, info->size);
 
-        gst_buffer_unref (tmp);
+    GST_DEBUG_OBJECT (ffmpegdec,
+        "Trying pool %" GST_PTR_FORMAT " and allocator %" GST_PTR_FORMAT, pool,
+        allocator);
+    if (gst_ffmpegviddec_try_pool (ffmpegdec, state->caps, info, allocator,
+            &params, pool, &size, min, max, have_videometa, &downstream_align))
+      break;
 
-        if (same_stride) {
-          if (ffmpegdec->internal_pool)
-            gst_object_unref (ffmpegdec->internal_pool);
-          ffmpegdec->internal_pool = gst_object_ref (pool);
-          ffmpegdec->pool_width = GST_VIDEO_INFO_WIDTH (&state->info);
-          ffmpegdec->pool_height =
-              MAX (GST_VIDEO_INFO_HEIGHT (&state->info),
-              ffmpegdec->context->coded_height);
-          ffmpegdec->pool_info = state->info;
-          gst_structure_free (config);
-          goto done;
-        }
-      }
-    }
+    // Try next pool
+    gst_clear_object (&pool);
   }
 
-  if (have_videometa && ffmpegdec->internal_pool
+  // If none of the pools worked, continue using the internal pool if it's 
compatible
+  if (!pool && have_videometa && ffmpegdec->internal_pool
       && gst_ffmpeg_pixfmt_to_videoformat (ffmpegdec->pool_format) ==
       GST_VIDEO_INFO_FORMAT (&state->info)
       && ffmpegdec->pool_width == state->info.width
       && ffmpegdec->pool_height == state->info.height) {
-    update_pool = TRUE;
-    gst_object_unref (pool);
+    GST_DEBUG_OBJECT (ffmpegdec, "Continuing to use internal pool");
     pool = gst_object_ref (ffmpegdec->internal_pool);
-    gst_structure_free (config);
-    goto done;
   }
+  // If none of the pools were usable and also the internal pool couldn't be
+  // used, try to create a fallback pool here.
+  if (!pool) {
+    min = max = 0;
+
+    // Take min/max/size requirements from the query if available
+    if (n_pools > 0)
+      gst_query_parse_nth_allocation_pool (query, 0, NULL, &size, &min, &max);
+
+    if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
+      max = 0;
+      /* if there is an allocator, also drop it, as it might be the reason we
+       * have this limit. Default will be used */
+      gst_clear_object (&allocator);
+    }
 
-  /* configure */
-  if (!gst_buffer_pool_set_config (pool, config)) {
-    gboolean working_pool = FALSE;
-    config = gst_buffer_pool_get_config (pool);
+    size = MAX (size, info->size);
 
-    if (gst_buffer_pool_config_validate_params (config, state->caps, size, min,
-            max)) {
-      working_pool = gst_buffer_pool_set_config (pool, config);
-    } else {
-      gst_structure_free (config);
-    }
+    pool = gst_video_buffer_pool_new ();
 
-    if (!working_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, state->caps, size, min, max);
-      gst_buffer_pool_config_set_allocator (config, NULL, &params);
-      gst_buffer_pool_set_config (pool, config);
-      update_pool = TRUE;
+    GST_DEBUG_OBJECT (ffmpegdec,
+        "Trying pool %" GST_PTR_FORMAT " and allocator %" GST_PTR_FORMAT, pool,
+        allocator);
+    if (!gst_ffmpegviddec_try_pool (ffmpegdec, state->caps, info, allocator,
+            &params, pool, &size, min, max, have_videometa,
+            &downstream_align)) {
+      gst_clear_object (&pool);
     }
   }
 
-done:
+  GST_DEBUG_OBJECT (ffmpegdec,
+      "Using pool %" GST_PTR_FORMAT " and allocator %" GST_PTR_FORMAT, pool,
+      allocator);
+
   /* and store */
   if (update_pool)
     gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+  else
+    gst_query_add_allocation_pool (query, pool, size, min, max);
 
-  gst_object_unref (pool);
+  if (update_allocator)
+    gst_query_set_nth_allocation_param (query, 0, allocator, &params);
+  else
+    gst_query_add_allocation_param (query, allocator, &params);
+
+  if (pool)
+    gst_object_unref (pool);
   if (allocator)
     gst_object_unref (allocator);
   gst_video_codec_state_unref (state);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-libav-1.26.9/gst-libav.doap 
new/gst-libav-1.26.10/gst-libav.doap
--- old/gst-libav-1.26.9/gst-libav.doap 2025-12-01 18:27:07.000000000 +0100
+++ new/gst-libav-1.26.10/gst-libav.doap        2025-12-25 15:44:26.000000000 
+0100
@@ -34,6 +34,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-libav/gst-libav-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-libav-1.26.9/meson.build 
new/gst-libav-1.26.10/meson.build
--- old/gst-libav-1.26.9/meson.build    2025-12-01 18:27:07.000000000 +0100
+++ new/gst-libav-1.26.10/meson.build   2025-12-25 15:44:26.000000000 +0100
@@ -1,5 +1,5 @@
 project('gst-libav', 'c',
-  version : '1.26.9',
+  version : '1.26.10',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized' ])

++++++ gst-libav.obsinfo ++++++
--- /var/tmp/diff_new_pack.obxM68/_old  2025-12-31 10:46:58.025353357 +0100
+++ /var/tmp/diff_new_pack.obxM68/_new  2025-12-31 10:46:58.029353522 +0100
@@ -1,5 +1,5 @@
 name: gst-libav
-version: 1.26.9
-mtime: 1764610027
-commit: f313fae193089408e278c0dd3450145e5a12307b
+version: 1.26.10
+mtime: 1766673866
+commit: bfdc62185e243d3633aa916187a566d03a587792
 

Reply via email to