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, ¶ms);
+ 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, ¶ms);
+ 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, ¶ms, &align);
gst_buffer_pool_config_set_params (config, caps, info.size, 2, 0);
gst_buffer_pool_config_set_allocator (config, NULL, ¶ms);
+ 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, ¶ms);
params.align = MAX (params.align, DEFAULT_STRIDE_ALIGN);
+ update_allocator = TRUE;
} else {
- gst_query_add_allocation_param (query, allocator, ¶ms);
+ 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, ¶ms);
+
+ 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, ¶ms);
-
- 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,
+ ¶ms, 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, ¶ms);
- 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,
+ ¶ms, 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, ¶ms);
+ else
+ gst_query_add_allocation_param (query, allocator, ¶ms);
+
+ 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