Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-gst for openSUSE:Factory checked in at 2026-03-05 17:14:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-gst (Old) and /work/SRC/openSUSE:Factory/.python-gst.new.561 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-gst" Thu Mar 5 17:14:42 2026 rev:75 rq:1336414 version:1.28.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-gst/python-gst.changes 2026-02-12 17:27:17.735108706 +0100 +++ /work/SRC/openSUSE:Factory/.python-gst.new.561/python-gst.changes 2026-03-05 17:18:06.686011760 +0100 @@ -1,0 +2,6 @@ +Thu Feb 26 09:07:31 UTC 2026 - Bjørn Lie <[email protected]> + +- Update to version 1.28.1: + + More Python typing fixes + +------------------------------------------------------------------- Old: ---- gst-python-1.28.0.obscpio New: ---- gst-python-1.28.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-gst.spec ++++++ --- /var/tmp/diff_new_pack.NETYfe/_old 2026-03-05 17:18:07.426042386 +0100 +++ /var/tmp/diff_new_pack.NETYfe/_new 2026-03-05 17:18:07.426042386 +0100 @@ -21,7 +21,7 @@ %{?sle15_python_module_pythons} Name: python-gst -Version: 1.28.0 +Version: 1.28.1 Release: 0 Summary: Python Bindings for GStreamer License: LGPL-2.1-or-later @@ -79,7 +79,6 @@ %files %{python_files} %license COPYING -%doc NEWS README.md %dir %{python_sitearch}/gi %{python_sitearch}/gi/overrides/ ++++++ _service ++++++ --- /var/tmp/diff_new_pack.NETYfe/_old 2026-03-05 17:18:07.478044537 +0100 +++ /var/tmp/diff_new_pack.NETYfe/_new 2026-03-05 17:18:07.482044704 +0100 @@ -5,7 +5,7 @@ <param name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param> <param name="subdir">subprojects/gst-python</param> <param name="filename">gst-python</param> - <param name="revision">1.28.0</param> + <param name="revision">1.28.1</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">v?(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> ++++++ gst-python-1.28.0.obscpio -> gst-python-1.28.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/NEWS new/gst-python-1.28.1/NEWS --- old/gst-python-1.28.0/NEWS 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/NEWS 1970-01-01 01:00:00.000000000 +0100 @@ -1,1096 +0,0 @@ -GStreamer 1.28 Release Notes - -GStreamer 1.28.0 was originally released on 27 January 2026. - -See https://gstreamer.freedesktop.org/releases/1.28/ for the latest version of this document. - -Last updated: Tuesday 27 January 2026, 17:00 UTC (log) - -## Introduction - -The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite -cross-platform multimedia framework! - -As always, this release is again packed with many new features, bug fixes, and other improvements. - -## Highlights - -- AMD HIP plugin and integration helper library -- Vulkan Video AV1 and VP9 decoding, H.264 encoding, and 10-bit support for H.265 decoder -- waylandsink: Parse and set the HDR10 metadata and other color management improvements -- Audio source separation element based on demucs in Rust -- Analytics combiner and splitter elements plus batch meta to batch buffers from one or more streams -- LiteRT inference element; move modelinfo to analytics lib; add script to help with modelinfo generation and upgrade -- Add general classifier tensor-decoder, facedetector, and more analytics convenience API -- New tensordecodebin element to auto-plug compatible tensor decoders based on their caps and many other additions and - improvements -- Add a burn-based YOLOX inference element and a YOLOX tensor decoder in Rust -- applemedia: VideoToolbox VP9 and AV1 hardware-accelerated decoding support, and 10-bit HEVC encoding -- Add new GIF decoder element in Rust with looping support -- input-selector: implements a two-phase sinkpad switch now to avoid races when switching input pads -- The inter wormhole sink and source elements gained a way to forward upstream events to the producer as well as new - fine-tuning properties -- webrtcsink: add renegotiation support and support for va hardware encoders -- webrtc WHEP client and server signaller -- New ST-2038 ancillary data combiner and extractor elements -- fallbacksrc gained support for encoded streams -- flv: enhanced rtmp H.265 video support, and support for multitrack audio -- glupload: Implement udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland), - and other dma devices -- video: Add crop, scale, rotate, flip, shear and more GstMeta transformation -- New task pool GstContext to share a thread pool amongst elements for better resource management and performance, especially - for video conversion and compositing -- New Deepgram speech-to-text transcription plugin and many other translation and transcription improvements -- Speech synthesizers: expose new “compress” overflow mode that can speed up audio while preserving pitch -- ElevenLabs voice cloning element and support for Speechmatics speaker identification API -- textaccumulate: new element for speech synthesis or translation preprocessing -- New vmaf element to calculate perceptual video quality assessment scores using Netflix’s VMAF framework -- decodebin3: expose KLV, ID3 PES and ST-2038 ancillary data streams with new metadata GstStream type -- New MPEG-H audio decoding plugin plus MP4 demuxing support -- LCEVC: Add autoplugging decoding support for LCEVC H265 and H266 video streams and LCEVC H.265 and H.266 encoders -- RTP “robust MPEG audio”, raw audio (L8, L16, L24), and SMPTE ST291 ancillary metadata payloaders/depayloaders in Rust -- Add a Rust-based icecastsink element with AAC support -- The Windows IPC plugin gained support for passing generic data in addition to raw audio/video, and various properties -- New D3D12 interlace and overlay compositor elements, plus many other D3D12 improvements -- Blackmagic Decklink elements gained support for capturing and outputting all types of VANC via GstAncillaryMeta -- GstLogContext API to reduce log spam in several components and GST_DEBUG_ONCE (etc) convenience macros to log things only - once -- hlssink3, hlscmafsink: Support the use of a single media file, plus I-frame only playlist support -- Webkit: New wpe2 plugin making use of the “WPE Platform API” -- MPEG-TS demuxer can now disable skew corrections -- New Qt6 QML render source element -- qml6gloverlay: support directly passing a QQuickItem for QML the render tree -- unifxfdsink: Add a property to allow copying to make sink usable with more upstream elements -- dots-viewer: Improve dot file generation and interactivity -- Python bindings: more syntactic sugar, analytics API improvements and type annotations -- cerbero: add support for Python wheel packaging, Windows ARM64, new iOS xcframework, Gtk4 on macOS and Windows, and more - plugins -- Smaller binary sizes of Rust plugins in Windows and Android binary packages -- Peel: New C++ bindings for GStreamer -- Lots of new plugins, features, performance improvements and bug fixes -- Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements - -## Major new features and changes - -### AMD HIP plugin and integration library - -- HIP (formerly known as Heterogeneous-computing Interface for Portability) is AMD’s GPU programming API that enables - portable, CUDA-like development across both AMD and NVIDIA platforms: - - - On AMD GPUs, HIP runs natively via the ROCm stack. - - On NVIDIA GPUs, HIP operates as a thin translation layer over the CUDA runtime and driver APIs. - - This allows developers to maintain a single codebase that can target multiple GPU vendors with minimal effort. - -- The new HIP plugin provides the following elements: - - - hipcompositor: a HIP-based video mixer/compositor - - hipconvert: Converts video from one colorspace to another using HIP - - hipconvertscale: Resizes video and allow color conversion using HIP - - hipscale: Resize video using HIP - - hipdownload: Downloads HIP device memory into system memory - - hipupload: Uploads system memory into HIP device memory - -- The GStreamer HIP integration helper library provides HIP integration functionality to applications and other HIP users. - -- Watch the Bringing AMD HIP into GStreamer talk from last year’s GStreamer Conference for more details or read Seungha’s - devlog post on the subject. - -### Low Complexity Enhancement Video Coding (LCEVC) support for H.265 and H.266 - -- LCEVC is a codec that provides an enhancement layer on top of another codec such as H.264 for example. It is standardised as - MPEG-5 Part 2. - -- LCEVC H.265 and H.266 encoder and decoder elements based on V-Nova’s SDK libraries were added in this cycle - -- Autoplugging support for LCEVC H265 and H266 video streams, so these can be decoded automatically in a decodebin3 or - playbin3 scenario. - -### Closed captions and text handling improvements - -- cea708overlay: suport non-relative positioning for streams with CCs that do not have relative positions. Instead of - displaying them at the top, they are positioned relatively. - -- cea708mux: expose “discarded-services” property on sink pads. This can be useful when muxing in an original caption stream - with a newly-created one (e.g. transcription / translation), in which case one might wish to discard select services from - the original stream in order to avoid garbled captions. - -- sccparse: Better handling of streams with more byte tuples in the SCC field. - -- tttocea608: expose “speaker-prefix” property - -- Miscellaneous improvements and spec compliance fixes - -- Also see SMPTE ST-2038 metadata section below. - -### Speech to Text, Translation and Speech Synthesis - -- New audio source separation element based on demucs in Rust. This is useful to separate speech from background audio before - running speech to text transcription, but could also be used to separate vocals from music for karaoke. - -- New Deepgram speech-to-text transcription plugin in Rust. - -- The Speechmatics transcriber has seen a major refactoring for better timings, gap and discontinuity handling and has gained - support for the new Speechmatics speaker identification API as well as a new property to mask profanities. - -- New ElevenLabs voice cloning element. The new element can operate in two modes: - - - In single speaker mode, the element will directly clone a single voice from its input, without storing any samples. - - Otherwise, the element will store a backlog of samples, and wait to receive certain events from a transcriber on its - source pad before draining them to create potentially multiple voices. - -- New “compress” overflow mode for speech synthesizers that can speed up the audio while preserving pitch. This may be needed - to keep or regain audio/video synchronisation if translated speech output has been consistently longer in duration than the - original and there hasn’t been a sufficient amount of silence that could be filled in to make up the difference. - -- awstranslate: new “brevity-on” property for turning brevity on. - -- The awstranscriber2 has been refactored to match the speechmatics transcriber design and gained a “show-speaker-label” - property that defines whether to partition speakers in the transcription output. - -- New textaccumulate element for speech synthesis or translation preprocessing that can be used to accumulate words and - punctuation into complete sentences (or sentence fragments) for synthesis and / or translation by further elements - downstream. - -### HLS DASH adaptive streaming improvements - -- Reverse playback, seeking and stream selection fixes in the HLS/DASH clients. - -- hlscmafsink can generate I-frame only playlists now - -- Both hlssink3 and hlscmafsink gained support for use of a single media file, in which case the media playlist will use byte - range tags for each chunk whilst always referencing the same single media file. This can be useful for VOD use cases. - -### decodebin3 and playbin3 improvements - -- decodebin3 now has a separate pad template for metadata streams and considers KLV, ID3 PES streams and ST-2038 ancillary - streams as raw formats for meta streams. This comes also with a new dedicated GST_STREAM_TYPE_METADATA stream type in the - stream collection. - -### Enhanced RTMP and multitrack audio/video support in FLV - -- The FLV container used for RTMP streaming is fairly old and limited in terms of features: It only supports one audio and one - video track, and also only a very limited number of audio and video codecs, most of which are by now quite long in the - tooth. - -- The Enhanced RTMP (V2) specification seeks to remedy this and adds support for modern video codecs such H.265 and AV1 as - well as support for more than one audio and video track inside the container. - -- Both H.265 video and multiple audio/video tracks are now supported for FLV in GStreamer. - -- Support for this comes in form of a new eflvmux muxer element, which is needed to accommodate both the need of backwards - compatibility in the existing FLV muxer and the requirements of the new format. See Tarun’s blog post for more details. - -### MPEG-TS container format improvements - -- The MPEG-TS demuxer gained a “skew-corrections” property that allows disabling of skew corrections, which are done by - default for live inputs to make sure downstream consumes data at the same rate as it comes in if the local clock and the - sender clock drift apart (as they usually do). Disabling skew corrections is useful if the input stream has already been - clock-corrected (for example with mpegtslivesrc) or where the output doesn’t require synchronisation against a clock, - e.g. when it’s re-encoded and/or remuxed and written to file (incl. HLS/DASH output) where it’s desirable to maintain the - original timestamps and frame spacings. - - It is also useful for cases where we want to refer to the PCR stream to figure out global positioning, gap detection and - wrapover correction. - -- tsdemux now also supports demuxing of ID3 tags in MPEG-TS as specified in the Apple Timed Metadata for HTTP Live Streaming - specification. These timed ID3 tags have a media type of meta/x-id3 which is different from the one used to tag audio files, - and an id3metaparse element is needed to properly frame the PES data coming out of the demuxer. - -- The MPEG-TS muxer now also reads prog-map[PMT_ORDER_<PID>] for PMT order key in addition to prog-map[PMT_%d], which fixes a - wart in the API and provides an unambiguous way to specify ordering keys. - -### Matroska container format improvements - -- matroskademux now supports relative position cues in the seek table and also had its maximum block size restrictions updated - so that it can support uncompressed video frames also in 4k UHD resolution and higher bit depths. - -### ISO MP4 container format improvements - -- mp4mux now supports E-AC3 muxing - -- qtdemux, the MP4 demuxer, has seen countless fixes for various advanced use cases (with lots more in the pipeline for - 1.28.1). - -- The isomp4mux from the Rust plugins set now support caps changes and has also gained support for raw audio as per ISO/IEC - 23003-5. Plus improved brand selection. - -- The isomp4mux, isofmp4mux and related elements were merged into a single isobmff plugin, which allows sharing more code. As - part of this, codec support was consolidated between the two. - -### MXF container format improvements - -- The MXF muxer and demuxer gained support for non-closed-caption VANC ancillary metdata: - - - Extends mxfdemux with support for outputting VANC (ST436M) essence tracks as ST2038 streams instead of extracting closed - captions internally. - - - Extends mxfmux with support for consuming ST2038 streams for outputting VANC (ST436M) essence tracks instead of only - supporting closed captions. - -To support ST2038 instead of the earlier closed captions, we introduce a breaking change to the caps handling on the pad. This -was deemed the cleanest way and should hopefully not cause too much breakage in the real world, as it is likely not something -that was used much in practice in this form. The st2038anctocc element can be used to convert a ST2038 stream to plain closed -captions. - -We also now support both 8 and 10-bit VANC data when reading from MXF. - -### MPEG-H audio support - -- New MPEG-H audio decoding plugin based on the Fraunhofer MPEG-H decoder implementation plus MP4 demuxing support - -SMPTE 2038 ancillary data stream handling improvements - -- New ST-2038 ancillary data combiner and extractor elements in the rsclosedcaption Rust plugin that extract ST-3028 metadata - streams from GstAncillaryMetas on video frames or converts ST-2038 metadata streams to GstAncillaryMeta and combines it with - a given video stream. - -- The MXF demuxer and muxer gained support for muxing and demuxing generic ancillary metadata in ST-2038 format (see below). - -- decodebin3 now treats ST-2038 metadata streams as a “raw metadata format” and exposes those streams as - GST_STREAM_TYPE_METADATA. - -### Analytics - -This release introduces a major improvement in how analytics pipelines are built, moving away from manual configuration toward a -fully negotiated analytics pipeline. - -- Robust Tensor Negotiation & Smart Selection: All inference and tensor decoder elements adopt the tensor capability - negotiation mechanism. This provides informative error handling by validating the pipeline during the setup phase and - providing descriptive error messages for configuration mismatches before processing begins. Complementing this, the new - tensordecodebin acts as an intelligent proxy that abstracts decoder selection by auto-plugging the correct tensor decoder. - This simplifies the use of existing tensor decoders and allows new tensor decoders to be utilized instantly without - requiring changes to pipeline definitions. - -- Simplified Model Integration with modelinfo: The modelinfo library, configuration files, and the modelinfo-generator.py - script work together to make using any ML model inside a GStreamer pipeline very simple. The new utility script helps you - quickly generate or upgrade metadata files for existing models. Combined with tensor negotiation and tensordecodebin, these - tools facilitate the seamless utilization of new models within the analytics chain. - -- analyticsoverlay: New “expire-overlay” property added to objectdetectionoverlay and can also show tracking-id; New - ‘segmentationoverlay’ to visualize segmented regions. - -- Add LiteRT inference element - -- Analytics: add general classifier tensor-decoder, facedetector, YOLOv8 (detection), YOLOv8segmentation tensor decoders and - more convenience API. - -- onnx: Add Verisilicon provider support - -- New IoU based tracker - -- Add GstAnalyticsBatchMeta representing a batch of buffers from one or more streams together with the relevant events to be - able to interpret the buffers and to be able to reconstruct the original streams. - -- New analyticscombiner and analyticssplitter elements in the Rust plugin set which batch buffers from one or more streams - into a single stream via the new GstAnalyticsBatchMeta and allow splitting that single stream into the individual ones again - later. - -- Add a burn-based YOLOX inference element and a YOLOX tensor decoder in Rust. - -### Vulkan integration enhancements - -- The Vulkan Video encoders and decoders now dynamically generate their pad template caps at runtime instead of hardcoding - them, so they more accurately reflect the actual capabilities of the hardware and drivers. - -- New Vulkan AV1 and VP9 video decoding support - -- New Vulkan H.264 encoding support - -- The Vulkan H.265 decoder now also supports 10-bit depth - -### OpenGL integration enhancements - -- Implement keyboard, mouse, and scroll wheel navigation event handling for the OpenGL Cocoa backend. - -- Added support for the NV24 and Y444_12 pixel formats. The latter is used by certain HEVC decoders for 12-bit non-subsampled - profiles. - -### udmabuf allocator with glupload support - -- Implement a udmabuf-based memory allocator for user-space mappable dmabufs. - -- glupload: add udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland), and - other dma devices. This can help reduce memory copies and can massively improve performance in video players like Showtime - or Totem for software-decoded video such as AV1 with dav1ddec. - -- gtk4paintablesink: Similar to glupload, this now proposes the udmabuf memory allocator to upstream which can reduce memory - copies and improve performance with certain software decoders. - -### Wayland integration - -- Added basic colorimetry support - -- waylandsink: - - - Parse and set the HDR10 metadata and other color management improvements - - - udmabuf support (see above) - - - video crop meta support - - - New “fullscreen-output” and “force-aspect-ratio” properties - -### Qt5 + Qt6 QML integration improvements - -- New Qt6 QML qml6 render source element - -- qml6gloverlay: support directly passing a QQuickItem for QML the render tree - -### GTK4 integration improvements - -- gtk4paintablesink: Added YCbCr memory texture formats and improve color-state fallbacks. The sink will also propose a - udmabuf buffer pool and allocator now if upstream asks for sysmem, which would allow direct imports of the memory by - GL/Vulkan or the compositor. Plus many other improvements which have also been backported into the 0.14 branch. - -### CUDA / NVCODEC integration and feature additions - -- cudacompositor, cudaconvert and its variants gained crop meta support - -- nvencoder: interlaced video handling improvements and “emit-frame-stats” property which if enabled makes the encoder emit - the “frame-stats” signal for each encoded frame, allowing applications to monitor things like the average QP per frame. - -- nvjpegenc: Add an autogpu mode element (nvautogpunvenc) similar to nvautogpu{h264,h265,av1}enc. - -- nvh264enc, nvh265enc gained a new “num-slices” property which is conditionally available based on device support for dynamic - slice mode - -- nvdsdewarp: performance improvements and support for output resizing support, along with a new “add-borders” property. - -### Capture and playout cards support - -- Blackmagic Decklink elements gained support for capturing and outputting all types of VANC via GstAncillaryMeta - -### RTP and RTSP stack improvements - -- rtspsrc now sends RTSP keepalives also in TCP/interleaved modes. This fixes problems with some cameras that don’t see the - RTCP traffic as sufficient proof of liveness, when using TCP/HTTP tunnelled modes. - -- New Rust RTP mparobust depayloader for “robust mp3” audio**, a more loss-tolerant RTP payload format for MP3 audio (RFC - 5219) - -- New Rust RTP L8/L16/L24 raw audio payloader and depayloader, which offer more correct timestamp handling compared to the old - payloader and depayloader and more correctly implements multichannel support. - -- New Rust RTP SMTPE ST291 ancillary data payloader and depayloader for sending or receiving ancillary data over RTP. This is - also the payload format used by ST2110-40. - -- Various performance improvements and fixes for rtprecv / rtpsend (“rtpbin2”). - -- Support for “multi-time aggregation packets” (MTAP) in the H264 RTP depayloader rtph264depay. - -### WebRTC improvements - -- webrtcbin and GstWebRTC library improvements: - - - Add support for getting the selected ICE candidate pairs - - - Improve spec compliance for ICE candidate stats by filling the foundation, related-address, related-port, - username-fragment and tcp-type fields of stats. - - - improve compatibility with LiveKit - -- webrtcsink and webrtcsrc enhancements: - - - webrtcsink gained renegotiation support, and support for va hardware encoders - -- Added a WHEP client signaller and server signaller to the Rust webrtc plugin, including support for server side offers for - the WHEP client. - -- webrtc-api: Set default bundle policy to max-bundle. - -- The dtls plugin now uses a ECDSA private key for the default certificate. ECDSA is widely used in browsers and SFUs, and - some servers such as the ones using BouncyCastle only accept certificates signed with ECDSA. - -### New GStreamer C++ bindings - -The old GStreamer C++ bindings (gstreamermm and qt-gstreamer) have been unmaintained for a long time, leaving C++ developers -only with the option to use the GStreamer C API. - -In recent years, a new approach for C++ bindings was developed by the GNOME community: peel. While initially developed for GTK, -with various GObject Introspection and API fixes included in GStreamer 1.28, this is now also usable for GStreamer. - -Compared to gstreamermm this offers a much lower overhead, headers-only C++ binding that just depends on the C libraries and not -even the C++ STL, and provides a modern C++ API top of the GStreamer C API. Compared to qt-gstreamer there is no dependency on -Qt. - -It’s still in active development and various MRs for improving the GStreamer development experience are not merged yet, but it’s -already usable and a great improvement over using the plain C API from C++. - -Various GStreamer examples can be found in Sebastian’s GStreamer peel examples repository. - -## New elements and plugins - -- Many exciting new Rust elements, see Rust section below. - -- New D3D12 interlace, overlay compositor, fish eye dewarp and uv coordinate remapping elements - -- VMAF: New element to calculate perceptual video quality assessment scores using Netflix’s VMAF framework - -- Webkit: New wpe2 plugin that makes use of the “WPE Platform API” with support for rendering into GL and SHM buffers and - navigation events (but not audio yet). - -- Many other new elements mentioned in other sections (e.g. CUDA, NVCODEC, D3D12, Speech, AMD HIP, Rust etc.) - -## New element features and additions - -- The AWS S3 sink and source elements now support S3 compatible URI schemes. - -- clocksync: new “rate” property and “resync” action signal so that clocksync can synchronise buffer running time against the - pipeline clock with a specified rate factor. This can be useful if one wants to throttle pipeline throughput such as e.g. in - a non-realtime transcoding pipeline where the pipeline’s CPU and/or hardware resource consumption needs to be limited. - -- fallbacksrc is able to support encoded outputs now, not just uncompressed audio/video. As part of this it supports stream - selection via the GstStream API now. - -- h265parse now automatically inserts AUDs where needed if it outputs byte-stream format, which helps fix decoding artefacts - for multi-slice HEVC streams with some hardware decoders. - -- input-selector now implements a two-phase sinkpad switch to avoid races when switching input pads. Extensive tests have been - added to avoid regressions. - -- The inter plugin wormhole sink and source elements for sending data between pipelines within the same application process - gained new properties to fine tune the inner elements. intersrc can now also be configured to forward upstream events to the - producer pipeline via the new “event-types” property. - -- The quinn plugin supports sharing of the QUIC/WebTransport connection/session with an element upstream or downstream. This - is required for supporting Media over QUIC (MoQ) later, for which an MR is already pending. - -- replaygain will use EBU-R128 gain tags now if available. - -- threadshare: many improvements to the various threadshare elements, plus examples and a new benchmark program. The plugin - was also relicensed to MPL-2.0. - -- The unixfdsink element for zero-copy 1:N IPC on Linux can now also copy the input data if needed, which makes it usable with - more upstream elements. Before it would only work with elements that made use of the special memory allocator it advertised. - This (copy if needed) is enabled by default, but can be disabled by setting the new “min-memory-size” property to -1. - - There’s also a new “num-clients” property that gets notified when the number of clients (unixfdsrc elements tapping the same - unixfdsink) changes. - -- videorate and imagefreeze now also support JPEG XS. - -- videorate’s formerly defunct “new-pref” property was revived for better control which frame to prefer for output in case of - caps changes. - -## Plugin and library moves and renames - -- The y4mdec plugin moved from gst-plugins-bad into gst-plugins-good and was merged with the existing y4menc there into a - single y4m plugin containing both a YUV4MPEG encoder and decoder. - -- The fmp4 and mp4 plugins in the Rust plugins set were merged into a single isobmff plugin. - -## Plugin and element deprecations - -- The old librtmp-based rtmpsrc and rtmpsink elements are deprecated are scheduled for removal in the next release cycle. Use - the rtmp2src and rtmp2sink elements instead (which will likely also be registered under the old names after removal of the - old rtmp plugin). - -- Deprecate the webrtchttp plugin in the Rust plugins set along with its whipsink and whepsrc elements, in favour of the - whipclientsink and whepclientsrc elements from the webrtc plugin in the Rust plugins set. - -- The libmpeg2-based mpeg2dec element is deprecated and scheduled for removal in the next release cycle, as libmpeg2 has been - unmaintained for a very long time. The libavcodec-based decoder has had a higher rank for many years already and is also - more performant. We would recommend that distros that also ship the FFmpeg-based decoder out of the box stop shipping the - mpeg2dec plugin now or reduce its rank to GST_RANK_NONE. - -## Plugin and element removals - -- The cc708overlay element has been removed. It is replaced by the cea708overlay element from the rsclosedcaption plugin in - the Rust plugins module. - -- Drop registration of rusotos3src and rusotos3sink in the AWS plugin in the Rust plugins set. These were legacy names that - were renamed to awss3src and awss3sink in 2022, but had been kept around for a while so applications had time to move to the - new name space. - -## Miscellaneous API additions - -### GStreamer Core - -- gst_call_async() and gst_object_call_async() are more generic and convenient replacements for gst_element_call_async() - -- gst_check_version() is a new convenience function to check for a minimum GStreamer core version at runtime. - -- GstClock: Add gst_clock_is_system_monotonic() utility function - -- GstController: gst_timed_value_control_source_list_control_points() is a thread-safe method to retrieve the list of control - points, replacing gst_timed_value_control_source_get_all(). - -- GstCpuId: gst_cpuid_supports_x86_avx() and friends can be used to check which SIMD instruction sets are supported on the - current machine’s CPU without relying on liborc for that. This is useful for plugins that rely on an external library that - wants to be told which SIMD code paths to use. - -- gst_object_get_toplevel() can be used to get the toplevel parent of an object, e.g. the pipeline an element is in. - -- New API for tensor caps descriptions: - - - GstUniqueList is a new unordered, unique container value type for GValues similar to GstValueList but guaranteed to have - unique values. Can only be queried and manipulated via the gst_value_* API same as GstValueList and GstValueArray. - - - gst_structure_get_caps() gets a GstCaps from a structure - -- More accessor functions for GstPadProbeInfo fields and the GstMapInfo data field, as well as a generic gst_map_info_clear() - which is useful for language bindings. - -- New EBU-R128 variants of the replay gain tags: GST_TAG_TRACK_GAIN_R128 and GST_TAG_ALBUM_GAIN_R128 - -- GstReferenceTimestampMeta: additional information about the timestamp can be provided via the new optional info - GstStructure. This should only be used for information about the timestamp and not for information about the clock source. - This is used in an implementation of the TAI timestamp functionality described in ISO/IEC 23001-17 Amendment 1 in the Rust - MP4 muxer. - -- GstValue: add gst_value_hash() and support 0b / 0B prefix for bitmasks when deserialising. - -- Add missing _take() and _steal() functions for some mini objects: - - - gst_buffer_take(), gst_buffer_steal() - - gst_buffer_list_steal() - - gst_caps_steal() - - gst_memory_take(), gst_memory_replace(), gst_memory_steal() - - gst_message_steal() - - gst_query_steal() - -- GstElement: Deprecate gst_element_state_*() API and provide gst_state_*() replacements with the right namespace - -#### GstMetaFactory to dynamically register metas - -- gst_meta_factory_register() allows to dynamically register metas and store them in the registry by name. This is useful in - combination with the GstMeta serialisation and deserialisation functionality introduced in GStreamer 1.24, for metas that - are not provided by GStreamer core. If an element comes across a meta name that is not registered yet with GStreamer, it can - check the registry and load the right plugin which will in turn register the meta with GStreamer. This is similar to how - flag and enum types can be stored in the registry so that if during caps deserialisation an unknown enum or flag type is - encountered, it can be loaded dynamically and registered with the type system before deserialisation continues. - - The pbtypes plugin in gst-plugins-base registers GstAudioMeta and GstVideoMeta in the registry so that e.g. unixfdsrc and - other elements can make sure they get pulled in and registered with GStreamer before deserialising them. - -### App Sink and Source Library - -- appsrc and appsink gained support for a more bindings-friendly “simple callbacks” API that can be used instead of GObject - signals (which have considerable overhead) or the normal callbacks API (which couldn’t be used from most bindings). - -### Audio Library - -- added support for 20-bit PCM audio stored in 32-bit containers, both signed (S20_32) and unsigned (U20_32), each in - little-endian and big-endian variants. - -### Plugins Base Utils Library - -- Many minor improvements. - -### Tag Library - -- Vorbis comments: parse EBU R128 tags - -### Video Library and OpenGL Library - -- Add DRM equivalents for various 10/12/16 bit SW-decoders formats - -- New GstVideoMetaTransformMatrix that adds crop, scale, rotate, flip, shear and more meta transformations. The current - “scaling” transformation doesn’t work if either the input buffer is cropped or if any kinds of borders are added. And it - completely falls down with more complex transformations like compositor. - -- GstVideoOverlayCompositionMeta: handling of multiple video overlay composition metas on a single buffer has been fixed in - lots of places (overlays and sinks). Many elements assumed there would only ever be a single overlay composition meta per - buffer. For that reason gst_buffer_get_video_overlay_composition_meta() has been deprecated, so that elements have to - iterate over the metas and handle multiple occurences of it. - -New Raw Video Formats - -- Add more 10bit RGB formats commonly used on ARM SoCs in GStreamer Video, OpenGL and Wayland, as well as in deinterlace and - gdkpixbufoverlay: - - BGR10x2_LE: packed 4:4:4 RGB (B-G-R-x), 10 bits for R/G/B channel and MSB 2 bits for padding - - RGB10x2_LE: packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding -- Add 10-bit 4:2:2 NV16_10LE40 format, which is a fully-packed variant of NV16_10LE32 and also known as NV20 and is produced - by Rockchip rkvdec decoders. - -### GstPlay Library - -- GstPlay: Add support for gapless looping - -## Miscellaneous performance, latency and memory optimisations - -- New task pool GstContext to share a thread pool amongst elements in a pipeline for better resource management and - performance, especially for video conversion and compositing. This is currently only made use of automatically in the - GStreamer Editing Services library. - -- glupload: Implement udmabuf uploader to share buffers between software decoders/sources and GPUs, display engines (wayland), - and other dma devices (see above). - -- GstDeviceMonitor now starts device providers in a separate thread. This avoids blocking the application when - gst_device_monitor_start() is called, which avoids each app having to spawn a separate thread just to start device - monitoring. This is especially important on Windows, where device probing can take several seconds or on macOS where device - access can block on user input. A new GST_MESSAGE_DEVICE_MONITOR_STARTED is posted on the bus to signal to the application - that the device monitor has completed its async startup. - -- On Windows audioresample now has SIMD optimisations enabled also for the MSVC build. - -- audiomixmatrix / audioconvert: sparse matrix LUT optimisation which uses precomputed LUTs for non-zero coefficients instead - of blindly traversing all input/output channel combinations. - -- As always there have been plenty of performance, latency and memory optimisations all over the place. - -## Miscellaneous other changes and enhancements - -- The ALSA device provider now supports enumerating virtual PCM sinks - -- The ASIO device monitor can now detect dynamically added and removed devices by monitoring USB events. - -## Tracing framework and debugging improvements - -- There are new hooks to track when buffers are queued or dequeued from buffer pools in the tracing system. - -- The pad-push-timings tracer gained a new “write-log” action signal - -Dot tracer/viewer - -- Enhanced dots-viewer: Major refactoring with modular JavaScript architecture, bundled dependencies (no more CDN), clickable - pipeline references for navigation between related dot files, download SVG button, and improved UI/UX with better text - handling and zoom fixes. - -Dot file pipeline graphs - -- Dot file dumps of pipeline graphs now show the list of active tracers at the bottom along with the tracer configuration. - -Debug logging system improvements - -GstLogContext to fine-tune logging output and reduce log message spam - -- GstLogContext is a new API to control logging behavior, particularly for implementing “log once” functionality and periodic - logging. This helps avoid spamming logs with repetitive messages. This comes with a whole suite of new GST_CTX_* debug log - macros that take a context argument in addition to the usual arguments. - -- A number of GST_{MEMDUMP,TRACE,LOG,DEBUG,INFO,WARNING,ERROR}_ONCE convenience macros for logging something only once. - -- The source code of elements and plugins has to be updated to make use of this new feature, so if there are any particular - log messages in certain elements that you feel are particularly spammy, please feel free to file an issue in GitLab so we - can see if it would make sense to use the new API there. - -## Tools - -- gst-inspect-1.0 now shows the type of each field when it prints caps and also pretty-prints tensor caps. - -## GStreamer FFmpeg wrapper - -- The avdec video decoders have seen many improvements and fixes for their buffer pool and allocation query handling. - -## GStreamer RTSP server - -- rtsp-client: Add a “pre-closed” signal which provides a way for an application to be notified when a connection is closed, - before the client’s sessions are cleaned up. This is useful when a client terminates its session improperly, for example, by - sending a TCP RST. - -- rtsp-stream-transport: expose new “timed-out” property. Upon RTCP timeout, rtpsession emits a signal that we can catch and - then also expose the timed out state a property of the transport in order for users (such as rtspclientsink) to get notified - about it. - -- rtspclientsink now errors out on timeout. - -## VA-API integration - -VA plugin for Hardware-Accelerated Video Encoding and Decoding on Intel/AMD - -- vaav1enc: Enable intrablock copy and palette mode. - -- Lots of other improvements and bug fixes. - -GStreamer-VAAPI has been removed in favour of the va plugin - -- gstreamer-vaapi has been removed and is no longer updated going forward Users who relied on gstreamer-vaapi are encouraged - to migrate to the va plugin’s elements at the earliest opportunity. It should still be possible to build old versions of - gstreamer-vaapi against newer versions of GStreamer. - -## GStreamer Editing Services and NLE - -- Task Pool Context Support: GESPipeline now supports task pool context handling for better resource management. It - automatically creates and manages a GstSharedTaskPool with threads set to the number of processors, also allowing - applications to provide their own shared task pool via context negotiation. - -- MT-Safe Controller API: New gst_timed_value_control_source_list_control_points() function provides thread-safe access to - control points, addressing use-after-free bugs in the previous API which returned references to internal structures. - -- OTIO Formatter Migration: The OpenTimelineIO formatter has been moved from embedded GLib resources to a standalone Python - plugin located in gst-python, simplifying the implementation and avoiding duplicated code. - -- Framepositioner Z-order Enhancements: The z-order property is now controllable and exposed for manipulation, enabling - dynamic adjustment of layer stacking order during timeline editing. - -- Clip Layer Movement Detection: New ges_clip_is_moving_between_layers() API distinguishes actual layer moves from other - operations like split/ungroup, with separate flags for track element freezing and layer movement. - -- GES Error Domain: Added ges_error_quark() function for proper GError domain support, enabling automatic ErrorDomain - implementation generation in language bindings. - -- Timeline Error Reporting: Added GError parameter to ges_base_bin_set_timeline() for proper error reporting when timeline - setup fails. - -- Various bug fixes for memory leaks, frame position calculations with non-square pixel aspect ratios, and control binding - handling. - -GStreamer validate - -- New check-last-frame-qrcode action type: New action type (from the Rust validate plugin) to validate QR code content in - video frames. Supports exact string matching for single or multiple QR codes, and JSON field validation. - -- Override Severity Levels: New overrides parameter in the meta action type allows changing issue severity levels during test - execution. Tests can now pass when encountering known issues by downgrading severity from critical to warning/issue/ignore. - -- Enhanced dots-viewer (see dots-viewer section above) - -- SSIM Validation Improvements: Changed validation to check all images before reporting errors instead of stopping at the - first error. - -- Reverse Playback Validation: Changed segment.time mismatch from critical to warning for reverse playback scenarios, - acknowledging the additional complexity demuxers face during reverse playback. - -- Launcher Improvements: Log files for passing tests are now removed by default to reduce storage usage (with option to keep - them), and debug log colors are now supported when redirected to files. - -- Python 3.14 Compatibility: Fixed file:/// URI generation for Python 3.14 with proper RFC 8089 compliance. - -- Various bug fixes for scenario handling, memory leaks, and improved backward compatibility with GLib 2.64. - -## GStreamer Python Bindings - -gst-python is an extension of the regular GStreamer Python bindings based on gobject-introspection information and PyGObject, -and provides “syntactic sugar” in form of overrides for various GStreamer APIs that makes them easier to use in Python and more -pythonic; as well as support for APIs that aren’t available through the regular gobject-introspection based bindings, such as -e.g. GStreamer’s fundamental GLib types such as Gst.Fraction, Gst.IntRange etc. - -- More pythonic API for analytics - -- Type annotations have been updated in PyGObject-stubs. - -- Writability of Gst.Structure, Gst.Caps and other objects has been improved. - - - caps.writable_structure() now returns a ContextManager inside of which the returned Gst.Structure can be modified. - - obj.make_writable() makes any MiniObject writable. - - Pad probe callbacks now has info.writable_object() and info.set_object() to modify objects inside the callback. - -## GStreamer C# Bindings - -- The C# bindings have been updated for the latest GStreamer 1.28 APIs. - -## GStreamer Rust Bindings and Rust Plugins - -The GStreamer Rust bindings and plugins are released separately with a different release cadence that’s tied to the gtk-rs -release cycle. - -The latest release of the bindings (0.24) has already been updated for the new GStreamer 1.28 APIs, and works with any GStreamer -version starting from 1.14. - -gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements -and plugins. - -The GStreamer 1.28 binaries will be tracking the main branch of gst-plugins-rs for starters and then track the 0.15 branch once -that has been released (around the end of February 2026). After that, fixes from newer versions will be backported as needed -into the new 0.15 branch for future 1.28.x bugfix releases. - -Rust plugins can be used from any programming language. To applications, they look just like a plugin written in C or C++. - -### New Rust elements - -- New icecastsink element with AAC support that is similar in functionality to the existing shout2send element but also - supports AAC, which upstream libshout is not planning to support. - -- New audio source separation element based on demucs (see above). - -- New Deepgram speech-to-text transcription plugin, ElevenLabs voice cloning element and textaccumulate element. See Speech to - Text, Translation and Speech Synthesis section above. - -- New analytics combiner and splitter elements for batch metas (see above). - -- New mpa robust RTP depayloader, L8/L16/L24 raw audio payloaders and depayloaders and SMPTE ST291 ancillary data payloader - and depayloader. - -- New GIF decoder element that supports looping. - -- New ST-2038 ancillary data combiner and extractor elements (see above) - -- Added a burn-based YOLOX inference element and a YOLOX tensor decoder - -- s302mparse: Add new S302M audio parser - -- New Rust validate plugin with a check-last-frame-qrcode action. - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.14 (shipped with GStreamer -1.26) and current main (soon 0.15) branch (shipped with GStreamer 1.28). - -Note that at the time of GStreamer 1.28.0 gst-plugins-rs 0.15 was not released yet and the git main branch was included instead -(see above). - -## Build and Dependencies - -- Meson >= 1.4 is now required for all modules - -- liborc >= 0.4.42 is strongly recommended - -- libnice >= 0.1.23 is now required for the WebRTC library. - -- The closedcaption plugin in gst-plugins-bad no longer depends on pangocairo after removal of the cc708overlay element (see - above). - -- Please also note plugin removals and deprecations. - -Monorepo build - -- Updated wraps, incl. glib: cairo, directxmath, expat, fdk-aac, ffmpeg, flac, freetype2, gdk-pixbuf, gtest, harfbuzz, - json-glib, lame, libjpeg-turbo, libnice, libopenjp2, libpng, libsrtp2, libxml2, nghttp2, ogg, pango, pcre2, pygobject, - soundtoch, sqlite3, wayland-protocols, zlib. - -- Added wraps: librsvg, svtjpegxs - -Development environment - -- Local pre-commit checks via git hooks have been moved over to pre-commit, including the code indentation check. - -- Code indentation checking no longer relies on a locally installed copy of GNU indent (which had different outcomes depending - on the exact version installed). Instead, pre-commit will automatically install the gst-indent-1.0 indentation tool through - pip, which also works on Windows and macOS. - -- A pre-commit hook has been added to check documentation cache updates and since tags. - -- Many meson wrap updates, including to FFmpeg 7.1 (FFmpeg 8.0 is pending) - -- The uninstalled development environment should work better on macOS now, also in combination with homebrew (e.g. when - libsoup comes from homebrew). - -- New python-exe Meson build option to override the target Python installation to use. This will be picked up by the - gst-python and gst-editing-sevices subprojects. - -## Platform-specific changes and improvements - -### Android - -- Overhaul hw-accelerated video codecs detection: - - - Android 10 (API 29) added support for isHardwareAccelerated() to MediaCodecInfo to detect whether a particular - MediaCodec is backed by hardware or not. We can now use that to ensure that the video hw-codec is rank PRIMARY+1 on - Android, since using a software codec for video is simply not feasible most of the time. - - - If we’re not able to detect isHardwareAccelerated(), perhaps because the Android API version is too old, we try to use - the codec name as a fallback and also rank as PRIMARY+1 the c2.android, c2.exynos and c2.amlogic audio codecs alongside - OMX.google, because they are known-good. - -### Apple macOS and iOS - -- VP9 and AV1 hardware-accelerated video decoding support - -- Support for 10-bit HEVC encoding - -- Implement keyboard, mouse, and scroll wheel navigation event handling for the OpenGL Cocoa backend. - -### Windows - -#### GStreamer Direct3D12 integration - -- New elements: - - - d3d12interlace: A Direct3D12 based interlacing element - - d3d12overlaycompositor: A Direct3D12-based overlay composing element - - d3d12fisheyedewarp: A Direct3D12-based fisheye dewarping element - - d3d12remap: A Direct3D12-based UV coordinate remapping element - -- Upload/download optimisations via a staging memory implementation - -- d3d12swapchainsink improvements: - - - added a “last-rendered-sample” action signal to retrieve the last rendered frame - - added “uv-remap” and “redraw” action signals - -#### Windows inter process communication - -- The Windows IPC plugin gained support for passing generic data in addition to raw audio/video, and various new properties. - It also serialises metas now where that is supported. - -#### Windows audio - -- wasapi2: add support for dynamic audio device switching, exclusive mode and format negotiation, in addition to device - provider improvements and latency enhancements. - -- Disable all audio device providers except wasapi2 by default (by setting the others’ rank to NONE). We had too many device - providers outputting duplicate device entries, and it wasn’t clear to people what they should be using. After the recent - device switching work done on WASAPI2, there is no reason to use directsound anymore. - -### Cerbero - -Cerbero is a meta build system used to build GStreamer plus dependencies on platforms where dependencies are not readily -available, such as Windows, Android, iOS, and macOS. It is also used to create the GStreamer Python Wheels. - -General improvements - -- New features: - - - Support for generating Python wheels for macOS and Windows - - These will be uploaded to PyPI, currently blocked on PyPI - - Support for iPhone Simulator on ARM64 macOS, via the new iOS xcframework - - Inno Setup is now used for Windows installers, which also bundle the MSVC runtime - - An installer is now shipped for Windows ARM64, built using MSVC - - GTK4 is now shipped on macOS and Windows (MSVC and MinGW) - - Smaller binary sizes of Rust plugins on all platforms except macOS and iOS - - Linux builds now integrate better with system dependencies - - Debuginfo is now correctly shipped on Windows and macOS - -- API/ABI changes: - - - Android NDK r25 is now used, targeting API level 24 (Android 7.0) - - Merge modules are no longer shipped for Windows - - Windows installers are no longer MSIs - - The legacy iOS framework with iPhone ARM64 and iPhoneSimulator x86_64 binaries is now deprecated. It will be removed in - the next release. Please use the new iOS xcframework which supports iPhone ARM64 and iPhoneSimulator ARM64+x86_64. - -- Plugins added: - - - pbtypes is now shipped on all platforms - - curl is now shipped on all platforms except iOS and Android - - lcevcdec is now shipped on all platforms except Windows ARM64 and Windows 32-bit x86 - - svtjpegxs is now shipped on Linux and Windows, only on 64-bit - - unixfd is now shipped on all platforms except Windows - - mediafoundation is now shipped additionally on MinGW - - wasapi2 is now shipped additionally on MinGW - - New Rust plugins on all platforms except Windows ARM64: - - analytics - - audioparsers - - burn - - demucs - - elevenlabs - - gopbuffer - - hlsmultivariantsink - - icecastsink - - mpegtslive - - raptorq - - speechmatics - - streamgrouper - - vvdec - -- Plugins changed: - - - mp4 and fmp4 plugins have been merged into isobmff - -- Development improvements: - - - Debuginfo is now correctly shipped on Windows and macOS - - Support for iPhone Simulator on ARM64 macOS, via the new iOS xcframework - -- Known issues: - - - cerbero: Rust plugins fail to link with Xcode 26 on macOS - - cerbero: Rust plugins are not shipped in the Windows ARM64 installer - - cerbero: Android devices with API level >= 30 cannot play tutorials 4 or 5 – Fix aimed for 1.28.1 - - cerbero: Missing pkg-config for macOS in the Android release - -## Documentation improvements - -- Added a Windows section to “building from source” page - -- New Python tutorials for dynamic pipelines and time handling - -- The Android tutorials were updated: provided projects were updated to Gradle 8.11 and API level 24 - -- Updates of the Machine Learning and Analytics design documentation and the GstMeta design docs - -## Possibly Breaking Changes - -- The MXF muxer and demuxer used to have direct support for standalone closed caption streams (closedcaption/x-cea-708) as - ancillary data, but that was removed in favour of more generic ST 2038 ancillary metadata which is a better fit for how the - data is stored internally and also supports generic ancillary metadata. Closed captions can still be stored or extracted by - using the ST 2038 elements from the Rust plugins module. Also see the MXF section above. - -- Analytics: Previously it was guaranteed that there is only ever up to one GstTensorMeta per buffer. This is no longer true - and code working with GstTensorMeta must be able to handle multiple GstTensorMeta now (after this Merge Request, which was - apparently backported into 1.26 as well). - -- The thread ID reported in debug logs is no longer prefixed with a 0x on Windows, Linux and FreeBSD platforms. This change - can potentially break log parsers. GstDebugViewer was adapted accordingly. - -## Known Issues - -- There are some open issues with the Apple hardware-accelerated AV1 decoding, which we hope will be fixed in due course. - Please let us know if you run into them and can test patches. - -- Autoplugging LCEVC H.264/H.265/H.266 streams is currently disabled until an issue with decodebin3 and non-LCEVC streams has - been resolved. It is still possible to re-enable this locally by overriding the rank of lcevch26*decodebin using the - GST_PLUGIN_FEATURE_RANK environment variable. - -## Statistics - -- 3548 commits - -- 1765 Merge requests merged - -- 476 Issues closed - -- 190+ Contributors - -- more than 35% of all commits and Merge Requests were in Rust modules/code - -- 5430 files changed - -- 395856 lines added - -- 249844 lines deleted - -- 146012 lines added (net) - -Contributors - -Aaron Boxer, Abd Razak, Adrian Perez de Castro, Adrien Plazas, Albert Sjolund, Aleix Pol, Alexander Slobodeniuk, Alicia Boya -García, Alyssa Ross, Amotz Terem, Amy Ko, Andoni Morales Alastruey, Andrew Yooeun Chun, Andrey Khamukhin, anonymix007, Arnout -Engelen, Artem Martus, Arun Raghavan, Ben Butterworth, Biswapriyo Nath, Brad Hards, Brad Reitmeyer, Branko Subasic, Camilo Celis -Guzman, Carlos Bentzen, Carlos Falgueras García, Carlos Rafael Giani, César Alejandro Torrealba Vázquez, Changyong Ahn, Chengfa -Wang, Christian Gräfe, Christo Joseph, Christopher Degawa, Christoph Reiter, Daniel Almeida, Daniel Morin, David Maseda Neira, -David Monge, David Smitmanis, Denis Shimizu, Derek Foreman, Detlev Casanova, Devon Sookhoo, Diego Nieto, Dominique Leroux, -DongJoo Kim, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, eipachte, Eli Mallon, Elliot Chen, Enock Gomes Neto, Enrique -Ocaña González, Eric, Eva Pace, F. Duncanh, François Laignel, Gang Zhao, Glyn Davies, Guillaume Desmottes, Gustav Fahlen, -Haejung Hwang, Haihua Hu, Havard Graff, Hanna Weiß, He Junyan, Hou Qi, Hyunjun Ko, Ian Napier, Inbok Kim, Jaehoon Lee, Jakub -Adam, James Cowgill, Jan Alexander Steffens (heftig), Jan Schmidt, Jan Tojnar, Jan Vermaete, Jaslo Ziska, Jeehyun Lee, Jeffery -Wilson, jeongmin kwak, Jeongmin Kwak, Jerome Colle, Jiayin Zhang, Jihoon Lee, Jochen Henneberg, Johan Sternerup, Jonathan Lui, -Jordan Petridis, Jordan Yelloz, Jorge Zapata, Julian Bouzas, Kevin Scott, Kevin Wolf, L. E. Segovia, Linus Svensson, Loïc Le -Page, Manuel Torres, Marc-André Lureau, Marc Leeman, Marek Olejnik, Mark Nauwelaerts, Marko Kohtala, Markus Hofstaetter, Mathieu -Duponchelle, Matteo Bruni, Matthew Semeniuk, Matthew Waters, Max Goltzsche, Mazdak Farzone, Michael Grzeschik, Michael Olbrich, -Michiel Westerbeek, Monty C, Muhammad Azizul Hazim, Nicholas Jin, Nicolas Dufresne, Nirbheek Chauhan, Norbert Hańderek, Ognyan -Tonchev, Ola Fornander, Olivier Blin, Olivier Crête, Oz Donner, Pablo García, Patricia Muscalu, Patrick Fischer, Paul Fee, Paweł -Kotiuk, Paxton Hare, Peter Stensson, pfee, Philippe Normand, Piotr Brzeziński, Piotr Brzeziński, Pratik Pachange, Qian Hu -(胡骞), r4v3n6101Rafael Caricio, Raghavendra Rao, Rares Branici, Ratchanan Srirattanamet, Razvan Grigore, Rick Ye, Rinat Zeh, -Robert Ayrapetyan, Robert Mader, Ross Burton, Ruben Gonzalez, Ruben Sanchez, Samuel Thibault, Sanchayan Maity, Santiago -Carot-Nemesio, Santosh Mahto, Sebastian Dröge, Seungha Yang, Shengqi Yu (喻盛琪), Sjoerd Simons, Slava Sokolovsky, Stefan -Andersson, Stefan Dangl, Stéphane Cerveau, stevn, Sven Püschel, Sylvain Garrigues, Taruntej Kanakamalla, Teus Groenewoud, Théo -Maillart, Thibault Saunier, Tim-Philipp Müller, Tjitte de Wert, Tobias Schlager, Tobias Koenig, Tomasz Mikolajczyk, Tulio -Beloqui, Val Packett, Vasiliy Doylov, Víctor Manuel Jáquez Leal, Vincent Beng Keat Cheah, Vineet Suryan, Vivia Nikolaidou, -Vivian Lee, Vivienne Watermeier, Wilhelm Bartel, William Wedler, Wim Taymans, Xavier Claessens, Yun Liu, - -… and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! - -Stable 1.28 branch - -After the 1.28.0 release there will be several 1.28.x bug-fix releases which will contain bug fixes which have been deemed -suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.28.x -bug-fix releases will be made from the git 1.28 branch, which is a stable release series branch. - -1.28.1 - -The first 1.28 bug-fix release (1.28.1) is expected to be released in February 2026. - -Schedule for 1.30 - -Our next major feature release will be 1.30, and 1.29 will be the unstable development version leading up to the stable 1.30 -release. The development of 1.29/1.30 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.30 is still to be determined, but it will likely be in Q4/2026. - -1.30 will be backwards-compatible to the stable 1.28, 1.26, 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 -and 1.0 release series. - -## 1.27 pre-releases (superseded by 1.28) - -- 1.27.1 development snapshot release notes -- 1.27.2 development snapshot release notes -- 1.27.50 development snapshot release notes -- 1.27.90 pre-release release notes - --------------------------------------------------------------------------------------------------------------------------------- - -These release notes have been prepared by Tim-Philipp Müller with contributions from Daniel Morin, Nirbheek Chauhan, Philippe -Normand, Sebastian Dröge, Thibault Saunier, Víctor Manuel Jáquez Leal, and Xavier Claessens - -License: CC BY-SA 4.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/README.md new/gst-python-1.28.1/README.md --- old/gst-python-1.28.0/README.md 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ -# gst-python - -gst-python is an extension of the regular GStreamer Python bindings -based on gobject-introspection information and PyGObject. - -It provides two things: - -1. "syntactic sugar" in form of overrides for various GStreamer APIs - that makes them easier to use in Python and more pythonic; and - -2. support for APIs that aren't available through the regular - gobject-introspection based bindings, such as e.g. GStreamer's - fundamental GLib types such as `Gst.Fraction`, `Gst.IntRange` etc. - -## Prerequisites - -These libraries are needed to build gst-python: - - gstreamer core - - gst-plugins-base - - pygobject - -You will also need pygobject and glib installed. On debian-based distros -you can install these with: - - sudo apt build-dep python3-gst-1.0 - -Only Python 3 is supported. - -## Building - - meson setup builddir && ninja -C builddir - meson install -C builddir - -## Using - -Once installed in the right place, you don't need to do anything in order -to use the overrides. They will be loaded automatically on - -```python -import gi -gi.require_version('Gst', '1.0') -from gi.repository import GObject, Gst -``` - -Note that additional imports will be required for other GStreamer libraries to -make use of their respective APIs, e.g. `GstApp` or `GstVideo`. - -## License - -gst-python is licensed under the [LGPL 2.1](https://www.gnu.org/licenses/lgpl-2.1.html) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/RELEASE new/gst-python-1.28.1/RELEASE --- old/gst-python-1.28.0/RELEASE 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/RELEASE 1970-01-01 01:00:00.000000000 +0100 @@ -1,104 +0,0 @@ -This is GStreamer gst-python 1.28.0. - -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! - -As always, this release is again packed with new features, bug fixes and -other improvements. - -The 1.28 release series adds new features on top of the 1.26 series and is -part of the API and ABI-stable 1.x release series. - -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.28/ - -Binaries for Android, iOS, Mac OS X and Windows will usually be provided -shortly after the release. - -This module will not be very useful by itself and should be used in conjunction -with other GStreamer modules for a complete multimedia experience. - - - gstreamer: provides the core GStreamer libraries and some generic plugins - - - gst-plugins-base: a basic set of well-supported plugins and additional - media-specific GStreamer helper libraries for audio, - video, rtsp, rtp, tags, OpenGL, etc. - - - gst-plugins-good: a set of well-supported plugins under our preferred - license - - - gst-plugins-ugly: a set of well-supported plugins which might pose - problems for distributors - - - gst-plugins-bad: a set of plugins of varying quality that have not made - their way into one of core/base/good/ugly yet, for one - reason or another. Many of these are are production quality - elements, but may still be missing documentation or unit - tests; others haven't passed the rigorous quality testing - we expect yet. - - - gst-libav: a set of codecs plugins based on the ffmpeg library. This is - where you can find audio and video decoders and encoders - for a wide variety of formats including H.264, AAC, etc. - - - gst-rtsp-server: library to serve files or streaming pipelines via RTSP - - - gst-editing-services: library an plugins for non-linear editing - - - gst-plugins-rs: an exciting collection of well-maintained plugins written - in the Rust programming language (usable from any language) - -==== Download ==== - -You can find source releases of gstreamer in the download -directory: https://gstreamer.freedesktop.org/src/gstreamer/ - -The git repository and details how to clone it can be found at -https://gitlab.freedesktop.org/gstreamer/gstreamer/ - -==== Homepage ==== - -The project's website is https://gstreamer.freedesktop.org/ - -==== Support and Bugs ==== - -We track bugs and feature requests in GitLab: - - https://gitlab.freedesktop.org/gstreamer/gstreamer/ - -Please submit patches via GitLab as well, in form of Merge Requests. See - - https://gstreamer.freedesktop.org/documentation/contribute/ - -for more details. - -For help and support, please head over to our Discourse forum at - - https://discourse.gstreamer.org/ - -or pop into one of our Matrix chat rooms, see - - https://discourse.gstreamer.org/t/new-gstreamer-matrix-chat-space/675 - -for more details. - -Please do not submit support requests in GitLab, we only use it for -bug tracking and merge requests review. Use the Discourse forum instead. - -==== Developers ==== - -The GStreamer source code repository can be found on GitLab on freedesktop.org: - - https://gitlab.freedesktop.org/gstreamer/gstreamer/ - -and can also be cloned from there and this is also where you can submit -Merge Requests or file issues for bugs or feature requests. - -Interested developers of the core library, plugins, and applications should -join us on Matrix for chat and the Discourse forum for announcements, help -and discussions. - -There is also a gstreamer-devel mailing list, but Discourse is preferred: - - https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/gi/overrides/Gst.py new/gst-python-1.28.1/gi/overrides/Gst.py --- old/gst-python-1.28.0/gi/overrides/Gst.py 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/gi/overrides/Gst.py 2026-02-26 03:09:39.000000000 +0100 @@ -244,31 +244,25 @@ def __nonzero__(self): return not self.is_empty() - def __new__(cls, *args): - if not args: - return Caps.new_empty() - if len(args) > 1: - raise TypeError("wrong arguments when creating GstCaps object") - - assert len(args) == 1 - if isinstance(args[0], str): - return Caps.from_string(args[0]) - elif isinstance(args[0], Caps): - return args[0].copy() - elif isinstance(args[0], Structure): + @staticmethod + def __new__(cls: type[Self], arg: typing.Optional[typing.Union[str, Caps, Structure, list[Structure], tuple[Structure, ...]]] = None) -> Self: + if not arg: + return Caps.new_empty() # type: ignore[return-value] + elif isinstance(arg, str): + return Caps.from_string(arg) # type: ignore[return-value] + elif isinstance(arg, Caps): + return arg.copy() # type: ignore[return-value] + elif isinstance(arg, Structure): res = Caps.new_empty() - res.append_structure(args[0]) - return res - elif isinstance(args[0], (list, tuple)): + res.append_structure(arg) + return res # type: ignore[return-value] + elif isinstance(arg, (list, tuple)): res = Caps.new_empty() - for e in args[0]: + for e in arg: res.append_structure(e) - return res - - raise TypeError("wrong arguments when creating GstCaps object") + return res # type: ignore[return-value] - def __init__(self, *args, **kwargs): - return super(Caps, self).__init__() + raise TypeError(f"wrong arguments when creating GstCaps object") def __str__(self) -> str: return self.to_string() @@ -518,33 +512,22 @@ class Structure(Gst.Structure): - def __new__(cls, *args, **kwargs): - if not args: - if kwargs: - raise TypeError("wrong arguments when creating GstStructure, first argument" - " must be the structure name.") - struct = Structure.new_empty() - return struct - elif len(args) > 1: - raise TypeError("wrong arguments when creating GstStructure object") - elif isinstance(args[0], str): + @staticmethod + def __new__(cls: type[Self], arg: typing.Union[str, Structure], **kwargs) -> Self: + if isinstance(arg, str): if not kwargs: - struct = Structure.from_string(args[0])[0] - return struct - struct = Structure.new_empty(args[0]) + struct = Structure.from_string(arg)[0] + return struct # type: ignore[return-value] + struct = Structure.new_empty(arg) for k, v in kwargs.items(): struct[k] = v - - return struct - elif isinstance(args[0], Structure): - struct = args[0].copy() - return struct + return struct # type: ignore[return-value] + elif isinstance(arg, Structure): + struct = arg.copy() + return struct # type: ignore[return-value] raise TypeError("wrong arguments when creating GstStructure object") - def __init__(self, *args, **kwargs): - pass - def __ptr__(self): return _gi_gst._get_object_ptr(self) @@ -770,6 +753,8 @@ class Bitmask(Gst.Bitmask): + v: int + def __init__(self, v: int) -> None: if not isinstance(v, int): raise TypeError(f"{type(v)} is not an int.") @@ -792,7 +777,10 @@ class DoubleRange(Gst.DoubleRange): - def __init__(self, start: int | float, stop: int | float): + start: float + stop: float + + def __init__(self, start: float, stop: float): self.start = float(start) self.stop = float(stop) @@ -811,6 +799,9 @@ class FractionRange(Gst.FractionRange): + start: Fraction + stop: Fraction + def __init__(self, start: Fraction, stop: Fraction): if not isinstance(start, Fraction): raise TypeError(f"{type(start)} is not a Gst.Fraction.") @@ -978,13 +969,18 @@ class MapInfo: + memory: typing.Optional[Memory] + flags: MapFlags + size: int + maxsize: int + data: typing.Optional[memoryview] + def __init__(self): self.memory = None self.flags = Gst.MapFlags(0) self.size = 0 self.maxsize = 0 self.data = None - self.user_data = None self.__parent__ = None def __iter__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/gst-python.doap new/gst-python-1.28.1/gst-python.doap --- old/gst-python-1.28.0/gst-python.doap 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/gst-python.doap 2026-02-26 03:09:39.000000000 +0100 @@ -32,6 +32,16 @@ <release> <Version> + <revision>1.28.1</revision> + <branch>1.28</branch> + <name></name> + <created>2026-02-26</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-python/gst-python-1.28.1.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.28.0</revision> <branch>main</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/meson.build new/gst-python-1.28.1/meson.build --- old/gst-python-1.28.0/meson.build 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/meson.build 2026-02-26 03:09:39.000000000 +0100 @@ -1,5 +1,5 @@ project('gst-python', 'c', - version : '1.28.0', + version : '1.28.1', meson_version : '>= 1.4', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -131,6 +131,11 @@ meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.26.0', meson.project_version()) +# dist common files from monorepo root +if not meson.is_subproject() + meson.add_dist_script('scripts/dist-common-files.py', meson.project_version()) +endif + pkgconfig = import('pkgconfig') plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0') python_plugin_install_dir = join_paths(plugins_install_dir, 'python') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/scripts/dist-common-files.py new/gst-python-1.28.1/scripts/dist-common-files.py --- old/gst-python-1.28.0/scripts/dist-common-files.py 1970-01-01 01:00:00.000000000 +0100 +++ new/gst-python-1.28.1/scripts/dist-common-files.py 2026-02-26 03:09:39.000000000 +0100 @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2023-2026 Tim-Philipp Müller <tim centricular net> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301, USA. + +import os +import subprocess +import shutil +import tempfile +import sys + +if __name__ == "__main__": + dist_root = os.environ['MESON_DIST_ROOT'] + build_root = os.environ['MESON_BUILD_ROOT'] + source_root = os.environ['MESON_SOURCE_ROOT'] + project_version = sys.argv[1] + pwd = os.environ['PWD'] + tmpdir = tempfile.gettempdir() + + ver_array = project_version.split('.') + major_minor = '{}.{}'.format(ver_array[0], ver_array[1]) + + module = os.path.basename(os.path.normpath(source_root)) + + print('Copying README.md into dist staging directory ..') + readme_src = os.path.join(source_root, '..', '..', 'README.md') + shutil.copy2(readme_src, dist_root) + + # Release notes (instead of NEWS) - could also write it out as NEWS.md + print('Copying release notes into dist staging directory ..') + relnotes_src = os.path.join(source_root, '..', '..', 'release-notes', major_minor, f'release-notes-{major_minor}.md') + with open(relnotes_src, 'r') as f: + lines = f.readlines() + if not f'### {project_version}\n' in lines: + sys.exit(f'Update {relnotes_src} first, must contain a section for {project_version}') + if not project_version.endswith('.0'): + found = False + for line in lines: + if line.startswith('The latest') and project_version in line: + found = True + if not found: + sys.exit(f'Update {relnotes_src} first, header should say latest version is {project_version}.') + shutil.copy2(relnotes_src, dist_root) + + # RELEASE + print('Copying RELEASE into dist staging directory ..') + rel_src = os.path.join(source_root, '..', '..', 'release-notes', major_minor, f'RELEASE-{major_minor}.template') + with open(rel_src, 'r') as f: + lines = f.readlines() + + assert (lines[0].startswith('This is GStreamer')) + + if module == 'gstreamer': + lines[0] = f'This is GStreamer core {project_version}\n' + else: + lines[0] = f'This is GStreamer {module} {project_version}\n' + + with open(os.path.join(dist_root, 'RELEASE'), 'w') as f: + f.writelines(lines) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-python-1.28.0/testsuite/test_types.py new/gst-python-1.28.1/testsuite/test_types.py --- old/gst-python-1.28.0/testsuite/test_types.py 2026-01-27 18:07:29.000000000 +0100 +++ new/gst-python-1.28.1/testsuite/test_types.py 2026-02-26 03:09:39.000000000 +0100 @@ -30,36 +30,6 @@ from gi.repository import Gst Gst.init(None) -Gst.DoubleRange = Gst.DoubleRange - - -class TestDoubleRange(TestCase): - def testConstructor(self): - Gst.init(None) - - Gst.DoubleRange = Gst.DoubleRange(1.2, 3.4) - self.assertEqual(r.start, 1.2) - self.assertEqual(r.stop, 3.4) - self.assertRaises(TypeError, Gst.DoubleRange, {}, 2) - self.assertRaises(TypeError, Gst.DoubleRange, 2, ()) - self.assertRaises(TypeError, Gst.DoubleRange, 2, 1) - self.assertRaises(TypeError, Gst.DoubleRange) - - def testRepr(self): - Gst.init(None) - - self.assertEqual(repr(Gst.DoubleRange(1, 2)), '<Gst.DoubleRange [1.0,2.0]>') - - def testGetValue(self): - Gst.init(None) - - st = Gst.Structure.new_empty("video/x-raw") - st["range"] = Gst.DoubleRange(1, 2) - value = st["range"] - - self.assertEqual(value.start, 1.0) - self.assertEqual(value.stop, 2.0) - class TestFraction(TestCase): def testConstructor(self): ++++++ gst-python.obsinfo ++++++ --- /var/tmp/diff_new_pack.NETYfe/_old 2026-03-05 17:18:07.806058113 +0100 +++ /var/tmp/diff_new_pack.NETYfe/_new 2026-03-05 17:18:07.814058444 +0100 @@ -1,5 +1,5 @@ name: gst-python -version: 1.28.0 -mtime: 1769533649 -commit: 9058212f43074ef7df229e73cea135c4ea96e0d6 +version: 1.28.1 +mtime: 1772071779 +commit: dcb37e20147e3b59344bab1e1cbb57e908cc6b92
