=== release 1.28.1 === 2026-02-26 01:44:06 +0000 Tim-Philipp Müller * gst-plugins-bad.doap: * meson.build: Release 1.28.1 2026-02-23 13:21:25 +0100 Carlos Bentzen * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Validate num_decoding_units_minus1 in pic_timing SEI Fixes GST-SA-2026-0012. Part-of: 2026-02-20 13:34:50 +0100 Carlos Bentzen * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecparsers/gsth266parser.h: h266parser: Fix out of bounds write when parsing pic_timing SEI Validate num_decoding_units_minus1 against the array bounds in GstH266PicTiming using READ_UE_MAX. Fixes ZDI-CAN-28839, CVE-2026-3081, GST-SA-2026-0010. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4898 Part-of: 2026-02-20 17:40:24 +0100 Carlos Bentzen * gst-libs/gst/codecparsers/gsth266parser.c: h266parser: Fix APS ID bounds check in APS parsing Use GST_H266_MAX_APS_COUNT - 1 as the upper bound to match the spec constraint and array size. Fixes ZDI-CAN-28911, CVE-2026-3086, GST-SA-2026-0009. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4904 Part-of: 2026-02-20 17:10:04 +0100 Carlos Bentzen * gst-libs/gst/codecparsers/gsth266parser.c: h266parser: Validate tile index bounds in picture partition parsing Ensure computed tile_idx stays within valid range before using it as an array index to prevent out-of-bounds reads. Fixes ZDI-CAN-28910, CVE-2026-3084, SA-2026-0011. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4902 Part-of: 2026-02-11 22:07:49 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/codecparsers/gstjpegparser.c: libs: jpegparser: boundary checks before copying it READ_BYTES macro reads data from a byte reader and then copy it to a storage variable. This patch adds a validation that the length to read cannot be bigger than the storage size. This macro right now is used only for storage variables of guint8 arrays. We have validated in the specification (sections F.1.2.1.2 and F.1.2.2.1 in ITU T.81) that Huffman tables (both AC and DC) aren't bigger than 256. Fixes SA-2026-0003, CVE-2026-3082, ZDI-CAN-28840. Fixes: Part-of: 2026-02-12 09:50:23 +0200 Sebastian Dröge * gst/dvbsuboverlay/dvb-sub.c: dvbsuboverlay: Avoid integer overflows and unreasonably large displays/regions Part-of: 2026-02-11 20:45:12 +0200 Sebastian Dröge * gst/dvbsuboverlay/dvb-sub.c: dvbsuboverlay: Add missing bounds checks to the parser everywhere Fixes SA-2026-0007, ZDI-CAN-28838, CVE-2026-2923. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4897 Part-of: 2026-02-25 17:22:52 +0200 Sebastian Dröge * gst/dvbsuboverlay/dvb-sub.c: * gst/dvbsuboverlay/dvb-sub.h: dvbsuboverlay: Mark parsed byte array as const Part-of: 2026-02-22 02:50:20 +0530 Nirbheek Chauhan * sys/applemedia/meson.build: applemedia: Small simplifications to the vulkan checks Part-of: 2026-02-22 02:49:34 +0530 Nirbheek Chauhan * sys/applemedia/avfvideosrc.h: avfvideosrc: Small fixes to the plugin header Part-of: 2026-02-22 02:45:15 +0530 Nirbheek Chauhan * meson.build: * sys/applemedia/meson.build: * sys/applemedia/plugin.m: applemedia: Get rid of AVFoundation-related defines Part-of: 2026-02-22 00:41:33 +0530 Nirbheek Chauhan * meson.build: * sys/applemedia/meson.build: * sys/applemedia/plugin.m: applemedia: Remove outdated HAVE_VIDEOTOOLBOX define All platform versions we support have VideoToolbox now. Part-of: 2026-02-22 00:38:33 +0530 Nirbheek Chauhan * meson.build: * sys/applemedia/vtenc.c: applemedia: Fix broken HAVE_VIDEOTOOLBOX_10_9_6 define We now use VTCompressionSessionPrepareToEncodeFrames() correctly. Part-of: 2026-02-22 00:55:45 +0530 Nirbheek Chauhan * sys/applemedia/meson.build: applemedia: Sort sources list, fix indentation No functional changes. Part-of: 2026-02-20 13:23:06 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtdec: Calculate DTS offset correctly Previous method was too simple and didn't offset DTS enough. videotestsrc ! vtenc_h264 ! qtmux ! fakesink with GST_DEBUG=2 showed qtmux complaining about DTS > PTS right away, on latest macOS at least. If we only ever get one frame from upstream, it'll get pushed out when drain() is called. Otherwise, it goes out as soon as the second frame arrives and we can calculate the offset. Of course in some cases we know right away that DTS offset won't be needed and then this is all bypassed. If incoming frames don't have PTS set, we don't set a DTS offset at all. This is because VideoToolbox, according to its docs, simply requires PTS to be provided alongside the frame being submitted to the encoder. From my testing, when PTS is invalid, VT will just not set DTS at all on the output buffers, so we don't need the offset. 1st PTS minus 2nd PTS should always give us enough offset while being more precise than e.g. using the DBP size instead. Similar logic is already used in other encoders such as vah26*enc or svthevcenc. Part-of: 2026-02-20 16:05:14 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix wrong DPB size check in the output loop The condition was always slightly wrong, but rather harmless. However after my 'fix' in 30b213a86fd5ed8f654572bd35dff31af5a36334 it became possible that with dpb_size=0 we end up busy looping because obviously the queue length could not be <0, so the loop would never sleep... Part-of: 2026-02-19 16:47:12 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtenc: Make sure draining actually drains all frames, port fixes from vtdec, unify naming This commit mostly ports existing fixes from vtdec to vtenc. Also makes them use the same naming to follow/compare the logic easier. vtenc was missing the is_draining flag that we already have in vtdec. It's mostly useful to make sure the output loop outputs all the frames from the queue before it pauses when draining. Without it, it's possible for some frames to end up being flushed instead of drained. Additionally, if we're draining or flushing, the output callback will now always push to the output queue no matter if it goes over the size limit. This is already present in vtdec and reduces the risk of the VT thread getting stuck when the output loop stops and won't actively consume buffers. I also renamed a few functions to make them match vtdec and make more sense. Part-of: 2026-02-19 16:30:07 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: Make sure VT thread won't get stuck after a downstream error Without this, if output loop stops because of an error we might end up stuck because the VT thread can't push out the remaning frames. This is already present in vtenc and is also needed here in vtdec. Part-of: 2026-02-19 16:27:45 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix return value in flush() Part-of: 2026-02-20 14:19:42 -0500 Daniel Morin * ext/onnx/gstonnxinference.c: onnx: set dims_order on GstTensor - set dims_order on GstTensor Part-of: 2026-02-20 14:18:03 -0500 Daniel Morin * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.c: tensordecoders: fix wrong dims_order check - Use correct DIM_ORDER on GstTensor check for YOLO tensor decoders Part-of: 2026-02-13 13:07:15 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvavp8enc.c: vavp8enc: set color format chroma With the refactor of the encoder helper open methods, a hidden bug in vp8 encoder appeared, because the rt_format was never assigned, relying on a default value that were removed. This patch sets the format's chroma before opening the encoder helper object. Fixes: #4906 Part-of: 2026-02-12 19:24:41 -0500 Monty C * sys/decklink/meson.build: meson: Explicitly use cpp_std=c++11 for decklink Part-of: 2026-02-17 17:01:48 -0500 Nicolas Dufresne * docs/libs/codecparsers/sitemap.txt: doc: codecparsers: Switch to gi-index The since marker comment are not working when using the c-index. Part-of: 2026-02-17 15:09:09 -0500 Nicolas Dufresne * gst-libs/gst/codecparsers/gstav1bitwriter.c: * gst-libs/gst/codecparsers/gstav1parser.c: * gst-libs/gst/codecparsers/gsth264bitwriter.c: * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth264parser.h: * gst-libs/gst/codecparsers/gsth265bitwriter.c: * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecparsers/gsth266parser.h: * gst-libs/gst/codecparsers/gstjpeg2000sampling.h: * gst-libs/gst/codecparsers/gstjpegbitwriter.c: * gst-libs/gst/codecparsers/gstjpegparser.c: * gst-libs/gst/codecparsers/gstmpegvideometa.c: * gst-libs/gst/codecparsers/gstmpegvideoparser.c: * gst-libs/gst/codecparsers/gstvc1parser.c: * gst-libs/gst/codecparsers/gstvc1parser.h: * gst-libs/gst/codecparsers/gstvp9bitwriter.c: * gst-libs/gst/codecparsers/gstvp9parser.c: * gst-libs/gst/codecparsers/gstvp9parser.h: codecparsers: Fix annotation warnings reported at GIR constructions This fixes all the minor warning emited buy the GIR generator. Part-of: 2026-02-17 15:06:18 -0500 Nicolas Dufresne * gst-libs/gst/codecparsers/gsth265parser.h: * gst-libs/gst/codecparsers/gstvc1parser.c: * gst-libs/gst/codecparsers/gstvc1parser.h: * tests/check/libs/h265parser.c: codecparsers: h265/vc1: Add missing namespace to some defines This is effectively an API break, but I think its fair break considering the risk of clash. Part-of: 2026-02-17 15:04:37 -0500 Nicolas Dufresne * gst-libs/gst/codecs/meson.build: build: codecs: Add gir dependency to the new GstCodecParsers gir This fixes warning when structures from the parsers are exposed through the codecs library API. Part-of: 2026-02-17 15:01:07 -0500 Nicolas Dufresne * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gsth265decoder.h: * sys/v4l2codecs/gstv4l2codech265dec.c: codec: h265decoder: Fix annotation and constify return value gst_h265_decoder_get_sps_ext() return a bare pointer inside an array own by the base class. Fix the annotation and constify the return value. Fix its single usage in v4l2 codecs. Part-of: 2026-02-17 13:32:14 -0500 Nicolas Dufresne * docs/meson.build: * gst-libs/gst/codecparsers/meson.build: build: codecparsers: Create a GIR file needed for since marking Without a GIR file, despite the absence of GObject in this library, the documentation script cannot resolved the since marker. Forcing hacks to ignore newly introduce symbols. This also prevented a lot of annotation error from being reported. Part-of: 2026-02-17 13:29:41 -0500 Nicolas Dufresne * gst-libs/gst/codecparsers/meson.build: build: codecparsers: Install some newly introduce API headers This notably install the bitwriter headers included in the API but with their headers not being installed. Part-of: 2026-02-17 13:28:23 -0500 Nicolas Dufresne * gst-libs/gst/codecs/meson.build: build: codecs: Small style improvement Part-of: 2026-02-17 13:26:59 -0500 Nicolas Dufresne * gst-libs/gst/codecs/meson.build: build: codecs: Add AV1 decoder to the GIR includes Add missing AV1 decoder header to the GIR include flags. Since there is no central header for this library, we need to pass every codec headers to the GIR so all the symbols are resolved. Part-of: 2026-02-18 19:49:25 -0500 Detlev Casanova * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: Set long and short term RPS controls Some hardware need that information to decode HEVC frames (e.g.: Rockchip rk3588 SoC). Those controls were added in linux 6.20 Part-of: 2026-01-26 11:56:44 -0500 Detlev Casanova * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gsth265decoder.h: codecs: h265dec: Parse extended SPS information This extra information allow notably parsing of the slices headers inside the accelerator. Part-of: 2026-01-26 11:53:02 -0500 Detlev Casanova * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: h265parser: Store raw short/long term RPS sets In order to support the new V4L2 HEVC stateless controls the raw values from the long and short term RPS sets need to be kept. The raw values are used in those controls so that they are kept compatible with the Vulkan API. Part-of: 2025-06-27 11:24:04 -0400 Detlev Casanova * sys/v4l2codecs/linux/v4l2-controls.h: * sys/v4l2codecs/linux/videodev2.h: v4l2codecs: Add short and long term controls in linux headers Add the new V4L2_CID_STATELESS_HEVC_EXT_SPS_ST_RPS and V4L2_CID_STATELESS_HEVC_EXT_SPS_LT_RPS controls in the linux kernel header. Part-of: 2026-02-12 16:04:04 +0100 Hyunjun Ko * ext/vulkan/vkav1dec.c: vkav1dec: fix to set SavedOrderHints properly This fixes to play AV1 correctly on hardwares that require SavedOrderHints, eg. ANV. Otherwise the params is going to be reset to 0 during initialization. Part-of: 2026-02-19 17:22:59 +0900 Seungha Yang * gst/closedcaption/gstccconverter.c: ccconverter: Reset counters on flush-stop ... instead of flush-start. flush-start event can happen at arbitrary points while the element is processing data in streaming thread, which may cause races. Reset counters on flush-stop to ensure that the reset happens after the streaming thread no longer processing data Part-of: 2026-02-19 15:43:13 +0900 Seungha Yang * gst/closedcaption/gsth264ccextractor.c: * gst/closedcaption/gsth265ccextractor.c: h264,h265ccextractor: Fix framerate in initial caps Update framerate in set_format() as well so that the input framerate is copied to the initial output caps Part-of: 2026-02-09 12:33:41 -0500 Dominique Leroux * sys/applemedia/avfassetsrc.h: * sys/applemedia/avfassetsrc.m: * sys/applemedia/avfdeviceprovider.h: * sys/applemedia/avfdeviceprovider.m: * sys/applemedia/avfvideosrc.h: * sys/applemedia/avfvideosrc.m: * sys/applemedia/avsamplevideosink.h: * sys/applemedia/avsamplevideosink.m: * sys/applemedia/helpers.h: * sys/applemedia/helpers.m: * sys/applemedia/iosassetsrc.h: * sys/applemedia/iosassetsrc.m: * sys/applemedia/meson.build: * sys/applemedia/plugin.m: * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: applemedia: elements can now be individually registered with gst-full Part-of: 2026-02-17 17:41:41 +0900 Seungha Yang * sys/asio/gstasioringbuffer.cpp: asiosink: Fill silence when paused Due to the ASIO API design, it's not possible to pause a specific ASIO device channel. Fill silence instead to avoid garbage noise Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4909 Part-of: 2026-02-12 03:12:05 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: vtdec: Fix GstVideoCodecState leak Part-of: 2026-02-11 19:26:07 +0530 Nirbheek Chauhan * ext/ladspa/gstladspa.c: * gst/frei0r/gstfrei0r.c: frie0r, ladspa: Stop using G_MODULE_SUFFIX And define GST_EXTRA_MODULE_SUFFIX inside the plugin sources, since it is no longer set in config.h Part-of: 2026-02-11 19:25:09 +0530 Nirbheek Chauhan * ext/lv2/gstlv2.c: * meson.build: * sys/shm/shmpipe.c: macos: Stop using HAVE_OSX, use built-in macros instead The host_system == 'darwin' check is incorrect for this anyway. Part-of: 2026-02-02 21:37:05 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: Check for AV1 and VP9 support once And don't warn if they aren't supported. Prevents spammy warnings when playing an fmp4 stream which reconfigures every segment. Ensure that we check it dynamically during caps negotiation, so that we do not enable this supplemental support if not necessary, since it is process-wide and (likely) reserves resources. Part-of: 2026-01-28 16:58:03 +0530 Nirbheek Chauhan * meson.build: * sys/applemedia/meson.build: * sys/applemedia/plugin.m: applemedia: Disable avfvideosrc and avfdeviceprovider on tvOS/watchOS AVCaptureDevice isn't available on watchOS, and it's only available on tvOS 17.0+. It's not clear how to make an entire element dynamically available via __builtin_available() so just disable it for now. Part-of: 2026-01-28 15:53:05 +0530 Nirbheek Chauhan * sys/applemedia/vtenc.c: vtenc: Fix build with tvOS https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_constantbitrate Part-of: 2026-01-28 14:41:03 +0530 Nirbheek Chauhan * sys/applemedia/avfvideosrc.m: avfvideosrc: Add support for newer iOS 17+ APIs The orientation property is deprecated, and has been replaced with videoRotationAngle. Coincidentally, this is also the only way to do rotation on tvOS. Left TODOs for some of the features that are also available on newer macOS now. Part-of: 2026-01-28 14:04:41 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: vtdec: Software decoders are now more widely available When software decoders are available, we now register a separate vtdec_hw, similar to macOS. http://developer.apple.com/documentation/videotoolbox/kvtvideodecoderspecification_enablehardwareacceleratedvideodecoder Part-of: 2026-01-28 14:00:07 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: vtdec: VTRegisterSupplementalVideoDecoderIfAvailable is widely available It's also available on tvOS and visionOS. https://developer.apple.com/documentation/videotoolbox/vtregistersupplementalvideodecoderifavailable(_:) Part-of: 2026-01-28 14:04:05 +0530 Nirbheek Chauhan * sys/applemedia/meson.build: * sys/applemedia/plugin.m: * sys/applemedia/videotexturecache-gl.h: * sys/applemedia/videotexturecache-gl.m: * sys/applemedia/vtdec.c: applemedia: Enable EAGL support on tvOS too Part-of: 2026-01-28 13:58:16 +0530 Nirbheek Chauhan * sys/applemedia/avfdeviceprovider.m: avfdeviceprovider: AVCaptureDevice manufacturer is more widely available https://developer.apple.com/documentation/avfoundation/avcapturedevice/manufacturer Part-of: 2026-01-28 13:45:15 +0530 Nirbheek Chauhan * meson.build: * sys/applemedia/avfdeviceprovider.m: * sys/applemedia/avfvideosrc.m: * sys/applemedia/corevideobuffer.c: * sys/applemedia/plugin.m: * sys/applemedia/videotexturecache-gl.h: * sys/applemedia/videotexturecache-gl.m: * sys/applemedia/videotexturecache-vulkan.mm: * sys/applemedia/videotexturecache.m: * sys/applemedia/vtdec.c: * sys/applemedia/vtenc.c: applemedia: Stop using HAVE_IOS, use TARGET_OS_* macros instead HAVE_IOS is being used incorrectly, because iOS vs macOS are not the only two choices. Part-of: 2026-01-28 11:45:20 +0530 Nirbheek Chauhan * ext/sctp/usrsctp/meson.build: * gst-libs/gst/vulkan/meson.build: * meson.build: * sys/applemedia/meson.build: * sys/decklink/meson.build: * sys/shm/meson.build: * tests/examples/avsamplesink/meson.build: meson: Deprecate `system = 'ios'` in cross files, use subsystem Since we require Meson 1.4.0, we can now use subsystem names (added in 1.2.0). Part-of: 2026-01-28 11:40:08 +0530 Nirbheek Chauhan * ext/ladspa/gstladspa.c: ladspa: Fix macOS detection The macOS ifdefs were also incorrectly enabled for iOS. Part-of: 2026-02-16 17:17:07 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Avoid busy looping when queue length is smaller than DPB size The check for whether the output loop should sleep was wrong. If we had something in the queue but not enough to push frames out (depending on the DPB size), we'd busy loop until that changed. If the input data happened to stop at that point, vtdec would busy loop until EOS arrives, which doesn't always happen instantly. This just makes sure we're checking for the same thing in both places, eliminating this weirdness. Part-of: 2023-04-02 16:53:45 +0100 Tim-Philipp Müller * meson.build: * scripts/dist-common-files.py: modules: dist common files from monorepo root Less noise when making releases, and just need to maintain one copy. Part-of: 2026-02-15 17:45:19 +0000 Tim-Philipp Müller * README.md: modules: remove subproject README.md from git Will be added to the tarballs based on the monorepo README on dist. Part-of: 2026-02-15 17:20:59 +0000 Tim-Philipp Müller * RELEASE: modules: remove RELEASE from git, will be generated from template on dist Part-of: 2026-02-15 15:02:07 +0000 Tim-Philipp Müller * NEWS: modules: Remove NEWS from git which is generated from full release notes Part-of: 2026-02-16 10:51:53 +0800 Xi Ruoyao * ext/zxing/gstzxing.cpp: zxing: Fix version check for zxing-cpp 3.0.1 Part-of: 2026-02-12 14:40:40 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasetransform.c: vabasetransform: copy buffer's metadata at copy when import buffer When downstream doesn't support video meta, the buffer needs to be imported to a VA surface by copying the frame data. But buffer's metadata weren't copied. This patch fixes it by calling base class copy_metadata() virtual method. Original-patch-by: carol-lim Fixes: #4866 Part-of: 2026-02-11 09:59:53 +0000 axxel * ext/zxing/gstzxing.cpp: zxing: Minimal support for compiling with zxing-cpp 3.x Part-of: 2026-02-12 02:25:38 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: vtdec: Fix CM memory leak due to incorrect unref The GstMemory was being leaked for each frame because gst_memory_unmap() was setting info->memory to NULL, making the unref a no-op. We need to store a separate ref to the memory. This broke in 9baf4701f04ee238db6282f4f348a43ca5a299a9, where info->memory now starts to get cleared on unmap. Part-of: 2026-02-10 22:12:56 +0100 Sjoerd Simons * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: make gst_wl_window_commit_buffer handle NULL buffers gst_wl_window_commit_buffer is meant to clear the various surfaces when passed a NULL buffer. In 130e093d5c ("wayland: window: Add the ability to offload cropping"), this case was broken. Correct that. Fixes: 130e093d5c ("wayland: window: Add the ability to offload cropping") Part-of: 2026-02-06 13:09:02 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vulkan: load video function pointers conditionally based on codec operation Split GST_VULKAN_DEVICE_VIDEO_FN_LIST into COMMON, DECODE, and ENCODE sub-lists so that gst_vulkan_video_get_vk_functions() only loads the function pointers relevant to the codec operation being used. Previously, both decoder and encoder would attempt to load all Vulkan Video function pointers unconditionally, causing initialization to fail on drivers that only support one direction (e.g. decode-only drivers would fail to find vkCmdEncodeVideoKHR). Now the decoder only requires CmdDecodeVideo while the encoder only requires CmdEncodeVideo, GetEncodedVideoSessionParameters, and GetPhysicalDeviceVideoEncodeQualityLevelProperties. Part-of: 2026-02-04 16:32:01 +0530 Nirbheek Chauhan * gst-libs/gst/vulkan/meson.build: * sys/applemedia/meson.build: meson: Add a subproject for providing the LunarG MoltenVK SDK Part-of: 2026-02-04 16:38:21 +0200 Sebastian Dröge * sys/aja/gstajasinkcombiner.cpp: ajasinkcombiner: Only forward the segment events from the video sinkpad It's the video buffers with their timestamps that are forwarded, not the audio ones, and if both segments are different then this won't work. Part-of: 2026-01-23 12:13:09 +0100 Stéphane Cerveau * ext/openh264/gstopenh264enc.cpp: openh264enc: remove broken drain and simplify handle_frame OpenH264 encoder does not support B-frames for any profile, or other advanced encoding feature which could require frame buffering, so there are no potential frames to drain. The drain code was also broken as EncodeFrame() rejects NULL input with cmInitParaError. Remove the non-functional drain loop and clean up handle_frame() by removing dead code paths that were only needed for the broken drain. Add defensive NULL frame check with error logging. Part-of: 2026-01-22 14:39:46 +0100 Stéphane Cerveau * ext/openh264/gstopenh264enc.cpp: * ext/openh264/gstopenh264enc.h: openh264enc: skip drain for baseline profile Baseline profile doesn't use B-frames, so there are no buffered frames to drain at EOS. Attempting to drain by calling EncodeFrame with NULL input causes openh264 to return cmInitParaError and log a spurious error message. Store the profile when initializing the encoder and check it in finish() to skip the unnecessary drain call for baseline profile. Part-of: 2025-12-30 18:22:47 +0100 Mathieu Duponchelle * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmuxcommon.h: tsmux: reduce noise for DEBUG log level Part-of: 2026-01-06 21:35:50 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/frei0r/gstfrei0rsrc.c: frei0r-src: adapt klass "Src" to "Source" use recommended "Source" instead of "Src" Part-of: 2026-01-06 21:28:10 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/rtp/gstrtpsrc.c: rtpsrc: adapt klass "Src" to "Source" use recommended "Source" instead of "Src" Part-of: 2026-01-06 21:25:37 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * ext/avtp/gstavtpsrc.c: avtpsrc: adapt klass "Src" to "Source" use recommended "Source" instead of "Src" Part-of: 2026-01-06 21:21:08 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/unixfd/gstunixfdsrc.c: unixfdsrc: adapt klass "Src" to "Source" use recommended "Source" instead of "Src" Part-of: 2026-01-06 21:15:08 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/debugutils/gstvideocodectestsink.c: videocodectestsink: fix typo in klass use "Video" instead of "video" Part-of: 2026-01-06 09:59:21 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: gst: also adapt author names in the gst_plugins_cache.json files Part-of: 2026-01-04 19:25:58 +0100 Christian Gräfe * ext/webp/gstwebpdec.c: * ext/webrtcdsp/gstwebrtcechoprobe.cpp: * gst/videoparsers/gstmpegvideoparse.c: gst-plugins: fix author name: correct incomplete or wrong emails Part-of: 2026-01-04 19:02:19 +0100 Christian Gräfe * gst/debugutils/gstvideocodectestsink.c: * gst/rist/gstristrtpdeext.c: * gst/rist/gstristrtpext.c: * gst/rist/gstristsink.c: * gst/rist/gstristsrc.c: * gst/rist/gstroundrobin.c: * sys/ipcpipeline/gstipcslavepipeline.c: gst: fix author name: add missing closing angle bracket Part-of: 2026-01-04 18:51:07 +0100 Christian Gräfe * ext/dtls/gstdtlsdec.c: * ext/dtls/gstdtlsenc.c: * ext/dtls/gstdtlssrtpdec.c: * ext/dtls/gstdtlssrtpdemux.c: * ext/dtls/gstdtlssrtpenc.c: dtls: fix author name: add missing angle brackets Part-of: 2026-01-04 19:59:13 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/fieldanalysis/gstfieldanalysis.c: fieldanalysis: adapt klass to recommendation - use recommended "Analyzer" instead of "Analysis" Part-of: 2026-01-04 19:54:15 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * gst/videofilters/gstzebrastripe.c: zebrastripe: adapt klass to recommendation - use "Video" as the element operates on base type video - use recommendated "Analyzer" instead of "Analysis" Part-of: 2026-01-04 21:21:41 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: gst-plugins-bad: remove trailing spaces: update gst_plugins_cache.json Part-of: 2026-01-04 14:31:05 +0100 Christian Gräfe * ext/smoothstreaming/gstsmoothstreaming-plugin.c: smoothstreaming: remove trailing space from desc Part-of: 2026-01-04 14:24:47 +0100 Christian Gräfe * ext/openni2/gstopenni2src.cpp: openni2src: remove trailing space from desc Part-of: 2026-01-04 14:15:07 +0100 Christian Gräfe * gst/siren/gstsirendec.c: * gst/siren/gstsirenenc.c: siren: remove trailing space from klass Part-of: 2026-01-30 16:55:11 +0100 Mathieu Duponchelle * gst/closedcaption/gstcea608mux.c: cea608mux: fix overflow when calculating output PTS In the presence of a 60000 / 1001 framerate, the previous method of calculation would overflow after 10 hours. Part-of: 2026-01-11 20:44:46 -0500 Daniel Morin * ext/analyticsoverlay/gstobjectdetectionoverlay.c: objectdetectionoverlay: add support for rotated bounding boxes - Use angle from GstAnalyticsODMtd Part-of: 2026-01-21 16:24:50 -0500 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: Fix CLAMP operation of maxFALL and maxCLL The CLAMP operation was simply called the wrong way, which resulted in returning the original value without clipping. This fixes !9353. Part-of: 2026-01-30 16:09:30 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix race condition when negotiating during playback Follow up to 376eee3bb1250cdf0f4aeab9f362c01f291dfd55 - this change should have the same intended effect but removes a rare race condition. After the above commit it became possible for the output loop to be active in two threads at once and attempt to push frames from both, possibly out of order. That's because both the thread that calls set_format() and the normal output loop thread would eventually end up calling drain_decoder(). When that happened, the srcpad task loop would quit correctly, but the manual call to the output loop function in drain_decoder() could get stuck due to the drain/flush flags being reset from the other thread. This change makes sure we never call the output loop from anywhere else than the srcpad task. Instead of that, the output loop will not pause while drain/flush is active as long as there are any frames in the output queue. This makes sure that in drain_decoder(), when we request the loop to pause, all frames will be out by the time that call returns. At the same time, a pause requested from change_state() won't be affected. Part-of: 2026-01-30 16:08:41 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Add more debug logging Part-of: 2026-01-30 16:26:36 +0100 François Laignel * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: fix reverse playback Problem found rendering an F32 stream. Part-of: 2026-01-29 16:49:26 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Don't re-create session if only the framerate changed Playing back some fMP4 files can trigger caps events at fragment boundaries where only the framerate changes. We shouldn't re-create the decoder session in this case, because the new fragment may still depend on reference frames from the previous fragment. Re-creating the session makes VT unable to decode a part of the new fragment, resulting in missing frames for a while. Part-of: 2026-01-23 13:13:08 +0100 Rinat Zeh * ext/mpeghdec/gstmpeghdec.c: mpeghdec: memory leak fix in MPEG-H Audio decoder plugin Part-of: 2026-01-23 20:06:11 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: * gst/audiobuffersplit/gstaudiobuffersplit.h: audiobuffersplit: Implement negative rates correctly Change segments with negative rates to segments with positive rate and negated applied rate, and accordingly adjust timestamps and reverse all samples in every buffer before passing to the adapter. This makes sure that chunking of output buffers is still done correctly while keeping all samples in order. Previously each buffer would be output with samples in positive order, but there would be discontinuities with jumps backward at every input buffer. Part-of: 2026-01-23 15:40:01 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Convert gap events to silence buffers Otherwise they would potentially pass ahead of previous buffers that are still in the adapter, or otherwise cause inconsistent output. Part-of: 2026-01-20 13:12:28 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Handle SEGMENT_DONE the same way as EOS Part-of: 2026-01-20 13:13:48 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Send any pending segment before EOS/SEGMENT_DONE This is still not entirely correct but at least makes sure that a pending segment is sent downstream at all. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6019 Part-of: 2026-01-16 18:19:08 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Log if an input buffer has the discont flag set or not Part-of: 2026-01-16 18:18:40 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Don't use floating point divisions unnecessarily Also rename variables for clarity. Part-of: 2026-01-16 18:17:42 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Use the output segment for output related calculations Part-of: 2026-01-16 18:17:00 +0200 Sebastian Dröge * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Correctly calculate adapter start/end running time for negative rates Running time still increases normally. Part-of: 2026-01-19 03:03:11 +0530 Nirbheek Chauhan * gst-libs/gst/vulkan/ios/gstvkwindow_ios.m: vulkan/ios: Fix scaling and resizing with UIView * layoutSubviews was misspelled, so it was never being called * Vulkan wants the size in pixels, and the CGRect is in points, so it must be scaled * Update drawable size when the window object changes Part-of: 2025-12-04 10:55:18 -0800 Deepa Guthyappa Madivalara * sys/v4l2codecs/linux/videodev2.h: v4l2: Add support for AV1 V4l2 decoder Introduce support for new pixelformat V4L2_PIX_FMT_AV1 mapping to AV01. Part-of: 2026-01-28 13:31:14 +0000 freedesktop * gst-libs/gst/play/gstplay.c: gstplay: fix reference counting Part-of: 2026-01-28 11:51:07 +0200 Sebastian Dröge * gst/tensordecoders/gstclassifiertensordecoder.c: classifiertensordecoder: Fix uninitialized variable compiler warning And also remove some dead code: self->class_quark is always set at this point. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4871 Part-of: 2026-01-28 11:50:10 +0200 Sebastian Dröge * gst-libs/gst/va/gstvadisplay.c: vadisplay: Fix a couple of new const-ness warnings around strstr() usage Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4871 Part-of: 2026-01-28 10:22:21 +0000 Philippe Normand * ext/webrtc/gstwebrtcbin.c: webrtcbin: Check the presence of encoding-name fields in answer caps The caps returned by `gst_sdp_media_get_caps_from_media()` can potentially be incomplete if the input SDP has been altered by a third party, so in those cases skip to the next payload when processing answer caps. Part-of: 2026-01-27 17:36:15 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Implement drain() to allow reverse playback Outputs what it can output and then flushes the leftovers in case there was an error when pushing frames downstream. Matches v4l2dec's behaviour. Without this `gst_video_decoder_drain_out()` would do nothing and reverse playback would just get stuck. Part-of: 2026-01-27 17:22:47 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Make sure to reset last flow return when flushing Otherwise if we hit e.g. an EOS before a flush, it could stick around and cause any following frames to be ignored in handle_frame(). Part-of: 2026-01-27 16:40:29 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix a very slight race in handle_frame() when flushing Part-of: 2026-01-21 11:12:52 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Always reset flushing flag in flush() Previous version assumed that flush-stop would always be received after a flush() call, but the base video decoder class will just simply use that function in reverse playback without sending any events, causing the flag to be stuck. Part-of: 2026-01-22 16:32:27 +0900 Seungha Yang * gst/codectimestamper/gstcodectimestamper.c: codectimestamper: Fix latency query handling Add missing max latency value update Part-of: 2026-01-20 14:25:52 +0100 François Laignel * gst/mxf/mxfdemux.c: mxfdemux: always send a segment before sending eos or segment-done When a seek was requested past the end of the stream an eos or segment-done event was sent without the segment event. The segment event is sent before the first buffer is pushed and it takes care of adjusting the segment with regard to the max_temporal_offset (see in `gst_mxf_demux_handle_generic_container_essence_element ()`). If no buffer can be sent, the segment is not sent. This commit makes sure a segment is sent before pushing any eos or segment-done event. Part-of: 2025-12-11 15:51:03 +0100 Edward Hervey * gst/mpegtsdemux/tsdemux.c: tsdemux: Simplify initial packet handling * If there's no payload, we don't care about it * If we have a non-PUSI packet and we are empty, return early Part-of: 2025-11-14 16:04:04 +0100 Edward Hervey tsdemux: Fix Continuity Counter handling If a stream has a continuity counter issue we need to immediately: * Drop all pending data, **NOT** flush it downstream (it's incomplete) * Not use that packet, even if it's a PUSI. This avoids two issues with PES: * Processing: a PES Header .. which might come from a misordered packet, introducing bogus timing observations. * Sending: half-complete PES payload downstream when discontinuity happens, which can confuse several bytestream-based codecs/parsers (which rely on a bytecode sequence to detect boundaries, and not a specific payload size). Part-of: 2026-01-13 16:01:28 +0100 François Laignel * gst/mxf/mxfdemux.c: mxfdemux: fix gst_mxf_demux_pad_get_stream_time () `gst_mxf_demux_pad_get_stream_time ()` was only considering the `material_track` edit rate while other time related functions such as `gst_mxf_demux_pad_get_current_time ()` use the `material_track` edit rate when summing the duration of all the previous essence track, then use current essence track edit rate for the essence track position. Part-of: 2025-11-14 15:15:53 +0100 Edward Hervey * gst/mpegtsdemux/mpegtspacketizer.c: mpegtspacketizer: Handle clock change/resets without skew correction While we don't want to calculate and apply a skew correction, we still need to detect whether upstream clock changed Part-of: 2026-01-09 17:05:35 +0200 Sebastian Dröge * sys/aja/gstajasinkcombiner.cpp: ajasink: Only allow 6 / 8 / 16 audio channels Any other value is rejected by the SDK and driver, see implementation of `CNTV2Card::SetNumberAudioChannels()`. Part-of: 2026-01-14 14:06:04 +0100 Xabier Rodriguez Calvar * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/transportstream.c: * gst-libs/gst/webrtc/nice/nicestream.c: webrtc: sink floating refs of ICE transports We should be returning full refs instead of floating refs when get them queried from properties and we were not because references were not sunk after creation. Part-of: 2026-01-05 19:15:10 +0900 Seungha Yang * sys/nvcodec/gstcudamemorycopy.c: cudaupload, cudadownload: Fix CUDA/GL interop copy path Avoid requiring an element-owned GL context when copying between CUDA and GL memory, since the GL context is already owned by the GLMemory object Part-of: 2026-01-27 18:25:19 +0100 Piotr Brzeziński * ext/dash/meson.build: * ext/smoothstreaming/meson.build: * ext/ttml/meson.build: meson: Fix libxml2 not building due to wrong option type 'python' was moved from a boolean to a feature a few months ago and 4f4260dbe3489699aba0a724a3d55020666a0d6a pulled that in on our side. Notably, this was causing adaptivedemux2 to not build on my system. Part-of: 2026-01-27 17:10:54 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.28.0 === release 1.28.0 === 2026-01-27 17:02:33 +0000 Tim-Philipp Müller * NEWS: * README.md: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.28.0 2026-01-27 15:14:41 +0000 Tim-Philipp Müller * ext/lcevcdecoder/gstlcevch264decodebin.c: * ext/lcevcdecoder/gstlcevch265decodebin.c: * ext/lcevcdecoder/gstlcevch266decodebin.c: lcevch26xdecodebin: don't autoplug for now until issues with non-LCEVC streams are fixed See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4870 Part-of: 2026-01-25 17:18:08 +0000 Tim-Philipp Müller * po/LINGUAS: * po/ar.po: * po/hr.po: * po/ro.po: gst-plugins-bad: update translations Part-of: 2026-01-19 18:48:39 +0100 Rafael Caricio * sys/applemedia/vtdec.c: vtdec: check AV1 support during caps negotiation Override getcaps vfunc to filter out video/x-av1 from advertised caps when hardware decoding is not supported, rather than failing later in set_format. This allows proper fallback to other decoders during autoplugging. Part-of: 2026-01-20 20:27:40 +0530 Nirbheek Chauhan * ext/rtmp/gstrtmp.c: * ext/rtmp/gstrtmpsink.c: * ext/rtmp/gstrtmpsrc.c: rtmp: Emit a deprecation warning in init After 1.28.0 is released, we will remove this plugin and have the rtmp2 plugin register these features. Part-of: 2026-01-18 17:09:10 +0530 Nirbheek Chauhan * meson.build: * meson.options: meson: Don't disable orc support when orcc is not available This was breaking usage of orc when cross-compiling with no orcc available in PATH. We can use the orc-dist.{c,h} files in that case as long as the orc library itself is available. Using the subproject, for example. Part-of: 2025-12-20 19:56:37 +0530 Nirbheek Chauhan * sys/androidmedia/gstamc.c: * sys/androidmedia/gstamcutils.c: * sys/androidmedia/gstamcutils.h: * sys/androidmedia/gstamcvideoenc.c: * sys/androidmedia/gstjniutils.c: * sys/androidmedia/gstjniutils.h: * sys/androidmedia/jni/gstamc-codeclist-jni.c: * sys/androidmedia/meson.build: amc: Fix init on Android API < 29 Not finding isHardwareAccelerated() is an error only for API >= 29. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4693 Part-of: 2025-12-20 19:55:45 +0530 Nirbheek Chauhan * sys/androidmedia/gstjniutils.c: amc: Fix whitespace around gst_amc_jni_call_*_method macros Part-of: 2026-01-14 19:07:40 -0600 Christopher Degawa * ext/svtav1/gstsvtav1enc.c: svtav1enc: handle deprecations from SVT-AV1 4.0.0 `enable_adaptive_quantization` was replaced by `aq_mode` since it's not a boolean. `target_socket` was removed entirely. If someone wants to pin the encoder to a specific socket, they will have to use external means like numactl etc. Signed-off-by: Christopher Degawa Part-of: 2026-01-12 16:09:38 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/win32ipc/gstwin32ipc.cpp: * sys/win32ipc/gstwin32ipcbasesink.cpp: * sys/win32ipc/gstwin32ipcbasesrc.cpp: * sys/win32ipc/gstwin32ipcsink.cpp: * sys/win32ipc/gstwin32ipcsrc.cpp: win32ipc: Update plugin docs Part-of: 2026-01-12 16:07:54 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12fisheyedewarp.cpp: * sys/d3d12/gstd3d12memorycopy.cpp: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12remap.cpp: d3d12: Update plugin docs Part-of: 2026-01-12 15:23:24 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: wasapi2: Update plugin docs Part-of: 2026-01-12 07:34:24 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: va: encoder: don't fail at close if config isn't created With the last refactor, the configuration of the encoder is lazy, so it's possible to close the encoder without even opened it. But still return FALSE if closing the encoder with no config ID, which generated spurious error logs. This patch also resets the state of the encoder while closing. Fixes: #4852 Part-of: 2026-01-13 09:46:48 +0100 Sjoerd Simons * ext/onnx/gstonnxinference.c: onnx: Reset memory_info after freeing For clarity also reset memory_info to NULL after freeing it. Part-of: 2026-01-13 08:33:36 +0100 Sjoerd Simons * ext/onnx/gstonnxinference.c: onnxinference: Fix invalid free of output names Ensure the output_names array has been allocated before trying to free its elements. This situation happens when the model validation fails before the output names are assigned; I ran into it due to an incorrect model info file. Part-of: 2026-01-10 21:27:30 +0100 Ruben Gonzalez * tests/check/meson.build: bad: fix indentation Part-of: 2026-01-10 15:29:50 +0100 Ruben Gonzalez * gst/closedcaption/meson.build: * tests/check/meson.build: closedcaption: map with meson options Part-of: 2026-01-07 14:06:03 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Check correct flags for deciding whether a track is enabled Part-of: 2026-01-07 13:25:55 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Move subtitle enabled condition to the right place Part-of: 2026-01-06 18:29:30 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Don't access currently selected audio/video/subtitle stream ids without mutex Part-of: 2026-01-06 18:25:41 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Don't do the same stream selection multiple times playbin3 doesn't respond with a streams-selected message in that case, and apart from that it's also inefficient. Part-of: 2026-01-06 14:20:30 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Ignore streams-selected messages for old selections It might happen that we received a new stream-collection and sent a new select-streams event in the meantime, and reacting to the old streams-selected message can cause inconsistent states if the streams have changed. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9851 Part-of: 2025-12-27 18:47:42 +0200 Sebastian Dröge * ext/webrtc/gstwebrtcbin.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/nice/nice.c: webrtc: Change promise in gst_webrtc_ice_close() to `transfer none` This is more in line with other API taking a promise and makes it easier for calling code to keep a reference to the promise around. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4819 Part-of: 2026-01-05 20:20:51 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.27.90 === release 1.27.90 === 2026-01-05 20:15:10 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.27.90 2026-01-05 18:08:00 +0900 jeongmin kwak * gst-libs/gst/codecs/gstvp8decoder.c: vp8decoder: Fix incorrect variable in warning message The warning message for unrecognized copy_buffer_to_golden was incorrectly printing copy_buffer_to_alternate instead of copy_buffer_to_golden. This was a copy-paste error that would display the wrong field value when debugging invalid VP8 streams. Part-of: 2026-01-04 21:58:36 +0100 Christian Gräfe * docs/plugins/gst_plugins_cache.json: * ext/qroverlay/gstdebugqroverlay.c: * ext/qroverlay/gstqroverlay.c: qroverlay: use proper klass klass was not really keywords but a description use base type "Video" and functional type "Overlay" (not defined yet in the docu, but also used by other elements) also fix the long-name of debugqroverlay Part-of: 2025-12-30 18:53:26 -0500 Doug Nazar * ext/assrender/gstassrender.c: * ext/sndfile/gstsfsrc.c: * ext/ttml/gstttmlrender.c: * gst/dvdspu/gstdvdspu.c: * gst/segmentclip/gstsegmentclip.c: * tools/element-templates/sinkpad: gst: Properly unref pad template caps Part-of: 2025-12-31 09:08:15 +0200 Sebastian Dröge * ext/mpeg2enc/gstmpeg2enc.cc: mpeg2enc: Fix indentation Part-of: 2025-12-30 17:53:22 -0500 Doug Nazar * tests/check/elements/audiovisualizer.c: * tests/check/elements/mpegtsmux.c: tests: Fix several memory leaks Part-of: 2025-12-30 17:51:50 -0500 Doug Nazar * ext/mpeg2enc/gstmpeg2enc.cc: mpeg2enc: Fix several memory leaks Part-of: 2025-12-26 15:38:07 +0900 jeongmin kwak * ext/onnx/gstonnxinference.c: onnxinference: Fix integer overflow in buffer allocation Use g_size_checked_mul() to safely calculate the buffer size (width * height * channels * element_size) to prevent integer overflow which could lead to undersized buffer allocation and heap corruption. Part-of: 2025-12-24 11:28:53 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticssegmentationmtd.c: analyticsmeta: Export debug category to the Mtd for better debug messages Part-of: 2025-12-24 11:18:25 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: analyticsmeta: Set debug category as default Part-of: 2025-12-24 11:08:10 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: objectdetectionmtd: Reject transformations that aren't 90deg based or symetries Part-of: 2025-12-24 10:37:50 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticssegmentationmtd.c: segmentationmtd: Drop meta on rotations/flips We don't have any code to do this kind of transformation. Part-of: 2025-12-23 16:20:16 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: analyticsrelationmeta: Skip Mtd that can't be transformed Also do the relationship copying in the end. Part-of: 2025-12-26 14:32:08 +0900 jeongmin kwak * gst/geometrictransform/gstgeometrictransform.c: geometrictransform: Fix integer overflow in map allocation Use g_size_checked_mul() to safely calculate the map size (width * height * 2 * sizeof(gdouble)) to prevent integer overflow which could lead to undersized buffer allocation and subsequent heap corruption when the map is populated. Part-of: 2025-12-26 10:26:38 +0900 jeongmin kwak * gst/geometrictransform/gstkaleidoscope.c: kaleidoscope: Fix potential division by zero in geometric transform Avoid division by zero when cos(theta) is close to zero. When theta approaches ±π/2 after the triangle function calculation, cos(theta) becomes zero, which would cause undefined behavior. Check that cos(theta) is sufficiently far from zero before performing the division. Part-of: 2025-12-22 21:56:05 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: webrtcbin: Check transport before setting state when closing `webrtc_transceiver_get_dtls_transport()` can return NULL so that needs to be checked by the caller. Part-of: 2025-12-22 16:23:10 +0200 Sebastian Dröge * gst-libs/gst/webrtc/nice/nice.c: * gst/mpegtsmux/gstbasetsmuxjpegxs.h: * gst/tensordecoders/gstclassifiertensordecoder.c: gst: Remove various wrongly added includes These were most likely added by clangd automatically. Please use `-header-insertion=never` with clangd! Part-of: 2025-12-17 11:36:14 +0100 Johan Sternerup * gst-libs/gst/webrtc/nice/meson.build: * gst-libs/gst/webrtc/nice/nice.c: webrtcnice: Depend on libnice 0.1.23 Part-of: 2025-04-16 14:48:57 +0200 Johan Sternerup * gst-libs/gst/webrtc/nice/meson.build: * gst-libs/gst/webrtc/nice/nice.c: webrtcnice: Close agent and do it with force Call nice_agent_close_async() to make sure all outstanding resolve tasks have finished, which means we avoid a potential leak of a GMainContext with an associated file descriptor. We only do this if NICE_AGENT_OPTION_CLOSE_FORCED is available and can be used, because otherwise the closing procedure can take quite a long time while waiting for turn server responses. Part-of: 2025-04-28 13:44:12 +0200 Johan Sternerup * gst-libs/gst/webrtc/nice/nice.c: webrtcnice: Wait for completion of proxy and mdns resolve tasks This commit ensures all outstanding name resolving for mdns and proxy is finished before the nice agent thread is shut down. This is important because the DNS resolving is performed by GThreadedResolver, which uses a GTask taking a strong reference to the agent main context in order to be able finish the task and run the final callback within the agent main context. Consequently, the main context cannot be disposed until the GTask has finished. Leaking a GMainContext is particularly bad because it involves leaking the file descriptor used for polling events. GThreadedResolver takes a strong reference to the GTask. it hands this reference over to an internal worker thread that ultimately calls libc's `getaddrinfo()`. This function can hang for an undefined amount of time depending on network or network driver conditions. This makes it impossible to completely control the lifetime of our GTask/GMainContext, but what we can do is to make sure that in case of a long hang or early shutdown of the agent, the GTask has already finished so that when `getaddrinfo()` returns the only work left to do is to drop the reference to GTask (and possibly GMainContext). GThreadedResolver already sets up two mechanisms for finishing the task earlier than `getaddrinfo()`, one timeout source and a cancellation source. The cancellation source was previously created by GThreadedResolver, but we're now passing it ourselves so that we can explicitly invoke cancellation. There is one quirk though. Both the timeout source and the cancellation source are associated with the gio global worker context. Thus, cancellation will happen in the thread driving the worker context and there it will conclude that the final agent callback must be invoked within the agent main context. This detour means we cannot simply cancel and expect the GTask to be finalized without also explicitly waiting for the finalization. Part-of: 2025-12-18 18:23:56 -0500 Nicolas Dufresne * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gsth266decoder.c: codecs: h265/h266dec: Do not try to output failed frames "end_picture()" virtual function may fail due to various reason, one of them being that a flush is happening. Since the picture failed, the subclass may have flushed any picture data from it, and will likely throw an error or crash when trying to output. These two decoder simply didn't care unlike all the other. Use similar technique as used in h264dec, which is to mark the frame as not for output. Part-of: 2025-12-18 15:38:55 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: v4l2codecs: av1/vp9: Properly propagate flow ret such as FLUSHING Some of the decoder would simply turn any flow return into an ERROR, which can be noisy when the original flow return is FLUSHING due to a normal flush condition. Part-of: 2025-12-18 15:37:38 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: v4l2codecs: av1/vp9: Fix request leak on error The request was not being freed property if there was an error. Typically a flush / seek operation could cause this. Part-of: 2025-12-18 15:35:07 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: v4l2codecs: Assert and return on missing request The base class isn't supposed to output a picture that has never been requested or for which the request has been removed by the flush operation. Make sure to crash this kind of programming error with an assert, while protecting against crash in this case. Part-of: 2025-12-18 15:46:24 +0900 jeongmin kwak * ext/hls/gsthlsdemux.c: hlsdemux: Mark discontinuity on seek When seeking across an EXT-X-DISCONTINUITY tag, set the internal stream discont flag. This ensures the next buffer is correctly marked with GST_BUFFER_FLAG_DISCONT, signaling a timeline reset to downstream elements. Part-of: 2025-12-17 13:17:52 -0600 Brad Reitmeyer * sys/decklink/gstdecklinkvideosink.cpp: decklinkvideosink: Fix frame duration to be based on the decklink clock Part-of: 2025-12-21 22:12:43 -0500 Daniel Morin * ext/onnx/gstonnxinference.c: onnx: remove invalid properties - input-tensor-offset and input-tensor-scale have been removed Part-of: 2025-12-19 15:40:26 +0530 Nirbheek Chauhan * ext/rsvg/meson.build: meson: Solve some cyclic dependencies caused by test-only deps gstreamer => gobject-introspection => cairo => fontconfig => freetype2 => harfbuzz => cairo gst-plugins-base => libdrm => cairo => fontconfig => freetype2 => harfbuzz => cairo gst-plugins-good => cairo => librsvg => cairo Part-of: 2025-12-19 11:16:27 +0100 Adrien Plazas * gst-libs/gst/play/gstplay.c: * gst-libs/gst/play/gstplay.h: gstplay: Add gapless looping This adds the GstPlayLoop enumeration and the loop configuration accessor methods. It allows gapless looping over the current track. Part-of: 2025-12-14 11:59:43 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: doc: update gst-plugins-bad doc cache - doc cache updated Part-of: 2025-12-13 11:37:04 -0500 Daniel Morin * gst/tensordecoders/gstssdtensordec.c: * gst/tensordecoders/gstssdtensordec.h: * gst/tensordecoders/gsttensordecoders.c: tensordecoder: ssdtensordec backward compat with oldname - Also register old name "ssdobjectdetector" for backward compatibility. - warn about Deprecated in instance_init - better annotation related to deprecated Co-authored-by: Sebastian Dröge Part-of: 2025-12-18 18:07:17 +0200 Sebastian Dröge * gst/librfb/gstrfbsrc.h: video: Include gstvideodmabufpool.h from video.h Part-of: 2025-12-16 16:41:57 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: * gst/jpegformat/gstjpegparse.h: jpegparse: enable MPF support to JPEG parser Parse Multi Picture Format APP2 segments to handle multiple images in a single JPEG stream. Ignore non-primary images and adjust frame logic for correct framing. Part-of: 2025-12-04 18:24:24 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: add MPF parsing support Parse APP2 segments containing Multi-Picture Format data according to CIPA DC-x 007-2009 specification. This enables handling of JPEG files with multiple embedded images like panoramas or stereoscopic pairs. Part-of: 2025-12-17 14:39:07 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: add synthetic header/footer for XMP Add synthetic xpacket XML header and footer if missing in XMP data in APP1 segment, since they are needed for the parsing function gst_tag_list_from_xmp_buffer(). Part-of: 2025-12-17 14:47:38 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: add metadata state flag This ensures metadata from APP segments and comments is accounted for, preventing the loose of those segments. Part-of: 2025-12-18 17:47:14 +0200 Sebastian Dröge * gst-libs/gst/analytics/modelinfo.c: modelinfo: Add some missing annotations Part-of: 2025-12-17 14:24:31 +0200 Sebastian Dröge * gst/mxf/mxfdemux.c: * gst/mxf/mxfdemux.h: mxfdemux: Simplify timestamp tracking Apart from keeping less state around this also calculates more accurate timestamps because of tracking everything in terms of edit units instead of nanoseconds. Part-of: 2025-12-17 11:57:01 +0200 Sebastian Dröge * gst/mxf/mxfdemux.h: mxfdemux: Switch edit unit position tracking to unsigned integers These can never become negative and the only negative number in use is -1 for "unset", which maps equally well to G_MAXUINT64. Part-of: 2025-12-17 18:58:14 +0200 Sebastian Dröge * gst/aiff/aiffparse.c: * gst/aiff/aiffparse.h: aiffparse: Remove segment closing on non-flushing seeks That's a 0.10 leftover and not necessary anymore, and can confuse downstream elements unnecessarily. Part-of: 2025-12-17 18:53:26 +0200 Sebastian Dröge * gst/mxf/mxfdemux.c: * gst/mxf/mxfdemux.h: mxfdemux: Remove segment closing on non-flushing seeks That's a 0.10 leftover and not necessary anymore, and can confuse downstream elements unnecessarily. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4803 Part-of: 2025-12-17 10:23:25 +0900 jeongmin kwak * ext/aes/gstaesdec.c: aesdec: use gsize for buffer sizes and fix log format Replace casts with gsize in gst_aes_dec_prepare_output_buffer() and use G_GSIZE_FORMAT for logging to avoid truncation and warnings. Part-of: 2025-11-28 14:40:49 +0900 jeongmin kwak * ext/aes/gstaesenc.c: aesenc: use gsize for buffer sizes and fix log format Replace casts with gsize in gst_aes_enc_prepare_output_buffer() and use G_GSIZE_FORMAT for logging to avoid truncation and warnings. Part-of: 2025-12-17 11:07:18 +0900 jeongmin kwak * ext/hls/gsthlssink.c: hlssink: Guard NULL structure and use gst_structure_has_name() Prevent NULL dereference by checking gst_message_get_structure() result before accessing fields. Replace strcmp() with gst_structure_has_name() for safe structure name comparison. Part-of: 2025-12-11 21:53:04 -0500 Aaron Boxer * gst-libs/gst/play/gstplay.c: play: do not call gst_pb_utils_get_codec_description if caps are not fixed this avoids throwing a (harmless) exception when stream selection is called before pipeline is linked Part-of: 2025-12-15 17:57:49 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: docs: Update gir / plugins docs cache Part-of: 2025-12-15 15:08:02 -0500 Daniel Morin * ext/onnx/gstonnxinference.c: * ext/tflite/gsttfliteinference.c: * gst/tensordecoders/gstclassifiertensordecoder.c: * gst/tensordecoders/gstfacedetectortensordecoder.c: * gst/tensordecoders/gstssdtensordec.c: * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.c: gst: Rename GstValueSet to GstValueUniqueList GObject-Introspection has an issue with GstSet because anything that starts with 'gst_value_set' becomes something that belongs to 'GstSet' but we have gst_value_set_bitmask and gst_value_set_SOMETHING (), which all would become methods of GstSet. To avoid this, rename GstSet (aka GstValueSet) to GstUniqueList (aka GstValueUniqueList). Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4813 Part-of: 2025-12-16 13:05:19 +0100 François Laignel * gst/mxf/mxfdemux.c: mxfdemux: send event SegmentDone for segment seeks ... instead of sending an EOS event in that case. Part-of: 2025-12-10 15:54:50 +0100 Jakub Adam * ext/vmaf/meson.build: meson: fix building -bad tests with disabled vmaf Fixes an error from Meson: subprojects/gst-plugins-bad/tests/check/meson.build:175:85: ERROR: Unknown variable "libvmaf_dep". Part-of: 2025-12-13 11:29:03 +0200 Sebastian Dröge * ext/fdkaac/gstfdkaacdec.c: fdkaacdec: Invalidate channel_types/indices when setting a known config Otherwise switching from an unknown config (which is then mapped one by one) to a known config and then back to the same unknown config makes it use invalid cached channel positions. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4791 Part-of: 2025-11-26 20:09:20 +0100 Jakub Adam * ext/dtls/gstdtlsdec.c: dtlsdec: mark generated cert agent with GST_OBJECT_FLAG_MAY_BE_LEAKED So that it is ignored by the leaks tracer. Part-of: 2025-12-12 15:41:42 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcbasesink.cpp: win32ipcbasesink: Serialize metas from uploaded buffer Use metas attached to the uploaded buffer instead of the original one, as the uploaded buffer may have different memory-layout-related metas such as video meta Part-of: 2025-12-10 16:30:55 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcsink.cpp: win32ipcsink: Preserve original buffer flags in raw-video fallback path Copy all metadat including buffer flags from the original buffer so that clients receive the intended information Part-of: 2025-12-09 11:12:12 +0100 Hyunjun Ko * gst-libs/gst/vulkan/gstvkformat.c: vkformat: Add VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 format Add support for VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, which is the Vulkan equivalent of P010. Part-of: 2025-12-10 20:53:29 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: doc: gst-plugins-bad doc cache update - cache update Part-of: 2025-12-09 15:03:34 -0500 Daniel Morin * gst/tensordecoders/gstssdtensordec.c: * gst/tensordecoders/gstssdtensordec.h: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/meson.build: tensordecoder: rename ssdobjectdetector to ssdtensordec - renamed ssdobjectdetector to ssdtensordec Part-of: 2025-12-08 12:58:44 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: gst-python: make python linter happy with test_analytics - Change to be confirm fory PEP8 Part-of: 2025-12-08 00:09:47 -0500 Daniel Morin * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.c: tensordecoders: yolo tensordecoders - Change to dims-order from row-majot to col-major as they are col-major and with new modelinfo improvement we can communicate this from inference. Part-of: 2025-11-30 22:42:09 -0500 Daniel Morin * ext/onnx/gstonnxinference.c: onnx: refactor to use ModelInfo - Retrieve model metadata from modelInfo instead of from ONNX. - Validate modelInfo match ONNX, when available - Get means and stddev from ModelInfo Part-of: 2025-12-03 22:24:27 -0500 Daniel Morin * ext/tflite/gsttfliteinference.c: * ext/tflite/meson.build: * ext/tflite/modelinfo.c: * ext/tflite/modelinfo.h: tflite: adapt to analytics modelinfo moved - use modelinfo from analytics Part-of: 2025-12-03 22:23:32 -0500 Daniel Morin * gst-libs/gst/analytics/analytics.h: * gst-libs/gst/analytics/meson.build: * gst-libs/gst/analytics/modelinfo.c: * gst-libs/gst/analytics/modelinfo.h: analytics: move modelinfo to analytics lib - moved to analytics and added dims-order setting Part-of: 2025-12-09 22:01:48 -0500 Daniel Morin * gst/tensordecoders/gstioutracker.h: tensordecoder: fix typo in header - gstreamer-ssdobjectdetector -> gstreamer-ioutracker Part-of: 2025-12-09 17:30:58 +0100 Mathieu Duponchelle * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/nice/nicetransport.c: * gst-libs/gst/webrtc/nice/niceutils.h: webrtc/nice: fix crashes on gathering stats for relay candidates libnice does not have TURN information for remote relay candidates, but the `nice_candidate_relay_address` returns void and doesn't check if the `turn` field is set, unlike `nice_candidate_stun_server_address`. As a consequence, we must only call the API for local candidates. Part-of: 2025-12-09 19:13:20 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.27.50 === release 1.27.50 === 2025-12-09 19:08:48 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.27.50 2025-12-05 13:15:19 -0500 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/wayland/gstwlvideoformat.h: wayland: Add Y444 pixel format support Part-of: 2025-12-05 13:52:45 +0100 Robert Mader * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: waylandsink: Propose udmabuf allocator This change sync both GTK and native waylandsink propose_allocation method and adds support for the new udmabuf allocator and dmabuf pool. Part-of: 2025-11-26 21:44:56 +1100 Jan Schmidt * ext/webrtc/gstwebrtcbin.c: webrtcbin: Ensure ice-gathering-state reaches complete If there are pending ice candidates queued for emission when the underlying ICE implementation signals that all transports have completed gathering ICE candidates, then reporting that the 'ice-gathering-state' has reached 'complete' state is deferred. In that situation, we need to emit the completion state change after the pending candidates finish emission. Previously, the state change would not complete sometimes. Part-of: 2025-12-08 16:20:39 -0500 Nicolas Dufresne * gst-libs/gst/codecparsers/gsth264bitwriter.c: codecparsers: h264bitwriter: Fix writing of scaling lists The logic in the writer was comparing the scaling lists differently than the parser. Where the parser compared the first list to the defaults and later lists to the earlier, the writer compared every list to the default. This means a PPS received with scaling lists 0,3,6,7 would be transmitted with 0-11 all filled in. There was also an extra nested loop with the same iteration criteria that needed to be removed. Part-of: 2025-12-08 12:19:19 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkav1dec.c: * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: * ext/vulkan/vkvp9dec.c: vulkan: decoders: fallback to video decoder's decide_allocation() As in !10297 Vulkan image buffer pool isn't allocated but a video decoder plain buffer pool, which is less expensive than the Vulkan one, and it will be de-allocated shortly afterwards. Part-of: 2025-12-08 12:14:11 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkav1dec.c: vulkanav1dec: renegotiate after events Missed condition when AV1 decoding was merged, while it was merged for H.264 and H.265: !9560 and VP9 was merged initially with it. Part-of: 2025-12-04 16:40:25 -0600 Brad Reitmeyer * sys/decklink/gstdecklinkvideosink.cpp: decklinkvideosink: Fix frame completion callbacks for firmware 14.3+ Part-of: 2025-12-06 10:25:21 +0000 Philippe Normand * ext/webrtc/transportstream.c: * gst-libs/gst/webrtc/nice/nice.c: webrtc: Keep a ref of the ICEStream in the TransportStream By doing so we avoid potential race conditions. The libnice ICE implementation was then adapted to comply with the transfer-full return value of the `gst_webrtc_ice_add_stream()` vfunc. Part-of: 2025-12-05 17:16:05 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcserver.cpp: win32ipc: Enhance I/O cancel sequence Waits for pending I/O before releasing overlap struct to avoid potential use-after-free Part-of: 2025-12-04 22:16:32 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcbasesink.cpp: * sys/win32ipc/gstwin32ipcbasesink.h: * sys/win32ipc/gstwin32ipcbufferpool.cpp: * sys/win32ipc/gstwin32ipcclient.cpp: * sys/win32ipc/gstwin32ipcprotocol.cpp: * sys/win32ipc/gstwin32ipcprotocol.h: * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcserver.h: * sys/win32ipc/gstwin32ipcsink.cpp: * sys/win32ipc/gstwin32ipcsink.h: * sys/win32ipc/gstwin32ipcsrc.cpp: * sys/win32ipc/gstwin32ipcsrc.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/meson.build: * sys/win32ipc/plugin.cpp: win32ipc: Add generic shared memory src/sink elements Adding win32ipcsink and win32ipcsrc element which supports any type of streams in addition to raw video Part-of: 2025-12-04 19:47:29 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcbasesink.cpp: * sys/win32ipc/gstwin32ipcbasesink.h: * sys/win32ipc/gstwin32ipcbasesrc.cpp: * sys/win32ipc/gstwin32ipcbasesrc.h: * sys/win32ipc/gstwin32ipcclient.cpp: * sys/win32ipc/gstwin32ipcprotocol.cpp: * sys/win32ipc/gstwin32ipcprotocol.h: * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcserver.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/gstwin32ipcvideosink.h: * sys/win32ipc/gstwin32ipcvideosrc.cpp: * sys/win32ipc/gstwin32ipcvideosrc.h: * sys/win32ipc/meson.build: win32ipc: Add baseclass implementation Extract common logic from video elements Part-of: 2025-12-04 17:37:11 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcclient.cpp: * sys/win32ipc/gstwin32ipcmemory.cpp: * sys/win32ipc/gstwin32ipcmemory.h: * sys/win32ipc/gstwin32ipcmmf.cpp: * sys/win32ipc/gstwin32ipcmmf.h: * sys/win32ipc/gstwin32ipcprotocol.cpp: * sys/win32ipc/gstwin32ipcprotocol.h: * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcvideosink.cpp: win32ipc: Use SIZE_T for allocation size representation ... instead of UINT32. Part-of: 2025-12-04 15:51:08 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcserver.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: win32ipcvideosink: Enhance EOS sequence Fully drain queued buffers on EOS Part-of: 2025-12-04 12:49:28 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcclient.cpp: * sys/win32ipc/gstwin32ipcclient.h: * sys/win32ipc/gstwin32ipcvideosrc.cpp: win32ipcvideosrc: Add leaky-type and {max, current-level}-buffers properties Part-of: 2025-12-03 19:28:54 +0900 Seungha Yang * sys/win32ipc/gstwin32ipc.cpp: * sys/win32ipc/gstwin32ipc.h: * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcserver.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/meson.build: win32ipcvideosink: Add leaky-type and {max, current-level}-buffers properties Allows blocking streaming thread when clients are not consuming incoming buffers fast enough Part-of: 2025-12-03 17:32:36 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcmemory.cpp: win32ipcmemory: Refactor memory allocator Use mutex/cond instead of GstPoll Part-of: 2025-12-02 19:16:06 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcclient.cpp: * sys/win32ipc/gstwin32ipcclient.h: * sys/win32ipc/gstwin32ipcmemory.cpp: * sys/win32ipc/gstwin32ipcmemory.h: * sys/win32ipc/gstwin32ipcmmf.cpp: * sys/win32ipc/gstwin32ipcmmf.h: * sys/win32ipc/gstwin32ipcprotocol.cpp: * sys/win32ipc/gstwin32ipcprotocol.h: * sys/win32ipc/gstwin32ipcserver.cpp: * sys/win32ipc/gstwin32ipcserver.h: * sys/win32ipc/gstwin32ipcutils.cpp: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/gstwin32ipcvideosrc.cpp: * sys/win32ipc/meson.build: * sys/win32ipc/protocol/win32ipcmmf.cpp: * sys/win32ipc/protocol/win32ipcmmf.h: * sys/win32ipc/protocol/win32ipcpipeclient.cpp: * sys/win32ipc/protocol/win32ipcpipeclient.h: * sys/win32ipc/protocol/win32ipcpipeserver.cpp: * sys/win32ipc/protocol/win32ipcpipeserver.h: * sys/win32ipc/protocol/win32ipcprotocol.cpp: * sys/win32ipc/protocol/win32ipcprotocol.h: * sys/win32ipc/protocol/win32ipcutils.cpp: * sys/win32ipc/protocol/win32ipcutils.h: win32ipc: Rewrite plugin Pre-work to support a generic IPC element in addition to the existing raw-video specific elements. Summary of changes: * Use an unnamed MMF handle with DuplicateHandle() instead of a named handle to prevent unintended access from other processes via name-based handle opening * Refactor server/client implementation based on the D3D12 IPC element design * Replace the previous custom data struct with GstCaps and GstMeta to describe video format and memory layout Part-of: 2025-07-03 14:35:21 +0200 Olivier Crête * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticssegmentationmtd.c: analytics segmentation: Implement vidoe matrix meta transformation Part-of: 2025-05-18 11:59:08 +0200 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: analytics od mtd: Implement matrix meta transformation Part-of: 2025-12-05 09:19:34 +0200 Sebastian Dröge * sys/va/gstvabasedec.c: vabasedec: Don't assert when negotiating based on a gap event before the first buffer Instead fall back to the video decoder base class `decide_allocation()` until the minimum number of required buffers is known, which is usually the case after the codec parameters (sequence header) are read. While the minimum number of buffers is known ahead of time for some codecs like AV1, we still only set it once the codec parameters are parsed as otherwise an unused VA buffer pool will already be created together with surface allocations for the gap event. This pool will be deallocated again shortly afterwards, just to create a new pool with the correct configuration. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4779 Part-of: 2025-12-04 20:10:59 +0100 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: gst-plugins-bad: update plugins cache - correction for yolotensordec doc Part-of: 2025-11-28 14:17:07 -0600 Olivier Crête * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.c: tensordecoder: Add caps to Yolo decoders - Tensor caps added - Rename yolotensordec to yolov8tensordec. This reflects that this tensor is different for older versions. Part-of: 2025-11-28 12:17:29 -0600 Olivier Crête * gst/tensordecoders/gstclassifiertensordecoder.c: * gst/tensordecoders/gstioutracker.c: * gst/tensordecoders/gstssdobjectdetector.c: * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.c: tensordecoder: Fix metadata long name to be more explicit - For all tensor decoders Part-of: 2025-11-22 21:35:17 -0500 Daniel Morin * gst/tensordecoders/gstclassifiertensordecoder.c: * gst/tensordecoders/gstclassifiertensordecoder.h: tensordecoder: refactor classifiertensordecoder to support both softmaxed and non-softmaxed tensors This architecture separates negotiation concerns from processing, improving efficiency and code clarity. - Add constraints on tensor caps - Add validation between between model loaded vs label labels files - Make classifier generic (not assuming a 1000 classes) - Fixed mismatch return type - improve error handling in classification - Warn if no label found from labels file - Separate tensor groups: Define GROUP_ID_CLASSIFICATION and GROUP_ID_CLASSIFICATION_SOFTMAXED as distinct tensor groups, as they represent different tensor formats that don't belong to the same group. - Enhanced caps template: Updated sink pad caps to support both tensor formats using a LIST, allowing the decoder to negotiate with either type. - Cache negotiation result: Added do_softmax member variable to cache whether softmax processing is needed, determined once during set_caps based on the negotiated tensor-id rather than checking at runtime. - Renamed softmax_res to postproc_result: Better reflects dual usage for both softmax computation and uint8-to-float conversion. Always allocated since it's needed for uint8 conversion even when tensors are pre-softmaxed. - Optimized tensor retrieval: get_tensor() now only searches for the specific tensor-id that was negotiated, rather than trying both types. Part-of: 2025-11-22 21:21:50 -0500 Daniel Morin * gst/tensordecoders/gstssdobjectdetector.c: tensordecoder: refactor ssd tensordecoder - ssd:Add constrains on tensor caps - ssd:Update ssd tensor-decoder to follow ids from tensor id registry - ssd:Add constrains on tensor caps - ssd:Explicit batch of 1: dims=<(int)1, (int)[1,max]> - ssd:Implicit batch of 1: dims=<(int)[1,max]> Part-of: 2025-11-22 21:19:01 -0500 Daniel Morin * gst/tensordecoders/gstfacedetectortensordecoder.c: tensordecoder: refactor facedetector tensordecoder - Add constrains on tensor caps - Downgrade tensordecoder's rank non accelerated to secondary Part-of: 2025-11-28 11:42:07 -0500 Daniel Morin * gst/tensordecoders/gsttensordecodebin.c: * gst/tensordecoders/gsttensordecodebin.h: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/meson.build: tensordecoder: Add tensordecoderbin - Adding a tensordecodebin able to auto-plug the correct tensor-decoder - Add tensordecodebin to tensordecoders plugin Part-of: 2025-10-14 14:09:30 -0400 Daniel Morin * ext/tflite/gsttfliteinference.c: tflite: adding tensor caps - tflite_inference now generate tensor caps. - name model_incaps and model_outcaps Part-of: 2025-10-14 00:12:53 -0400 Daniel Morin * ext/tflite/modelinfo.c: * ext/tflite/modelinfo.h: analytics: add method to retrive group-id from modelinfo - Adding modelinfo_get_quark_group_id Part-of: 2025-11-26 20:53:35 -0500 Daniel Morin * ext/onnx/gstonnxinference.c: onnx: Add tensor capabilities support to gstonnxinference This commit enhances the gstonnxinference element by introducing comprehensive tensor capabilities support, enabling better negotiation between the inference element and downstream tensor decoders. Key Changes: - Implement tensor capabilities description mechanism - Improve caps negotiation and propagation Detailed Modifications: - Disable passthrough mode to control tensor caps propagation - Extract group-id from ONNX model metadata - Create tensor capabilities structure with: * Dimensions order (row-major) * Tensor dimensions * Tensor identifier * Data type information - Build GstSet of tensor capabilities under the group-id - Utilize gst_tensor_meta_set() for robust meta handling - Update transform_caps() to handle tensor capabilities in SINK and SRC pads Part-of: 2021-10-22 11:09:07 -0500 Diego Nieto * docs/plugins/gst_plugins_cache.json: * ext/meson.build: * ext/vmaf/gstvmafelement.c: * ext/vmaf/gstvmafelement.h: * ext/vmaf/gstvmafplugin.c: * ext/vmaf/meson.build: * meson.options: * tests/check/elements/vmaf.c: * tests/check/gst-plugins-bad.supp: * tests/check/meson.build: vmaf: add new element to calculate VMAF scores Introduces the `vmaf` element, which calculates video quality scores by comparing a reference stream against a distorted stream. The plugin is coded against the libvmaf 2.0 API. As such it requires that libvmaf => 2.0 be installed for the plugin to compile. Scores can be retrieved via 2 methods: 1. Message Bus: Emits messages containing "VMAF.type" (distinguished as "MESSAGE_TYPE_FRAME" or "MESSAGE_TYPE_POOLED"). 2. File Output: Writes results to disk in CSV, JSON, or XML formats by setting the "results-filename" property. Co-authored-by: Andoni Morales Alastruey Co-authored-by: Casey Bateman Part-of: 2025-12-04 10:34:03 +0200 Sebastian Dröge * ext/closedcaption/gstcea708decoder.c: * ext/closedcaption/gstcea708decoder.h: * ext/closedcaption/gstceaccoverlay.c: * ext/closedcaption/gstceaccoverlay.h: * ext/meson.build: * gst/closedcaption/bcd.h: * gst/closedcaption/bit_slicer.c: * gst/closedcaption/bit_slicer.h: * gst/closedcaption/ccutils.c: * gst/closedcaption/ccutils.h: * gst/closedcaption/decoder.c: * gst/closedcaption/decoder.h: * gst/closedcaption/gstcccombiner.c: * gst/closedcaption/gstcccombiner.h: * gst/closedcaption/gstccconverter.c: * gst/closedcaption/gstccconverter.h: * gst/closedcaption/gstccextractor.c: * gst/closedcaption/gstccextractor.h: * gst/closedcaption/gstcea608mux.c: * gst/closedcaption/gstcea608mux.h: * gst/closedcaption/gstclosedcaption.c: * gst/closedcaption/gstcodecccinserter.c: * gst/closedcaption/gstcodecccinserter.h: * gst/closedcaption/gsth264ccextractor.c: * gst/closedcaption/gsth264ccextractor.h: * gst/closedcaption/gsth264ccinserter.c: * gst/closedcaption/gsth264ccinserter.h: * gst/closedcaption/gsth264reorder.c: * gst/closedcaption/gsth264reorder.h: * gst/closedcaption/gsth265ccextractor.c: * gst/closedcaption/gsth265ccextractor.h: * gst/closedcaption/gsth265ccinserter.c: * gst/closedcaption/gsth265ccinserter.h: * gst/closedcaption/gsth265reorder.c: * gst/closedcaption/gsth265reorder.h: * gst/closedcaption/gstline21dec.c: * gst/closedcaption/gstline21dec.h: * gst/closedcaption/gstline21enc.c: * gst/closedcaption/gstline21enc.h: * gst/closedcaption/hamm.h: * gst/closedcaption/io-sim.c: * gst/closedcaption/io-sim.h: * gst/closedcaption/macros.h: * gst/closedcaption/meson.build: * gst/closedcaption/misc.h: * gst/closedcaption/raw_decoder.c: * gst/closedcaption/raw_decoder.h: * gst/closedcaption/sampling_par.c: * gst/closedcaption/sampling_par.h: * gst/closedcaption/sliced.h: * gst/meson.build: * meson.options: * tests/check/meson.build: closedcaption: Remove cc708overlay It was deprecated and cea708overlay from gst-plugins-rs is the replacement. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4207 Part-of: 2025-12-04 12:57:26 +0800 Yun Liu * gst-libs/gst/analytics/meson.build: analytics: Fix build on MSVC by using libm dependency Part-of: 2025-12-02 17:52:34 +0200 Sebastian Dröge * gst/midi/midiparse.c: midiparse: Fix a couple of potential out-of-bounds reads Also use an unsigned integer for parsing variable length integers as shifting bits out of the sign bit is undefined behaviour. Part-of: 2022-04-01 05:54:29 +1100 Jan Schmidt * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Fix potential deadlock changing pmt-interval The object lock is the innermost lock. Don't take the mux->lock while holding it. Part-of: 2025-11-28 15:12:37 +0200 Vivia Nikolaidou * gst/mxf/mxfmpeg.c: mxfmpeg: Add custom Sony picture essence coding UL Sony seems to use 06.0e.2b.34.04.01.01.03.0e.06.41.02 as prefix for their custom picture essence codings, and specifically the MPEG one potentially uses the same semantics. This comes from a file with: picture essence coding 06.0e.2b.34.04.01.01.03.0e.06.41.02.01.04.03.01 codec 00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00 essence container 06.0e.2b.34.04.01.01.02.0d.01.03.01.02.04.60.01 which seemed to be XDCAM, aka decodable as MPEG-2. Part-of: 2025-10-08 02:31:50 -0400 Doug Nazar * ext/curl/gstcurlbasesink.c: * ext/curl/gstcurldefaults.h: * ext/curl/gstcurlhttpsink.c: * ext/curl/gstcurlhttpsrc.c: curl: Ensure set_opt() is called with a long value Part-of: 2025-03-16 20:23:48 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: curl: Fix pushing incorrect buffers after seek We must stop any existing transfer when seeking or we may push buffers from the old request that downstream isn't expecting, causing decode errors. Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/579 Part-of: 2025-03-16 20:17:58 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: curl: Cleanup logging of received headers Part-of: 2021-05-11 23:54:49 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: curl: Fix content size reported During a range request, the Content-Length header only reports the length transfered. The Content-Range header should report the total length if known. The current code would inconsistently use either or race and use the wrong length. Part-of: 2021-05-11 23:58:54 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: * ext/curl/gstcurlhttpsrc.h: curl: remove unused content_type field Part-of: 2021-05-08 21:23:46 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: * tests/check/elements/curlhttpsrc.c: curl: Reset request status on uri change We need to stop the current transfer and start a new one if the uri was changed. Also fix the 'test_range_get' to do 20 requests, instead of one request and 19 seeks past EOS. Part-of: 2025-12-01 18:04:15 +0200 Sebastian Dröge * gst/mxf/mxfvanc.c: mxfmux: Create empty edit units for VANC packets without content or gap events Part-of: 2025-12-01 13:00:14 +0200 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: tsdemux: Consider DTS in private streams as audio instead of private Part-of: 2025-12-01 12:53:46 +0200 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: streams: Add GST_STREAM_TYPE_METADATA for metadata streams And handle it inside parsebin and tsdemux. Part-of: 2025-11-26 14:28:33 +0900 jeongmin kwak * ext/vulkan/vkviewconvert.c: vulkan: zero-initialize ViewUpdate before use Ensure ViewUpdate struct is fully initialized to avoid copying uninitialized fields when writing to uniform buffer. Part-of: 2025-12-01 13:57:20 +0900 Seungha Yang asiodeviceprovider: Fix deadlock on stop Ensure that main loop is fully running during start() to avoid below deadlock sequence * GstDeviceProvider::start() spawns a background thread * GstDeviceProvider::stop() is called before the background thread actually starts running the main loop * g_main_loop_quit() is invoked, but since the main loop has not started yet, it has no effect * stop() waits for the background thread to join * The background thread eventually starts the main loop on the background thread Part-of: 2025-11-30 19:22:03 +0100 David Maseda Neira * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvcodec: Enable num-slices property on nvh26{4,5}enc to force number of output slices Adds a new num-slices property (range 0-32, default 0) to both nvh264enc and nvh265enc encoders to control the number of slices per frame. This ensures compatibility with hardware decoders that require exactly 1 slice per NAL unit. Part-of: 2025-11-21 15:22:54 +0100 Robert Mader * ext/wayland/gstwaylandsink.c: waylandsink: Promote set_caps debug print to info Part-of: 2025-11-03 16:11:56 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Add VideoCropMeta support Implement support for the crop meta, this allow offloading the crop to the compositor Part-of: 2025-11-03 16:05:15 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: De-duplicate frame copy code Regardless if we have a Dumb or a SHM, the copy code is identical. Factor this code so it can be shared. Part-of: 2025-11-03 15:51:39 -0500 Nicolas Dufresne * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: waylandsink: Add VideoCropMeta support Implement support for the crop meta, this allow offloading the crop to the compositor. Part-of: 2025-11-03 15:28:29 -0500 Nicolas Dufresne * ext/wayland/gstwaylandsink.c: waylandsink: De-duplicate frame copy code Regardless if we have a Dumb or a SHM, the copy code is identical. Factor this code so it can be shared. Part-of: 2025-11-03 15:34:47 -0500 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Add the ability to offload cropping This add a new method on the GstWlWindow that allows to offload a crop rectangle. Co-authored-by: Robert Mader Part-of: 2025-11-17 17:04:18 -0500 Nicolas Dufresne * gst-libs/gst/wayland/gstwlbuffer.c: * gst-libs/gst/wayland/gstwlbuffer.h: wayland: buffer: Add getters for video and crop meta This will be used by the GstWlWindow to calculate the source rectangle to crop the surface to. Part-of: 2025-12-01 17:58:22 +0200 Sebastian Dröge * gst/mxf/mxfmux.c: mxfmux: Fix memset usage This was supposed to clear the local, stack-allocated struct and not set another pointer to NULL in a complicated way. Part-of: 2025-11-26 14:17:14 +0900 jeongmin kwak * ext/vulkan/vkcolorconvert.c: vulkan: initialize YUVUpdateData before memcpy Ensure YUVUpdateData is fully initialized to avoid copying uninitialized fields when writing to uniform buffer. Part-of: 2025-11-28 21:08:17 +0530 Nirbheek Chauhan * sys/applemedia/vtdec.c: vtdec: Add lower resolution limits for h264, h265, av1 caps In my testing, these are the lowest resolution values that VideoToolbox can decode for each of these codecs. Part-of: 2025-07-24 21:54:59 +0200 Rafael Caricio * sys/applemedia/helpers.h: * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: Support AV1 hardware decoding Part-of: 2025-10-27 14:19:34 +0000 Dominique Leroux * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: add VP9 decode support - Only profile 0 and 2 (10-bits) work. Others allow creating the decompression session but cause per-frame failures, so I'm explicitly disabling them in caps. - 64x64 is the minimum supported resolution. Limiting with caps for same reason as above. - API to enable supplemental codecs for iOS appeared in 26.2. vp9 doesn't work before this. - Lifting VTRegisterSupplementalVideoDecoderIfAvailableFunc via dlsym on iOS in case GStreamer is built with an older SDK. Part-of: 2025-11-21 15:48:05 -0500 Dominique Leroux * sys/applemedia/vtdec.c: vtdec: Fix race condition in decoder draining. Fluster runs were unstable Part-of: 2024-01-10 09:30:51 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/gstyolosegtensordecoder.c: * gst/tensordecoders/gstyolosegtensordecoder.h: * gst/tensordecoders/gstyolotensordecoder.c: * gst/tensordecoders/gstyolotensordecoder.h: * gst/tensordecoders/meson.build: tensordecoders: Add tensor decoder element for yolo detection and segmentation models A new set of tensor decoder that handles YOLO v5+ object detection and YOLO v8+ segmentation. `yolotensordecoder`: decodes tensors output(masks) from detection-only models e.g yolov8s.onnx `yolsegv8tensordecoder`: decoder tensors output(masks and logits) from segementation models e.g FastSAM or yolov8s-seg Co-authored-by: Vineet Suryan Co-authored-by: Santosh Mahto Part-of: 2025-11-26 13:32:51 -0500 Xavier Claessens * gst/unixfd/gstunixfdsink.c: unixfd: Fix pointer casting on 32bit arch Fixes: #4766 Part-of: 2025-11-25 12:55:21 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaav1enc.c: * sys/va/gstvah264enc.c: * sys/va/gstvajpegenc.c: * sys/va/gstvavp8enc.c: * sys/va/gstvavp9enc.c: va: simplify encoder's reconfig() virtual method By using the new gst_va_encoder_open(), which closes it if a previous incompatible configuration exists. Part-of: 2025-11-13 14:08:33 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: * sys/va/gstvah265enc.c: vah265enc: use new VA encoder setup()/open_2() API This patch also contains the add of a refactor get_surface_alignment() in GstVaEncoder helper, which before created a synthetic VAConfig to get the surface alignment. Now, with the API split we can call get_surface_alignment() after setup() and before open_2() without the need of a synthetic VAConfig. Part-of: 2025-11-13 12:24:54 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: vaencoder: split open() in setup() and open_2() Still keep open() for backward compatibility as a composite of both new functions. setup() -> creates VA config open_2() -> creates VA context The reason to use open_2() is because there's a close() and we should keep the API symmetry. It adds an internal function is_setup() to do a fine check of what is needed by every other method. Fixes #3393 Part-of: 2025-11-13 11:55:34 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: vaencoder: add gst_va_encoder_set_coded_buffer_size() So encoding elements could update the coded buffer size after opened the encoder helper object. Part-of: 2025-11-12 18:06:18 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: vaencoder: allow lazy initialization for reconstruct buffers pool Right now the open() method still creates the reconstruct buffer pool, but this patch also allows its lazy creation. Also the patch adds a namespaces for those member variables related only with the reconstruct buffer pool. And adds the function gst_va_encoder_set_reconstruct_pool_config(), that will be used when an another alternative to the open() member is added in future commits. Part-of: 2025-11-26 14:41:35 -0500 Dominique Leroux * sys/applemedia/avfassetsrc.m: avfassetsrc: Explain how invalid ts and position should interact Part-of: 2025-11-26 12:18:26 -0500 Dominique Leroux * sys/applemedia/avfassetsrc.m: avfassetsrc: Better invalid timestamp handling and reporting Now, invalid CMTime coming from AVFoundation will be properly converted to GST_CLOCK_TIME_NONE (for buffer timestamp, buffer duration and overall duration). And we no longer consider an invalid buffer timestamp as a irrecoverable error, but just log the problem instead. Part-of: 2025-11-25 14:21:01 -0500 Dominique Leroux * sys/applemedia/avfassetsrc.m: avfassetsrc: Prevent access to released CMSampleBuffer When the video sample buffers obtained from AVAssetReaderTrackOutput contain data with line padding that differs from what GStreamer expects (checked with GST_VIDEO_INFO_PLANE_STRIDE in gst_core_video_wrap_pixel_buffer in corevideobuffer.c), gst_core_media_buffer_new ends up creating a new GstBuffer with proper layout and copying the original buffer content into the new buffer. This means the original CMSampleBuffer gets released before we get to the point where we access it to extract time information. So the comment saying "cmbuf is now retained by buf (in meta)" (in avfassetsrc.c nextBuffer) was not always right. But it was helpful in making me want to see whether this was always true. The code was reformulated to avoid having to rely on side effects, while preserving a single call to CFRelease. The problem would have been more obvious if there had been timestamp validation, so this is now done. Frame duration will not systematically be valid (only timetamp has to); therefore, invalid duration will not be used but will also not be flagged as an error. Part-of: 2025-11-27 01:19:01 +0530 Nirbheek Chauhan * sys/asio/gstasiodeviceprovider.cpp: * sys/asio/meson.build: asio: Add compile-time detection for device monitoring support Older versions of MinGW 32-bit, such as the one that we ship in Cerbero, do not support CM_Register_Notification etc. Part-of: 2025-09-08 21:13:14 +0530 Nirbheek Chauhan * sys/wasapi2/gstwasapi2util.cpp: wasapi2: Fix some typos Also convert an informative LOG to INFO Part-of: 2025-09-09 13:49:53 +0530 Nirbheek Chauhan * sys/asio/gstasiodeviceprovider.cpp: asio: Add a separate debug category for the device provider Part-of: 2025-09-09 09:05:44 +0530 Nirbheek Chauhan * sys/asio/gstasiodeviceprovider.cpp: * sys/asio/meson.build: asio: Implement device monitoring using USB events ASIO doesn't provide a way to monitor for device registration / disconnect, so we need to re-probe all the devices every time we get a USB event. We aggregate USB events by delaying the probe till 500ms have passed since the last USB plug/unplug event. Part-of: 2024-07-24 09:11:49 +0800 Shengqi Yu (喻盛琪) * docs/plugins/gst_plugins_cache.json: * gst/unixfd/gstunixfdsink.c: unixfdsink: add and notify clients-number 1. Add the client-number property. 2. When the number of clients increases or decreases, notify the client-number property. This way, the app can know the current number of client connections based on the notification information, allowing it to perform other operations, such as setting the server pipeline to NULL state when there are no client connections. Part-of: 2025-11-25 19:42:15 -0500 Xavier Claessens * sys/aja/gstajasrc.cpp: ajasrc: Rename variable to match gst_clock_is_system_monotonic() Part-of: 2025-01-08 09:29:13 -0500 Xavier Claessens * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: * sys/aja/gstajasrc.cpp: * sys/d3d11/gstd3d11ipc.cpp: * sys/d3d11/gstd3d11ipc.h: * sys/d3d11/gstd3d11ipcsink.cpp: * sys/d3d11/gstd3d11ipcsrc.cpp: * sys/d3d12/gstd3d12ipc.cpp: * sys/d3d12/gstd3d12ipc.h: * sys/d3d12/gstd3d12ipcsink.cpp: * sys/d3d12/gstd3d12ipcsrc.cpp: * sys/nvcodec/gstcudaipc.cpp: * sys/nvcodec/gstcudaipc.h: * sys/nvcodec/gstcudaipcsink.cpp: * sys/nvcodec/gstcudaipcsrc.cpp: * sys/win32ipc/gstwin32ipcutils.cpp: * sys/win32ipc/gstwin32ipcutils.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/gstwin32ipcvideosrc.cpp: GstClock: Add gst_clock_is_system_monotonic_clock It was duplicated in many places and can be useful outside of GStreamer as well. Part-of: 2025-06-20 13:12:06 +0530 santosh mahto * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gstioutracker.c: * gst/tensordecoders/gstioutracker.h: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/meson.build: * tests/check/elements/ioutracker.c: * tests/check/meson.build: tensordecoders: Implement IoU based tracker element `ioutracker` element tracks objects in video frames It uses object detection mtds to get the position and detects the same object in next frame based on Intersection-over-Union (IoU). Based on this, it attaches tracking mtd to buffer Part-of: 2025-11-24 10:55:09 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvadisplay_priv.c: vadisplay-priv: re-use log category from va plugin Reuse this log category because is first created. Part-of: 2025-11-19 13:47:24 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: remove extra call to get VA display And precise the parameter type as VABufferType. Part-of: 2025-11-04 17:36:42 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/codecparsers/gsth266parser.c: codecparsers: h266parser: fix documentation and parameter check Part-of: 2024-08-12 11:52:40 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/codecs/gstav1decoder.c: * gst-libs/gst/codecs/gstcodecpicture.c: * gst-libs/gst/codecs/gstvp9decoder.c: * gst-libs/gst/codecs/gstvp9statefulparser.c: codecs: simple documentation fixes Part-of: 2025-10-30 13:20:47 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: fix GI documentation Part-of: 2025-11-11 12:48:59 +0100 Sven Püschel * sys/uvcgadget/gstuvcsink.c: uvcsink: add VYUY mapping The mapping was copied from plugins good [1]. At the time of the copy it missed the VYUY mapping, therefore add it now. [1] https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6037#note_2573767 Part-of: 2025-01-21 13:32:02 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstanalyticsoverlay.c: * ext/analyticsoverlay/gstsegmentationoverlay.c: * ext/analyticsoverlay/gstsegmentationoverlay.h: * ext/analyticsoverlay/meson.build: analyticsoverlay: add a segmentation overlay Part-of: 2025-11-24 18:58:43 +0200 Sebastian Dröge * sys/decklink/gstdecklinkvideosink.cpp: decklinkvideosink: Add some debug output for writing ancillary data Part-of: 2025-11-19 15:01:40 -0600 Olivier Crête * gst/tensordecoders/gstssdobjectdetector.c: ssdobjectdetector: Print class index Print the class index, this helps debugging labels lists. Part-of: 2025-11-19 15:23:33 -0600 Olivier Crête * gst/tensordecoders/gstclassifiertensordecoder.c: classifiertensordecoder: Print clearer message when setting wrong labels file Part-of: 2025-11-19 15:23:10 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Remove unused mean/stddev default values The arrays are always set Part-of: 2025-11-19 15:03:52 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Read mean/stddev from Image.NominalPixelRange metadata Part-of: 2025-11-19 15:02:56 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: * ext/tflite/gsttfliteinference.c: tflite & onnxinference: Substract means This makes them work like everyone else. Part-of: 2025-11-18 18:13:07 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Remove pointless arguments to macro Part-of: 2025-11-18 18:12:12 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Correctly pass planarity of input tensor Part-of: 2025-11-18 16:11:28 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Mark dimension meaning explicitly This makes the code more correct, as it make some incorrect assumptions in some places. Part-of: 2025-11-17 11:24:06 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Put more error details from the ONNX Runtime Part-of: 2025-11-15 13:28:50 -0600 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Create environment before using more APIs This call has the side effect of enabling the onnxrt logging system, so we must do it earlier Part-of: 2025-11-13 14:55:52 -0500 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Split the ONNX runtime debug from the element's Part-of: 2025-10-31 18:51:14 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Avoid deadlocking on startup error Part-of: 2025-10-31 18:51:02 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Hard fail when selected provider is not available Part-of: 2025-08-08 15:16:02 -0400 Olivier Crête * ext/onnx/gstonnxinference.c: * ext/onnx/meson.build: onnxinference: Remove explicit CPU execution provider setting It's the default, and this one it avoid having to load the header file which isn't always installed in the same place. Part-of: 2025-02-15 12:45:05 +0000 Philippe Normand * ext/webrtc/gstwebrtcstats.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/icetransport.c: * gst-libs/gst/webrtc/icetransport.h: * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/nice/nicetransport.c: * gst-libs/gst/webrtc/nice/niceutils.h: * gst-libs/gst/webrtc/webrtc_fwd.h: webrtc: ice: Add support for getting the selected candidate pair Expose a `gst_webrtc_ice_transport_get_selected_candidate_pair()` function corresponding to the RTCIceTransport spec's `getSelectedCandidatePair()`. See also https://w3c.github.io/webrtc-pc/#dom-rtcicetransport-getselectedcandidatepair This new function should be used instead of `gst_webrtc_ice_get_selected_pair()` which is now deprecated. Part-of: 2025-07-09 10:08:38 +0200 Rinat Zeh * ext/meson.build: * ext/mpeghdec/gstmpeghdec.c: * ext/mpeghdec/gstmpeghdec.h: * ext/mpeghdec/meson.build: * meson.options: mpeghdec: MPEG-H Audio decoder plugin MPEG-H Audio decoder plugin based on Fraunhofer GitHub MPEG-H decoder implementation (https://github.com/Fraunhofer-IIS/mpeghdec) Co-authored-by: Florian Kolbeck Part-of: 2025-11-21 10:59:14 +0100 Hyunjun Ko * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vkvideo-private: Replace GstBuffer with GstMemory array for video sessions GstBuffer has a maximum limit on the number of memories it can hold (GST_BUFFER_MEM_MAX, typically 16). However, Vulkan video sessions can require more memories than this limit - for example, AV1 decoding on ANV requires over 30 memories. This fixes AV1 decoding on ANV and any other scenarios where video sessions require more than 16 memory allocations. Part-of: 2025-11-20 14:04:59 +0100 Hyunjun Ko * gst-libs/gst/vulkan/gstvkvideo-private.c: vkvideo-private: fix to use correct index for picking a memory type Part-of: 2025-11-21 11:43:13 +0200 Sebastian Dröge * sys/decklink/gstdecklinkvideosrc.cpp: decklinkvideosrc: Don't add parity bits to the line number in GstAncillaryMeta It's an 11 bit value without parity bits. Part-of: 2025-11-21 11:41:41 +0200 Sebastian Dröge * sys/aja/gstajasink.cpp: ajasink: Remove parity bits from ancillary meta DID/SDID before passing further The GstAncillaryMeta contains the parity bits but the AJA SDK expects them without. Part-of: 2025-11-20 13:48:16 +0100 Hyunjun Ko * ext/vulkan/vkh265dec.c: vkh265dec: fix a typo This fixes also H265 decoding with LTR on ANV. Part-of: 2025-11-20 12:42:48 -0500 Nicolas Dufresne * gst/unixfd/gstunixfdsrc.c: unixfdsrc: Keep dmabuf mapped The unixfdsrc has as equal use for CPU access and device access. Keeping the CPU address mapping is preferable, with not down side for device access. Part-of: 2025-11-20 12:41:10 -0500 Nicolas Dufresne * gst-libs/gst/va/gstvaallocator.c: va: allocator: Keep dmabuf mapped VA buffers are rarely access from CPU, but if this is someone use case, it is preferable to keep the CPU address mapping around since this isn't cheap to create each time we map/unmap the buffer. Part-of: 2025-11-07 19:29:24 -0300 L. E. Segovia * ext/dts/gstdtsdec.c: * ext/dts/meson.build: gst: implement Orc-less cpuid routine for selecting asm routines This commit removes the use of Orc's default target machinery as a way to do CPUID detection on x86 and Arm. Instead I port xsimd's CPU detection routine to C, cleaning up the instruction sets we don't use, and also adding support for GCC/Clang's cpuid and xgetbv builtins. Part-of: 2024-03-15 23:11:20 +1100 Jan Schmidt * gst/mpegtsmux/tsmux/tsmux.c: mpegtsmux: Avoid infinite recursion writing PCR packets If scheduling a PCR packet from tsmux_packet_out(), or already writing one, don't do the PCR checks that can recurse infinitely and crash. Part-of: 2025-10-15 06:49:03 +0530 Nirbheek Chauhan * ext/sctp/sctpassociation.c: sctp: Fix GMutex leak Part-of: 2025-10-15 04:35:27 +0530 Nirbheek Chauhan * sys/applemedia/vtenc.c: vtenc: Fix a leak when setting caps Part-of: 2025-11-04 23:29:40 +0900 Seungha Yang * gst/audiomixmatrix/gstaudiomixmatrix.c: * gst/audiomixmatrix/gstaudiomixmatrix.h: audiomixmatrix: Add sparse matrix LUT optimization Use precomputed LUTs for non-zero coefficients instead of blindly traversing all input/output channel combinations Part-of: 2025-11-17 16:25:06 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosink.h: decklinkvideosink: Add support for outputting GstAncillaryMeta This adds a new output-vanc boolean property. Part-of: 2025-11-17 16:16:50 +0200 Sebastian Dröge * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosink.h: decklinkvideosink: Use GstVecDeque instead of GQueue for the pending frames Part-of: 2025-11-13 15:14:50 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * sys/decklink/gstdecklinkvideosrc.cpp: * sys/decklink/gstdecklinkvideosrc.h: decklinkvideosrc: Add support for outputting all VANC via GstAncillaryMeta This adds a new output-vanc boolean property. As part of this, now all valid VANC lines are always checked for interesting VANC. Previously we cached where CC or AFD/Bar was found and first checked that line. Keeping this would complicate the code considerably, and here checking all lines takes less than 1ms. Part-of: 2025-11-05 15:37:25 +0100 Jordan Yelloz * gst-libs/gst/play/gstplay.c: gstplay: Fixed wrong initial configuration Part-of: 2025-11-13 21:12:20 +0530 Sanchayan Maity * docs/plugins/gst_plugins_cache.json: * gst/mxf/mxfvanc.c: * gst/mxf/mxfvanc.h: mxfvanc: Add support for non-closed-caption VANC - 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. We also now support both 8 and 10-bit VANC data when reading from MXF. Part-of: 2025-11-17 10:24:17 +0900 dongjoo.kim * gst/mxf/mxfffv1.c: mxfdemux: Fix typo on mxf_ffv1_create_caps In this section, the p value cannot be NULL, so it is dead code. However, if you refer to the code in mxf_ffv1_get_track_wrapping, you can see that you should check desc, not p. Part-of: 2025-11-18 11:03:28 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: add validation that format's chroma gst_va_encoder_open() receives as parameters GStreamer Video Format and its chroma. Nevertheless, chroma can be known from the format by using gst_va_chroma_from_video_format(). Instead of removing a spurious method's parameter, this patch validates that both coincide. Part-of: 2025-10-06 20:46:10 +0900 Seungha Yang * gst-libs/gst/hip/gsthip-interop.cpp: * gst-libs/gst/hip/gsthipdevice.cpp: * gst-libs/gst/hip/gsthipevent.cpp: * gst-libs/gst/hip/gsthipmemory.cpp: * gst-libs/gst/hip/gsthipstream.cpp: * gst-libs/gst/hip/meson.build: hip: Generate gir files Part-of: 2025-11-17 14:50:21 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12converter.cpp: d3d12converter: Apply background color even without mipmapping Fix missing background color update for UV remapping when mipmapping is disabled Part-of: 2025-11-03 11:41:36 +0900 jeongmin kwak * ext/smoothstreaming/gstmssdemux.c: mssdemux: Clarify pad name cleanup in _create_pad() Refactored _create_pad() to always free the pad name after pad creation attempt. No actual leak existed; this change makes cleanup explicit and improves readability after a static analyzer warning. Part-of: 2025-11-13 09:14:59 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaav1enc.c: * sys/va/gstvadisplay_priv.c: * sys/va/gstvadisplay_priv.h: * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvajpegenc.c: * sys/va/gstvavp8enc.c: * sys/va/gstvavp9enc.c: va: move methods from encoder to display-priv These methods, semantically speaking, don't belong to the encoder helper object, even if the attributes they are querying are only related with encoding operations, since, in terms of the required parameters to call them, only display is required. The main problem with adding them in the encoder is that the encoder already has entrypoint (and the profile when it's opened), and this methods are required to be called previous the opening of the encoder object. This patch proposes to move these methods to the GstVaDisplay namespace, but privately, since they are used only by the elements in the plugins, not by the public API. Calling this attribute in a non-encoding entrypoint shouldn't be a problem for any driver, it should return the unimplemented value. No functional changes are done. Part-of: 2025-11-11 04:27:42 +0900 Seungha Yang * gst/videoparsers/gsth266parse.c: * gst/videoparsers/gsth266parse.h: h266parse: Use VUI framerate when upstream framerate is 0/1 If upstream framerate is 0/1 (unknown) but VUI has framerate information, use the VUI framerate Part-of: 2025-11-11 04:18:04 +0900 Seungha Yang * gst/videoparsers/gsth264parse.c: h264parse: Use VUI framerate when upstream framerate is 0/1 If upstream framerate is 0/1 (unknown) but VUI has framerate information, use the VUI framerate Part-of: 2025-11-07 20:39:34 +0900 Seungha Yang * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth265parse.h: h265parse: Use VUI framerate when upstream framerate is 0/1 If upstream framerate is 0/1 (unknown) but VUI has framerate information, use the VUI framerate Part-of: 2025-11-12 17:13:06 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264enc.c: vkh264enc: remove unused member variable The member variable out_state is not used in the code, so there's no need to keep it as a member variable along the lifespan of the object. Even more, it can be fetched with gst_video_encoder_get_output_state(). Part-of: 2025-10-30 23:25:23 +0900 Seungha Yang * tests/check/elements/h265parse.c: tests: h265parse: Update for AUD insertion Updating tests to handle inserted AUD by h265parse Part-of: 2025-10-30 21:40:37 +0900 Seungha Yang * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth265parse.h: h265parse: Add support for AUD insertion Implement AUD insertion similar to h264parse to work around decoding artifacts in multi-slice HEVC streams. This fixes an issue with the Intel Media Foundation decoder in Windows Media Player, where the decoded image becomes corrupted in non-first slices when the frame lacks AUD Part-of: 2025-11-13 11:53:52 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: add more checks to gst_va_encoder_open() Part-of: 2025-11-13 11:51:53 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: IS macros checks for NULL Part-of: 2025-11-13 11:36:42 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: init() calls reset() Thus avoiding repeated code. Part-of: 2025-11-03 11:23:36 +0900 jeongmin kwak * gst-libs/gst/mpegts/gst-scte-section.c: scte-section: fix missing cleanup and clarify event ownership on parse failure Free only the allocated component when _parse_splice_component() fails, leaving event cleanup to the caller to maintain proper ownership. Part-of: 2025-11-07 14:17:39 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabaseenc.c: vabaseenc: get usage hint with real entrypoint Use class' entrypoint rather than a hardcoded one. Currently, in the case of encoders, it doesn't matter much, but it makes the code robust for future changes. Part-of: 2025-11-07 14:19:17 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacaps.c: * sys/va/gstvacaps.h: * sys/va/gstvacompositor.c: va: use gst_video_is_dma_drm_caps() Instead of local gst_caps_is_dmabuf() Part-of: 2025-11-07 14:15:50 +0100 Víctor Manuel Jáquez Leal * sys/va/meson.build: va: build: remove non-documentation headers Part-of: 2025-11-12 16:53:32 -0800 Matthew Semeniuk * gst-libs/gst/vulkan/gstvkqueue.h: vulkan: add G_DECLS to gstvkqueue Part-of: 2025-11-12 16:53:05 -0800 Matthew Semeniuk * gst-libs/gst/vulkan/gstvkcommandpool.h: vulkan: add G_DECLS to gstvkcommandpool Part-of: 2025-11-11 22:37:29 -0500 Olivier Crête * docs/plugins/gst_plugins_cache.json: audio: Re-order the all formats The order they were in was tripping a Rust unit test. Part-of: 2025-08-15 15:16:57 -0400 Olivier Crête * gst-libs/gst/analytics/gstanalyticsbatchmeta.c: * gst-libs/gst/analytics/gstanalyticsbatchmeta.h: batchmeta: Merge event/buffer/bufferlist into a single field Everything serialized should be sent together Break an API introduced since the last release. Part-of: 2025-06-18 14:25:17 +0900 dongjoo.kim * gst/id3tag/id3tag.c: id3tag: Fix resource leak When latin1 is not NULL and latin1[0] is '\0' Part-of: 2025-10-31 16:59:45 +0900 jeongmin kwak * gst-libs/gst/analytics/gstanalyticsmeta.c: analyticsmeta: Initialize span to avoid undefined behavior Fix uninitialized scalar variable by setting 'span' when max_relation_span is non-negative. Prevents potential issues when accessing adjacency matrix. Part-of: 2025-11-10 13:21:43 +0100 Kevin Scott * ext/dtls/gstdtlsconnection.c: dtlsconnection: Increase DTLS MTU to 1200 Returning 0 defaults the MTU to 256 in OpenSSL, which is too small for some handshake messages. An MTU of 1200 prevents certificate fragmentation and potential message reordering. Chromium does something similar: https://chromium.googlesource.com/external/webrtc/+/06b8f7e/rtc_base/openssl_stream_adapter.cc#259 Part-of: 2025-06-16 16:40:07 +0900 dongjoo.kim * gst-libs/gst/wayland/gstwllinuxdmabuf.c: wayland: Fix using uninitialized value of data.wbuf There are cases which it goes to "out" without initializing data.wbuf Part-of: 2025-11-04 13:48:12 +0200 Sebastian Dröge * gst/timecode/gstavwait.c: avwait: Unify conditions between the different modes And as part of that fix a couple of mode changes while running, e.g. starting recording in video-first mode, then switching to running time mode and only setting an end running time. Part-of: 2025-11-05 15:25:33 +0200 Sebastian Dröge * gst-libs/gst/vulkan/gstvkdecoder-private.c: * tests/check/libs/analyticsmeta.c: memory: Add gst_map_info_clear() and use GST_MAP_REF_MEMORY for gst_buffer_map() Also deprecate GstMemoryMapInfo and GstBufferMapInfo, and add g_autoptr support for GstMapInfo directly. This simplifies usage of the GstMapInfo API and reduces a bit of inconsistencies. For consistency, also add gst_map_info_init(). Part-of: 2025-11-06 18:06:46 +0200 Sebastian Dröge * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: * gst/videoparsers/gstvp9parse.c: videoparsers: Don't unnecessarily copy buffers gst_base_parse_finish_frame() does not invalidate the buffer's data anymore since a few years. Part-of: 2025-11-06 18:03:56 +0200 Sebastian Dröge * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: * gst/videoparsers/gstmpeg4videoparse.c: * gst/videoparsers/gstmpegvideoparse.c: * gst/videoparsers/gstvp9parse.c: videoparsers: Don't read GstMapInfo values after unmapping Part-of: 2025-11-06 14:27:06 +0200 Sebastian Dröge * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: h26456parse: Don't unmap and unref buffers twice And also don't unnecessarily copy it. Part-of: 2025-11-06 14:26:01 +0200 Sebastian Dröge * gst/videoparsers/gstav1parse.c: * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: * gst/videoparsers/gstvp9parse.c: videoparsers: Call gst_base_parse_frame_free() for custom allocated frames Unlike the name suggests, for stack-allocated frames it only frees the contained memory and does not free the frame itself. Part-of: 2025-10-17 12:28:00 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvkutils.c: * ext/vulkan/gstvkutils.h: * ext/vulkan/vkdownload.c: * ext/vulkan/vkupload.c: gstvkutils: Add utility function for plane dimension calculations Adds gst_vulkan_video_info_get_plane_dimensions() to calculate plane's dimensions required for Vulkan buffer/image copy operations. This function: - Handle video metadata, if available, for padding - Converts byte strides to pixel counts for Vulkan's bufferRowLength - Share this calculations with vulkanupload and vulkandownload elements Co-authored-by: Stéphane Cerveau Part-of: 2025-10-16 10:26:30 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvkutils.c: * ext/vulkan/gstvkutils.h: * ext/vulkan/meson.build: * ext/vulkan/vkdownload.c: * ext/vulkan/vkupload.c: gstvkutils: Add utility function for plane memory lookup Added gst_vulkan_buffer_peek_plane_memory(). It finds the GstMemory associated with a specific video plane. This replaces duplicated code in vkdownload and vkupload elements. This function properly handles both buffers with and without video metadata. Part-of: 2025-10-16 21:13:18 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkdownload.c: vulkandownload: fix indentation Part-of: 2025-10-16 21:08:43 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: fix indentation and missing indent control Part-of: 2025-10-16 21:10:35 +0200 Víctor Manuel Jáquez Leal * tests/check/elements/vkupload.c: tests: vkupload: add multiple formats and resolutions test Restructured the test allowing testing multiple formats (NV12 and RGBA) and resolution. Instead of a format-specific validation, the test keeps the input image and compare it, row by row / pixel-perfect, with the output image. The test also does memory dumps of each compared row for troubleshooting. Co-authored-by: Stéphane Cerveau Part-of: 2025-11-05 12:37:42 +0200 Rares Branici * gst-libs/gst/d3d12/gstd3d12converter.cpp: d3d12converter: Initialize video_direction Part-of: 2025-11-05 12:37:01 +0200 Rares Branici * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Initialize video_direction Part-of: 2025-11-04 17:20:16 +0100 Jan Alexander Steffens (heftig) * ext/wpe2/meson.build: wpe2: Check for presence of wpe-platform.h Just because WPEWebKit is new enough doesn't mean it has been built with the WPE Platform API enabled. Check that its header is present before building the plugin. Part-of: 2025-11-03 18:39:01 +0900 Seungha Yang * sys/d3d12/gstd3d12basefilter.cpp: * sys/d3d12/gstd3d12basefilter.h: * sys/d3d12/gstd3d12convert.cpp: * sys/d3d12/gstd3d12deinterlace.cpp: * sys/d3d12/gstd3d12fisheyedewarp.cpp: * sys/d3d12/gstd3d12interlace.cpp: * sys/d3d12/gstd3d12mipmapping.cpp: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12remap.cpp: d3d12basefilter: Make device access thread-safe Since the device object can be cleared while handling allocation queries during state changes, protect it with a mutex. Also, move the duplicated allocation query handler into the base class to eliminate redundant code. Part-of: 2025-09-05 21:07:43 +0800 Nicholas Jin * docs/plugins/gst_plugins_cache.json: audio: add U20_32 and S20_32 audio format Co-authored-by: Sebastian Dröge Part-of: 2025-10-31 10:51:48 +0100 Loïc Le Page * gst-libs/gst/codecparsers/gsth264parser.c: * tests/check/libs/h264parser.c: gsth264parser: fix uint32 to int32 truncation The H264 parser is using int32 to compute the framerate numerator and denominator while the SPS block holding the original values used for this computation are stored on uint32. On corner cases it may lead to a truncation of the final values leading to an invalid framerate. This patch is shifting right the numerator and denominator until both values may be stored on int32. It may introduce a small computation error with odd values but negligeable taking into account the huge initial values > max_int32. Part-of: 2025-10-31 15:00:35 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: * ext/tflite/gsttfliteinference.c: tflite+onnx: Remove Effect from the klass Part-of: 2025-10-26 12:48:20 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Guess the planar nature instead of setting it manually Part-of: 2025-10-26 12:14:00 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Use GstVideoInfo directly Part-of: 2025-10-26 11:07:00 +0000 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Redirect ONNX-Runtime level to GStreamer logs Part-of: 2025-10-25 16:23:13 +0100 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Set ONNX logging from GStreamer Part-of: 2025-10-25 16:04:24 +0100 Olivier Crête * ext/onnx/gstonnxinference.c: onnxinference: Push ERROR on the bus when returning GST_FLOW_ERROR Part-of: 2025-10-25 15:51:51 +0100 Olivier Crête * ext/onnx/gstml.h: * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.c: * ext/onnx/gstonnxinference.cpp: * ext/onnx/meson.build: onnxinference: Port to C Part-of: 2025-10-25 12:11:01 +0100 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: onnx: Remove template with C macro for conversion Import the code from TfLiteInference for now. Part-of: 2025-10-22 18:43:43 +0100 Olivier Crête * ext/tflite/gsttfliteinference.c: tflite: Factor out function guessing the type from the tensor Part-of: 2025-10-22 18:33:00 +0100 Olivier Crête * ext/onnx/gstonnxclient.cpp: onnx: Simplify structure member setting Part-of: 2025-10-22 18:18:22 +0100 Olivier Crête * ext/tflite/gsttfliteinference.c: tfliteinference: Remove object instance from conversion function Part-of: 2025-10-22 18:03:15 +0100 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: onnx: Remove usage of C++ string Part-of: 2025-10-22 17:52:22 +0100 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: onnx: Remove usage of C++ vector Part-of: 2025-10-22 16:48:37 +0100 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnxinference: Use C OnnxRT API instead of C++ API Part-of: 2025-10-31 17:20:31 +0900 jeongmin kwak * gst-libs/gst/mpegts/gst-scte-section.c: scte-section: fix resource leak in splice component parsing Free the `component` buffer in the error path of `gst_scte_section_parse()` to prevent a memory leak when an error occurs after allocation. Part-of: 2025-10-26 16:11:43 +0000 Víctor Manuel Jáquez Leal * ext/vulkan/vkav1dec.c: vkav1dec: dynamically generated pads templates Part-of: 2025-10-26 16:11:00 +0000 Víctor Manuel Jáquez Leal * ext/vulkan/vkav1dec.c: * ext/vulkan/vkav1dec.h: vkav1dec: clean headers and code-style fixes Part-of: 2025-10-08 15:37:47 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkvp9dec.c: * ext/vulkan/vkvp9dec.h: vkvp9dec: dynamically generated pads templates Part-of: 2025-10-06 17:05:59 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh265dec.c: * ext/vulkan/vkh265dec.h: vkh265dec: dynamically generated pads templates Part-of: 2025-09-25 19:33:31 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh264dec.h: * ext/vulkan/vkh264enc.c: * ext/vulkan/vkh264enc.h: vkh264XXX: dynamically generated pads templates Part-of: 2025-09-25 19:31:46 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvkvideocaps.c: * ext/vulkan/gstvkvideocaps.h: * ext/vulkan/meson.build: gstvkvideocaps: dynamic caps generator for pad templates Implement gst_vulkan_physical_device_codec_caps() to query Vulkan video capabilities and generate appropriate GStreamer caps for supported codecs. This includes support for H.264, H.265 decode and encode operations, and VP9 and AV1 decode operations. The implementation builds video profiles for each codec and iterates through possible chroma subsampling and bit depth combinations to determine supported configurations. For each valid configuration, it generates both codec-specific caps (like video/x-h264) and corresponding raw video output caps with Vulkan image memory feature. Also handles special cases and sets appropriate stream formats for different codecs. Part-of: 2025-09-23 14:09:30 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vkvideo-private: add gst_vulkan_video_try_configuration() This is a refactoring of encoder and decoder helper classess, taking out common code from both that queries a vulkan physical device given a video operation profile. That query returns the hardware capabilities for that profile. By taking out from encoder and decoder helper classes this common query to a physical devices to a gst_vulkan_try_configuration(), this function can be reused for the caps template generation for vulkan video elements. Part-of: 2025-10-26 16:22:31 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils-private: add film grain field in caps Part-of: 2025-10-07 17:37:44 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils-private: improve H.265 profile handling In order to determine the H.265 GStreamer profile, it's required to consider the chroma subsampling and the chroma/luma bit depth and compare them with a list of possible profile strings. Part-of: 2025-10-08 17:34:13 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils-private: fail _to_caps() if no gstreamer profile Part-of: 2025-10-07 19:36:50 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils-private: break loops when profile is found Part-of: 2025-09-25 19:24:55 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvulkan.c: * ext/vulkan/gstvulkanelement.c: vulkan: export common debug category So it can be used along all the plugin registy process. Part-of: 2025-10-07 14:42:25 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: vkformat: add missing vulkan video formats These formats are used by Vulkan video decoders and encoders. In Vulkan Specification (1.4.330), in section 53.1.6 "Representation and Texel Block Size", it says: […] The in-memory ordering of bytes within a component is determined by the host endianness. Then there's a macro that will do that conversion in compilation time. Those new color formats don't have color conversion logic yet. Part-of: 2025-09-25 19:21:50 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkerror.c: vkerror: add video profile errors Part-of: 2025-09-25 19:20:33 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils-private: H.264 profile baseline is constrained-baseline In the Vulkan Specification (v 1.4.330) in sections 45.12.3 and 45.21.6, "H264 Decode Profile" and "H.264 Encode Profile" respectively, it says: […] enum constant STD_VIDEO_H264_PROFILE_IDC_BASELINE identifies the Constrained Baseline profile as defined in A.2.1.1 of the ITU-T H.264 Specification […] This patch fix that in our mapping structure which assumed baseline. Part-of: 2025-10-27 20:46:40 +0000 Jan Schmidt * gst/mpegtsdemux/tsdemux.c: tsdemux: support demuxing ID3 metadata Output timed ID3 metadata frames. Mark packets that start a new ID3 frame as keyframes, using the PES data_alignment header flag. Based on a patch by Sebastían Benítez Díaz Part-of: 2025-10-30 11:56:59 +0100 Ruben Sanchez * tests/check/elements/nvenc.c: nvenc: Update test resolutions for modern NVIDIA GPUs Modern NVIDIA GPUs (RTX 20xx, 30xx, 40xx series) have minimum resolution requirements of 160x64. Update test resolutions from 64x64/128x128 to 320x320/640x640 to support these GPUs. The original values were causing caps negotiation failures with GST_FLOW_NOT_NEGOTIATED on modern hardware. Part-of: 2025-10-30 11:56:34 +0100 Ruben Sanchez * tests/check/elements/nvenc.c: nvenc: Fix typo in resolution_change_common using to_width for height When changing resolution in the test, the height caps field was incorrectly set using to_width instead of to_height parameter. Part-of: 2025-10-16 20:31:56 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: fix return error in raw to buffer method The return value of _copy_frames() is boolean, while the return value of _raw_to_buffer_perform() is GstFlowReturn. By casting it, it returns a wrong value. This patch returns GST_FLOW_ERROR if _copy_frames() fails. Part-of: 2025-10-29 11:29:46 +0100 Tulio Beloqui * sys/mediafoundation/gstmfcapturedshow.cpp: mfcapturedshow: fix for top-down RGB images The documentation for BITMAPINFOHEADER states that: For uncompressed RGB bitmaps, if biHeight is positive, the bitmap is a bottom-up DIB with the origin at the lower left corner. If biHeight is negative, the bitmap is a top-down DIB with the origin at the upper left corner. Also make sure the height in the caps is always positive. Tested against the NVIDIA Broadcast virtual camera. Part-of: 2025-10-26 16:06:26 +0000 Jan Schmidt * gst/mpegtsmux/gstbasetsmux.c: * gst/mpegtsmux/tsmux/tsmuxstream.c: mpegtsmux: Split large non-video PES packets MPEG-TS PES packets have a maximum payload size of 65535 bytes (including the header bytes). For larger incoming payloads, split them into maximum-size PES packets. Video packets are allowed to be unbounded When breaking incoming buffers across PES packet payloads, only the first should carry the incoming PTS/DTS Part-of: 2025-10-26 16:06:26 +0000 Jan Schmidt * gst/mpegtsmux/tsmux/tsmuxstream.c: mpegtsmux: Use some named constants instead of hard-coded values Make some code a bit more readable Part-of: 2025-10-28 11:40:20 +0900 JihoonLee * gst/mpegtsdemux/tsdemux.c: tsdemux: add debug logs for various stream handling cases Add GST_DEBUG_OBJECT statements in the default cases of switch statements to improve traceability when handling unexpected GstH264NalUnitType, MPEG-TS stream types, JPEG2000 color specifications. - scan_keyframe_h264: Log NAL unit type for non-slice cases - create_pad_for_stream: Log unsupported stream types - color specification handling: Log unrecognized color specs No functional changes introduced, only enhanced debugging capabilities. Part-of: 2025-10-29 14:17:28 +0900 jeongmin kwak * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: Free sub-request on allocation failure If gst_vec_deque_pop_head() returns NULL, a new GstV4l2Request is allocated. Free it on MEDIA_IOC_REQUEST_ALLOC failure to avoid memory leak. Part-of: 2025-10-28 00:47:57 -0400 Doug Nazar * ext/openaptx/openaptx-plugin.c: * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecs/gstmpeg2decoder.c: bad: Annotate unused functions/variables when checks/asserts disabled Part-of: 2025-10-23 15:43:10 +0900 JihoonLee * gst/videoparsers/gsth265parse.c: h265parse: Add debug logging for unknown H.265 values Add GST_DEBUG logging for unrecognized H.265 parser values to improve diagnostic capability when processing unsupported or malformed streams: - gst_h265_parse_process_sei(): log unknown SEI payload types - gst_h265_parse_update_src_caps(): log unknown chroma format IDs - gst_h265_parse_pre_push_frame(): log unknown sei_pic_struct values These debug statements help identify issues with non-standard H.265 stream configurations during parsing. Part-of: 2025-10-25 14:24:19 +0100 Jan Schmidt * gst/mpegtsdemux/pesparse.c: mpegtsdemux: Use some named constants instead of hard-coded values Make some code a bit more readable Part-of: 2025-05-16 09:26:49 -0400 Olivier Crête * gst/tensordecoders/gstclassifiertensordecoder.c: classifierdecoder: Support tensors that don't need softmax In some models, the softmax function has already been performed, so no need to do it in the GStreamer code. Part-of: 2025-10-09 14:50:13 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: webrtcbin: Unlock sctp elements during disposal Not doing so would lead to critical warnings. It could happen if webrtcbin is teared down while it has a data-channel awaiting to preroll. Part-of: 2025-10-09 14:43:46 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/gstwebrtcbin.h: * gst-libs/gst/webrtc/nice/nice.c: * tests/check/elements/webrtcbin.c: webrtcbin: Optional support for async tasks This seems needed mostly for the add-ice-candidate-full signal where the promise is passed down to the ICE implementation. In this context the promise reply will usually be notified from the ICE backend which in some situations has to perform an asynchronous name resolution for the host supplied in the candidate SDP. Covered by a test that negotiates an Offer/Answer and then attempts to add an ICE candidate containing an invalid MDNS candidate address. Part-of: 2025-01-17 18:32:13 -0300 Daniel Almeida * ext/vulkan/gstvulkan.c: * ext/vulkan/meson.build: * ext/vulkan/vkav1dec.c: * ext/vulkan/vkav1dec.h: * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkdecoder-private.h: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: * gst-libs/gst/vulkan/gstvkvideoutils-private.c: * gst-libs/gst/vulkan/gstvkvideoutils-private.h: vulkan: add av1 decode element Co-authored-by: Stephane Cerveau Part-of: 2025-10-25 13:10:48 +0100 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Create background thread with normal priority The background thread would be idle in most time and it does not perform any time critical task. Create the thread explicitly outside of our I/O thread so that default priority to be assigned Part-of: 2025-10-25 18:50:16 +0200 Stéphane Cerveau * ext/vulkan/vkvp9dec.c: vkvp9dec: fix dpb_size calculation Remove useless checks in _find_next_slot_idx Part-of: 2025-10-25 16:14:49 +0100 He Junyan * gst/videoparsers/gstav1parse.c: av1parse: Fix duplicated frames issue in frame splitting This fix a bug where we append two frames into one buffer despite trying to split stream into unique frames. Fixes #4701 Part-of: 2025-10-25 14:18:47 +0100 Seungha Yang * sys/d3d12/gstd3d12swapchainsink.cpp: d3d12swapchainsink: Fix flickering after resize Mark as it was resized correctly so that next render cycle can be processed as intended Part-of: 2025-10-14 14:01:52 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vkvideo-private: split video device and instance functions Load and use device functions are faster and attached to a specific device. Nevertheless, physical device functions belong to instance. Part-of: 2025-10-14 13:57:55 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideo-private.h: vkvideo-private: remove unused function pointer vkCmdPipelineBarrier2KHR isn't used because it was integrated into GstVulkanOperation. Part-of: 2025-10-13 17:48:37 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vk{decoder,encoder}-private: use new physical device functions Rather than loading the functions pointers by the helper classes themselves. Part-of: 2025-10-13 16:46:41 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: add gst_vulkan_physical_device_get_video_capabilities() The function will return TRUE if vkGetPhysicalDeviceVideoCapabilitiesKHR function is available and it ran correctly. If so, the pcaps structure (VkVideoCapabilitiesKHR) is filled. Part-of: 2025-10-13 16:27:33 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkerror.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: add gst_vulkan_physical_device_get_video_formats() This function will return a GArray of VkVideoFormatPropertiesKHR elements given the image usage and a pointer to a VkVideoProfileInfoKHR structure. Part-of: 2025-10-13 14:43:02 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: add gst_vulkan_physical_device_get_format_properties() This function will try to use the latest way to fetch the format's properties. It can be called multiple times so it's better to keep it as function attached to the object. The function still uses gst_vulkan_instance_get_proc_address() instead of gst_vulkan_device_get_proc_address() because, logically, physical device is in between of the instance and the device. In other to keep the code compatible with several Vulkan versions, we added a private result structure: GstVulkanFormatProperties. In gstvkformat, instead of loading the function every time, this new function is called from GstPhysicalDevice object. Part-of: 2025-10-13 14:39:26 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: enable physical device extensions These extensions are potentially used by gst_vulkan_format_from_video_info_2() but since they aren't loaded with the conditions are met, basic fallback are used. Part-of: 2025-10-13 14:37:27 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: fix verification function calling The code only checked if the function was set, but it didn't actually call the function. Part-of: 2025-04-01 14:46:23 -0400 Nicolas Dufresne * gst/codecalpha/gstalphacombine.c: alphacombine: Only reset once both pads are done flushing Since reset also removes the blocking pad probe, this meant that the new mechanism only worked if the main pads received flush-stop first. Keep both pad implementation symmetrical and reset once both pads have received the event. Part-of: 2025-10-16 14:34:48 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Reset PUSI flag after writing stream packet Otherwise we might accidentally set it on a PCR-only packet when we pad the stream on a subsequent write. Part-of: 2024-09-21 00:53:11 +0200 Michael Grzeschik * sys/uvcgadget/gstuvcsink.c: uvcgadget: always ensure to switch to fakesink In the case we transition the uvcsink to toggle between ready and playing we have to ensure to always switch between fakesink and v4l2sink. Using the already linked v4l2sink a second time does curr ntly not work when we restart the stream and therefor switch to streaming again. Part-of: 2025-08-25 21:39:27 -0400 Daniel Morin * tests/check/libs/analyticsmeta.c: test: Test GstAnalyticsTensorMtd - Verify add GstAnalyticsTensorMtd to GstAnalyticsRelationMeta and retrieve it. Part-of: 2024-07-17 12:24:11 -0400 Daniel Morin * gst-libs/gst/analytics/analytics.h: * gst-libs/gst/analytics/gstanalyticstensormtd.c: * gst-libs/gst/analytics/gstanalyticstensormtd.h: * gst-libs/gst/analytics/gsttensor.c: * gst-libs/gst/analytics/gsttensor.h: * gst-libs/gst/analytics/meson.build: analytics: adding tensor mtd - GstAnayticsTensorMtd can store GstTensor and describe relation with other Mtd Part-of: 2025-10-16 11:35:57 -0400 Nicolas Dufresne * gst/rist/gstristsink.c: ristsink: Fix double free regression The rtpext element was leaked in error path and fixed in MR !9756, but the rtpext owner ship is later passed to a bin using gst_bin_add(). Ref-sync the rtpext element so we can unref it in finalize() function without any special cases. Fixes #4707 Part-of: 2025-10-15 11:38:29 +0200 David Maseda Neira * ext/x265/gstx265enc.c: x265enc: Calculate latency based on encoder parameters Estimate latency based on lookahead queue depth + bframes + number of encoding threads. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4697 Part-of: 2025-10-14 09:12:47 -0300 Thibault Saunier * gst-libs/gst/analytics/gstanalyticsmeta.h: Revert "doc: python: Document PyGObject overrides for core GStreamer" This reverts commit 81f5440159ca43194e98327e42bdd6a48e946d69. Part-of: 2025-10-04 15:14:31 -0400 Doug Nazar * gst-libs/gst/cuda/gstcudabufferpool.h: * gst-libs/gst/insertbin/gstinsertbin.h: * gst-libs/gst/transcoder/gsttranscoder.h: * gst-libs/gst/va/gstvaallocator.h: * gst-libs/gst/va/gstvapool.h: * gst-libs/gst/vulkan/gstvkfence.h: * gst-libs/gst/vulkan/gstvkswapper.h: gst: Add G_GNUC_WARN_UNUSED_RESULT to constructors Part-of: 2025-09-11 14:24:25 -0400 Doug Nazar * tests/check/elements/avtpcrfcheck.c: * tests/check/elements/avtpcrfsync.c: * tests/check/elements/camerabin.c: * tests/check/elements/cccombiner.c: * tests/check/elements/fdkaac.c: * tests/check/elements/h264timestamper.c: * tests/check/elements/h266parse.c: * tests/check/elements/id3mux.c: * tests/check/elements/pnm.c: * tests/check/elements/rtponvifparse.c: * tests/check/elements/webrtcbin.c: * tests/check/libs/insertbin.c: * tests/check/libs/mse.c: * tests/check/libs/play.c: * tests/check/libs/vkvideoencodeav1.c: bad: tests: convert g_assert() to g_assert_*() and mark unused items Part-of: 2025-09-11 14:22:03 -0400 Doug Nazar * ext/avtp/gstavtpaafdepay.c: * ext/avtp/gstavtpaafpay.c: * ext/avtp/gstavtpbasedepayload.c: * ext/avtp/gstavtpcrfbase.c: * ext/avtp/gstavtpcrfsync.c: * ext/avtp/gstavtpcrfutil.c: * ext/avtp/gstavtpcvfdepay.c: * ext/avtp/gstavtpcvfpay.c: * ext/avtp/gstavtprvfdepay.c: * ext/avtp/gstavtprvfpay.c: * ext/closedcaption/gstcea608mux.c: * ext/dash/gstmpdclient.c: * ext/dtls/gstdtlssrtpdec.c: * ext/dtls/gstdtlssrtpenc.c: * ext/webrtc/gstwebrtcbin.c: * gst-libs/gst/analytics/gstanalyticssegmentationmtd.c: * gst-libs/gst/codecparsers/gsth265bitwriter.c: * gst-libs/gst/mse/gstsourcebuffer.c: * gst-libs/gst/wayland/gstwlbuffer.c: * gst/debugutils/gsttestsrcbin.c: * gst/id3tag/id3tag.c: * gst/netsim/gstnetsim.c: * gst/rtmp2/rtmp/amf.c: * gst/rtmp2/rtmp/rtmpconnection.c: * gst/rtmp2/rtmp/rtmpmessage.c: * gst/tensordecoders/gstfacedetectortensordecoder.c: * sys/va/gstvaav1enc.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvavp9enc.c: bad: mark items that are unused when checks or asserts are disabled Part-of: 2025-03-24 06:36:26 +0100 Carlos Bentzen * gst-libs/gst/codecs/gsth266decoder.c: h266decoder: suppport vvc1 and vvi1 modes Part-of: 2025-03-24 06:36:07 +0100 Carlos Bentzen * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecparsers/gsth266parser.h: h266parser: implement identify and split nalu Part-of: 2025-10-14 14:21:26 +0800 Shengqi Yu (喻盛琪) * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: increase wait time for configure event the timeout 100ms adding in merge request https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/365 for wait config event may be not enough. if there are a series of weston client running or CPU loading is high(stress test), the 100ms appear time out probabilistically. this will result in gstwldisplay thread go wrong. So, here increase the timeout time. Part-of: 2025-10-03 18:43:03 +0200 stevn <3381023+stevn@users.noreply.github.com> * sys/applemedia/avsamplevideosink.m: * sys/applemedia/coremediabuffer.c: * sys/applemedia/corevideobuffer.c: * sys/applemedia/helpers.c: * sys/applemedia/vtdec.c: * sys/applemedia/vtenc.c: applemedia: add P010_LE support to eg vtenc_hw Part-of: 2025-10-09 08:09:33 +0200 Branko Subasic * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Properly check if pads are EOS in find_best_pad In find_best_pad(), when checking if a pad is EOS we use the macro GST_PAD_IS_EOS. But the aggregator pads will not propagate EOS received on it's sinkpads until it has received EOS on all of them. Instead the EOS event is put in the queue, which means that GST_PAD_IS_EOS will return FALSE. This makes find_best_pad() fail to find a best pad when all but one sink pad has received EOS, and have no data left in their queues, and the last one has data. The problem is solved by modifying find_best_pad() to use gst_aggregator_pad_is_eos() instead. Part-of: 2025-10-08 14:05:07 +0200 Branko Subasic * ext/closedcaption/gstcea608mux.c: cea608mux: Properly check if pads are EOS in find_best_pad In find_best_pad(), when checking if a pad is EOS we use the macro GST_PAD_IS_EOS. But the aggregator pads will not propagate EOS received on it's sinkpads until it has received EOS on all of them. Instead the EOS event is put in the queue, which means that GST_PAD_IS_EOS will return FALSE. This makes find_best_pad() fail to find a best pad when all but one sink pad has received EOS, and have no data left in their queues, and the last one has data. The problem is solved by modifying find_best_pad() to use gst_aggregator_pad_is_eos() instead. Part-of: 2025-10-07 12:25:07 +0100 Philippe Normand * gst-libs/gst/webrtc/nice/nice.c: webrtc: nice: Fix a use-after-free and a mem leak `new_candidate` was freed too early and `new_addr` wasn't freed in case of early return from the on_candidate_resolved function. Part-of: 2025-10-03 03:13:25 +0000 Abd Razak, Muhammad Azizul Hazim * sys/va/gstvaav1enc.c: vaav1enc: add upscaledwidth value for SCC encoding Part-of: 2025-09-29 17:43:06 +0900 Seungha Yang * sys/d3dvideosink/d3dhelpers.c: d3dvideosink: Port to gst_call_async The previous implementation was wrong in a way that passing element class as if it's element, as well as device reset handling itself seems to be wrong though, removing use of deprecated API. The d3dvideosink is not a recommended videosink anyway Part-of: 2025-09-29 16:57:30 +0900 Seungha Yang * sys/ipcpipeline/gstipcpipelinesink.c: * sys/ipcpipeline/gstipcpipelinesrc.c: ipcpipeline: Port to gst_object_call_async Part-of: 2025-09-29 16:54:26 +0900 Seungha Yang * gst/debugutils/gsttestsrcbin.c: testsrcbin: Port to gst_object_call_async Part-of: 2025-09-29 16:53:14 +0900 Seungha Yang * ext/openjpeg/gstopenjpegdec.c: * ext/openjpeg/gstopenjpegenc.c: openjpeg: Port to gst_object_call_async Part-of: 2025-10-05 14:56:35 -0400 Xavier Claessens * data/meson.build: meson: Add missing devenv values Those are the differences spotted between: - meson devenv -C builddir --dump meson.env - ./gst-env.py --only-environment > gst.env Part-of: 2025-07-08 01:07:33 +0900 Seungha Yang * gst-libs/gst/hip/gsthip-enums.cpp: * gst-libs/gst/hip/gsthip-enums.h: * gst-libs/gst/hip/gsthip-gl.h: * gst-libs/gst/hip/gsthip-interop-gl.h: * gst-libs/gst/hip/gsthip-interop.cpp: * gst-libs/gst/hip/gsthip-interop.h: * gst-libs/gst/hip/gsthip-private.h: * gst-libs/gst/hip/gsthip.h: * gst-libs/gst/hip/gsthip_fwd.h: * gst-libs/gst/hip/gsthipbufferpool.cpp: * gst-libs/gst/hip/gsthipbufferpool.h: * gst-libs/gst/hip/gsthipdevice.cpp: * gst-libs/gst/hip/gsthipdevice.h: * gst-libs/gst/hip/gsthipevent.cpp: * gst-libs/gst/hip/gsthipevent.h: * gst-libs/gst/hip/gsthiploader.cpp: * gst-libs/gst/hip/gsthiploader.h: * gst-libs/gst/hip/gsthipmemory.cpp: * gst-libs/gst/hip/gsthipmemory.h: * gst-libs/gst/hip/gsthiprtc.cpp: * gst-libs/gst/hip/gsthiprtc.h: * gst-libs/gst/hip/gsthipstream.cpp: * gst-libs/gst/hip/gsthipstream.h: * gst-libs/gst/hip/gsthiputils-private.h: * gst-libs/gst/hip/gsthiputils.cpp: * gst-libs/gst/hip/gsthiputils.h: * gst-libs/gst/hip/hip-gst-gl.h: * gst-libs/gst/hip/hip-gst.h: * gst-libs/gst/hip/hip-prelude.h: * gst-libs/gst/hip/meson.build: * gst-libs/gst/hip/stub/cuda.h: * gst-libs/gst/hip/stub/cudaD3D11.h: * gst-libs/gst/hip/stub/cudaGL.h: * gst-libs/gst/hip/stub/driver_types.h: * gst-libs/gst/hip/stub/hip/driver_types.h: * gst-libs/gst/hip/stub/hip/hip_gl_interop.h: * gst-libs/gst/hip/stub/hip/hip_runtime.h: * gst-libs/gst/hip/stub/hip/hip_runtime_api.h: * gst-libs/gst/hip/stub/hip/hiprtc.h: * gst-libs/gst/hip/stub/hip/nvidia_hip_runtime_api.h: * gst-libs/gst/hip/stub/hip/texture_types.h: * gst-libs/gst/meson.build: * sys/hip/gsthipbasefilter.h: * sys/hip/gsthipcompositor.cpp: * sys/hip/gsthipconverter.cpp: * sys/hip/gsthipconverter.h: * sys/hip/gsthipmemorycopy.cpp: * sys/hip/gsthipmemorycopy.h: * sys/hip/meson.build: * sys/hip/plugin.cpp: hip: Move core methods to gst-libs Make core GstHip methods public so applications can access GstHip-produced resources directly. Part-of: 2025-10-03 16:56:47 +0200 Stéphane Cerveau * ext/vulkan/vkvp9dec.c: vkvp9dec: fix resolution change NULL pointer dereference Add early return when output_state is not yet initialized in _check_resolution_change(). This occurs during early stream initialization before output_state is set up. Resolution change detection is safely skipped since coded dimensions match frame header dimensions during stream init, making renegotiation unnecessary at this stage. Part-of: 2025-09-22 12:53:31 -0300 Thibault Saunier * gst-libs/gst/analytics/gstanalyticsmeta.h: doc: python: Document PyGObject overrides for core GStreamer Add comprehensive documentation for Python-specific functionality provided by PyGObject overrides in core GStreamer classes including: - Bin: make_and_add helper method and multi-element add() support - Buffer/Memory: context manager support for map operations - Caps: constructor overrides and container protocol support - Clock: TIME_ARGS utility function - Element: link_many static method - ElementFactory: convenience metadata getters and classmethod make() - Iterator: Python iteration protocol support - MiniObject: make_writable and flags property - Structure: dictionary-like access and constructor overrides - TagList: container protocol support Documentation is placed in the appropriate C function documentation where overrides enhance existing functionality, or in class-level SECTION documentation for new helper methods. Part-of: 2025-09-03 19:07:06 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: remove unused code When the encoder is open, codedbuf_size cannot be zero or less. Part-of: 2025-09-03 18:13:34 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: vaencoder: use gst_clear_object() Instead of gst_clear_pointer(), even though gst_clear_object() is a macro that uses gst_clear_pointer() let's keep the semantics. Part-of: 2025-09-03 06:44:02 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: * gst-libs/gst/va/gstvapool.c: * gst-libs/gst/va/gstvapool.h: va: remove unusable public macros Since GstVaDmabufAllocator, GstVaAllocator and GstVaPool structures aren't public it's impossible to use the glib macros for data type checking. They were moved to the c code. Part-of: 2025-09-26 22:20:08 +0530 Nirbheek Chauhan * sys/hip/gsthiploader.cpp: * sys/hip/gsthiprtc.cpp: * sys/hip/gsthiputils.cpp: * sys/hip/gsthiputils.h: hip: Fix loading of HIP libraries on Linux We shouldn't need the development packages to dlopen the HIP libraries. Also look for HIP 7.0 in System32 on Windows. Part-of: 2025-09-10 21:30:50 +0300 anonymix007 <48598263+anonymix007@users.noreply.github.com> * tests/examples/vulkan/meson.build: * tests/examples/vulkan/sdl3_vulkandec.c: examples: Add SDL3 Vulkan Renderer interop example Co-authored-by: Victor Jaquez Part-of: 2025-09-19 12:43:01 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: always enable YCBCR conversion extension It always needs to be enable to use it. Part-of: 2025-09-25 08:39:47 -0400 Doug Nazar * gst-libs/gst/analytics/gstanalyticssegmentationmtd.h: * gst-libs/gst/analytics/gsttensor.h: * gst-libs/gst/audio/gstnonstreamaudiodecoder.h: * gst-libs/gst/audio/gstplanaraudioadapter.h: * gst-libs/gst/codecs/gstav1picture.h: * gst-libs/gst/codecs/gsth264decoder.h: * gst-libs/gst/codecs/gsth264picture.h: * gst-libs/gst/codecs/gsth265decoder.h: * gst-libs/gst/codecs/gsth265picture.h: * gst-libs/gst/codecs/gsth266picture.h: * gst-libs/gst/codecs/gstmpeg2picture.h: * gst-libs/gst/codecs/gstvp8picture.h: * gst-libs/gst/codecs/gstvp9picture.h: * gst-libs/gst/cuda/gstcudacontext.h: * gst-libs/gst/cuda/gstcudamemory.h: * gst-libs/gst/cuda/gstcudamemorypool.h: * gst-libs/gst/cuda/gstcudastream.h: * gst-libs/gst/mpegts/gst-atsc-section.h: * gst-libs/gst/mpegts/gst-dvb-section.h: * gst-libs/gst/mpegts/gst-scte-section.h: * gst-libs/gst/mpegts/gstmpegtsdescriptor.h: * gst-libs/gst/mpegts/gstmpegtssection.h: * gst-libs/gst/mse/gstmediasource.h: * gst-libs/gst/mse/gstsourcebuffer.h: * gst-libs/gst/mse/gstsourcebufferlist.h: * gst-libs/gst/play/gstplay-signal-adapter.h: * gst-libs/gst/play/gstplay-visualization.h: * gst-libs/gst/play/gstplay.h: * gst-libs/gst/player/gstplayer-visualization.h: * gst-libs/gst/player/gstplayer.h: * gst-libs/gst/transcoder/gsttranscoder-signal-adapter.h: * gst-libs/gst/transcoder/gsttranscoder.h: * gst-libs/gst/va/gstvadisplay_drm.h: * gst-libs/gst/va/gstvadisplay_wrapped.h: * gst-libs/gst/vulkan/gstvkbufferpool.h: * gst-libs/gst/vulkan/gstvkcommandbuffer.h: * gst-libs/gst/vulkan/gstvkcommandpool.h: * gst-libs/gst/vulkan/gstvkdescriptorcache.h: * gst-libs/gst/vulkan/gstvkdescriptorpool.h: * gst-libs/gst/vulkan/gstvkdescriptorset.h: * gst-libs/gst/vulkan/gstvkdevice.h: * gst-libs/gst/vulkan/gstvkdisplay.h: * gst-libs/gst/vulkan/gstvkfence.h: * gst-libs/gst/vulkan/gstvkfullscreenquad.h: * gst-libs/gst/vulkan/gstvkhandle.h: * gst-libs/gst/vulkan/gstvkimagebufferpool.h: * gst-libs/gst/vulkan/gstvkimagememory.h: * gst-libs/gst/vulkan/gstvkimageview.h: * gst-libs/gst/vulkan/gstvkinstance.h: * gst-libs/gst/vulkan/gstvkoperation.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.h: * gst-libs/gst/vulkan/gstvkqueue.h: * gst-libs/gst/vulkan/gstvkswapper.h: * gst-libs/gst/vulkan/gstvktrash.h: * gst-libs/gst/vulkan/gstvkvideofilter.h: * gst-libs/gst/vulkan/gstvkwindow.h: * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.h: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/icestream.h: * gst-libs/gst/webrtc/rtcsessiondescription.h: bad: Add G_GNUC_WARN_UNUSED_RESULT to funcs with transfer full returns Part-of: 2025-09-28 10:19:26 +0100 Philippe Normand * ext/wpe2/gstwpedisplay.cpp: * ext/wpe2/gstwpethreadedview.cpp: * ext/wpe2/meson.build: wpe2: Require wpewebkit >= 2.50 The API slightly changed since 2.48 and also the WPEPlatform lib is now part of libWPEWebKit, so there's no need to check it anymore during the meson setup. Part-of: 2025-09-26 16:58:38 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudanvrtc.cpp: cuda: Fix runtime kernel compile with CUDA 13.0 Instead of hardcoded value, checks compute compatibility at runtime Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4655 Part-of: 2025-09-24 15:33:02 -0400 Doug Nazar * gst-libs/gst/audio/gstplanaraudioadapter.c: gst: fixes Part-of: 2025-09-29 14:44:32 -0400 Xavier Claessens * ext/svtjpegxs/meson.build: * sys/aja/meson.build: meson: Remove "allow_fallback: true" from non essential deps It means that if that dependency is not found on the system, and the corresponding feature option is set to "auto", it won't build the fallback subproject. This reduces size and build time of default build. Part-of: 2025-09-22 12:00:32 +0300 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: tsdemux: Directly forward Opus AUs without `opus_control_header` ffmpeg does the same, assuming that it's raw Opus data. ZLMediaKit is producing MPEG-TS like this and probably nobody ever noticed because ffmpeg allows for this, so let's work around their bugs and handle it the same way as ffmpeg. See https://github.com/ZLMediaKit/ZLMediaKit/issues/4461 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4645 Part-of: 2025-09-25 22:42:12 -0400 Doug Nazar * ext/lv2/gstlv2utils.c: * ext/teletextdec/gstteletextdec.c: * gst/rist/gstristsink.c: * gst/rist/gstristsrc.c: * sys/decklink/gstdecklinkvideosink.cpp: * sys/uvcgadget/gstuvcsink.c: gst: Fix a few small leaks Part-of: 2025-09-05 11:49:55 +0800 Qian Hu (胡骞) * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/gstwlwindow.h: waylandsink: handle flush stop event when got flush seek, waylandsink will re-preroll. if next_buffer and staged_buffer are both NOT-NULL, gst_wl_window_render will return FALSE. and preroll will fail. this patch clear staged_buffer for flush_stop event, make sure preroll success Part-of: 2025-09-17 08:38:48 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Protect against too small window Fix protocol error due to 0 sized destination. When the compositor decides we should render to a really small window such as 1x1, the inner rectangle for the video surface may endup with a width or height of 0, which is a protocol error. Part-of: 2025-09-17 08:37:43 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Move commit outsite of the video resize helper This is a minor cleanup that helps readability by removing a boolean parameter from the function. No functional change. Part-of: 2025-09-17 08:34:54 -0400 Nicolas Dufresne * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/gstwlwindow.h: waylandsink: Open toplevel fullscreen window on the selected output Adds a new helper to create a toplevel that is configured to fullscreen on the selected output immediately. This also allow selecting the fullscreen-output when using the fullscreen shell protocol. Part-of: 2025-09-08 15:55:35 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Delay the render rectangle once the surface is configured Updating the surface before sending the configure ack results in bad window placement. Handle this situation like if the window is being created by unsetting the configured flag. Once we acked the configuration, always update the geometry, which ensure we have a commit after that event regardless if anything dimensions changed or not. Part-of: 2025-09-08 15:53:58 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Flush the queue after sending fullscreen command Flushing the queue allow for immediate changes. This is needed to ensure the switch from/to fullscreen, or changing display happens in paused state. Part-of: 2025-09-08 10:44:47 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Trace the configured top level surface state Part-of: 2025-09-05 15:04:49 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: waylandsink: Add a fullscreen-output property New property that let you specify which output to fullscreen to. Part-of: 2025-09-05 15:02:57 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/gstwlwindow.h: wayland: window: Allow to fullscreen on a specific output This add a new method that allow to fullscreen the window on a specific displaty. This can be useful for simple application that just want to render fullscreen and have multiple possible outputs. Part-of: 2025-09-05 15:00:38 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: wayland: display: Enumerate wl_output Catch wl_output global object and using its listener gather all the wl_output information and store them by name into a hashmap. The GstWlOutput can be obtained by name using a new function in the GstWlDisplay API. Part-of: 2025-09-05 14:58:23 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwloutput-private.h: * gst-libs/gst/wayland/gstwloutput.c: * gst-libs/gst/wayland/gstwloutput.h: * gst-libs/gst/wayland/meson.build: * gst-libs/gst/wayland/wayland.h: wayland: Add object to store wl_output information This is a gobject that can be used to store all the information about a wl_output. The setters are private, while the getters are public. Thread safety should be done by maintaining a ref count on the object during reads. Part-of: 2025-09-24 19:26:51 +0900 Seungha Yang * sys/nvcodec/gstcudaconvertscale.c: cudaconvert: Fix crop meta support When in/output caps are identical, even if downstream didn't propose pool, always respond to support crop meta Part-of: 2025-09-24 19:37:00 +0900 Seungha Yang * sys/d3d12/gstd3d12convert.cpp: d3d12convert: Fix crop meta support When in/output caps are identical, even if downstream didn't propose pool, always respond to support crop meta Part-of: 2025-09-17 11:17:59 +0200 Stéphane Cerveau * gst-libs/gst/isoff/gstisoff.c: isoff: fix fall through warnings The compiler since !8229 checks fallthroughs, explicitly add G_GNUC_FALLTHROUGH to tell that this is expected. Part-of: 2025-09-09 10:12:00 -0400 Olivier Crête * ext/tflite/gsttflitevsiinference.c: tflitevsiinference: Replace renamed API The renamed API wasn't actually the one we wanted, replace it with the correct one. Part-of: 2025-09-11 15:29:08 -0400 Julian Bouzas * ext/lcevcencoder/gstlcevch266enc.c: * ext/lcevcencoder/gstlcevch266enc.h: * ext/lcevcencoder/meson.build: * ext/lcevcencoder/plugin.c: lcevcencoder: Add lcevch266enc element This new element allows encoding LCEVC H.266 video. Part-of: 2025-09-23 20:29:11 +0200 David Maseda Neira * sys/nvcodec/gstnvh264encoder.cpp: nvcodec: Ensure interlace is used only when required and supported Part-of: 2025-09-23 09:06:09 +0300 Sebastian Dröge * gst/mpegtsmux/gstbasetsmux.c: tsmux: Write a full Opus channel configuration if no matching Vorbis one is found Instead of simply failing negotiation despite the stream being supported. Without this the following pipeline will fail: audiotestsrc is-live=true ! audio/x-raw,channels=8 ! opusenc ! mpegtsmux ! fakesink opusenc selects the Vorbis channel layout family but a channel-mapping that is not one of the ones supported by the short MPEG-TS Opus channel configurations. Part-of: 2025-08-11 13:56:14 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstobjectdetectionoverlay.c: objectdetectionoverlay: In the presence of tracking Mtd, draw different colors It will create one color per track, trying to use colors which are as different as possible from each other. There is a property to control that behaviour. Part-of: 2025-08-11 13:55:49 -0400 Olivier Crête * ext/analyticsoverlay/gstobjectdetectionoverlay.c: objectdetectionoverlay: Remove unused variable Part-of: 2025-08-11 11:29:11 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstobjectdetectionoverlay.c: objectdetectionoverlay: Add option to not draw tracking labels Part-of: 2025-09-22 10:09:48 +0800 Cheah, Vincent Beng Keat * sys/va/gstvacompositor.c: vacompositor: Correct scale-method properties Part-of: 2025-09-08 17:50:32 -0400 Doug Nazar * ext/closedcaption/gstcea608mux.c: * gst/audiomixmatrix/gstaudiomixmatrix.c: * gst/debugutils/gsttestsrcbin.c: gst: Don't use g_assert() around production code If G_DISABLE_ASSERT is defined the code will not be compiled. Part-of: 2025-09-16 19:00:47 +0530 Nirbheek Chauhan * ext/isac/meson.build: isac: Suppress warning about -Wno-virtual-dtor on Fedora The absl pkgconfig files on Fedora contain -Wnon-virtual-dtor in Cflags: even though pc files should not contain -W flags. Worse, our plugin is written in C but that's a C++ argument so GCC emits a warning about that. Part-of: 2025-09-03 17:16:38 +0200 Stéphane Cerveau * tests/check/libs/vkvideoencodeav1.c: vulkan: fix AV1 encode test with TILE_GROUP Add support for GST_AV1_OBU_TILE_GROUP. For example RADV generates frame with two OBUs such as FRAME_HEADER + TILE_GROUP when nvidia generated only FRAME OBU. Part-of: 2025-09-16 16:38:22 -0700 Xavier Claessens * gst/unixfd/gstunixfd.c: * tests/check/elements/unixfd.c: unixfd: Fix case of buffer with big payload In the case a buffer has big meta serialization, for example if it contains a GstBuffer, the payload cannot be sent/received in a single call. Idealy we should serialize metas into a memfd in that case, instead of writing the data on the socket. Part-of: 2025-08-29 12:13:58 +0200 Stéphane Cerveau * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkdecoder-private.h: * gst-libs/gst/vulkan/gstvkvideo-private.c: * tests/check/libs/vkvideodecode.c: vkdecoder: enable INLINE_PARAMS in the decoder GST_VULKAN_DECODER_FEATURE_INLINE_PARAMS should enable VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR in the decoder session creation. Add new api gst_vulkan_decoder_has_feature and keep `features` private. Part-of: 2025-08-29 12:12:24 +0200 Stéphane Cerveau * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkdecoder-private.h: * tests/check/libs/vkvideodecode.c: vkdecoder: fix typo and rename MAINTENANCE2 feat The feature GST_VULKAN_DECODER_FEATURES_VIDEO_MAINTEINANCE2 has been renamed to GST_VULKAN_DECODER_FEATURE_INLINE_PARAMS to clarify the use of this feature in the rest of the code. Part-of: 2025-09-16 18:01:35 +0900 Seungha Yang * sys/d3d12/gstd3d12overlaycompositor.cpp: d3d12overlaycompositor: Fix leak and improve passthrough Allow buffer passthrough when the composition meta contains no rectangles Part-of: 2025-09-16 17:35:17 +0900 Seungha Yang * sys/d3d12/gstd3d12overlayblender.cpp: d3d12overlayblender: Rectangle upload optimization Removed GList usage and reworked upload logic to reduce overhead Part-of: 2025-09-16 15:24:22 +0900 Seungha Yang * sys/d3d12/gstd3d12deinterlace.cpp: d3d12deinterlace: Fix passthrough handling Don't try to convert buffer when passthrough is enabled Part-of: 2025-09-03 11:32:19 -0400 Xavier Claessens * ext/analyticsoverlay/gstobjectdetectionoverlay.c: * ext/vulkan/vkoverlaycompositor.c: * sys/d3dvideosink/d3dhelpers.h: * sys/d3dvideosink/d3dvideosink.c: * sys/d3dvideosink/gstd3d9overlay.c: * sys/dwrite/gstdwriteoverlayobject.cpp: GstVideoOverlayCompositionMeta: Fix multiple composition meta usage This deprecates gst_buffer_get_video_overlay_composition_meta() and stops using it. The reason is a buffer could have multiple composition metas, and each of them can have multiple rectangles. Sinks and compositor elements must iterate over all metas instead of assuming there is only one. Discourage usage of gst_video_overlay_composition_make_writable() and gst_video_overlay_composition_copy() in documentation. Instead of modifying upstream's composition meta, overlay elements should add their own meta. This avoids texture cache invalidation in sinks and compositor elements that keep a ref of GstVideoOverlayRectangle objects. Part-of: 2025-09-12 17:31:01 +0900 Seungha Yang * gst-libs/gst/d3dshader/gstd3dshadercache.cpp: * gst-libs/gst/d3dshader/gstd3dshadercache.h: * gst-libs/gst/d3dshader/plugin-hlsl/PSMain_sample_bgra_to_vuya_full.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/PSMain_sample_bgra_to_vuya_full_premul.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/PSMain_sample_bgra_to_vuya_limited.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/PSMain_sample_bgra_to_vuya_limited_premul.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/hlsl.h: * gst-libs/gst/d3dshader/plugin-hlsl/meson.build: * sys/d3d12/gstd3d12overlayblender.cpp: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12overlaycompositor.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add overlay compositor element Introduce a new d3d12overlaycompositor element that blends GstVideoOverlayCompositionMeta attached to input buffers onto output D3D12 textures Part-of: 2025-09-12 17:48:36 +0900 Seungha Yang * sys/d3d12/gstd3d12overlayblender.cpp: * sys/d3d12/gstd3d12overlayblender.h: * sys/d3d12/gstd3d12overlaycompositor.h: * sys/d3d12/gstd3d12swapchainsink.cpp: * sys/d3d12/gstd3d12window-swapchain-resource.h: * sys/d3d12/gstd3d12window-swapchain.cpp: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/meson.build: d3d12: Change overlay blending helper object name Change the name to overlaycompositor to overlayblender Part-of: 2025-09-11 20:57:34 +0900 Seungha Yang d3d12: Add interlace element Add a new interlace element using D3D12 compute shaders, providing the same behavior as the software interlace element. Currently supported patterns: * 1:1 (60p -> 60i), generating half the number of output frames * 2:2 (30p -> 60i), implemented as passthrough with buffer flag update only Part-of: 2025-09-09 21:55:08 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Auto-select IAudioClient3 and pick shared-mode period Use IAudioClient3 in shared mode when the requested latency-time is below the engine default period even if low-latency is not explicitly requested. Part-of: 2025-09-09 19:30:36 +0900 Seungha Yang * sys/wasapi2/gstwasapi2device.cpp: * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2enumerator.h: wasapi2: Probe device period and report via device provider Report IAudioClient::GetDevicePeriod() and IAudioClient3::GetSharedModeEnginePeriod() values Part-of: 2025-09-09 19:31:39 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2: Fix shared mode caps report in device provider Build shared mode caps using corresponding IAudioClient, not default device Part-of: 2025-09-12 21:35:58 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12memory-private.h: * gst-libs/gst/d3d12/gstd3d12memory.cpp: * sys/dwrite/gstdwriterender_d3d12.cpp: dwrite: Fix D3D12 critical warning When using convert + blend mode, the final render target resource is also used as a source resource owned by our fence data storage. As a result, the resource may not be writable if the conversion command has not yet finished. To address this, add a private method that allows setting the fence without a writability check Part-of: 2025-09-13 20:04:06 +0900 Seungha Yang * sys/d3d12/gstd3d12memorycopy.cpp: d3d12upload, d3d12download: Use internal staging pool When copying between system memory and a D3D12 resource, if the non-D3D12 buffer is not backed by D3D12 staging memory (e.g. use-staging-memory is disabled or upstream provides its own buffer pool), fall back to the internal staging memory pool. The staging pool enables batched copies, which is more efficient than copying each GstD3D12Memory object individually in a GstBuffer Part-of: 2025-09-13 20:34:30 +0900 Seungha Yang * sys/d3d12/gstd3d12memorycopy.cpp: d3d12upload, d3d12download: Add use-staging-memory property Since the maximum allocatable staging memory size is about half of the total system memory, we might run out of available staging memory earlier than system memory. This adds a property to allow choosing the preferred memory target for upload/download Part-of: 2025-09-05 20:18:43 +0900 Seungha Yang * sys/d3d12/gstd3d12swapchainsink.cpp: * sys/d3d12/gstd3d12videosink.cpp: d3d12videosink, d3d12swapchainsink: Port to gst_d3d12_buffer_copy_into() Use copy helper function to support both uploading from system memory and staging memory Part-of: 2025-09-05 19:52:25 +0900 Seungha Yang * sys/d3d12/gstd3d12download.cpp: * sys/d3d12/gstd3d12download.h: * sys/d3d12/gstd3d12memorycopy.cpp: * sys/d3d12/gstd3d12upload.cpp: * sys/d3d12/gstd3d12upload.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Maintain only single upload/download implementation Remove ones that for d3d11 disabled, and use #ifdef in a single source file Part-of: 2025-09-05 18:05:24 +0900 Seungha Yang * sys/d3d12/gstd3d12memorycopy.cpp: d3d12download, d3d12upload: Add support for staging memory * Use newly implemented staging memory for upload/download operations to to allow copying from/to resources on the D3D12 default heap directly without an extra copy using system memory * Add 'queue-type' property to let users select the preferred command queue type for copy command execution In addition to removing the extra copy via staging memory, copy commands can also be batched into a single command list in case of non-DXGI-native multi-plane formats, such as I420. This can result in up to 3x faster copy performance. Part-of: 2025-09-05 16:31:15 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12frame.cpp: * gst-libs/gst/d3d12/gstd3d12frame.h: * gst-libs/gst/d3d12/gstd3d12utils.cpp: * gst-libs/gst/d3d12/gstd3d12utils.h: d3d12: Add new gst_d3d12_frame_copy varient methods Allow user to specify command queue to use Part-of: 2025-09-02 21:13:44 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12.h: * gst-libs/gst/d3d12/gstd3d12_fwd.h: * gst-libs/gst/d3d12/gstd3d12stagingbufferpool.cpp: * gst-libs/gst/d3d12/gstd3d12stagingbufferpool.h: * gst-libs/gst/d3d12/gstd3d12stagingmemory.cpp: * gst-libs/gst/d3d12/gstd3d12stagingmemory.h: * gst-libs/gst/d3d12/meson.build: d3d12: Add staging memory implementation Add GstD3D12StagingMemory and GstD3D12StagingBufferPool that can be used for temporary storage of GPU processed data. Part-of: 2025-08-27 14:24:43 +0100 Philippe Normand * docs/plugins/gst_plugins_cache.json: * ext/webrtc/gstwebrtcbin.c: * tests/check/elements/webrtcbin.c: webrtcbin: Add a close signal This is a partial implementation of the close procedure defined in https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-close Most notably the transceiver stopping procedure is not supported because it doesn't fit properly within our transceiver implementation. Fixes #2760 Part-of: 2025-07-12 13:12:06 +0100 Philippe Normand * gst-libs/gst/webrtc/nice/nice.c: webrtc: nice: Implement close API Part-of: 2025-07-12 13:11:32 +0100 Philippe Normand * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: webrtc: ice: Add close API Part-of: 2025-09-05 22:40:57 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.cpp: wasapi2: Prefer QUAD over 3.1 for 4ch layout ... and add missing 3, 5, and 7ch layout fallback. QUAD is more common 4ch configuration than 3.1 Part-of: 2025-09-05 22:38:26 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.cpp: wasapi2: Preserve channel mask from device/mix format Ensure that the channel mask from the mix format (shared mode) or PKEY_AudioEngine_DeviceFormat (exclusive mode) is inherited by generated format candidates for consistency Part-of: 2025-09-07 20:39:44 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.27.2 === release 1.27.2 === 2025-09-07 20:34:55 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.27.2 2025-09-06 11:08:47 +0300 Sebastian Dröge * ext/sndfile/gstsfdec.c: * ext/vulkan/vkdownload.c: * ext/vulkan/vksink.c: * ext/vulkan/vkupload.c: * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/transportreceivebin.c: * ext/webrtc/transportsendbin.c: * gst-libs/gst/mse/gstappendpipeline.c: * gst-libs/gst/play/gstplay.c: * gst-libs/gst/transcoder/gsttranscoder.c: * gst/rtp/gstrtpsink.c: * gst/rtp/gstrtpsrc.c: * sys/androidmedia/gstamcvideodec.c: * sys/decklink/gstdecklinkvideosink.cpp: * sys/ipcpipeline/gstipcpipelinecomm.c: * sys/ipcpipeline/gstipcpipelinesink.c: * sys/ipcpipeline/gstipcpipelinesrc.c: * sys/uvcgadget/gstuvcsink.c: * tests/check/elements/adaptive_demux_common.c: * tests/check/elements/mpegtsmux.c: * tests/check/elements/webrtcbin.c: * tests/examples/camerabin2/gst-camerabin2-test.c: * tests/examples/d3d12/d3d12swapchainsink-win32.cpp: * tests/examples/inter/gstintertest.c: * tests/examples/ipcpipeline/ipc-play.c: * tests/examples/mediafoundation/mfvideoenc-dynamic-reconfigure.c: * tests/examples/nvcodec/nvcodec.c: * tests/examples/webrtc/webrtc.c: * tests/examples/webrtc/webrtcbidirectional.c: * tests/examples/webrtc/webrtcrenego.c: * tests/examples/webrtc/webrtcswap.c: * tests/examples/webrtc/webrtctransceiver.c: * tests/examples/wpe/wpe.c: gst: Change usage of gst_element_state_*() to gst_state_*() Part-of: 2025-09-01 11:30:46 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Add support for exclusive mode mute control In case that IAudioStreamVolume interface is unavailable such as exclusive mode, control the mute state by using AUDCLNT_BUFFERFLAGS_SILENT Part-of: 2025-09-01 10:49:37 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Handle device init error on acquire() Don't post error if IAudioClient::Initialize() got failed but continue-on-error is enabled Part-of: 2025-09-05 08:25:22 +0200 Ola Fornander * ext/curl/gstcurlsmtpsink.c: curlsmtpsink: adapt to date formatting issue In glib 2.73.1, padding for %e in gdatetime was changed from "space" to the Unicode character (U+2007). This violates rfc5322 (Internet Message Format), which states that a message shall be composed of characters in the range of 1 through 127 and interpreted as US-ASCII characters. Hence, when using g_date_time_format, it is necessary to instead write %_e to enforce space padding. Part-of: 2025-09-04 09:37:18 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkvideoutils-private.c: vkvideoutils: fix typo in vp9 profile map Part-of: 2025-08-25 12:39:05 -0400 Julian Bouzas * ext/lcevcencoder/gstlcevch265enc.c: * ext/lcevcencoder/gstlcevch265enc.h: * ext/lcevcencoder/meson.build: * ext/lcevcencoder/plugin.c: lcevcencoder: Add lcevch265enc element This new element allows encoding video into H265 LCEVC streams. It follows the same design as lcevch264enc. Part-of: 2024-10-31 15:59:35 -0400 Olivier Crête * ext/lcevcencoder/README.md: lcevcencoder: Add ldconfig and install steps to the readme Without ldconfig, the library isn't found at runtime! Part-of: 2025-09-02 11:32:18 +0100 Philippe Normand * tests/examples/inter/gstintertest.c: * tests/examples/inter/meson.build: * tests/examples/meson.build: inter: Move intertest example to tests/examples/inter Also fix a couple leaks, make it use playbin3, add URI command line argument handling, use gst_print functions and remove dead code. Part-of: 2025-09-02 09:06:20 +0530 Nirbheek Chauhan * ext/openh264/meson.build: meson: Avoid pulling in gtest for openh264 Emits a big warning about wrapdbv1 and the updated wrap fails to build on Windows. We don't need the tests anyway. Part-of: 2025-09-01 21:02:22 +0530 Nirbheek Chauhan * ext/analyticsoverlay/meson.build: * ext/avtp/meson.build: * ext/codec2json/meson.build: * ext/iqa/meson.build: * ext/mdns/meson.build: * ext/openh264/meson.build: * ext/openjpeg/meson.build: * ext/qroverlay/meson.build: * ext/soundtouch/meson.build: * gst-libs/gst/webrtc/nice/meson.build: * meson.build: * sys/tinyalsa/meson.build: meson: Convert all remaining fallback: usages to [provide] Only commonly-used plugin deps like pango, orc, openh264, libvpx, libnice are enabled by default. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1788 Part-of: 2025-08-09 23:16:09 +0900 Seungha Yang * sys/nvcodec/gstcudacompositor.cpp: cudacompositor: Add support for crop meta GstCudaConverter object can support cropping now Part-of: 2025-08-09 03:23:38 +0900 Seungha Yang * sys/nvcodec/gstcudaconverter.cpp: * sys/nvcodec/gstcudaconvertscale.c: * sys/nvcodec/kernel/gstcudaconverter.cu: cudaconvertscale: Add support for crop meta Performs cropping based on upstream attached crop meta Part-of: 2025-08-09 03:55:49 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Add gst_cuda_allocator_alloc_stream_ordered() method Allow stream ordered memory allocation without GstCudaBufferPool Part-of: 2025-08-09 03:53:29 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Add ARGB64 format support The format will be used for intermediate data processing for now Part-of: 2025-08-09 03:50:08 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Add GST_MAP_{READ,WRITE}_CUDA macro Instead of casting the alias Part-of: 2025-08-09 02:30:34 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Add VUYA texture mapping Support VUYA texture caching Part-of: 2025-08-22 14:01:44 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdecodebin.c: lcevcdecodebin: Update the base decoder when setting base-decoder property Currently, the base-decoder property only works when setting it while constructing the element, but does not work if we set the property after constructing the element. This patch fixes this issue so that the property can be set with gst-launch-1.0. Note that the property can only be set if the element is in NULL state. Fixes #4594 Part-of: 2025-05-28 17:23:27 +0200 Stéphane Cerveau * ext/vulkan/vkvp9dec.c: vkvp9dec: dpb pool created with vulkan caps max coded size The dpb pool should be created with the max supported size to avoid a dpb pool recreation on resize event. When the pool is destroyed during resolution changes, previously decoded reference frames stored in the DPBs are lost, which can cause decoding errors or corruption when those reference frames are needed for inter-frameprediction at different resolutions. By sizing the pool for the maximum supported resolution upfront, we ensure reference frame continuity across resolution changes. Part-of: 2025-07-08 11:44:18 +0200 Stéphane Cerveau * ext/vulkan/gstvulkan.c: * ext/vulkan/meson.build: * ext/vulkan/vkvp9dec.c: * ext/vulkan/vkvp9dec.h: vulkan: add vp9 decode element Part-of: 2025-03-26 17:29:55 +0100 Stéphane Cerveau * tests/check/libs/vkcodecparams_vp9.c: * tests/check/libs/vkvideodecode.c: tests: add vp9 vulkan video decode This test allows to decode one key frame and one inter frame Part-of: 2025-03-26 15:20:14 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: * gst-libs/gst/vulkan/gstvkvideoutils-private.c: * gst-libs/gst/vulkan/gstvkvideoutils-private.h: * gst-libs/gst/vulkan/meson.build: vulkan: add vp9 decode support Part-of: 2025-05-28 16:12:07 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdecoder-private.c: vkdecoder-private: manage existing dpb pool When the decoder wants to recreate the dpb pool on resize event for example, an existing dpb pool might exist, so it should be kept if the caps are equal or destroy for new caps. Part-of: 2025-08-26 20:17:36 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vulkanh26xdec: fix discont state handling It fixes a couple tests in fluster for H.265 decoding. Part-of: 2025-07-15 11:15:56 +0200 Stéphane Cerveau * tests/check/elements/vkcolorconvert.c: * tests/check/elements/vkdeviceprovider.c: * tests/check/elements/vkupload.c: * tests/check/libs/vkcommandpool.c: * tests/check/libs/vkdevice.c: * tests/check/libs/vkformat.c: * tests/check/libs/vkimage.c: * tests/check/libs/vkimagebufferpool.c: * tests/check/libs/vkinstance.c: * tests/check/libs/vkmemory.c: * tests/check/libs/vkvideodecode.c: * tests/check/libs/vkvideoencodeh264.c: * tests/check/libs/vkvideoencodeh265.c: * tests/check/libs/vkwindow.c: vulkan: tests: remove/update ci comments Since previous commit, the CI can now run vulkan tests. Remove or update the comments related to CI. Part-of: 2025-07-11 18:04:04 +0200 Stéphane Cerveau * tests/check/gst-plugins-bad.supp: ci: enable vulkan tests in validate As CI now supports llvm 18 and mesa 24.1 which allow to use properly lavapipe in the CI, the vulkan ci tests have been removed from the validate blacklist. Part-of: 2025-08-25 09:44:01 +0800 Vivian LEE * ext/x265/gstx265enc.c: * ext/x265/gstx265enc.h: x265: Fix duplicate SEI at startup IDR frame problem x265 encoder_headers return headers with SEI after encoding the frame, while the output frame also contains SEI so two identical header blocks appeared. Cache the headers at init, leaving only a single copy in the stream. Part-of: 2025-08-20 15:32:15 +0300 Sebastian Dröge * ext/webrtc/gstwebrtcbin.c: gst: Convert `is_writable()` / `make_writable()` macros to inline functions Plus actual functions that are exported from the library. Apart from improving type-safety, this also makes bindings more happy. Part-of: 2025-08-22 14:20:36 -0400 Daniel Morin * gst/tensordecoders/gstfacedetectortensordecoder.c: tensordecoders: fix wrong assumption in ultralightfacedetectortensordec - UltraLightFaceDetection was assmuming only one TensorMeta could be attach to buffer. We need to look at all TensorMeta attach to the buffer and check for the one it support. Part-of: 2025-08-17 15:58:22 -0400 Daniel Morin * gst-libs/gst/analytics/gsttensormeta.c: analytics: always add GstTensorMeta Always add GstTensorMeta to buffer instead of re-using existing GstTensorMeta when it's already present. The reason for the change is when we have cascaded inference elements overwriting (tflite) or leaking (ONNX) GstTensorMeta when we have cascaded inferences. We didn't create and API to append to GstTensorMeta and I think it's more convenient to have a new GstTensorMeta for each inferences. It's also more clear that a group of tensor was produced by one inference but doesn't limit tensordecoders from using tensors produced by multiple inference. I don't see much value in having all tensors data always inside one GstTensorMeta since appending would mean re-allocation of the tensors array anyway. Part-of: 2025-08-22 13:09:31 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: wasapi2: Add support for format negotiation Enumerate supported formats during open so that src/sink can report them via get_caps(). The format is then fixated and initialized on acquire(), allowing users to select their preferred format Part-of: 2025-08-22 08:26:11 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: wasapi2: Enumerate supported shared mode formats ... and report it via device provider property Part-of: 2025-08-22 09:22:02 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Workaround for S24_32LE format mismatch Since Windows 24bit-in-32bit format is not supported by GStreamer (Windows one is MSB-aligned), converts format in ringbuffer using SSE2. Part-of: 2025-08-20 18:14:35 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.cpp: wasapi2: Demote S24_32LE in exclusive-mode format ordering Some endpoints accept 24-bit in 32-bit PCM (S24_32LE) in exclusive mode but playback at very low volume. Until the root cause is identified, push S24_32LE to the end of the candidate list Part-of: 2025-08-20 12:02:47 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: wasapi2: Add support for exclusive mode device switching Because of APO/OS mixer bypass in exclusive mode, we should convert samples if new device has different format. The conversion with additional buffering is implemented in this patch Part-of: 2025-08-20 12:03:54 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Fix process loopback device init Fix AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM flag usage Part-of: 2025-08-20 06:56:27 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2rbuf.h: * sys/wasapi2/gstwasapi2sink.cpp: * sys/wasapi2/gstwasapi2src.cpp: wasapi2: Add support for exclusive mode Add "exclusive" property and try exclusive mode streaming Part-of: 2025-08-20 03:47:08 +0900 Seungha Yang * sys/wasapi2/gstwasapi2device.cpp: * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2enumerator.h: * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: wasapi2: Probe exclusive mode formats ... and report it via device provider props Part-of: 2025-08-08 16:46:48 +0200 Stéphane Cerveau * tests/check/libs/vkvideoencodeav1.c: * tests/check/meson.build: tests: add vulkan AV1 encode test Part-of: 2024-12-17 18:49:22 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: * gst-libs/gst/vulkan/gstvkvideoutils-private.c: * gst-libs/gst/vulkan/gstvkvideoutils-private.h: vulkan: add basic AV1 encode support Part-of: 2025-08-19 07:48:59 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdecutils.c: * ext/lcevcdecoder/gstlcevcdecutils.h: lcevcdec: Support all available formats RGB and GRAY formats are only placeholders in LCEVCDec and therefore are not supported yet. Part-of: 2025-08-18 10:26:55 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdecutils.c: lcevcdec: Remove unneeded LCEVC 2.0.0 workaround This is not needed anymore as the min version for LCEVCdec is 4.0.1 Part-of: 2025-08-18 09:50:48 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: * ext/lcevcdecoder/gstlcevcdec.h: * ext/lcevcdecoder/gstlcevcdecutils.c: lcevcdec: Handle pixel aspect ratio and crop size correctly LCEVCdec supports different pixel aspect ratios other than 1/1. This change forwards the pixel aspect ratio of the base picture to the LCEVC decoder, and also updates the output pixel aspect ratio caps base on the one from the enhanced frame. Part-of: 2025-07-29 15:22:39 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: * ext/lcevcdecoder/gstlcevcdec.h: lcevcdec: Peek the decoder for output resolution The output resolution is not always twice as big as the input resultion divided by the pixel aspect ratio. This is the case for LCEVC '0D' mode, where the output resolution is the same as the input resolution, and the only enhancement is the picture being clearer. This patch uses LCEVC_PeekDecoder() after sending the LCEVC enhancement data to know what the output resolution will be before allocating the output picture. Part-of: 2025-07-30 15:19:42 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: * ext/lcevcdecoder/gstlcevcdecutils.c: * ext/lcevcdecoder/gstlcevcdecutils.h: lcevcdec: Fix LCEVC picture access flags Even though the LCEVC decoder works fine without this, it is recommended to set read access to base pictures that are sent to the decoder, and write access to enhanced pictures that are received from the decoder. Part-of: 2025-07-30 15:19:26 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: lcevcdec: Fix width type typo This was always meant to be gint instead of gint32. Part-of: 2025-08-20 14:24:17 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkdecoder-private.h: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/meson.build: * tests/check/libs/vkvideodecode.c: vulkan: enable video maintenance2 for inline session parameters .. in decoders. Inline session parameters allows to not create session parameters handlers for every new stream parameters (such as SPS and PPS for H.264, for example), but instead to pass them as a chained structure in the decoding main structure. This is completely align with GStreamer decoder base classes. Even that the previous approach is kept, if the devices doesn't support video maintenance2, it shows a lot of validation errors. Also it was required to add another parameter when enabling extension to verify if the extension is linked with a device feature and if it is enabled. Bump Vulkan API (and driver version for both decoders and encoders) to 1.4.306 Also bumped the ABI_CHECK_TAG because the CI finally catches up with the vulkan video symbols that are not exposed by a public header (tough they are binary public). Part-of: 2025-08-20 14:29:17 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideo-private.c: vkvideo-private: remove unused guards Since this file is compiled only if vulkan video support is enabled with the proper vulkan headers version. Part-of: 2025-08-20 14:12:54 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: check for features when enabling extensions Some extensions need to have enabled certain feature in the device. This patch does that check by adding a new field in the extension list which is a function that can be mapped to gst_vulkan_physical_device_has_feature_*() functions. Part-of: 2025-08-20 20:01:21 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagesbufferpool: another usage for non-independent profile flag Fix validation issue VUID-VkImageCreateInfo-flags-08329 on old RADV hardwware. Part-of: 2025-08-19 20:37:06 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh265dec.c: vulkanh265dec: fix validation layer complain Silence the validation VUID-VkImageMemoryBarrier2-srcAccessMask-03915 Part-of: 2025-08-19 11:15:29 +0100 Ian Napier * sys/decklink/gstdecklink.h: * sys/decklink/gstdecklinkvideosrc.cpp: decklinkvideosrc: fix decklinkvideosrc becomes unrecoverable if it fails to start streaming See #2611 When transitioning to PLAYING we call IDeckLinkInput::StartStreams() (via GstDecklinkInput::start_streams). This can fail for various reasons, including if the hardware device is already in use. Previously, we logged StartStreams() failure as an element error but otherwise continued to successfully transition to PLAYING. Now, if StartStreams() returns an error we fail the state change. If StartStreams() fails then a subsequent call to StopStreams(), when transitioning PAUSED to READY, will also fail. Previously, if StopStreams() failed then the state change also failed. Unfortunately this prevented the element from later being disposed, which in turn meant the associated hardware resources was never freed. Consequently, if a decklinkvideosrc failed to transition PAUSED to READY, then the associated hardware device could not subsequently be used by any other decklinkvideosrc. Now, we log an element error if StopStreams() fails but otherwise consider the state change to have succeeded. This means that the element can be disposed and the associated hardware resource released. Part-of: 2025-08-18 14:17:32 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: don't use independent profile flag for some usage VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, among others, needs the video profile to use. The patch clears the validation issue VUID-VkImageCreateInfo-flags-08331 This is a continuation of !9550 Part-of: 2025-08-18 11:00:34 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideoencodeh264.c: * tests/check/libs/vkvideoencodeh265.c: tests: fix queues for vulkan h26x encoders Part-of: 2025-08-15 13:02:57 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vulkanh26xdec: fix debug category name This is a regression from merge request !78011 Part-of: 2025-08-15 12:06:45 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vulkanh26xdec: re-negotiate after FLUSH Vulkan decoders also have the same issue as VA decoders fixed in !9457, where FLUSH event doesn't renegotiate downstream the pipeline. Part-of: 2025-08-13 14:54:45 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: support video profile independent images With video_maintenance1 extension is possible to create images independent of a the video profile list, under that image will be processed. With that extension is possible to share the same image for dynamic transcoding. Part-of: 2025-08-14 15:55:41 +0200 Jan Alexander Steffens (heftig) * tests/check/elements/cccombiner.c: tests: cccombiner: Test durationless buffers Crashes without the previous fix. Part-of: 2025-07-17 14:40:47 +0200 Jan Alexander Steffens (heftig) * ext/closedcaption/gstcccombiner.c: cccombiner: Don't crash when first frame has no duration Aggregate again so the code above can determine the end time or EOS. Part-of: 2025-07-17 14:29:07 +0200 Jan Alexander Steffens (heftig) * ext/closedcaption/gstcccombiner.c: cccombiner: Avoid dividing by zero framerate This was broken in b29262e662b86cd76225894f7504ee505125fa49. The `gst_util_uint64_scale` emitted a critical warning and returned `GST_CLOCK_TIME_NONE`, so beyond removing the warning this fix does not change behavior. Part-of: 2025-08-14 03:03:50 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Warm up capture audio client on open If the endpoint is idle, the first IAudioClient::Start() call may take a long time to return. Start/stop the capture client on open to reduce latency of subsequent Start() calls. Part-of: 2025-08-13 03:13:47 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2sink: Do not push too large preroll buffer to endpoint To avoid startup glitches, a silent buffer is pushed to render endpoint, but pushing too large silent buffer will introduce unnecessary latency. Limit it to a single period worth data. Part-of: 2025-08-13 16:39:24 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: vkdecoder-private: fix mistake from !9531 This was a very silent mistake. Part-of: 2025-08-13 16:38:23 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: vk{decoder,encoder}-private: use API to check device version Part-of: 2025-08-12 21:27:53 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkimagebufferpool.c: test: vkimagebufferpool: silence validation The validation complained with VUID-VkImageCreateInfo-usage-requiredbitmask]: vkCreateImage(): pCreateInfo->usage is zero. This patch force to use the internal defaults in vkimagebufferpool if no usage is defined. Part-of: 2025-08-12 14:24:12 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: silence validation for features With merge request !9438 the validation layer started to complain with VUID-VkDeviceCreateInfo-pNext-02829 This patch fixes this ill-usage of Vulkan API, by removing the feature enabling of sampler ycbcr conversion, since it was promoted since Vulkan 1.1, and in GStreamer is only used in Vulkan Video operations, which are only enabled in Vulkan 1.3+. Also, these features detection and enabling were moved to a function called when filling the physical device data, in order to check the API version of the device driver before adding the enabling of the feature. Finally, the getters were adapted to use the version feature structure if the device driver version matches. Part-of: 2025-08-12 14:24:52 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: fix regression from !9492 On commit 1a7f0f162726f07f5723e0c1f43f2c6725d07c80 a regression were introduced by omitting to initialize the profileCount field. Part-of: 2025-08-08 17:29:32 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkencoder-private.c: vkencoder-private: remove duplicated definition They are already declared in gstvkvideo-private.h Part-of: 2025-08-08 17:22:46 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.c: vulkan: remove spurious video extension checking Since they are expected dependencies. If the specific codec extension is loaded, that means that dependencies are loaded too. Part-of: 2025-08-11 22:54:29 +1000 Jan Schmidt * ext/hls/m3u8.c: hlsdemux: Fix parsing of byterange and init map directives Don't reuse the same offset and size variables when reading the byterange out of a MAP directive, as it can overwrite values from a pending BYTERANGE directive for the next fragment URI. Fixes problems where the EXT-X-MAP directive has been written into the playlist between an EXT-X-BYTERANGE and the fragment URI it applies to. Part-of: 2025-08-08 17:38:33 +0800 Qian Hu (胡骞) * gst-libs/gst/wayland/gstwldisplay.c: waylandsink: add some error handler for event dispatch if wl client got last_error, wl_display_dispatch_queue_pending will return -1, may lead to unhandled case, we should quit. Part-of: 2025-08-09 22:51:03 +0900 Seungha Yang * sys/wasapi2/gstwasapi2activator.cpp: wasapi2: Tone down activation fail log If there's no endpoint available, that failure is expected error Part-of: 2025-08-09 22:46:59 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2: Pass correct data flow value to GetDefaultAudioEndpoint() Respect requested data flow value Part-of: 2025-07-23 11:37:15 -0400 Xavier Claessens * tests/check/elements/mpegtsmux.c: mpegtsmux: Caps event fails with stream type change error If mpegtsmux receives the same caps again, it wrongly claims the stream type changed: error: Stream type change from 06 to 8f not supported This adds a unit test that demonstrate the issue in the very hacky way. I have seen this happening with the below pipeline when upstream caps changes. Since the caps filter fixates the caps received by opusenc and mpegtsmux, the stream type cannot change. ... ! audioconvert ! audio/x-raw,format=S16LE,channels=2,rate=48000 ! opusenc bitrate=128000 ! mpegtsmux Part-of: 2025-08-07 14:31:38 +1000 Jan Schmidt * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Use 'internal' stream_type to detect codec changes The TsMuxStream internal_stream_type field stores the original 'full' stream type (such as Opus), while the stream_type field stores the value that will actually be written into the MPEG-TS packets according to the codec mappings. When checking if input caps are changing stream type, check the original type. Part-of: 2025-08-08 22:30:52 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2: Fix default render device probing Fixing typo Part-of: 2025-07-31 11:31:43 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: detect and dump Vulkan 1.4 properties and features In order to link videomaintenance1, and others to come, without knowing if Vulkan 1.4 features are chained in the device properties structure, a static and inlined function was added in gstvkphysicaldevice-private.h. It was added in a header file to avoid compiler warnings if it's not used because of old Vulkan headers. Also the value dump videomaintenance1 was moved to another function to pack there all the future features to query which aren't part of a Vulkan release yet. Part-of: 2025-07-31 13:48:10 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvulkan.c: * gst-libs/gst/vulkan/gstvkdebug.c: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vulkan: fine grained access to API This patch is the payment to my technical debt. The symbol GST_VULKAN_HAVE_VIDEO_EXTENSIONS is defined at compilation-time if the user requests for the usage of the Vulkan Video extensions. And we used this symbol for anything related with Vulkan Video. But this is not the smartest approach. The rule should be: - If the code allocates Vulkan Video resources, use GST_VULKAN_HAVE_VIDEO_EXTENSIONS - Otherwise, use the Vulkan's guard for the used API In this way, API version bumps will be easier. Also, this commit marks the end of GST_VULKAN_HAVE_VIDEO_EXTENSIONS guarded code for readability. Part-of: 2025-08-04 15:11:17 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: vkoperation: refactor for fine grained guards and clean ups Added a static inlined function in gstvkphysicaldevice-private.h for looking up a specific vulkan structure in a chain. Part-of: 2025-07-31 17:56:17 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: refactor common code Both gst_vulkan_image_buffer_pool_set_config() and gst_vulkan_image_buffer_pool_alloc() functions share the same code to create Vulkan images for different purposes. This patch refactor them in a new helper function that creates the images and stores them in a buffer if it's passed as output parameters, such as the offsets. This patch also adds specifics guards for Vulkan's symbols for better grained API usage, but also for prepare_buffer() the guard is set where the symbol is used. Part-of: 2025-07-31 13:19:13 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: fine grained vulkan video extensions detection The Vulkan Video extensions can be available, according to the specification, since Vulkan 1.1, but with other extensions dependencies. That's why this patch adds a field in the extension structure, which represents the extension dependency that the specified extension requires. And they are specified by Vulkan Video extensions. This allow to have a single function to check if the extension can be enabled both by optional extensions and video extensions. Regardless that video extension can be loaded since Vulkan 1.1, they are rather loaded since Vulkan 1.3, when synchronization2 was promoted, so it isn't checked as video_queue dependency. Finally, this patch checks for each guard symbol. Part-of: 2025-08-04 12:11:40 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.c: * gst-libs/gst/vulkan/gstvkoperation.c: * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vulkan: private functions for physical device features This is a continuation of !9483, but without back-porting. Instead of checking the driver's API version to figure out if a physical device feature is available and enabled, or even more, instead of checking for enabled extensions in the driver, this patch adds private functions in the physical driver to get the availability and enabling of features such as sampler ycbrc conversion, synchronization2, timeline semaphore and video maintenance1. And these new functions are used internally in the GstVulkanOperation object, and the private object GstVulkanDecoder. This approach is computationally cheaper, simpler and precise. Part-of: 2025-08-08 07:13:24 +0200 Jan Alexander Steffens (heftig) * tests/check/elements/zbar.c: zbar: tests: Handle symbol-bytes as not null-terminated Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4592 Part-of: 2025-07-21 03:41:05 +0100 Nirbheek Chauhan * ext/svthevcenc/gstsvthevcenc.c: * ext/wayland/gstwaylandsink.c: * sys/winks/gstksclock.c: * sys/winks/gstksvideodevice.c: * sys/winks/gstksvideosrc.c: * sys/winks/ksdeviceprovider.c: * sys/winks/ksvideohelpers.c: * sys/winks/ksvideohelpers.h: debug: Category init should happen in class_init when possible plugin_init() will not get called if element/feature registration happens manually, such as when using linking only specific plugin features with gstreamer-full. That is possible when plugins contain static features. Part-of: 2025-08-07 13:58:27 +0300 Sebastian Dröge * gst-libs/gst/codecparsers/gstav1parser.c: av1parser: Don't error out on "currently" undefined seq-level indices They might very well be defined in the future and that shouldn't affect the parsing in any way. Specifically, ffmpeg with `av1_nvenc` seems to create `GST_AV1_SEQ_LEVEL_7_3` currently and parsing such streams would fail otherwise. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4589 Part-of: 2025-06-30 13:34:47 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: * ext/lcevcdecoder/meson.build: lcevcdec: Set LCEVCdec min version to 4.0.0 and fix build V-Nova's LCEVCdec SDK 4.0.0 was released with a small API change. This patch fixes the 'lcevcdec' element so that it builds with the new version. For more information see: https://github.com/v-novaltd/LCEVCdec/blob/4.0.0/docs/v4_migration_guide.md Part-of: 2025-08-04 16:56:56 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder-private.h: * gst-libs/gst/vulkan/gstvkencoder-private.h: * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: * gst-libs/gst/vulkan/gstvkvideoutils-private.c: * gst-libs/gst/vulkan/gstvkvideoutils-private.h: * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/vulkan/vulkan.h: * gst-libs/gst/vulkan/vulkan_fwd.h: * tests/check/libs/vkimagebufferpool.c: * tests/check/libs/vkvideodecode.c: vkvideoutils-private: make it private Since we moved the GstVulkan generic decoder and encoder to private objects in the library, there was not need to keep vkvideoutils public. This patch turns it private and reduces the public API surface. Part-of: 2025-08-05 01:51:14 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: wasapi2: Always fallback to MMDevice if default device is unavailable Automatic stream routing supported virtual device may not be available for some reason, but can try default MMdevice Part-of: 2025-08-05 01:41:51 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2: Always probe default audio endpoint info Regardless of GetActivateResult() return code, fill default device information to device provider props Part-of: 2025-08-05 00:41:34 +0900 Seungha Yang * sys/wasapi2/gstwasapi2activator.cpp: * sys/wasapi2/gstwasapi2activator.h: wasapi2: Handle GetActivateResult failure Even if GetActivateResult() succeeded, activation result can fail. Checks output HRESULT code as well Part-of: 2025-08-01 00:00:06 +0900 Seungha Yang * sys/wasapi2/gstwasapi2device.cpp: wasapi2deviceprovider: Log device update details ... and add wasapi2deviceprovider debug category Part-of: 2025-07-31 22:54:29 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2enumerator: Retry on IMMDevice::Activate failure Since the sequence of IMMDeviceEnumerator::EnumAudioEndpoints() followed by IMMDevice::Activate() is not atomic, Activate() may fail if the enumerated device becomes invalidated before probing. In such cases, retry device probing Part-of: 2025-07-31 22:22:47 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: wasapi2enumerator: Avoid racy device probing IMMDeviceEnumerator may fire a series of callbacks even for a single device plug/unplug event. To avoid redundant probing, start device enumeration only after no further callbacks are received for 100ms. Part-of: 2025-07-31 21:10:27 +0900 Seungha Yang * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: wasapi2enumerator: Log IMMNotificationClient callback details ... and add wasapi2enumerator debug category Part-of: 2025-08-02 12:19:18 +0100 Philippe Normand * ext/webrtc/webrtcsdp.c: * tests/check/elements/webrtcbin.c: webrtc: sdp: Validate ICE SDP attributes According to https://datatracker.ietf.org/doc/html/rfc5245#section-15.4, those attributes should contain only alpha-numerical (with / and + allowed), should be less than 256 characters, the ufrag should be at least 4 characters and the pwd should be at least 22 characters. Part-of: 2025-08-02 08:55:05 +0100 Philippe Normand * ext/webrtc/webrtcsdp.c: * tests/check/elements/webrtcbin.c: webrtc: sdp: Relax ice-ufrag and ice-pwd checks According to RFC 8839 section 5.4, if two data streams have identical "ice-ufrag"s, they MUST have identical "ice-pwd"s. The previous code wasn't allowing different ice-ufrag values in bundled medias. Part-of: 2025-08-02 08:54:37 +0100 Philippe Normand * ext/webrtc/gstwebrtcstats.c: * gst-libs/gst/webrtc/webrtc_fwd.h: * tests/check/elements/webrtcbin.c: webrtc: stats: Set DTLS role and state on transport stats Part-of: 2025-08-01 14:55:12 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice-private.h: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: enable sampler ycbcr, sync2 and timeline semaphore features For the features VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR, VkPhysicalDeviceSynchronization2Features and VkPhisicalDeviceTimelineSemaphoreFeatures The Vulkan specification states: If the `VkPhysicalDeviceXXXFeatures` structure is included in the `pNext` chain of the `VkPhysicalDeviceFeatures2` structure passed to `vkGetPhysicalDeviceFeatures2`, it is filled in to indicate whether each corresponding feature is supported. If the application wishes to use a `VkDevice` with any features described by `VkPhysicalDeviceXXXFeatures`, it **must** add an instance of the structure, with the desired feature members set to `VK_TRUE`, to the `pNext` chain of `VkDeviceCreateInfo` when creating the `VkDevice`. And that was missing in the code. Strangely, that functionality doesn't have a Valid-Usage ID assigned, so it isn't caught by the validation layer. This patch adds the structures in the physical devices to get them and later set them in the device creation. In order to link these features, videomaintenance1, and others to come, without knowing if Vulkan 1.3 features are chained in the device properties structure, a static and inlined function was added in gstvkphysicaldevice-private.h. It was added in a header file to avoid compiler warnings if it's not used because of old Vulkan headers. Also the value dump videomaintenance1 was moved to another function to pack there all these queried features. Part-of: 2025-07-31 17:55:29 -0400 Olivier Crête * docs/random/PORTED_09: random: Remove historical doc This is about porting which happened over 20 years ago. Part-of: 2025-07-31 17:54:32 -0400 Olivier Crête * docs/random/LICENSE: random: Remove historical LICENSE header Part-of: 2025-07-31 17:50:33 -0400 Olivier Crête * AUTHORS: AUTHORS: Remove outdated files They only contained historical contributors, the modern version is to look at the git logs. Part-of: 2025-07-31 17:44:21 -0400 Olivier Crête * MAINTAINERS: MAINTAINERS: Update to reflect current maintainership Instead of listing everyone, just point to GitLab Part-of: 2025-07-31 17:39:44 -0400 Olivier Crête * REQUIREMENTS: REQUIREMENTS: Remove outdated doc They contained information which was completely outdated. Part-of: 2025-08-01 11:52:17 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvaav1enc.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvavp8enc.c: * sys/va/gstvavp9enc.c: vaXXXenc: fix potential race condition VA encoders, at reconfiguration, have to check if the rate-control was changed by the user, but since user parameters setting are in another thread, the comparison was racy. This patch locks the object to compare the current rate-control with the one set by the user. Part-of: 2025-02-26 03:41:21 +0000 Jonathan Lui * sys/va/gstvaav1enc.c: vaav1enc: Enable intrablock copy and palette mode This allow screen content coding (SCC) optimization feature. Co-authored-by: Victor Jaquez Part-of: 2025-08-01 01:03:10 +0900 Seungha Yang * sys/d3d12/gstd3d12screencapturedevice.cpp: d3d12screencapturedevice: Avoid false device removal on monitor reconfiguration Post device-changed instead of device-removed/device-added when only HMONITOR or display position changed without actual device change. Part-of: 2025-02-11 18:59:04 -0500 Olivier Crête * tests/check/libs/analyticsmeta.c: analytics: Add unit test for copying GstAnalyticsRelationMeta Part-of: 2025-03-06 18:08:22 -0500 Olivier Crête * ext/avtp/gstavtpbasepayload.c: avtpbasepay: Add debug message for time handling Part-of: 2025-03-06 18:08:04 -0500 Olivier Crête * ext/avtp/gstavtpbasepayload.c: avtpbasepay: Make make constants more readable Part-of: 2025-03-06 18:01:23 -0500 Olivier Crête * ext/avtp/gstavtpaafdepay.c: * ext/avtp/gstavtpbasedepayload.c: * ext/avtp/gstavtpbasedepayload.h: * ext/avtp/gstavtpcvfdepay.c: * ext/avtp/gstavtpsrc.c: * ext/avtp/gstavtpvfdepaybase.c: * tests/check/elements/avtpaafdepay.c: * tests/check/elements/avtpcvfdepay.c: avtp: Use the DTS as the AVTP base time Make it work a little more like RTP. Have the source interact with the clock and set the capture time on each packet. Then the other elements can use that to do adjustments. Since AVTP is always very low latency, it can be assumed that the gPTP clock at the packet reception is very close to the sending time, never more than 2 seconds off, so the timestamps can be compared directly. Part-of: 2025-03-06 16:14:04 -0500 Olivier Crête * ext/avtp/gstavtpaafdepay.c: * ext/avtp/gstavtpbasedepayload.c: * ext/avtp/gstavtpbasedepayload.h: * ext/avtp/gstavtpcvfdepay.c: * ext/avtp/gstavtprvfdepay.c: avtp: Use nicely abstracted process function in base depayloader class Part-of: 2025-02-07 16:18:14 -0500 Olivier Crête * ext/avtp/gstavtpbasepayload.c: avtp: Intercept changes in the latency Part-of: 2025-02-07 13:33:48 -0500 Olivier Crête * ext/avtp/gstavtpvfpaybase.c: avtpvfpaybase: Don't require a caps handling method Part-of: 2025-07-30 11:12:24 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: docs: Update documentation cache for new RGB 10bit support Part-of: 2025-07-29 13:58:21 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlvideoformat.h: waylandsink: Enable 10bit RGB for SHM buffer Part-of: 2025-07-31 15:36:38 -0400 Nicolas Dufresne * gst/videoparsers/gstav1parse.c: av1parse: Set MDI into the final caps The MDI was being set in the original caps which is not even writable. Part-of: 2025-03-05 11:02:55 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: * ext/onnx/meson.build: onnx: Add Verisilicon provider Add the option to use the VSI provider for the Verisilicon NPUs. Part-of: 2025-07-30 15:50:56 +0400 Marc-André Lureau * gst-libs/gst/d3d12/meson.build: * sys/d3d12/meson.build: meson: d3d12: Add support for MinGW DirectXMath package This is a similar issue that was found for d3d11: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6495 Part-of: 2025-07-30 16:19:56 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/base/gsth264encoder.c: vulkanh264enc: calculate latency with corrected framerate Fix for the h264encoder base class in the same spirit of !9437. Part-of: 2025-07-24 14:31:26 +0300 Amotz Terem * sys/nvcodec/gstnvencoder.cpp: nvcodec: Add emit-frame-stats signal Add emit-frame-stats property to optionally emit frame stats on each frame Part-of: 2025-07-24 20:42:59 +0100 Nirbheek Chauhan * sys/directsound/gstdirectsoundplugin.c: * sys/wasapi/gstwasapi.c: windows: Disable all audio device providers except wasapi2 We have too many device providers outputting duplicate device entries, and it's not clear to people what they should be using. Let's only keep wasapi2 around since it is PRIMARY + 1. After the device switching work done on WASAPI2, there is no reason to use directsound anymore. https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9326 Part-of: 2025-07-24 20:20:39 +0100 Nirbheek Chauhan * meson.build: meson: Pass sysprof=disabled to glib sysprof cannot be built on Windows, and this causes the build to fail on Windows. Part-of: 2025-07-24 20:19:00 +0100 Nirbheek Chauhan * ext/dash/meson.build: * ext/smoothstreaming/meson.build: * ext/ttml/meson.build: meson: Pass python=false to libxml2 We don't need this in gstreamer anyway. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4510 Part-of: 2025-07-29 11:42:54 +0100 Philippe Normand * sys/va/gstvavp9dec.c: vavp9dec: Always chain to parent class negotiate vmethod When the base videodecoder class re-attempts a negotiation after flush, the vabasedec `need_negotiation` flag isn't necessarily set to TRUE, because in that situation the input state hasn't changed. By always chaining up we are sure that buffer pool negotiation will always be attempted. Part-of: 2025-07-29 11:42:44 +0100 Philippe Normand * sys/va/gstvajpegdec.c: vajpegdec: Always chain to parent class negotiate vmethod When the base videodecoder class re-attempts a negotiation after flush, the vabasedec `need_negotiation` flag isn't necessarily set to TRUE, because in that situation the input state hasn't changed. By always chaining up we are sure that buffer pool negotiation will always be attempted. Part-of: 2025-07-29 11:42:33 +0100 Philippe Normand * sys/va/gstvaav1dec.c: vaav1dec: Always chain to parent class negotiate vmethod When the base videodecoder class re-attempts a negotiation after flush, the vabasedec `need_negotiation` flag isn't necessarily set to TRUE, because in that situation the input state hasn't changed. By always chaining up we are sure that buffer pool negotiation will always be attempted. Part-of: 2025-07-28 12:52:22 +0100 Philippe Normand * sys/va/gstvabasedec.c: vabasedec: Instrument negotiate function with debug statements Part-of: 2025-07-28 12:49:36 +0100 Philippe Normand * sys/va/gstvabasedec.c: vabasedec: Always chain to parent class negotiate vmethod When the base videodecoder class re-attempts a negotiation after flush, the vabasedec `need_negotiation` flag isn't necessarily set to TRUE, because in that situation the input state hasn't changed. By always chaining up we are sure that buffer pool negotiation will always be attempted. Part-of: 2025-07-28 12:45:25 +0100 Philippe Normand * sys/va/gstvah264dec.c: vah264dec: Spelling fix in warning debug statement Part-of: 2025-07-28 12:44:48 +0100 Philippe Normand * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Spelling fix in warning debug statement Part-of: 2025-07-24 16:41:35 -0400 Olivier Crête * ext/onnx/gstonnxclient.cpp: onnx: Add debug message with tensor id Also downgrade input dimensions as it's shown on each buffer. Part-of: 2025-07-24 16:41:23 -0400 Olivier Crête * ext/onnx/gstonnxclient.cpp: * gst/tensordecoders/gstssdobjectdetector.c: ssdtensordecoder: Use tensor ids from the registry Part-of: 2025-07-10 15:19:02 -0500 Derek Foreman * gst/videoparsers/gstav1parse.c: av1parse: Set CLL and MDI caps We already parse the content-light-level and mastering-display-info data from the stream, so propagate that into caps. Part-of: 2025-07-25 08:59:31 -0500 Derek Foreman * gst-libs/gst/wayland/gstwlwindow.c: wayland: display: Scale whitepoint the same as the primaries The whitepoint metadata also needs the same scale factor as the display_primaries. Part-of: 2025-07-25 09:31:08 -0500 Derek Foreman * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Name the color management queue Wayland debugging is easier if we use queue names. Part-of: 2025-07-22 11:05:08 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevch265decodebin.c: * ext/lcevcdecoder/gstlcevch265decodebin.h: * ext/lcevcdecoder/gstlcevch266decodebin.c: * ext/lcevcdecoder/gstlcevch266decodebin.h: * ext/lcevcdecoder/meson.build: * ext/lcevcdecoder/plugin.c: lcevcdecoder: Add lcevch265decodebin and lcevch266decodebin elements Similar to lcevch264decodebin, these new elements are needed for LCEVC H265 and H266 video streams to be decoded properly with autoplugging elements. Part-of: 2025-07-22 11:02:00 -0400 Julian Bouzas * gst/videoparsers/gsth266parse.c: h266parse: Fix typo when finding compatible profiles This solves some critical errors about not fixed caps with some H266 streams. Part-of: 2025-07-22 10:56:55 -0400 Julian Bouzas * gst/videoparsers/gsth266parse.c: h266parse: Wait for SEI before exposing src caps Similar to h264parse, this makes sure 'lcevc=false' src caps are not set before parsing SEI. It is needed for decodebin2 to work properly with the LCEVC decoder. Part-of: 2025-07-22 10:56:30 -0400 Julian Bouzas * gst/videoparsers/gsth265parse.c: * tests/check/elements/h265parse.c: h265parse: Wait for SEI before exposing src caps Similar to h264parse, this makes sure 'lcevc=false' src caps are not set before parsing SEI. It is needed for decodebin2 to work properly with the LCEVC decoder. Part-of: 2025-07-22 10:47:20 -0400 Julian Bouzas * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: codecparsersbad: Accept lcevc=false sink caps This is needed if the LCEVC enhancement data is part of the video stream as SEI and the demuxer outputs 'lcevc=false' src caps because LCEVC enhancement data is not stored as a separate stream in the container. To clarify, 'lcevc=true' just means that the video buffers have LCEVC metadata attached. Therefore, it is valid to have a stream with LCEVC enhancement data as SEI with 'lcevc=false' as long as it is not attached as metadata. This will be needed once we add support for the demuxer to attach LCEVC metadata to video buffers if it is stored in a separate track. Part-of: 2025-07-25 03:51:13 +0900 Seungha Yang * tests/examples/d3d12/d3d12fisheyedewarp.cpp: * tests/examples/d3d12/meson.build: examples: Add d3d12fisheyedewarp test example Part-of: 2025-06-20 03:23:25 +0900 Seungha Yang * gst-libs/gst/d3dshader/gstd3dshadercache.cpp: * gst-libs/gst/d3dshader/gstd3dshadercache.h: * gst-libs/gst/d3dshader/plugin-hlsl/CSMain_fisheye_equirect.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/CSMain_fisheye_panorama.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/CSMain_fisheye_perspective.hlsl: * gst-libs/gst/d3dshader/plugin-hlsl/hlsl.h: * gst-libs/gst/d3dshader/plugin-hlsl/meson.build: * sys/d3d12/gstd3d12fisheyedewarp.cpp: * sys/d3d12/gstd3d12fisheyedewarp.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add support for dewarping fisheye images Add d3d12fisheyedewarp element that performs fisheye image dewarping using D3D12. A UV remap LUT texture is generated via a compute shader, and the actual remapping is performed in a pixel shader using this LUT Part-of: 2025-07-24 17:44:46 -0400 Olivier Crête * ext/analyticsoverlay/gstobjectdetectionoverlay.c: objectdetectionoverlay: Print tracking id Part-of: 2025-07-24 18:16:51 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvaav1enc.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvajpegenc.c: * sys/va/gstvavp8enc.c: * sys/va/gstvavp9enc.c: vaXXXenc: calculate latency with corrected framerate Fixes: #4558 Part-of: 2025-07-10 21:56:28 +0900 Seungha Yang * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2rbuf.h: * sys/wasapi2/gstwasapi2sink.cpp: * sys/wasapi2/gstwasapi2src.cpp: wasapi2: Add continue-on-error property If enabled, wasapi2src/sink will post a warning message instead of an error, when device failures occur, such as open failure, I/O error, or device removal. The element will continue to produce/consume audio buffers and behave as if a capture/render device were active, allowing pipeline to keep running even when no audio endpoint is available Part-of: 2025-07-10 22:29:31 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.cpp: wasapi2: Use 48kHz default sample rate That's most common default value Part-of: 2025-07-04 21:55:13 +0900 Seungha Yang * sys/wasapi2/gstwasapi2device.cpp: * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2enumerator.h: wasapi2deviceprovider: Probe device form factor and enumerator name Adding form factor and enumerator information to device property struct Part-of: 2025-07-01 00:33:18 +0900 Seungha Yang * sys/wasapi2/gstwasapi2object.cpp: * sys/wasapi2/gstwasapi2object.h: * sys/wasapi2/gstwasapi2rbuf.cpp: * sys/wasapi2/gstwasapi2rbuf.h: * sys/wasapi2/gstwasapi2ringbuffer.cpp: * sys/wasapi2/gstwasapi2ringbuffer.h: * sys/wasapi2/gstwasapi2sink.c: * sys/wasapi2/gstwasapi2sink.cpp: * sys/wasapi2/gstwasapi2src.cpp: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/meson.build: * sys/wasapi2/plugin.cpp: wasapi2: Add support for dynamic device switch Ringbuffer implementation is re-written to support "device" property change in playing state Part-of: 2025-02-26 03:03:15 +0900 Seungha Yang * ext/nvdswrapper/gstnvdsdewarp.cpp: nvdsdewarp: Disallow resizing in case of passthrough It's not supported yet Part-of: 2025-02-26 02:27:38 +0900 Seungha Yang * ext/nvdswrapper/gstnvdsdewarp.cpp: nvdsdewarp: Avoid synchronization if possible If input/output memory objects have the same cuda stream, don't need to synchronize stream Part-of: 2025-02-26 02:22:24 +0900 Seungha Yang * ext/nvdswrapper/gstnvdsdewarp.cpp: nvdsdewarp: Cache texture object ... instead of creating texture for every frame Part-of: 2025-02-26 01:20:23 +0900 Seungha Yang * ext/nvdswrapper/gstnvdsdewarp.cpp: nvdsdewarp: Add support for output resizing ... and adding "add-borders" property Part-of: 2025-05-05 14:44:54 +0200 Stéphane Cerveau * ext/vulkan/vkdownload.c: * ext/vulkan/vkdownload.h: vkdownload: implement decide_allocation virtual method In the case of caps change such as frame size, a new buffer pool should be created according to this new caps via the decide_allocation() vmethod. Part-of: 2025-06-04 16:10:20 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstobjectdetectionoverlay.c: analyticsoverlay: Add expire-overlay property If there has been no new data for this amount of time, just expire the overlay and don't send one. Otherwise, it keeps sending the old one for the following frames. Part-of: 2025-07-04 23:34:13 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Always allow interlaced stream ... even if hardware does not support interlaced encoding at bitstream level. Although interlacing information is not written in the bitstream, that information can be signalled via container, thus allow interlaced stream. Part-of: 2025-07-19 01:50:03 +0900 Seungha Yang * sys/d3d12/gstd3d12swapchainsink.cpp: * tests/examples/d3d12/d3d12swapchainsink-win32.cpp: d3d12swapchainsink: Add last-rendered-sample action signal Add a new action signal to allow applications to capture the most recently rendered frame directly from the swapchain back buffer. Unlike the existing "last-sample" property, which exposes the raw input sample before any sink-side processing, this signal captures the final displayed image after any internal image processing (e.g., UV remap, color balance, overlay) has been applied. Part-of: 2025-05-26 13:47:39 +0200 Stéphane Cerveau * tests/check/libs/vkvideoencodebase.c: * tests/check/libs/vkvideoencodeh264.c: * tests/check/libs/vkvideoencodeh265.c: tests: vkh26xenc: use vkvideoencodebase To avoid duplicating code, use vkvideoencodebase.c Code cleanup and function clarifications. Fix leaks in case of multiple device. Part-of: 2025-07-15 20:10:25 -0400 Olivier Crête * ext/tflite/gsttflite.c: * ext/tflite/gsttflitevsiinference.c: * ext/tflite/gsttflitevsiinference.h: * ext/tflite/meson.build: * meson.options: tflite: Add support for VSI delegate Part-of: 2025-07-17 17:14:06 -0400 Olivier Crête * gst/tensordecoders/gstclassifiertensordecoder.c: classifiertensordecoder: Use utility functions to get tensors Part-of: 2025-07-17 17:12:29 -0400 Olivier Crête * gst/tensordecoders/gstclassifiertensordecoder.c: classifiertensordecoder: Handle error cases better with labels file Part-of: 2025-07-17 16:47:06 -0400 Olivier Crête * gst/tensordecoders/gstssdobjectdetector.c: ssdobjectdetector: Validate tensor type and dimensions Part-of: 2025-07-17 16:46:33 -0400 Olivier Crête * gst-libs/gst/analytics/gsttensor.c: tensor: Print tensor name in debug name It makes it easier to understand which one is rejected. Part-of: 2025-07-18 17:52:42 +0100 Tim-Philipp Müller * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: unixfd: fix and improve the example pipelines in the documentation - Add a videoconvert element before the videosink so that the output works no matter what format gets negotiated (A444_16LE for me) - Specify a reasonable video format and size with a capsfilter, so we don't default to something silly like A444_16LE @ 240p. - Add a timeoverlay element, so it's obvious when stoppping/restarting the pipeline that the input stream is just picked up again from the moment the consumer pipeline is restarted. Part-of: 2025-07-16 16:46:18 +0100 Philippe Normand * gst-libs/gst/transcoder/gsttranscoder.c: * gst-libs/gst/transcoder/gsttranscoder.h: transcoder: Fix warning/error APIs The GError pointers were actually not out-parameters. :( Part-of: 2025-07-16 16:44:59 +0100 Philippe Normand * gst-libs/gst/transcoder/gsttranscoder.c: transcoder: Remove unused priv->bus variable Part-of: 2025-07-16 16:43:36 +0100 Philippe Normand * gst-libs/gst/transcoder/gsttranscoder-signal-adapter.c: transcoder: signal-adapter: Fix error/warning details access The field names were missing in the gst_structure_get() calls... Part-of: 2025-07-16 09:27:40 +0100 Philippe Normand * tests/check/gst-plugins-bad.supp: check: Silence some OpenSSL memory leaks The OpenSSL version shipping in Fedora 40 leaks memory, the issue is fixed in F42. Part-of: 2025-07-03 12:06:22 +0100 Philippe Normand * docs/plugins/gst_plugins_cache.json: * ext/dtls/gstdtlscertificate.c: * ext/dtls/gstdtlsdec.c: * ext/dtls/gstdtlssrtpdec.c: dtls: Use ECDSA private key for default certificate ECDSA is widely used in browsers and SFUs, some servers such as the ones using BouncyCastle only accept certificates signed with ECDSA. Based on closed MR https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2458 Fixes #4516 Part-of: 2025-07-16 15:58:27 -0400 Olivier Crête * gst-libs/gst/analytics/gsttensor.c: * gst-libs/gst/analytics/gsttensor.h: * gst-libs/gst/analytics/gsttensormeta.c: * gst-libs/gst/analytics/gsttensormeta.h: * gst/tensordecoders/gstfacedetectortensordecoder.c: tensormeta: Check dimensions when retrieving tensor Modify the API to retrieve the tensor meta to check for the dimensions as well. Also fix an API mistake, the buffer whose dimensions should be checheck is the one inside the GstTensor, not another buffer some outside. Part-of: 2025-07-16 11:18:33 -0400 Olivier Crête * gst-libs/gst/analytics/gsttensormeta.c: tensormeta: Don't crash on invalid tensor name It's a valid case to check for an existing tensor. Part-of: 2025-07-10 18:23:30 +0200 Stéphane Cerveau * ext/vulkan/vkupload.c: vkupload: fix the refactored frame copy When refactoring the code in 743c425f64, the wrong GstBuffer has been used to copy to, leading to a failing frame copy. The bug has been discovered running elements_vkcolorconvert. Part-of: 2025-07-14 22:58:25 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12converter-private.h: * gst-libs/gst/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12swapchainsink.cpp: * tests/examples/d3d12/d3d12swapchainsink-win32.cpp: d3d12swapchainsink: Update uv-remap signal to support background color Allow per viewport background color setting Part-of: 2025-07-03 19:40:45 +0300 Sebastian Dröge * gst-libs/gst/analytics/gsttensor.c: tensor: Clarify meaning of the dimensions array in the docs Part-of: 2025-03-06 18:07:08 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: analyticsmeta: Remove incorrect check The value can be NULL which is the wildcard Part-of: 2025-07-08 11:15:31 +0530 raghu447 * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gstfacedetectortensordecoder.c: tensordecoder: rename facedetector element Part-of: 2025-07-09 07:50:43 -0400 Julian Bouzas * gst/videoparsers/gsth266parse.c: * gst/videoparsers/gsth266parse.h: h266parse: Parse and attach LCEVC metadata to buffers if present Similar to h264parse and h265parse, this patch enhances the element to parse LCEVC enhancement data from SEI, and attach it to output buffers as GstLcevcMeta. The 'lcevc' field in the output caps is also set to TRUE or FALSE depending on whether LCEVC data is present or not. Part-of: 2025-07-09 07:48:32 -0400 Julian Bouzas * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecparsers/gsth266parser.h: * gst/videoparsers/gsth266parse.c: h266parse: Parse and process SEI registered user data Similar to h264parse and h265parse, this patch improves the element to parse the SEI registered user data from NAL units. The core structure of H266 SEI for ITU-T T.35 is the same as the other parsers, so we can re-use the same logic. Part-of: 2025-07-15 01:29:46 +0900 Seungha Yang * tests/examples/d3d12/d3d12swapchainsink-win32.cpp: examples: d3d12swapchainsink: Add support for force-aspect-ratio change Adding keyboard control for "force-aspect-ratio" property change Part-of: 2025-07-15 01:28:40 +0900 Seungha Yang * sys/d3d12/gstd3d12swapchainsink.cpp: d3d12swapchainsink: Fix force-aspect-ratio change in playing state Set output updated flag so that viewport can be calculated again Part-of: 2025-07-14 15:07:37 +0300 Sebastian Dröge * gst-libs/gst/analytics/analytics.h: analytics: Include new batch meta in the single-include header Part-of: 2025-06-19 13:24:32 +0300 Sebastian Dröge * gst-libs/gst/analytics/gstanalyticsbatchmeta.c: * gst-libs/gst/analytics/gstanalyticsbatchmeta.h: * gst-libs/gst/analytics/meson.build: analytics: Add GstAnalyticsBatchMeta for batches of buffers from one or more streams Part-of: 2025-07-09 02:52:27 -0400 Doug Nazar * ext/avtp/gstavtpcrfbase.c: * ext/avtp/gstavtpcrfbase.h: avtp: crf: Setup socket during state change to ensure we handle failure Previously the socket would be created in the thread, which take some time to start. As the tests were so short they would usually pass as they don't actually use the socket. Part-of: 2025-07-09 02:51:11 -0400 Doug Nazar * tests/check/elements/avtpcrfcheck.c: * tests/check/elements/avtpcrfsync.c: avtp: crf: tests: Only run tests if packet socket is available Part-of: 2025-07-09 00:47:58 +0200 Mathieu Duponchelle * gst/rtmp2/rtmp/rtmpclient.c: rtmp2src: don't send window acknowledgement size commands twice This causes servers such as AWS MediaLive to drop the connection, and the message flow chart as documented in the "spec" always has the server sending it first, and the client replying to it on reception of the Set Peer Bandwidth, which we do since 286a3829b637. Part-of: 2025-07-09 00:44:36 +0200 Mathieu Duponchelle * gst/rtmp2/gstrtmp2locationhandler.c: rtmp2src: fix playback of URIs without a playpath ffmpeg manages to play RTMP URLs in the form: ``` protocol://servername:port/appname ``` and does not require a second component to the path, adapt our code to allow using such URLs as `tcUrl`. Part-of: 2025-07-09 12:21:31 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix negotiation failure with profile=main-422-10 Previous version passed just enough data to the parser to detect main/main-10, but main-422-10 is one of the range extensions profiles. Those need a few more bits to be accurately detected, and since those were just uinitialized memory previously, we'd incorrectly end up with main or main-10 when the encoder was in fact giving us 4:2:2 10bit output. Part-of: 2025-07-08 10:13:11 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: wayland: window: Fix next video info leak Part-of: 2025-07-08 10:09:39 -0400 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/gstwlwindow.h: waylandsink: Parse and set the HDR10 metadata Basically whenever the compositor have support for it, and the caps includes it, set the mastering display and light content level information. Part-of: 2025-07-08 10:08:57 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: wayland: display: Detect HDR10 metadata feature Part-of: 2025-06-17 06:38:59 -0400 Doug Nazar * ext/openh264/gstopenh264enc.cpp: openh264: Ensure src_pic is initialized before use valgrind was showing reads of uninitialized memory and the library examples all memset the structure before use. Part-of: 2025-05-22 14:41:30 -0400 Julian Bouzas * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth265parse.h: h265parse: Parse and attach LCEVC metadata to buffers if present Similar to h264parse, this patch enhances the element to parse LCEVC enhancement data from SEI, and attach it to output buffers as GstLcevcMeta. The 'lcevc' field in the output caps is also set to TRUE or FALSE depending on whether LCEVC data is present or not. Part-of: 2025-07-08 20:00:07 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.27.1 === release 1.27.1 === 2025-07-08 19:55:15 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.27.1 2025-07-07 10:12:52 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkfullscreenquad.c: vulkanfullscreenquad: add locks for synchronisation Now all API can be accessed from any thread. Part-of: 2025-05-31 03:35:27 -0400 Doug Nazar * gst/transcode/gst-cpu-throttling-clock.c: cpu-throttling-clock: fix race between async callback and unscheduling It's possible that the callback is already scheduled to run on another thread when we unschedule it during dispose and we would then access a freed object. Part-of: 2025-05-30 19:15:56 -0400 Doug Nazar * tests/check/elements/h266parse.c: h266parse: test: Pass correct size argument to va_arg function sizeof(int) != sizeof (gsize) Part-of: 2025-05-30 15:23:03 -0400 Doug Nazar * tests/check/libs/analyticsmeta.c: analytics: tests: Copy correct size of array to buffer Part-of: 2025-05-30 15:20:41 -0400 Doug Nazar * sys/decklink/gstdecklink.cpp: decklink: Fix a memory leak Part-of: 2025-05-30 15:21:58 -0400 Doug Nazar * tests/check/elements/webrtcbin.c: webrtc: tests: Fix a few memory leaks Part-of: 2025-05-30 15:20:02 -0400 Doug Nazar * gst/camerabin2/gstcamerabin2.c: camerabin: Fix a memory leak Part-of: 2025-07-07 11:59:18 +0200 Hanna Weiß * gst-libs/gst/vulkan/gstvkfullscreenquad.c: vulkan: Fix drawing too many triangles in fullscreenquad was using a index buffer for triangle list but drawn as strip Part-of: 2025-07-07 15:16:32 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Make the rotate property GST_PARAM_MUTABLE_PLAYING This matches the change we made to waylandsink. Part-of: 2025-06-25 19:42:59 +0200 Michael Olbrich * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: gstwaylandsink: add some locking documentation Part-of: 2025-06-25 16:21:40 +0200 Michael Olbrich * docs/plugins/gst_plugins_cache.json: * ext/wayland/gstwaylandsink.c: gstwaylandsink: add GST_PARAM_MUTABLE_PLAYING flag for more properties The fullscreen state and rotate method can be changed while the element is playing, so add the GST_PARAM_MUTABLE_PLAYING flag to those properties to indicate this. Part-of: 2025-06-25 16:17:58 +0200 Michael Olbrich * ext/wayland/gstwaylandsink.c: waylandsink: make sure self->window is not NULL before using it self->window is created with the first frame, so it is not available when properties are set during construction of the element. Skip calling gst_wl_window_ensure_fullscreen() in this case. The window is already constructed with the current configured fullscreen state, nothing else in needed here. Without this, running e.g. 'gst-launch-1.0 -v videotestsrc ! waylandsink fullscreen=true' will result in: GStreamer-Wayland-CRITICAL **: 14:11:19.921: gst_wl_window_ensure_fullscreen: assertion 'self' failed Part-of: 2025-07-02 18:39:20 +0200 Olivier Crête * ext/webrtc/gstwebrtcbin.c: webrtcbin: Add RTX/FEC for each relevant payload type When sending an answer with multiple codecs, we need to add the RTX and FEC payload for each codec Part-of: 2025-06-15 23:17:17 +0900 Seungha Yang * sys/hip/gsthipmemorycopy.cpp: hipmemorycopy: Use stream associated with buffer ... instead of global device stream. memory object might hold different stream. Part-of: 2025-06-15 23:09:17 +0900 Seungha Yang * sys/hip/gsthipconverter.cpp: hipconverter: Avoid unnecessary sync If input and output buffers are running on the same stream, record event instead of sync Part-of: 2025-06-15 21:34:36 +0900 Seungha Yang * sys/hip/gsthipbufferpool.cpp: * sys/hip/gsthipmemory.cpp: * sys/hip/gsthipmemory.h: hipmemory: Allow lazy sync Store recorded hip event and wait for sync later if needed Part-of: 2025-06-15 21:29:19 +0900 Seungha Yang * sys/hip/gsthip.h: * sys/hip/gsthip_fwd.h: * sys/hip/gsthipevent.cpp: * sys/hip/gsthipevent.h: * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: * sys/hip/gsthipstream.cpp: * sys/hip/gsthipstream.h: * sys/hip/meson.build: * sys/hip/stub/driver_types.h: * sys/hip/stub/hip/hip_runtime_api.h: hip: Add GstHipEvent object hip event handle wrapper object Part-of: 2025-06-15 19:48:54 +0900 Seungha Yang * sys/hip/gsthipcompositor.cpp: * sys/hip/gsthipconverter.cpp: * sys/hip/gsthipmemory.cpp: * sys/hip/gsthipmemory.h: * sys/hip/gsthipmemorycopy.cpp: hip: Use non-default stream Part-of: 2025-06-15 19:06:28 +0900 Seungha Yang * sys/hip/gsthip.h: * sys/hip/gsthip_fwd.h: * sys/hip/gsthipdevice.cpp: * sys/hip/gsthipdevice.h: * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: * sys/hip/gsthipstream.cpp: * sys/hip/gsthipstream.h: * sys/hip/meson.build: hip: Add GstHipStream object Adding hip stream abstraction layer Part-of: 2025-05-28 08:45:40 -0400 Doug Nazar * gst/codecalpha/gstalphacombine.c: alphacombine: fix memory leaks Part-of: 2025-05-28 08:44:01 -0400 Doug Nazar * gst/transcode/gst-cpu-throttling-clock.c: cpu-throttling-clock: free clock when finished Part-of: 2025-07-05 03:10:51 +0900 Seungha Yang * sys/d3d12/gstd3d12screencapturedevice.cpp: d3d12screencapture: Add support for monitor add/remove in device provider Update device list on WM_DISPLAYCHANGE event Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4521 Part-of: 2025-07-04 10:56:27 -0400 Nicolas Dufresne * gst/videoparsers/gstvp9parse.c: Revert "vp9parse: Always default to super-frame" This reverts commit fd1428d3ebf937d7656c3788df3ef3ff85fecc31. As reported in #4524, this changes cause regressions. The problem is due to a bug in how vp9parse interact with parsebin, presenting downstream negotiation of alignment to work. This revert to being stuck using frame alignment always, which fortunately works with libvpx, though less efficient. Part-of: 2025-05-07 14:02:05 -0400 Nicolas Dufresne * gst/videoparsers/gstvp9parse.c: vp9parse: Only show the last frame of a super frame Only the last frame of a super frame should be displayed by default. When converting from super frame to frame, mark all frames as decode only except the last one. This fixes vp90-2-22-svc_1280x720_3.ivf conformance test with stateless decoders such as VA. Part-of: 2025-05-07 13:48:04 -0400 Nicolas Dufresne * gst/videoparsers/gstvp9parse.c: vp9parse: Always default to super-frame Sort the list of structure before truncating so that we don't prefer "frame"" alignment over "super-frame" in some cases. Fixes vp90-2-22-svc_1280x720_3.ivf conformance test when using libvpx based decoder. Fixes #4371 Part-of: 2025-05-07 10:29:10 -0400 Nicolas Dufresne * gst/videoparsers/gstvp9parse.c: vp9parse: Fix typo Aligment vs Alignment Part-of: 2025-06-23 15:28:30 -0400 Julian Bouzas * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: h264parse: Forward LCEVC caps This makes sure the parser exposes lcevc=true output caps if the demuxer attached LCEVC data to video frames. Part-of: 2024-11-20 18:46:54 +0100 Víctor Manuel Jáquez Leal * tests/examples/meson.build: * tests/examples/vulkan/meson.build: * tests/examples/vulkan/vulkanenc.c: examples: vulkan encoder test Similar as d3d11 and va. Part-of: 2024-12-10 19:14:12 +0100 Víctor Manuel Jáquez Leal * docs/plugins/gst_plugins_cache.json: * ext/vulkan/gstvulkan.c: * ext/vulkan/meson.build: * ext/vulkan/vkh264enc.c: * ext/vulkan/vkh264enc.h: vulkanh264enc: add Vulkan H264 encoder Add an element to encode h264 content using the vulkan API. Co-authored-by: Stéphane Cerveau Part-of: 2024-12-10 18:53:36 +0100 Víctor Manuel Jáquez Leal * docs/plugins/gst_plugins_cache.json: * ext/vulkan/base/gsth264encoder.c: * ext/vulkan/base/gsth264encoder.h: * ext/vulkan/meson.build: vulkan: h264encoder: introduce base class H.264 base class oriented for hardware accelerated encoders, such as Vulkan, VA and others. 1. It can be parametrized for hardware limits, such as lists size, b-frames supports, etc. 2. It produces a GOP structure map [IDR, R/I/B, ...) 3. It proposes parameters set and other strucures such as bitrate limites. Subclases can modify those structures. 4. It calls the subclass encode virtual method implementation. It doesn't handle rate control algorithms or other encoding quality mechanisms. For a deeper introduction to the class there was a lighting talk in the GstConf 2024: Co-authored-by: He Junyan Co-authored-by: Michael Grzeschik Co-authored-by: Stéphane Cerveau Part-of: 2025-07-03 11:11:38 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkencoder-private.c: vkencoder-private: free data on error Co-authored-by: Stéphane Cerveau Part-of: 2024-12-17 19:15:06 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkencoder-private.c: * gst-libs/gst/vulkan/gstvkencoder-private.h: vkencoder-private: add gst_vulkan_encoder_rc_mode() To get the updated rate control mode. Part-of: 2024-12-09 17:59:30 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkencoder-private.c: vkencoder-private: fix array layer for layered DPB Part-of: 2025-06-09 17:27:24 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkencoder-private.c: vkencoder-private: free err when bailing And log out the error message from the Vulkan call. Part-of: 2025-05-29 13:20:59 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vulkan: ycbcr conversion extension got promoted in 1.1.0 Part-of: 2025-07-02 22:38:41 +0300 Sebastian Dröge * gst/tensordecoders/gstssdobjectdetector.c: ssdobjectdetector: Use correct tensor data index for the scores Part-of: 2025-06-29 22:52:37 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Fix various MinGW build warnings Part-of: 2025-06-29 20:45:51 +0900 Seungha Yang * sys/wasapi2/AsyncOperations.h: * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2client.h: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/meson.build: waapi2: Remove unused WinRT deps and implementations Removing unused WinRT API based implementations Part-of: 2025-06-29 01:46:44 +0900 Seungha Yang * sys/wasapi2/gstwasapi2object.cpp: * sys/wasapi2/gstwasapi2object.h: * sys/wasapi2/gstwasapi2ringbuffer.cpp: * sys/wasapi2/gstwasapi2ringbuffer.h: * sys/wasapi2/gstwasapi2sink.c: * sys/wasapi2/gstwasapi2src.c: * sys/wasapi2/meson.build: wasapi2: Port to IMMDevice based device selection Because of a couple of issues reported related to WinRT device enumeration, porting to IMMDevice device id based device selection. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4311 Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3936 Part-of: 2025-06-27 21:36:53 +0900 Seungha Yang * sys/wasapi2/gstwasapi2activator.cpp: * sys/wasapi2/gstwasapi2activator.h: * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2device.c: * sys/wasapi2/gstwasapi2device.cpp: * sys/wasapi2/gstwasapi2device.h: * sys/wasapi2/gstwasapi2enumerator.cpp: * sys/wasapi2/gstwasapi2enumerator.h: * sys/wasapi2/gstwasapi2util.cpp: * sys/wasapi2/gstwasapi2util.h: * sys/wasapi2/meson.build: * sys/wasapi2/plugin.cpp: wasapi2: Implement IMMDeviceEnumerator based enumerator ... and merge wasapi2{capture,render}deviceprovider into single wasapi2deviceprovider since we can enumerate input/output audio devices at once using IMMDeviceEnumerator This is a preparation for complete porting to Win32 API Part-of: 2025-06-05 11:24:34 +0100 James Cowgill * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: Use prop_offset in gst_v4l2_decoder_install_properties Install properties at the given offset as intended instead of at 0. Currently there are no elements with any properties, so this has no effect. This change is needed if any element adds properties in the future. Part-of: 2025-06-27 10:51:05 +0200 Edward Hervey mpegtsdemux: Add property to disable skew corrections This is for cases where: * We *do* want to refer to the PCR stream to figure out global positioning, gap detection, wrapover correction. * But we do not want to apply any skew correction to the output This is useful for cases where: * the input stream has already been clock-corrected (for example with mpegtslivesrc) * or where the output doesn't require synchronization against a clock (ex: for storage) Part-of: 2025-06-27 10:06:34 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: h265dec: Fail when frame cropping is needed while using DMABuf It is not possible to do frame cropping when DMABuf caps feature is negotiated. The VideoInfo size is zero, resulting in empty destination buffers, and video convert library may not understand what the format actually is. Part-of: 2025-06-27 10:00:37 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: h265dec: Avoid cropping for zero top/left alignments If the conformance window does not requires cropping the top or left of the window, we can use GstVideoMeta to crop in a zero-copy fashion. If a copy is needed, the frame copy can also handle it, and is a lot faster. Part-of: 2025-06-27 09:49:00 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: v4l2codecs: dec: Remove has_videometa member Now that the code is properly located, this member is not needed anymore. Part-of: 2025-06-27 09:37:06 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: v4l2codecs: dec: Move copy_frames logic inside decide_allocation Part-of: 2025-02-06 22:49:35 +0900 Seungha Yang * ext/webrtcdsp/meson.build: webrtcdsp: Respect disabled feature option Don't try to build this plugin if it's explicitly disabled Part-of: 2025-06-17 15:24:58 +0530 Vineet Suryan * ext/onnx/README.md: onnx: Use system installed Eigen to avoid hash mismatch failure Eigen’s download for the commit referenced by ONNX Runtime v1.16.3 was updated upstream, so the SHA-256 embedded in ORT’s CMake scripts no longer matches and the build aborts with a hash-mismatch error. Part-of: 2025-06-22 03:23:59 -0400 Doug Nazar * ext/avtp/gstavtpvfdepaybase.c: avtp: Fix memory leak Part-of: 2025-06-22 03:22:27 -0400 Doug Nazar * ext/srt/gstsrtsrc.c: srt: Fix warning about uninitialized memory Part-of: 2025-06-22 03:20:35 -0400 Doug Nazar * gst-libs/gst/codecparsers/gstvc1parser.c: vc1parser: Fix warning about printing uninitialized variables Part-of: 2025-06-22 03:16:55 -0400 Doug Nazar * gst/proxy/gstproxysrc.c: proxysrc: Fix order freeing pads Free pads from bottom of parent tree first else with GST_DEBUG enabled it would access freed memory printing object info. Part-of: 2025-06-22 03:14:39 -0400 Doug Nazar * tests/check/elements/avtpcvfpay.c: avtpcvfpay: tests: Initialize codec memory If GST_DEBUG was enabled we would print unintialized memory Part-of: 2025-06-30 11:56:49 +0300 Sebastian Dröge * gst-libs/gst/analytics/gsttensor.c: analytics: Fix docs of gst_tensor_check_type() Part-of: 2025-06-26 18:19:27 +0300 Sebastian Dröge * gst-libs/gst/analytics/gsttensor.c: * gst-libs/gst/analytics/gsttensormeta.c: analytics: Fix transfer annotations of gst_tensor_check_type() Part-of: 2025-06-25 09:30:15 -0600 David Monge * gst/mpegtsmux/tsmux/tsmuxstream.c: mpegtsmux: fix double free caused by shared PMT descriptor The PMT descriptor was owned by the stream object but also added to the descriptors array without copying, leading to a double free and core dump during cleanup Part-of: 2025-06-17 10:56:03 -0400 Thibault Saunier * gst-libs/gst/cuda/gstcudanvrtc.cpp: cuda: Lower debug log level on nvrtc compilation failure We have a fallback to compile with cubin and that compilation failure might very well not be fatal. Part-of: 2025-06-24 21:40:26 +0800 He Junyan * gst-libs/gst/codecparsers/gsth266parser.c: * gst-libs/gst/codecparsers/gsth266parser.h: h266parser: Fix overflow when parsing subpic_level_info 1. non_subpic_layers_fraction, ref_level_idc and ref_level_fraction_minus1 fields should not have the GST_H266_MAX_SUBLAYERS limitation. 2. Should check max_sublayers_minus1, no more than GST_H266_MAX_SUBLAYERS-1 Fixes ZDI-CAN-27381, CVE-2025-6663 Closes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4503 Part-of: 2025-06-26 10:22:42 +0200 Johan Sternerup * sys/hip/gsthipmemorycopy.cpp: hip: Add missing #ifdef So that it compiles without gstreamer-gl. Part-of: 2025-06-12 12:45:57 +0200 Michael Olbrich * docs/plugins/gst_plugins_cache.json: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/gstwlwindow.h: waylandsink: Add force-aspect-ratio property Similar to and inspired by glimagesink, xvimagesink and others. The waylandsink never transform the buffer in any way but delegates this to the Wayland compositor with the Wayland buffer transform API. Rotation and window size are already supported, so this just changes the video surface geometry that is communicated to the Wayland compositor. Part-of: 2025-06-25 16:24:44 +0200 Jan Alexander Steffens (heftig) * ext/srt/gstsrtsink.c: * ext/srt/gstsrtsink.h: srtsink: Fix header buffer filtering Cleans up the code and fixes two issues: - If there are no streamheaders in the caps but we have `HEADER` buffers, it would run `gst_buffer_list_foreach` with `self->headers` being `NULL`. - The code forgot to unmap the buffer if it decided to ignore it. Fixes: 0a562a92d7ee38d8919d1b802add84d3c93b59eb Part-of: 2025-06-01 00:02:16 +0900 Seungha Yang * sys/d3d12/gstd3d12graphicscapture.cpp: * sys/d3d12/gstd3d12graphicscapture.h: * sys/d3d12/plugin.cpp: d3d12screencapturesrc: Fix OS handle leaks/random crash in WGC mode Multiple DispatcherQueues per thread seems to be causing OS handle leak and random crashes were observed. Instead of creating thread/DispatcherQueue per GstD3D12GraphicsCapture object, reuse only single thread and DispatcherQueue Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4351 Part-of: 2025-05-23 07:12:40 -0400 Doug Nazar * tests/check/libs/vkvideoencodeh264.c: * tests/check/libs/vkvideoencodeh265.c: vkvideoencodeh26x: ensure we call teardown() for each test Part-of: 2025-06-25 00:45:39 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/hip/plugin.cpp: hip: Add plugin docs Part-of: 2025-06-09 23:09:46 +0900 Seungha Yang * sys/hip/gsthipcompositor.cpp: * sys/hip/gsthipcompositor.h: * sys/hip/meson.build: * sys/hip/plugin.cpp: hip: Add hipcompositor element Feature-wise it's the same as cudacompositor Part-of: 2025-06-09 22:11:36 +0900 Seungha Yang * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: hip: Load memset symbols Part-of: 2025-06-09 21:08:24 +0900 Seungha Yang * sys/hip/gsthipmemorycopy.cpp: hipmemorycopy: Add support for GL interop Enable memory copy between HIP and GL Part-of: 2025-06-03 19:51:47 +0900 Seungha Yang * sys/hip/gsthip-interop-gl.h: * sys/hip/gsthip-interop.cpp: * sys/hip/gsthip-interop.h: * sys/hip/gsthip.h: * sys/hip/gsthip_fwd.h: * sys/hip/meson.build: hip: Add GstHipGraphicsResource object hipGraphicsResource_t wrapper object for graphics api interop Part-of: 2025-06-03 16:56:09 +0900 Seungha Yang * sys/hip/gsthiploader-gl.h: * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: * sys/hip/meson.build: * sys/hip/stub/cudaGL.h: * sys/hip/stub/driver_types.h: * sys/hip/stub/hip/hip_gl_interop.h: * sys/hip/stub/hip/hip_runtime_api.h: hip: Load GL interop related symbols Part-of: 2025-05-14 14:56:52 +0900 Seungha Yang * sys/hip/gsthipconverter.cpp: hip: Pass GPU arch to kernel compile option args Pass current GPU arch to compile option instead of relying on auto detection Part-of: 2025-05-14 14:25:40 +0900 Seungha Yang * meson.options: * sys/hip/gsthipconverter.cpp: * sys/hip/kernel/collect_ptx_headers.py: * sys/hip/kernel/meson.build: * sys/hip/meson.build: hip: Add support for NVIDIA kernel precompile ... with "hip-nvidia-precompile" and "hip-nvcc-arch" build options Part-of: 2025-05-14 13:17:00 +0900 Seungha Yang * meson.options: * sys/hip/gsthipconverter.cpp: * sys/hip/kernel/collect_hsaco_headers.py: * sys/hip/kernel/converter-unpack.cu: * sys/hip/kernel/converter.cu: * sys/hip/kernel/meson.build: * sys/hip/meson.build: hip: Add support for AMD kerenl precompile Adding "hip-amd-precompile" build option. If enabled, AMD kernels will be precompiled at build time. Also "hip-hipcc-arch" build option (corresponding to --offload-arch hipcc option) is added so that user can specify target GPU arch instead of auto-detection by hipcc Part-of: 2025-05-12 19:45:55 +0900 Seungha Yang * sys/hip/gsthipmemorycopy.cpp: * sys/hip/gsthipmemorycopy.h: * sys/hip/meson.build: * sys/hip/stub/cudaD3D11.h: * sys/hip/stub/cudaGL.h: hip: Add support for memory copy between GstCuda and GstHip Handle CUDA <-> HIP memory copy in hipupload and hipdownload elements Part-of: 2025-05-07 06:32:11 +0900 Seungha Yang * sys/hip/gsthip-enums.cpp: * sys/hip/gsthip-enums.h: * sys/hip/gsthip.h: * sys/hip/gsthipbasefilter.cpp: * sys/hip/gsthipconverter.cpp: * sys/hip/gsthipdevice.cpp: * sys/hip/gsthipdevice.h: * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: * sys/hip/gsthipmemory.cpp: * sys/hip/gsthiprtc.cpp: * sys/hip/gsthiprtc.h: * sys/hip/gsthiputils.cpp: * sys/hip/gsthiputils.h: * sys/hip/kernel/converter.cu: * sys/hip/meson.build: * sys/hip/plugin.cpp: * sys/hip/stub/cuda.h: * sys/hip/stub/driver_types.h: * sys/hip/stub/hip/nvidia_hip_runtime_api.h: hip: Add support for NVIDIA Adding HIP <-> CUDA translation layer like the HIP SDK does but uses dlopen() for CUDA as well Part-of: 2025-05-06 20:16:29 +0900 Seungha Yang * sys/hip/gsthip.h: * sys/hip/gsthipconverter.cpp: * sys/hip/gsthipdevice.cpp: * sys/hip/gsthiploader.cpp: * sys/hip/gsthiploader.h: * sys/hip/gsthipmemory.cpp: * sys/hip/gsthiprtc.cpp: * sys/hip/gsthiprtc.h: * sys/hip/gsthiputils.cpp: * sys/hip/meson.build: * sys/hip/plugin.cpp: * sys/hip/stub/hip/driver_types.h: * sys/hip/stub/hip/hip_runtime.h: * sys/hip/stub/hip/hip_runtime_api.h: * sys/hip/stub/hip/hiprtc.h: * sys/hip/stub/hip/texture_types.h: hip: Remove build-time SDK dependency Use dlopen at runtime Part-of: 2025-04-26 03:24:37 +0900 Seungha Yang * meson.options: * sys/hip/gsthip.h: * sys/hip/gsthip_fwd.h: * sys/hip/gsthipbasefilter.cpp: * sys/hip/gsthipbasefilter.h: * sys/hip/gsthipbufferpool.cpp: * sys/hip/gsthipbufferpool.h: * sys/hip/gsthipconverter.cpp: * sys/hip/gsthipconverter.h: * sys/hip/gsthipconvertscale.cpp: * sys/hip/gsthipconvertscale.h: * sys/hip/gsthipdevice.cpp: * sys/hip/gsthipdevice.h: * sys/hip/gsthipmemory.cpp: * sys/hip/gsthipmemory.h: * sys/hip/gsthipmemorycopy.cpp: * sys/hip/gsthipmemorycopy.h: * sys/hip/gsthiprtc.cpp: * sys/hip/gsthiprtc.h: * sys/hip/gsthiputils.cpp: * sys/hip/gsthiputils.h: * sys/hip/kernel/converter-unpack.cu: * sys/hip/kernel/converter.cu: * sys/hip/meson.build: * sys/hip/plugin.cpp: * sys/meson.build: hip: Add AMD HIP plugin Adding hipupload, hipdownload, and hipconvert family elements Part-of: 2025-06-21 07:12:29 -0400 Doug Nazar * ext/analyticsoverlay/gstobjectdetectionoverlay.c: analyticsoverlay: Fix memory leak Part-of: 2025-06-21 07:11:29 -0400 Doug Nazar * tests/check/elements/dashsink.c: dashsink: test: Minor cleanups Part-of: 2025-06-21 07:10:54 -0400 Doug Nazar * ext/dash/gstdashsink.c: dashsink: Fix memory leak Part-of: 2025-06-23 10:22:57 +1000 Matthew Waters * sys/decklink/gstdecklink.cpp: * sys/decklink/gstdecklink.h: * sys/decklink/gstdecklinkvideosink.cpp: decklink/clock: remove clock_offset It is completely unused and only ever initialized to 0. Part-of: 2025-06-18 14:20:32 +1000 Matthew Waters * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosink.h: decklink: calculate internal using values closer to the current clock times In a previous version of the clock time conversion code, scheduled playback used to be started (from 0) when transitioning to PLAYING and stopped when transitioning PLAYING->PAUSED. This worked fine when converting running times using the internal clock. However, now the decklink clock will produce values that are monotonically increasing and do not reset to 0 at the same moments as running time anymore. This means that the clock adjustments could attempt to convert a small running time based on a large clock time e.g. after pausing for many hours. As the adjustment code is a simple linear interpolation based on the current clock times (large) using the provided value (small), the small differences in the rate could result in very large differences in the output time. Fix by instead using both internal and external clock times based on the values that gst_clock_get_calibration() will return. By doing so, small changes in the rate calculations between the internal and external clock times will not result in potentially large differences in the output internal time from gst_clock_unadjust_with_calibration(). Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4197 Part-of: 2025-06-13 17:23:21 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: refactor frame copy in a single function Avoiding code duplication Part-of: 2025-06-13 15:24:27 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: use gst_video_frame_copy() for VulkanBuffer There's no need of a custom copy. Part-of: 2025-06-18 14:04:14 +0200 Edward Hervey * gst/mpegtsdemux/tsdemux.c: tsdemux: Allow access unit parsing failures * Refactor the various Access Unit extraction calls into a single function * Allow the access unit parsing to fail, but emit a warning Part-of: 2025-06-16 18:38:30 +0530 Nirbheek Chauhan * sys/androidmedia/gstamc-codeclist.h: * sys/androidmedia/gstamc.c: * sys/androidmedia/gstamc.h: * sys/androidmedia/jni/gstamc-codeclist-jni.c: amc: 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 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. Also rank PRIMARY+1 the c2.android c2.exynos and c2.amlogic audio codecs alongside OMX.google, because they are known-good. Part-of: 2025-06-17 03:32:24 +0530 Nirbheek Chauhan * sys/androidmedia/gstamc.c: amc: Log under GST_FIXME for audio encoders We don't support audio encoders yet, so log that correctly. Part-of: 2025-06-16 18:36:31 +0530 Nirbheek Chauhan * sys/androidmedia/gstamc.c: amc: Improve codec registration logging Most of the messages can be printed with INFO threshold since they are only printed on plugin registration. Fix printing of codec caps, since GST_PTR_FORMAT truncates the output in almost every case that I saw. Part-of: 2025-06-16 18:34:39 +0530 Nirbheek Chauhan * sys/androidmedia/gstamc.c: amc: Print error messages when registering plugins Part-of: 2025-02-20 21:59:31 +0000 Ben Butterworth <24711048+ben-xD@users.noreply.github.com> * gst/mpegtsdemux/tsdemux.c: mpegts: handle MPEG2-TS with KLV metadata safely by preventing out of bounds Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3896 @slomo, as requested on https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3896#note_2780065 Part-of: 2025-06-13 12:35:17 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vkupload: use gst_buffer_find_memory() to select memory We never implemented correctly the selection of memories in a buffer given the plane. This patch uses gst_buffer_find_memory() for that. The offset is checked via the video meta either in the input and output buffers, or the default offset given the format and size. This patch also requests the video meta option for the output buffers. Part-of: 2025-06-13 11:28:35 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: set video meta to buffers if requested This patch adds the possibility to attach video metas to allocated buffers if API users request that option. The main reason to add this meta is for the future usage of gst_buffer_find_memory(), where the requested offset determines the memory index. In the case of multi-memory Vulkan images the offset of every component is larger than the default offset determined by the format and frame size, because of the buffer minimum size and memory alignment determined by the used driver. Then, the offset is set in the buffer video meta. In the case of single memory Vulkan images, the default offset is set in the video meta. Part-of: 2025-06-13 11:27:49 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: remove unused variable Part-of: 2024-07-26 14:23:10 +1000 Matthew Waters * ext/webrtc/gstwebrtcbin.c: webrtcbin: disconnect signal ICE handlers on dispose It is entirely possible that the in progress may still provide some state updates until the ICE object is destroyed, these state updates should not really be done when webrtcbin is in the process of destroying itself and access freed data. Part-of: 2025-06-12 15:34:53 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkerror.c: vkerror: add invalid_video_std_parameters message Add string to handle error related to the codec standard parameters. Part-of: 2025-06-12 01:07:01 +0900 Seungha Yang * tests/examples/d3d12/d3d12swapchainsink-win32.cpp: * tests/examples/d3d12/meson.build: examples: d3d12swapchainsink: Add uv-remap/redraw example Part-of: 2025-06-11 22:42:22 +0900 Seungha Yang * sys/d3d12/gstd3d12swapchainsink.cpp: d3d12swapchainsink: Add uv-remap and redraw action signal New uv-remap signal can be used for UV coordinate remap operation in videosink, and redraw signal can allow updating view even in paused state Part-of: 2025-06-12 20:15:15 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12converter-private.h: * gst-libs/gst/d3d12/gstd3d12converter.cpp: d3d12converter: Add support multiple UV remap in a single path Add private methods for multiple UV remap operation Part-of: 2025-04-08 16:12:46 +0200 Stéphane Cerveau * gst-libs/gst/codecparsers/gstav1parser.c: * gst-libs/gst/codecparsers/gstav1parser.h: * sys/nvcodec/gstnvav1dec.cpp: * sys/v4l2codecs/gstv4l2codecav1dec.c: parser: fix spelling of GstAV1SegmentationParams Part-of: 2025-06-12 11:09:42 -0400 Xavier Claessens * ext/svtjpegxs/meson.build: wraps: Add svtjpegxs from wrapdb Part-of: 2025-06-12 11:45:33 -0300 L. E. Segovia * ext/curl/gstcurlhttpsrc.c: curl: Recover missing comment See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8974#note_2955585 Part-of: 2025-06-09 13:05:47 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: webrtcbin: Include all accepted media formats in SDP answers Until this patch only the first format was added. Fixes #4458 Part-of: 2025-06-10 22:17:46 +1000 Matthew Waters * sys/decklink/gstdecklinkvideosink.cpp: decklinkvideosink: show preroll frame correctly Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4254 Part-of: 2024-11-13 11:03:30 +0100 Robert Mader * gst-libs/gst/wayland/meson.build: wayland: Add support for local protocols This proved to be helpful for previous protocol experiments, so let's upstream it. Inspired by the corresponding code in Weston. Protocols need to be placed in a `protocols` subdirectory and can be declared in the following way in `meson.build`: ``` ['color-management-v1', 'internal' ], ``` Note the `v1` being part of the name. Part-of: 2024-05-10 18:24:06 +0200 Robert Mader * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwlwindow.c: wayland: Add basic colorimetrie support Using the Wayland color-management and color-representation protocols. The implementation queries supported values from the compositors and tries to convert them into GstVideoColorimetry values. It currently *does not* pass these upstream to decoders etc. as GstCaps for negotiation. On the Wayland side it uses named transfer functions, named primaries, matrices and ranges. The straight alpha mode is also set if supported by the compositor. On setting caps it translates the GstVideoColorimetry from the GstVideoInfo back to into a Wayland parametric image description and color representation for the video surface if possible. If a colorimetry is not fully support, we bail out and if wayland objects already exist they get reset or deleted. Note that not all GstVideoColorimetry values are implemented yet. Useful debug options: GST_DEBUG=wlwindow:4,wldisplay:4 Part-of: 2024-12-11 15:40:24 +0100 Robert Mader * gst-libs/gst/wayland/gstwlwindow.c: wayland: wlwindow: Use GstWlWindow debug category As probably intended - and Demote frame_redraw_cb log to debug to make it less noisy. Part-of: 2025-05-15 13:47:35 +0200 Robert Mader * gst-libs/gst/wayland/gstwlbuffer.h: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwlwindow.h: wayland: Turn wl objects into GstObjects For better logging and locking support. Part-of: 2024-11-12 20:19:35 +0100 Robert Mader * gst-libs/gst/wayland/meson.build: wayland: Add color protocols Part-of: 2024-12-13 19:08:30 +1100 Jan Schmidt * gst/mpegtsdemux/tsdemux.c: tsdemux: Send new-segment before GAP If adding a sparse stream and sending a gap event to bring it up to speed, make sure to send the new segment event first Part-of: 2025-06-16 13:39:55 +0200 Víctor Manuel Jáquez Leal * tests/check/elements/vkupload.c: * tests/check/meson.build: test: vulkanupload unit test Part-of: 2025-06-13 14:36:25 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: fix regression for uploading VulkanBuffer Merge request !5651 introduced a regression for uploading VulkanBuffer. It can be verified by gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12 ! vulkanupload ! \ video/x-raw\(memory:VulkanBuffer\) ! fakesink Nobody has complained about this regression, so we assume it's a very niche use-case. This patch solve the regression by instantiating a different buffer pool depending on the output cap features, and configuring it accordingly. Part-of: 2025-06-04 17:52:01 -0400 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: Also implement stop to clean up session Part-of: 2025-03-05 17:47:41 -0500 Olivier Crête * ext/onnx/gstonnxinference.cpp: onnxinference: Clean up session creation logic Part-of: 2025-06-10 14:41:22 +0200 Víctor Manuel Jáquez Leal * ext/avtp/gstavtp.c: * scripts/gen-changelog.py: gstreamer-vaapi: remove subproject It's almost superseded by va plugin in gst-plugins-bad. Part-of: 2025-06-10 12:53:05 +0100 Philippe Normand * gst-libs/gst/transcoder/gsttranscoder.c: transcoder: Fix uritranscodebin reference handling Make sure the reference is not floating, because the get_pipeline function returns a transfer-full reference. Part-of: 2025-05-13 12:22:08 +0000 L. E. Segovia * ext/curl/gstcurlhttpsrc.c: curl: Fix wrong format specifier for macOS > ../ext/curl/gstcurlhttpsrc.c:1331:11: error: format specifies type > unsigned long long' but the argument has type 'curl_off_t' (aka 'long') [-Werror,-Wformat] Part-of: 2025-05-09 16:45:53 +0200 Stefan Andersson * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: * tests/check/elements/h264parse.c: * tests/check/elements/h265parse.c: * tests/check/elements/h266parse.c: h26xparse: Drop NAL units that can't be parsed using AU alignment Change so that the handling of NAL unit that can't be parsed when using AU alignment is the same as when using NAL alignment, ie drop the data if it can't be parsed. If the AU contains more than one NAL unit any correctly parsed NAL unit in the AU is kept. Fixes #4436 Part-of: 2025-05-28 14:19:46 +0200 Stefan Andersson * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: h26xparse: Bail out if ...finish_frame returns an error For NAL alignment bail out if gst_base_parse_finish_frame returns a flow error. Part-of: 2025-05-26 16:55:43 +0200 Stefan Andersson * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth266parse.c: h26xparse: Prevent assert hitting when discarding NAL unit If using NAL aligment and only dropping part of the AU, the size argument given to gst_base_parse_finish_frame was wrong and this assert in gst_base_parse_finish_frame hit 'gst_adapter_available (parse->priv->adapter) >= size' failed Part-of: 2025-06-03 23:05:18 -0400 Daniel Morin * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: produce tensor caps - Add tensor description to srcpads caps onnx: formatting Part-of: 2025-06-05 16:47:02 -0400 Daniel Morin * gst-libs/gst/analytics/gsttensor.h: gsttensor: adding new datatypes - Adding datatype for string, boolean, complex numbers and special floating point numbers. Part-of: 2025-06-02 16:00:36 +0530 raghu447 * gst-libs/gst/analytics/gsttensor.c: * gst-libs/gst/analytics/gsttensor.h: * gst-libs/gst/analytics/gsttensormeta.c: * gst-libs/gst/analytics/gsttensormeta.h: * gst/tensordecoders/gstfacedetectortensordecoder.c: analytics: add a convenient API to retrieve tensor use the API in facedetector tensor decoding Part-of: 2025-06-06 18:34:02 +0530 raghu447 * ext/tflite/gsttfliteinference.c: tfliteinference: initialize means and stddevs arrays appropriately Part-of: 2025-06-06 16:24:19 +0200 Jakub Adam * ext/soundtouch/meson.build: meson: fix building -bad tests with disabled soundtouch Fixes an error from Meson: ../subprojects/gst-plugins-bad/tests/validate/meson.build:16:93: ERROR: Unknown variable "soundtouch_dep" Part-of: 2025-05-12 11:31:32 +0100 Glyn Davies * gst/mpegtsmux/tsmux/tsmuxstream.c: mpegtsmux: Corrections around Teletext handling Part-of: 2025-05-22 10:11:36 -0400 Julian Bouzas * ext/lcevcdecoder/gstlcevcdec.c: lcevcdec: Check for errors after receiving all enhanced and base pictures The LCEVC_ReceiveDecoderBase() and LCEVC_ReceiveDecoderPicture() APIs from the LCEVCdec SDK can return LCEVC_Error if the enhancement data is wrong. This change improves the lcevcdec element to check for those errors and stop the pipeline when that happens. Part-of: 2025-06-04 17:56:39 +0900 Seungha Yang * sys/d3d11/gstd3d11decoder.cpp: d3d11decoder: Use interlace info in input caps ... instead of relying on only parsed values from bitstream. Part-of: 2025-06-04 17:55:51 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Use interlace info in input caps ... instead of relying on only parsed values from bitstream. Part-of: 2025-06-04 03:49:19 +0900 Seungha Yang * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvh265dec.cpp: nvdec: Use interlace info in input caps ... instead of relying on only parsed values from bitstream. Also parses HEVC specific interlace information Part-of: 2025-03-05 15:51:05 +0530 raghu447 * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gstfacedetectortensordecoder.c: * gst/tensordecoders/gstfacedetectortensordecoder.h: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/meson.build: tensordecoder: add facedetector tensor decoding support Part-of: 2025-06-02 00:59:52 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Fix negative position handling Negative positions should be cropped out Part-of: 2025-06-01 23:38:27 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: d3d12compositor: Fix negative position handling Negative positions should be cropped out Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4249 Part-of: 2025-06-01 22:55:53 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: d3d12compositor: Fix critical warnings compositor will record rendering commands using multiple threads (i.e., blending commands are recoded using thread pool, and background one is recorded on aggregate thread). And there can be temporary refcount increase (so not writable). Updates fence once all rendering commands have been submitted. Part-of: 2025-06-01 22:50:30 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp: d3d12converter: Fix fallback upload process Fixing typo Part-of: 2025-05-30 12:41:06 +0300 Sebastian Dröge * gst/bayer/gstrgb2bayer.c: rgb2bayer: Use gst_structure_has_name() instead of g_str_equal() for simplicity Part-of: 2025-05-30 12:40:42 +0300 Sebastian Dröge * gst/bayer/gstbayer2rgb.c: bayer2rgb: Use gst_structure_has_name() instead of strcmp() for clarity Part-of: 2025-05-30 12:33:09 +0300 Sebastian Dröge * gst/bayer/gstbayer2rgb.c: bayer2rgb: Fix RGB stride calculation This fixes a regression introduced in 4c92d4096e9. Part-of: 2025-05-16 13:32:08 +0200 Thibault Saunier * ext/closedcaption/misc.h: general: Stop checking `G_HAVE_GNUC_VARARGS` now that we depend on c99 Cleaning up a bit the code now that we can rely on C99 which specifies varargs for macros. Part-of: 2025-05-28 20:59:24 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkinstance.c: vulkan: add best practices validation feature It can be disabled in run-time via the environment variable VK_KHRONOS_VALIDATION_VALIDATE_BEST_PRACTICES=false Part-of: 2025-05-28 20:39:12 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkinstance.c: vulkan: remove vkDebugReportMessage() loading Since it's not used. Part-of: 2025-05-28 20:13:07 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkinstance.c: vulkan: use VK_EXT_debug_utils if available Nowadays VK_EXT_debug_report is considered deprecated and it's recommended to replace it it VK_EXT_debug_utils, which offer a way to ignore messages considered false positives. The approach is to try the extension first, if available at compilation time, if not or if it fails to load, VK_EXT_debug_report fallbacks. Part-of: 2025-05-30 00:07:25 +0900 Seungha Yang * sys/d3d12/gstd3d12dxgicapture.cpp: d3d12screencapturesrc: Fix desktop handle leak Calling CloseDesktop() on a handle that is currently in use will fail. Close the handle after current desktop handle change Part-of: 2025-05-29 14:30:42 +0300 Sebastian Dröge * gst/dvbsuboverlay/gstdvbsuboverlay.c: dvbsuboverlay: Actually make use of subtitle running time instead of using PTS Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4446 Part-of: 2025-05-27 13:47:27 -0400 Daniel Morin * gst-libs/gst/webrtc/rtpsender.c: rtpsender: fix 'priority' GValue get/set - 'priority' is declared as enum, we need to use g_value_[get|set]_enum() Part-of: 2025-05-21 10:10:25 -0400 Doug Nazar * gst/mpegtsdemux/tsdemux.c: tsdemux: Ensure AC3 descriptor is long enough before accessing Part-of: 2025-05-21 10:03:09 -0400 Doug Nazar * ext/wpe/gstwpesrcbin.cpp: * gst/rist/gstristsink.c: * gst/sdp/gstsdpsrc.c: gstreamer: Ensure we free the template Part-of: 2025-05-26 19:07:22 +0300 Sebastian Dröge * gst-libs/gst/play/gstplay.c: play: Improve stream selection - Unset stream ids if a collection does not contain them - Automatically select a default stream of a type if the stream type is enabled but no stream is selected yet when receiving the stream collection - Warn if there's a collection update via streams-selected and if there are unexpected streams being selected, or actually selected streams not being found - Improve debug output a bit Among other things this also makes sure that we don't forget a selected stream id when disabling a track so that when enabling it again later the same one can be enabled again. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4344 Part-of: 2025-05-27 00:03:05 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: nvencoder: Fix GstNvEncTask leak on non-flow-ok return Part-of: 2025-05-26 23:17:15 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: nvencoder: Fix GstVideoCodecFrame leak on non-flow-ok return ... and use gst_video_encoder_release_frame() to drop frame instead of gst_video_encoder_finish_frame() Part-of: 2025-05-24 14:42:32 -0400 Nicolas Dufresne * gst/codecalpha/gstalphacombine.c: alphacombine: Fix seeking after EOS The alpha_eos state was not being reset on flush-stop, as a side effect flushing seek after EOS did not work. Fixes #4442 Part-of: 2025-05-26 17:20:05 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12memory.cpp: d3d12memory: Allow set_fence() only against writable memory Setting a fence to memory should only be allowed on the side that modified that memory or has the right to modify it Part-of: 2025-05-26 18:25:58 +0900 Seungha Yang * gst-libs/gst/d3d12/meson.build: d3d12: Enable GIR for MSVC build as well cerbero issue should be fixed by https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/1824 Part-of: 2025-05-26 18:24:01 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12memory.h: d3d12memory: Make D3D12 map flags inspectable GIR scanner does not seem to be able to infer integer value Part-of: 2025-05-23 16:02:43 -0300 L. E. Segovia * gst/bayer/gstbayerorc-dist.c: * gst/bayer/gstbayerorc-dist.h: * gst/fieldanalysis/gstfieldanalysisorc-dist.c: * gst/fieldanalysis/gstfieldanalysisorc-dist.h: * gst/gaudieffects/gstgaudieffectsorc-dist.c: * gst/gaudieffects/gstgaudieffectsorc-dist.h: * gst/videofilters/gstscenechangeorc-dist.c: * gst/videofilters/gstscenechangeorc-dist.h: * meson.build: orc: Update pregenerated files Fixes -Wtype-limits on gstbayer.orc when emulating convuuslw. Regenerated Orc files use OrcOnce, which increases the minimum version to 0.4.34. See https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/212 (ORC_MIN) See https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/238 (AVX2 convussql) See https://gitlab.freedesktop.org/gstreamer/orc/-/commit/8a86d517530ce79c0ae47e37d768107c57ab31c4 (OrcOnce) Part-of: 2025-05-23 13:04:43 -0300 L. E. Segovia * scripts/update-orc-dist-files.py: orc: Remove references to gst-indent-1.0 These are automatically handled by pre-commit now. Part-of: 2025-03-30 01:43:33 -0400 Doug Nazar * tests/check/elements/dash_mpd.c: dash: mpdclient: Re-enable test now that mpdclient is fixed Part-of: 2025-03-30 01:41:10 -0400 Doug Nazar * ext/dash/gstmpdclient.c: dash: mpdclient: Don't pass terminating NUL to adapter libxml2 will complain if it detects any characters after the valid XML, including a NUL byte. Part-of: 2025-05-23 09:16:00 +0200 Jan Schmidt * sys/applemedia/vtenc.c: vtenc: Use strlcpy instead of strncpy Silences a compiler warning, and there's no cross-platform consideration as this plugin is apple-only Part-of: 2025-05-21 20:29:06 +0530 Nirbheek Chauhan * meson.options: meson: Add a monorepo-wide qt-method option and yield to it Part-of: 2025-05-21 20:23:01 +0530 Nirbheek Chauhan * ext/qt6d3d11/meson.build: * meson.options: * tests/examples/qt6d3d11/meson.build: meson: Fix qt detection for qt6d3d11 plugin This now matches the code for the qml6gl plugin. Part-of: 2025-05-20 22:32:36 +0900 Seungha Yang * gst-libs/gst/d3d12/meson.build: d3d12: Generate gir file Prerequisite for rust binding Part-of: 2025-05-22 19:12:03 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12device.cpp: * gst-libs/gst/d3d12/gstd3d12memory.cpp: d3d12: Fix docs annotations Part-of: 2025-05-14 20:07:52 +0200 Robert Mader * gst-libs/gst/wayland/gstwlvideoformat.c: wayland: Remove custom format mapping As of Gst >= 1.24 we can just use GstVideoInfoDmaDrm APIs. Note that SHM formats match DRM ones with only two exceptions. No functional changes intended (for backporting) apart from supporting a few more formats - those present in video-info-dma.c but missing in the removed mapping. Part-of: 2025-05-16 05:02:37 -0400 Olivier Crête * ext/tflite/meson.build: tflite: Also look for C symbols in libtensorflow-lite For some builds, there isn't a separate C library such as some Yocto builds of tflite. Part-of: 2025-05-09 20:19:27 -0400 Olivier Crête * ext/tflite/VX/vsi_npu_custom_op.h: tflite: Make VSI header build in C code Part-of: 2025-04-06 12:05:48 -0400 Olivier Crête * ext/tflite/gsttflite.c: * ext/tflite/gsttfliteedgetpuinference.c: * ext/tflite/gsttfliteedgetpuinference.h: * ext/tflite/gsttfliteinference.c: * ext/tflite/gsttfliteinference.h: * ext/tflite/meson.build: * meson.options: tflite: Add Coral EdgeTPU inference element Part-of: 2024-03-09 13:42:22 -0300 Denis Shimizu * ext/meson.build: * ext/tflite/README.md: * ext/tflite/VX/vsi_npu_custom_op.cc: * ext/tflite/VX/vsi_npu_custom_op.h: * ext/tflite/gstml.h: * ext/tflite/gsttflite.c: * ext/tflite/gsttfliteinference.c: * ext/tflite/gsttfliteinference.h: * ext/tflite/meson.build: * ext/tflite/modelinfo.c: * ext/tflite/modelinfo.h: * meson.options: tflite: Add TensorFlow Lite element A new element wrapping the LiteRT (aka TensorFlow Lite) inference engine. It currently supports only CPU. Co-authored-by: Daniel Morin Co-authored-by: Denis Shimizu Part-of: 2024-11-22 21:32:18 -0500 Olivier Crête * gst-libs/gst/analytics/gsttensor.c: * gst-libs/gst/analytics/gsttensor.h: tensor: Add helper function to stringify a tensor data type Part-of: 2025-05-19 20:38:56 +0900 Seungha Yang * gst-libs/gst/d3d12/meson.build: d3d12: Fix gstreamer-full subproject build with gcc Since default option "cpp_std=c++14" is not applied automatically in case that gstreamer is used as a meson subproject, specify cpp_std option explicitly Part-of: 2025-05-13 08:20:53 -0400 Doug Nazar * tests/check/elements/audiovisualizer.c: audiovisualizer: Change test to use native endian audio format Part-of: 2025-05-13 17:35:14 +0300 Jordan Petridis * tests/check/gst-plugins-bad.supp: bad: Add more variants for an srt suppression Followup to 087cb87d27e268d55a8d152690870ac4a2b3e166 These are some more variants of the same issue we already suppressed in the commit above. Part-of: 2025-05-12 16:30:10 +0300 Jordan Petridis * gst-libs/gst/opencv/meson.build: opencv: import as system dep Part-of: 2025-05-12 16:29:48 +0300 Jordan Petridis * gst/bayer/gstbayer2rgb.c: bad: Avoid gcc false positive about variable initialization In gstbayer2rgb the dtmp always gets initialized when we check for bayersrc16. Part-of: 2025-05-14 14:36:49 -0400 Doug Nazar * gst/videoframe_audiolevel/gstvideoframe-audiolevel.c: videoframe-audiolevel: Switch to GST_AUDIO_NE() Part-of: 2025-05-14 14:36:01 -0400 Doug Nazar * ext/musepack/gstmusepackdec.c: musepack: Switch to GST_AUDIO_NE() Part-of: 2025-05-13 19:37:59 -0400 Doug Nazar * gst/transcode/gsturitranscodebin.c: uritranscodebin: Free various props before being set Part-of: 2025-05-13 19:35:58 -0400 Doug Nazar * gst/transcode/gsttranscodebin.c: transcodebin: Free various props before being set Also disable setting filters more than once. Part-of: 2025-05-13 19:34:59 -0400 Doug Nazar * gst-libs/gst/vulkan/gstvkwindow.c: vulkan: Free various props before being set Part-of: 2025-05-13 19:23:53 -0400 Doug Nazar * gst-libs/gst/transcoder/gsttranscoder.c: transcoder: Free various props before during cleanup Part-of: 2025-05-13 19:15:21 -0400 Doug Nazar * gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.c: * gst-libs/gst/player/gstplayer.c: * gst-libs/gst/transcoder/gsttranscoder.c: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkoperation.c: * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/webrtc/rtptransceiver.c: * sys/applemedia/videotexturecache-gl.m: * sys/applemedia/videotexturecache-vulkan.mm: * sys/d3d11/gstd3d11dxgicapture.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11winrtcapture.cpp: * sys/va/gstvadecoder.c: * sys/va/gstvaencoder.c: * sys/va/gstvafilter.c: * sys/webview2/gstwebview2object.cpp: all: Annotate *_set_property() contructor only props without free Properties that are marked constructor only aren't required to be freed before g_value_dup_*() as they can only be called once during construction. Part-of: 2025-05-13 01:40:57 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Workaround for NVIDIA crash on resolution change Recent NVIDIA driver seems to crash on resolution change if ID3D12VideoDecoder and ID3D12VideoDecodeCommandList are reused. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4415 Part-of: 2025-05-12 18:27:06 -0400 Olivier Crête * tests/check/elements/h264parse.c: h264parse test: Ensure avc3 caps include a codec_data The avc3 caps without a codec_data are just totally invalid Part-of: 2025-05-08 19:20:13 -0400 Olivier Crête * gst/videoparsers/gsth264parse.c: h264parse: Require codec_data when receiving stream-format=avc or avc3 It's not really possible to safely interpret the content afterwards if it's missing. Even for AVC3, the codec_data doesn't need to contain a SPS/PPS, but it still needs to be present to tell downstream elements about the size of the nal unit length field. Part-of: 2025-05-08 19:16:13 -0400 Olivier Crête * gst/videoparsers/gsth264parse.c: h264parse: Never output stream-format=avc/avc3 caps without codec_data It's not possible to interpret further buffers without knowing the nal_length_size field, so avc1/avc3 caps without the codec_data aren't valid, don't push them out. Part-of: 2025-05-12 16:40:05 -0400 Olivier Crête * tests/check/elements/h264parse.c: h264parse test: Send PPS in SPS parsing test Without the PPS, the codec_data can not be created Part-of: 2025-02-25 22:53:30 +0900 Seungha Yang * sys/nvcodec/gstnvjpegenc.cpp: * sys/nvcodec/gstnvjpegenc.h: * sys/nvcodec/plugin.c: nvjpegenc: Add autogpu mode element Similar to nvautogpu{h264,h265,av1}enc, adding auto gpu select mode element Part-of: 2025-02-25 21:22:46 +0900 Seungha Yang * sys/nvcodec/gstnvjpegenc.cpp: nvjpegenc: Use stream-ordered alloc if requested If user requested stream-ordered allocation, use async alloc/free methods Part-of: 2025-04-10 11:22:29 +0530 Santosh Mahto * gst-libs/gst/analytics/gsttensormeta.c: gstanalytics: Add transform function to copy the tensor meta Part-of: 2025-05-05 17:38:08 -0400 Daniel Morin * gst/tensordecoders/gstclassifiertensordecoder.c: analytics: change tensor-id and use new API - tensor-id changed to match tensor-id-registry at https://github.com/collabora/tensor-id-registry - Use new GstTensorMeta API to get tensor. Part-of: 2025-02-24 11:15:29 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gstclassifiertensordecoder.c: * gst/tensordecoders/gstclassifiertensordecoder.h: * gst/tensordecoders/gsttensordecoders.c: * gst/tensordecoders/meson.build: tensordecoder: add general classifier tensor-decoder - Classification output is more standard compare to other tensor-decoder. - This tensor-decoder implement a standard classification tensor-decoder. Part-of: 2025-05-02 15:46:26 +0200 Alexander Slobodeniuk * gst/removesilence/gstremovesilence.c: removesilence: canonicalize property names Part-of: 2025-05-02 10:08:31 +0200 Alexander Slobodeniuk * ext/opencv/gsthanddetect.cpp: handdetect: canonicalize property names Part-of: 2025-05-02 08:56:19 +0200 Alexander Slobodeniuk * ext/aes/gstaesdec.c: * ext/chromaprint/gstchromaprint.c: * ext/iqa/iqa.c: * ext/openal/gstopenalsink.c: * ext/openal/gstopenalsrc.c: * ext/opencv/gstcvtracker.cpp: * ext/opencv/gsthanddetect.cpp: * ext/opencv/gstsegmentation.cpp: * ext/qroverlay/gstbaseqroverlay.c: * ext/qroverlay/gstdebugqroverlay.c: * ext/sndfile/gstsfsrc.c: * ext/spandsp/gsttonegeneratesrc.c: * ext/x265/gstx265enc.c: * gst-libs/gst/mse/gstsourcebuffer.c: * gst-libs/gst/transcoder/gsttranscoder-signal-adapter.c: * gst-libs/gst/uridownloader/gstfragment.c: * gst/accurip/gstaccurip.c: * gst/proxy/gstproxysrc.c: * gst/removesilence/gstremovesilence.c: * sys/bluez/gsta2dpsink.c: * sys/bluez/gstavdtpsink.c: * sys/bluez/gstavdtpsrc.c: * sys/directshow/dshowvideosink.cpp: * sys/directshow/gstdshowvideosrc.cpp: * sys/directsound/gstdirectsoundsrc.c: * sys/dvb/gstdvbsrc.c: * sys/fbdev/gstfbdevsink.c: * sys/kms/gstkmsallocator.c: properties: add G_PARAM_STATIC_STRINGS where missing "Hold on, I know you need to generate the registry, but let me just create copies of all those strings first", Framework whispered Part-of: 2025-05-08 19:23:54 +0900 Seungha Yang * tests/examples/cuda/cudamemory-sync.c: * tests/examples/cuda/meson.build: examples: cuda: Fix build with old CUDA SDK Some symbols are not available in old cuda headers. Use our stub headers instead Part-of: 2025-05-08 19:18:32 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudanvrtc.cpp: cuda: Fix runtime PTX compile Handle extra option args Part-of: 2025-03-11 15:02:03 +0100 Pablo García * ext/curl/gstcurlbasesink.c: curl: use CURL_SOCKET_BAD to ensure cross-platform Solves this error in Windows build: ../ext/curl/gstcurlbasesink.c:1154:14: error: comparison of unsigned expression in '< 0' is always false [-Werror=type-limits] 1154 | if (curlfd < 0) { Part-of: 2025-05-05 17:51:55 +0000 L. E. Segovia * ext/curl/gstcurlfilesink.c: * ext/curl/gstcurlhttpsink.c: * ext/curl/gstcurlsmtpsink.c: curl: Fix build with MSVC See https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/1740#note_2895537 Part-of: 2025-04-17 15:41:05 -0400 Xavier Claessens * docs/plugins/gst_plugins_cache.json: * gst/unixfd/gstunixfdallocator.c: * gst/unixfd/gstunixfdallocator.h: * gst/unixfd/gstunixfdsink.c: * gst/unixfd/meson.build: * tests/check/elements/unixfd.c: unifxfdsink: Add an property to allow copying By design, unixfd is meant to be used for zero-copy and failing when the data is not FD based memory is wanted to help debug pipelines. Though, there exists cases, notably with RTP payloader and demuxers, where its not possible to get all the data into FD memory through allocation queries. To allow using unixfd for these cases, introduce a property on the unixfdsink that enable copying the non FD data into freshly allocated memfd. Co-authored-by: Nicolas Dufresne Part-of: 2025-03-27 16:48:36 +0100 Víctor Manuel Jáquez Leal * docs/plugins/gst_plugins_cache.json: * gst/meson.build: * gst/y4m/gsty4mdec.c: * gst/y4m/gsty4mdec.h: * gst/y4m/meson.build: * meson.options: y4m: move y4mdec to good to have a single y4m plugin Part-of: 2025-04-26 03:20:42 +0200 Alexander Slobodeniuk * gst-libs/gst/webrtc/datachannel.c: webrtc: fix build with -DGST_REMOVE_DEPRECATED Part-of: 2025-03-15 20:56:17 +0100 Tim-Philipp Müller * meson.options: meson: rename meson_options.txt to meson.options Which is supported since Meson 1.1: https://mesonbuild.com/Release-notes-for-1-1-0.html#support-for-reading-options-from-mesonoptions Part-of: 2025-05-01 15:16:22 -0400 Olivier Crête * ext/lcevcdecoder/gstlcevcdec.c: lcevcdec: Use portable printf formatting macros This should fix 32bit builds Part-of: 2025-05-01 15:30:28 -0400 Olivier Crête * ext/lcevcencoder/gstlcevcencoder.c: lcevcenc: Use portable printf formatting macros This should fix 32bit builds Part-of: 2025-04-25 00:25:53 +0900 Seungha Yang * tests/examples/d3d12/d3d12remap-fisheye.cpp: * tests/examples/d3d12/meson.build: examples: Add d3d12remap example Adding a fisheye image transform example using d3d12remap element Part-of: 2025-04-24 00:36:03 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12compat.h: * sys/d3d12/gstd3d12remap.cpp: * sys/d3d12/gstd3d12remap.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add d3d12remap element Adding new element to support pixel remapping operation Part-of: 2025-04-20 23:33:16 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d12/gstd3d12converter-builder.cpp: * gst-libs/gst/d3d12/gstd3d12converter-private.h: * gst-libs/gst/d3d12/gstd3d12converter.cpp: * gst-libs/gst/d3dshader/converter-hlsl/PSMain_converter.hlsl: d3d12converter: Add support UV remap Adding OpenCV's cv::remap() like feature Part-of: 2025-02-08 22:44:47 +0800 Zhao, Gang * gst/midi/midiparse.c: midiparse: Quit parsing if error occurred Invalid midi files will crash gstreamer or let it enter infinite loop. Fixed it by quit parsing if error is encountered. Part-of: 2025-02-03 13:53:09 +0800 Zhao, Gang * gst/midi/midiparse.c: * gst/midi/midiparse.h: midiparse: Consider tempo change when calculating duration Midi meta event set tempo would change tempo. Should consider tempo change when calculating buffer PTS / duration. Save tempo change to a list and calculate duration according to the list. Fixed #4158 Part-of: 2025-04-03 02:24:13 +0530 Nirbheek Chauhan * tests/check/meson.build: gst-examples: Port all webrtc examples to libsoup-3.0 Also do some indent changes, and add `static` while we're at it. And move the libsoup wrap to 3.6.5, add nghttp2 wrap We need to disable libsoup 3.0 tests because they fail to build on Windows. Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1115 Part-of: 2025-04-01 17:58:14 +0530 Nirbheek Chauhan * tests/check/meson.build: meson: Add include_type: 'system' everywhere to squelch wrap warnings Wrap dependencies add a ton of warnings with the latest GCC in Fedora 42. Squelch them by specifying that these dependencies are not a part of the gstreamer project, and should be treated as system deps. libsoup needs some porting work for the bump, and vorbis/lame are already at their latest releases. Part-of: 2025-04-28 09:51:23 +0100 Philippe Normand * ext/meson.build: * ext/wpe2/gstwpe.h: * ext/wpe2/gstwpe2.cpp: * ext/wpe2/gstwpedisplay.cpp: * ext/wpe2/gstwpedisplay.h: * ext/wpe2/gstwpethreadedview.cpp: * ext/wpe2/gstwpethreadedview.h: * ext/wpe2/gstwpetoplevel.cpp: * ext/wpe2/gstwpetoplevel.h: * ext/wpe2/gstwpevideosrc.cpp: * ext/wpe2/gstwpevideosrc.h: * ext/wpe2/gstwpeview.cpp: * ext/wpe2/gstwpeview.h: * ext/wpe2/meson.build: * meson_options.txt: wpe2: New WPE plugin making use of the "WPE Platform API" Currently only a wpevideosrc2 element is exposed. GL and SHM buffer rendering are supported, navigation events too (touch is un-tested). Audio pads handling is not supported yet (that requires new WPE API). Part-of: 2025-04-25 16:36:37 -0400 Olivier Crête * gst-libs/gst/webrtc/nice/nice.c: nice: Add function to fill in ufrag/pwd of remote candidates Part-of: 2025-04-25 16:33:39 -0400 Olivier Crête * gst-libs/gst/webrtc/nice/nice.c: nice: Rename local candidate filling function Rename it, and avoid using it on remote candidates, as it will put the wrong value. Part-of: 2025-04-25 16:32:59 -0400 Olivier Crête * gst-libs/gst/webrtc/nice/nice.c: nice: Don't modify struct borrowed by signal The struct is owned by libnice, you can't safely modify it Part-of: 2025-04-26 19:28:56 +0200 Alexander Slobodeniuk * ext/bs2b/gstbs2b.c: * ext/gtk/gstgtkwaylandsink.c: * ext/srt/gstsrtsink.c: * ext/srt/gstsrtsrc.c: * ext/vulkan/vkcolorconvert.c: * ext/vulkan/vkdownload.c: * ext/vulkan/vkimageidentity.c: * ext/vulkan/vkoverlaycompositor.c: * ext/vulkan/vkshaderspv.c: * ext/vulkan/vkupload.c: * ext/vulkan/vkviewconvert.c: * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/transportreceivebin.c: * ext/webrtc/transportsendbin.c: * gst/accurip/gstaccurip.c: * gst/netsim/gstnetsim.c: * gst/rist/gstristrtpdeext.c: * gst/rist/gstristrtpext.c: * gst/rist/gstristsink.c: * gst/rist/gstristsrc.c: * gst/rist/gstroundrobin.c: * sys/amfcodec/gstamfav1enc.cpp: * sys/amfcodec/gstamfh264enc.cpp: * sys/amfcodec/gstamfh265enc.cpp: * sys/applemedia/avfvideosrc.m: * sys/applemedia/avsamplevideosink.m: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: * sys/uvcgadget/gstuvcsink.c: * tests/check/elements/test_http_src.c: elements: use set_static_metadata when it's allowed Those strings are nice but CPU doesn't want to copy them Part-of: 2025-04-18 15:21:59 -0400 Daniel Morin * tests/check/libs/analyticsmeta.c: test:analytics: add more test on tracking mtd - Verify we can retrive tracking-mtd and its data Part-of: 2025-03-15 23:48:52 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Fix num_long_term_pics bound check As defined in the spec 7.4.7.1, calculates allowed maximum value of num_long_term_pics Fixes ZDI-CAN-26596 Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4285 Part-of: 2025-03-15 22:39:44 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Fix max_dec_pic_buffering_minus1 bound check Allowed max value is MaxDpbSize - 1 Part-of: 2025-04-24 07:48:12 +0200 Jochen Henneberg * sys/va/gstvah264enc.c: va: Fix H264 profile decision logic The current logic would choose 'baseline' profiles only in case that these profiles appear in the list first. Part-of: 2025-04-17 17:28:17 +0200 Stéphane Cerveau * sys/va/gstvaav1enc.c: vaav1enc: fix mem leaks in _av1_decide_profile Part-of: 2025-04-15 16:46:23 +0200 Stéphane Cerveau * sys/va/gstvavp9enc.c: vavp9enc: fix mem leaks in _vp9_decide_profile Part-of: 2025-04-23 09:28:16 +0300 Sebastian Dröge * sys/aja/plugin.cpp: aja: Use the correct location of the AJA NTV2 SDK in the docs Also there is no longer a proprietary version of it. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4381 Part-of: 2025-04-21 22:59:18 +0200 Jakub Adam * sys/va/gstvavpp.c: vapostproc: fix wrong video orientation after restarting the element After READY -> NULL -> READY state change, the configured video orientation didn't get applied on the new GstVaFilter instance. Resettig prev_direction to default value in update_properties ensures gst_va_filter_set_orientation() isn't inadvertently skipped. Part-of: 2025-04-14 18:24:52 +0300 Sebastian Dröge * ext/x265/gstx265enc.c: x265enc: Add bitrate tags to the output Based on the same code in x264enc. Part-of: 2020-03-23 13:45:46 +0000 jan vermaete * ext/opencv/gstmotioncells.h: motioncells: fix typo in header comment Part-of: 2025-04-17 04:40:12 -0600 Jordan Yelloz * gst-libs/gst/mse/gstsourcebuffer.c: gstsourcebuffer: Reverted ownership change for append method Part-of: 2025-04-18 00:45:07 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Log buffer QPC position and status flags Log all infos of IAudioCaptureClient::GetBuffer Part-of: 2025-04-09 13:47:54 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/gstwebrtcstats.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/webrtc_fwd.h: * tests/check/elements/webrtcbin.c: webrtc: stats: Improve spec compliance for ICE candidate stats We now fill the foundation, related-address, related-port, username-fragment and tcp-type fields. Part-of: 2025-04-17 11:15:08 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: doc: Update cache for plugins automatically picks NV16_10LE40 Part-of: 2023-11-06 15:19:33 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2format.c: * sys/v4l2codecs/gstv4l2format.h: * sys/v4l2codecs/linux/videodev2.h: v4l2codecs: Add Rockchip 8bit/10bit 422 formats This enable NV16 and NV16_10LE40 formats. These formats are produced by notably rkvdec driver. Part-of: 2023-11-06 15:16:41 -0500 Nicolas Dufresne * gst/interlace/gstinterlace.c: video: Add 10bit 422 NV16_10LE40 format Similar to NV12_10LE40, this is a 422 variant. This format is also named NV20 (20bit per pixels) in other stack and is produced by rkvdec decoder. Co-authored-by: Sebastian Fricke Part-of: 2025-02-25 15:50:42 +0100 Jan Alexander Steffens (heftig) * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Read prog-map[PMT_ORDER_] for PMT order key Right now the prog-map's meaning of `PMT_%d` is overloaded: - PMT_ is used to look up the PID for the PMT. - PMT_ is used to look up ordering keys for streams in the PMT. This is not a problem in practice because program numbers and PES PIDs shouldn't overlap. Still, it's quite the wart in the API. Provide "PMT_ORDER_%d" as an unambiguous way of specifying ordering keys. See: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1510#note_2790022 Part-of: 2025-04-16 21:17:07 +0900 Seungha Yang * gst-libs/gst/d3d12/gstd3d12converter.cpp: d3d12converter: Fix cropping when automatic mipmap is enabled Update vertex buffer and viewport of extra shader pipeline as well Part-of: 2025-04-15 16:28:38 -0400 Daniel Morin * tests/check/libs/analyticsmeta.c: test: add test for tensor-meta - Verify we can add a tensor-meta to a buffer - Verify we can get a tensor from a tensor-meta Part-of: 2025-04-10 09:58:57 -0400 Daniel Morin * gst-libs/gst/analytics/gsttensormeta.c: * gst-libs/gst/analytics/gsttensormeta.h: analytics: add more convenient API to retrieve tensor `gst_tensor_meta_get_by_id (meta,id)' is more convenient then retrieving the tensor index using `gst_tensor_meta_get_index_from_id()` followed by `gst_tensor_meta_get ()`. Part-of: 2025-04-10 15:44:54 -0400 Daniel Morin * docs/plugins/gst_plugins_cache.json: * gst/tensordecoders/gstssdobjectdetector.c: tensordecoders: updating element classification - `TensorDecoder` is clashing with media decoder which cause decodebin use it. Replacing with `Tensordecoder` to avoid clash Part-of: 2025-04-09 16:19:54 -0400 Daniel Morin * tests/check/libs/analyticsmeta.c: test: add test for gstanalytics utility - IoU test Part-of: 2025-04-09 20:36:40 -0400 Daniel Morin * gst-libs/gst/analytics/analytics.h: * gst-libs/gst/analytics/gstanalytics_image_util.c: * gst-libs/gst/analytics/gstanalytics_image_util.h: * gst-libs/gst/analytics/meson.build: analytics: Move IoU calculation to gstanalytics lib Calculating intersection-of-union (IoU) is a very common operation used by tensor-decoder handling tensors from vision models. Having this in a library will improve maintainability and ease of writing tensor-decoder. - Post-fix _uint: We might eventually want to handle different datatype that we woule post-fix with _type Part-of: 2025-04-12 15:02:38 +0900 Andrew Yooeun Chun * sys/v4l2codecs/plugin.c: v4l2codecs: fix typos in the documentation Part-of: 2025-01-10 14:34:54 +0100 Stéphane Cerveau * ext/vulkan/vkh265dec.c: vkh265dec: add main-10 support Part-of: 2025-01-10 14:30:54 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkformat.c: vkformat: add NV12 10 bits support Part-of: 2025-04-10 14:23:59 +0200 Carlos Bentzen * gst-libs/gst/codecs/gsth266decoder.c: h266decoder: fix leak parsing SEI messages Part-of: 2025-04-08 15:08:11 -0400 Detlev Casanova * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: v4l2codecs: Unref the frame before leaving on error In h264, h265 and mpeg2, make sure that dec_submit_bitstream() doesn't leak a frame when dec_ensure_output_buffer() fails. Part-of: 2025-04-08 09:30:31 -0400 Detlev Casanova * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: v4l2codecs: av1,vp9: Use temporary variable for buffer This makes the end_picture() function handle the frame in the same way as in vp8, which also fixes a frame leak when gst_buffer_pool_acquire_buffer() fails. Part-of: 2025-04-09 09:01:22 -0400 Xavier Claessens * sys/va/meson.build: Revert "va: h266 requires libva 2.22.0" This reverts commit 8c017c79c5736c9e45e635df210e08550287646d. 1.22 was the correct pkg-config version. It's only the subproject version that was wrong. Since we bumped libva.wrap to 2.22 version, h266 is now always available when using the subproject. Part-of: 2025-04-07 17:45:28 -0400 Xavier Claessens * sys/va/meson.build: va: h266 requires libva 2.22.0 Part-of: 2025-04-07 18:37:01 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/gstwebrtcstats.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/webrtc_fwd.h: * tests/check/elements/webrtcbin.c: Revert "webrtc: stats: Increase spec compliance for ICE candidate stats" This reverts commit 4718fc9be72ccbbb9278c9abe7d72106e161aebf. Part-of: 2025-04-07 18:36:39 +0100 Philippe Normand * gst-libs/gst/webrtc/ice.h: Revert "webrtc: Add missing Since markers to new ICE API" This reverts commit 601c772447b0bada8e54d097088b8ea51ecba09a. Part-of: 2025-04-04 12:18:24 +0200 Guillaume Desmottes * gst/codecalpha/gstalphacombine.c: alphacombine: unblock when alpha sink is eos If the alpha sink receives EOS while the other thread was waiting for a alpha buffer it was stuck waiting forever. Part-of: 2025-04-02 09:58:26 +0200 Guillaume Desmottes * gst/codecalpha/gstalphadecodebin.c: * sys/v4l2codecs/gstv4l2codecalphadecodebin.c: * sys/va/gstvacodecalphadecodebin.c: alphadecodebin: use a multiqueue instead of a couple of queues Fix gapless playback as queues are no longer stopped after the first eos. Co-authored-by: Nicolas Dufresne Fix #4165 Part-of: 2024-11-27 23:12:18 +0100 Jakub Adam * gst/unixfd/gstunixfdsrc.c: unixfdsrc: fix allocating FD memory with nonzero offsets The element should allocate GstFdMemory large enough to fit incoming memory's size plus its potential offset. Fixes "gst_memory_resize: assertion 'size + mem->offset + offset <= mem->maxsize' failed". Fixes an issue reproducible on Raspberry Pi 4 that results in a garbled image on the receiver's end: gst-launch-1.0 libcamerasrc ! unixfdsink socket-path=/tmp/socket gst-launch-1.0 unixfdsrc socket-path=/tmp/socket ! autovideosink Part-of: 2025-04-03 13:43:55 +1100 Matthew Waters * gst-libs/gst/webrtc/ice.h: webrtc: Add missing Since markers to new ICE API Part-of: 2025-03-26 14:00:33 +0000 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/gstwebrtcstats.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/webrtc_fwd.h: * tests/check/elements/webrtcbin.c: webrtc: stats: Increase spec compliance for ICE candidate stats We now fill the foundation, related-address, related-port, username-fragment and tcp-type fields. Part-of: 2025-03-26 10:38:06 +0000 Philippe Normand * ext/webrtc/gstwebrtcstats.c: * tests/check/elements/webrtcbin.c: webrtc: stats: Fill data-channel transport stats Part-of: 2025-02-15 11:41:57 +0000 Philippe Normand * gst-libs/gst/webrtc/nice/nice.c: * gst-libs/gst/webrtc/nice/niceutils.h: webrtc: nice: Add niceutils The gst_webrtc_nice_get_candidate_server_url() function is going to be used for stats generation purposes and also from the upcoming get_selected_candidate_pair implementation. Part-of: 2025-02-15 11:15:31 +0000 Philippe Normand * gst-libs/gst/webrtc/nice/nice.c: webrtc: nice: Make use of nice_candidate_type_to_string This API was added in libnice 0.1.19 and we currently require 0.1.20. Part-of: 2025-02-15 11:14:30 +0000 Philippe Normand * gst-libs/gst/webrtc/nice/nice.c: webrtc: nice: Remove unused libnice utilities Part-of: 2025-03-30 13:04:12 +0300 Razvan Grigore * ext/webrtc/gstwebrtcbin.c: webrtcbin: add missing warning for caps missmatch This helps debug cases when the remote is offerer and m-line does not match with already existing transceivers. In this case, it will create new ones with sendrecv direction without any warning. Similar with code from _create_answer_task Part-of: 2025-03-26 01:33:57 +0900 Seungha Yang * ext/closedcaption/gsth265reorder.c: * gst-libs/gst/codecparsers/gsth265parser-private.h: * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: * gst-libs/gst/codecs/gsth265decoder.c: h265parser: Make gst_h265_parser_link_slice_hdr public ... and updating h265decoder/h265ccinserter to match the changed gst_h265_parser_link_slice_hdr method Part-of: 2025-03-26 01:23:45 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth264parser.h: h264parser: Store associated parameter set id Make h264parser and h265parser consistent Part-of: 2025-03-26 01:13:47 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: h265parser: Store PPS id in slice header Part-of: 2025-03-04 21:56:39 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstobjectdetectionoverlay.c: analyticsoverlay: add filled-box mode - Add filled-box-mode property, when set region where detection is happening is filled Part-of: 2025-04-03 16:30:52 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: bad: Update va docs, adding new elements Part-of: 2025-04-04 12:54:27 -0400 Olivier Crête * sys/va/gstvacodecalphadecodebin.h: * sys/va/gstvafilter.c: * sys/va/gstvavpp.c: * sys/va/meson.build: va: Add since markers Part-of: 2025-04-04 13:20:35 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: * sys/va/gstvaav1enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvavp8enc.c: * sys/va/gstvavp9enc.c: va: Remove GstVaFeature marking as a plugin API It's part of the libgstva library and it's documented there, no need to duplicate it as it confuses hotdoc. Part-of: 2025-04-03 17:39:45 -0400 Olivier Crête * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvavp8dec.c: * sys/va/gstvavp9dec.c: va: Add doc section for vah26xlpenc and codecalpha element Part-of: 2025-04-03 16:31:30 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: bad: Update wpesrc docs Part-of: 2025-04-03 17:45:57 -0400 Olivier Crête * ext/wpe/gstwpevideosrc.cpp: wpevideosrc: Fix typo in doc Part-of: 2025-04-03 16:22:08 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: bad: Update qsv docs Part-of: 2025-04-04 13:20:09 -0400 Olivier Crête * sys/qsv/gstqsvdecoder.cpp: * sys/qsv/gstqsvencoder.cpp: qsv: Add since marker to device-path property Part-of: 2025-04-03 16:07:20 -0400 Olivier Crête * docs/plugins/gst_plugins_cache.json: * ext/onnx/gstonnx.c: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: bad: Add onnxinference to the docs Part-of: 2025-04-01 16:10:52 +0530 Nirbheek Chauhan * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/icestream.c: docs: Fix GstWebRTCICE* class documentation IceStream is not an actual object, it's GstWebRTCICEStream Some `Returns:` annotations were improperly formatted and not taking effect. Part-of: 2024-09-10 01:13:25 +0200 Michael Grzeschik * sys/uvcgadget/gstuvcsink.c: * sys/uvcgadget/gstuvcsink.h: * sys/uvcgadget/uvc.c: uvcsink: Respond to control requests with proper error handling The complete handling on the control interface is currently dead. We return with EOPNOTSUPP for the caller to know that a response to such requests is not valid. The host however may ask control interface why these control requests were not available. For this the UVC_VC_REQUEST_ERROR_CODE_CONTROL is used. As an overall exception for the control interface we just always return 0x06 as an response which is representing "not implemented". This patch is a necessary feature to properly pass the UVC Functionality Test of the USB3CV Compliance Software. Fixes: 69c17461392d ('uvcgadget: Properly implement GET_INFO control responses') Part-of: 2025-03-31 18:54:28 +0200 Piotr Brzeziński * sys/applemedia/avfvideosrc.m: avfvideosrc: Guess reasonable framerate values for some 3rd party devices For some third-party devices macOS sometimes reports silly framerates, like 750003/6250 instead of 120/1. To avoid users having to exactly pecify those values, we instead report the closest reasonable value in caps. If it ends up being chosen, the additional logic in setDeviceCaps() will reverse that process and pass the actual supported value back to AVF, as most often the rounding causes us to fall just outside the accepted threshold. Part-of: 2025-03-07 09:06:18 +0100 Jochen Henneberg * tests/check/elements/camerabin.c: camerabin: Ensure that test record pipeline does not see caps change Depending on the system load the test 'video_capture_with_tags' may fail or not. Reason is that 'videotestsrc' may emit a buffer before the final caps negotiation on the recording pipeline has happened after dynamic linking. In that case there would be a caps change and because videorate does no longer drop old buffers and caps on change but pushes duplicates if required qtmux will notice a caps change and fail to link. The problem is a synchronization problem in 'camerabin' which became obvious with the changed behaviour of 'videorate'. Part-of: 2025-03-31 21:56:51 +0900 Seungha Yang * ext/closedcaption/gsth264ccextractor.c: * ext/closedcaption/gsth265ccextractor.c: h264ccextractor,h265ccextractor: Handle gap with unknown pts Fixing critical warngins gst_event_new_gap: assertion 'GST_CLOCK_TIME_IS_VALID (timestamp)' failed Part-of: 2025-03-27 15:38:42 +0100 Guillaume Desmottes * gst/codecalpha/gstalphadecodebin.c: codecalpha: name both queues Make it easier to debug from logs. Part-of: 2025-03-30 19:44:22 -0400 Doug Nazar * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c: vulkan/wayland: Init debug category before usage Part-of: 2025-03-28 12:19:20 +0000 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/webrtcsdp.c: * tests/check/elements/webrtcbin.c: webrtcbin: Make mid optional in offers and answers The mid attribute is not strictly required. Two new tests cover this change, they remove the mid and group attributes from the SDP offers and answers. Part-of: 2025-03-29 19:03:13 +0200 Artem Martus * ext/webrtc/gstwebrtcbin.c: * tests/check/elements/webrtcbin.c: webrtcbin: ensure RTX entry for all formats Properly implement RFC 4588 by ensuring each media format has its own RTX payload type with unique 'apt' parameter, rather than only mapping the first format. Part-of: 2025-03-30 13:10:42 +0300 Sebastian Dröge * sys/va/gstvacaps.c: va: Skip codecs that report maximum width or height lower than minimum This happens on F42 with the JPEG decoders for some reason and trying to actually use them with any resolution simply gives a "resolution not supported" error. A minimum of 64 is correctly reported though and trying to create caps with an int range of [64, 0] gives critical warnings. Part-of: 2025-03-14 22:03:53 -0400 Doug Nazar * sys/bluez/gsta2dpsink.c: a2dpsink: Free various props during cleanup Part-of: 2025-03-14 22:01:44 -0400 Doug Nazar * sys/aja/gstajasink.cpp: * sys/aja/gstajasrc.cpp: aja: Free various props during cleanup Part-of: 2025-03-14 22:01:05 -0400 Doug Nazar * gst/librfb/gstrfbsrc.c: * gst/librfb/rfbdecoder.c: rfbsrc: Free various props before being set & during cleanup Part-of: 2025-03-14 21:59:13 -0400 Doug Nazar * gst/frei0r/gstfrei0r.c: frei0r: Free various props before being set Part-of: 2025-03-14 21:58:14 -0400 Doug Nazar * gst/faceoverlay/gstfaceoverlay.c: faceoverlay: Free various props during cleanup Part-of: 2025-03-14 19:38:54 -0400 Doug Nazar * ext/wayland/gstwaylandsink.c: waylandsink: Free various props before being set Part-of: 2025-03-14 19:38:03 -0400 Doug Nazar * ext/qroverlay/gstdebugqroverlay.c: * ext/qroverlay/gstqroverlay.c: qroverlay: Free various props before set & during cleanup Part-of: 2025-03-14 19:37:39 -0400 Doug Nazar * ext/openal/gstopenalsrc.c: openalsrc: Free various props before being set Part-of: 2025-03-14 19:35:49 -0400 Doug Nazar * ext/lcevcencoder/gstlcevcencoder.c: lcevcencoder: Free various props before during cleanup Part-of: 2025-03-14 19:25:48 -0400 Doug Nazar * ext/dash/gstmpdadaptationsetnode.c: * ext/dash/gstmpdperiodnode.c: * ext/dash/gstmpdrepresentationbasenode.c: * ext/dash/gstmpdrepresentationnode.c: * ext/dash/gstmpdsegmenttemplatenode.c: * ext/dash/gstmpdsegmenturlnode.c: dash: Free various props before set & during cleanup In addition several members were being freed via xmlFree() even though being created via g_value_dup_string(). Switch to g_free(). Part-of: 2025-03-14 19:22:20 -0400 Doug Nazar * ext/curl/gstcurlhttpsrc.c: curlhttpsrc: Free various props before set & during cleanup Part-of: 2025-03-14 19:14:43 -0400 Doug Nazar * ext/gtk/gstgtkwaylandsink.c: * gst-libs/gst/mse/gstmediasourcetrack.c: * gst-libs/gst/va/gstvadisplay_drm.c: * sys/directshow/dshowdeviceprovider.cpp: * sys/directsound/gstdirectsounddevice.c: * sys/mediafoundation/gstmfdevice.cpp: * sys/uvch264/gstuvch264deviceprovider.c: * sys/wasapi/gstwasapidevice.c: * sys/wasapi2/gstwasapi2device.c: * sys/winks/ksdeviceprovider.c: all: Annotate *_set_property() contructor only props without free Properties that are marked constructor only aren't required to be freed before g_value_dup_string() as they can only be called once during construction. Part-of: 2025-03-26 15:32:05 +0200 Sebastian Dröge * ext/dash/gstdashsink.c: dashsink: Make sure to use a non-NULL pad name when requesting a pad from splitmuxsink If the caller passed in "audio_%u" instead of a concrete pad name into gst_element_request_pad_simple() then the pad name will be NULL. In that case use the pad template name for requesting the pad from splitmuxsink. Part-of: 2025-03-23 00:19:50 +0100 Jan Tojnar * gst-libs/gst/analytics/meson.build: gst-analytics: Add gst-video to Requires in pkg-config `gst/analytics/analytics.h` includes `gst/analytics/gstanalyticssegmentationmtd.h`, which in turn `gst/video/video-info.h` but `gst-video-1.0` was only listed in `Requires.private` field of `gst-analytics-1.0.pc`. This would cause projects linking against `gst-analytics-1.0.pc` to fail to find the headers when using alternative interpretation of pkg-config specification that only considers private dependencies for include path during static builds, such as the case e.g. on Nix. https://gitlab.freedesktop.org/pkg-config/pkg-config/-/issues/28 Part-of: 2025-02-18 14:12:49 -0700 Jordan Yelloz * docs/plugins/gst_plugins_cache.json: mse: Updated documentation cache Part-of: 2025-02-18 13:08:38 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmsesrc-private.h: * gst-libs/gst/mse/gstmsesrc.c: gstmsesrc: Added locking, improved seek implementation The position is no longer duplicated across each pad and pad's segment. The position is now only updated if it changes in the direction of playback so that quickly repeated forward seeks do not cause the stream to seek from 0. Reverse playback is expressly disallowed and an unnecessary extra flush of track when seeking was removed. A background task was added to periodically check on the current position and the media source's buffering levels to keep the ready state up-to-date. The source buffer no longer needs to trigger this update, it will happen whenever the element state is READY or higher. Finally, added proper error reporting when failing to push a buffer and improved debug logging. Part-of: 2025-02-18 13:08:38 -0700 Jordan Yelloz * gst-libs/gst/mse/gstappendpipeline.c: gstappendpipeline: Added name to background task Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstsourcebufferlist.c: gstsourcebufferlist: Added locking Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstsourcebuffer.c: gstsourcebuffer: Added locking, re-worked track feed task Since the sample map/track buffer now iterates samples in batches corresponding to each coded frame group, the logic to feed the tracks is simpler. For media without delta frames, it's a special case where the coded frame groups are all size 1. Now, all it does is skip data until the keyframe group containing the seek point is found, then feed the track queue with the current sample and all future samples until EOS or cancellation. Resync of the iterator when the underlying track is modified is not necessary because the outer loop attempts to resume feeding track data from where it was interrupted in case of modification. Also, the track feed task struct now holds a weak ref to its parent source buffer to allow the task to cancel itself in any situation where the source buffer is destroyed before the task is shut down. Media parsing activity in the append pipeline no longer triggers ready state recalculation on the msesrc since the msesrc now has a background task that updates the ready state periodically when it's active which is more efficient in cases where there is a high volume of samples being processed by the media parser. Finally, updated to adapt to track buffer API changes. Some functions previously passed in a lower bound for sample timestamps. Now the source buffer is responsible for clipping samples within a desired range of time. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstsourcebuffer.c: gstsourcebuffer: Added name to track feed task Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstsourcebuffer.c: gstsourcebuffer: Moved misplaced documentation comment Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrackbuffer.c: * tests/check/libs/mse.c: gstmediasourcetrackbuffer: Improved buffered ranges calculation Now when the buffered list is requested, the tolerance for merging two ranges when there's a small gap between them is MAX(0.1sec, max frame duration * 2). Previously it was hardcoded to 0.01sec. The specification suggests that it could be something like the max frame duration * 2. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrackbuffer-private.h: * gst-libs/gst/mse/gstmediasourcetrackbuffer.c: gstmediasourcetrackbuffer: Added method to wait until any new data The source buffer currently has a thread for each track that feeds the track with all data in the track buffer until EOS is reached. Each pass over the track buffer currently waits for the EOS to appear when it's done iterating the track buffer which is too restrictive. When the source buffer reaches the end of the track buffer, it should wait for any new data to be processed -- not just an EOS -- then check for cancellation if the deadline expires without new data. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrackbuffer-private.h: * gst-libs/gst/mse/gstmediasourcetrackbuffer.c: gstmediasourcetrackbuffer: Removed start time filtering from sample iterator This adapts to the changes to the sample map since gst_iterator_filter() is a simpler way for callers to clip the returned samples to a desired time range. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrackbuffer-private.h: * gst-libs/gst/mse/gstmediasourcetrackbuffer.c: gstmediasourcetrackbuffer: Removed unused code Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrack-private.h: * gst-libs/gst/mse/gstmediasourcetrack.c: * tests/check/libs/mse.c: gstmediasourcetrack: Removed unused try_push() method Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcetrack.c: * tests/check/libs/mse.c: gstmediasourcetrack: Ref the sample inside push() method This simplifies cleanup for the caller since the push method already cleans up the sample when it is consumed by playback or if it fails to be added to the queue. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasourcesamplemap-private.h: * gst-libs/gst/mse/gstmediasourcesamplemap.c: * tests/check/libs/mse.c: gstmediasourcesamplemap: Re-worked sample iteration and removal Both operations now work on coded frame groups (GOPs). This simplifies queueing of video data. There is rarely any point of dealing with individual video frames when iterating in DTS order, it's most meaningful to decode or delete whole coded frame groups at a time, so the sample map will now do that when iterating by DTS. When iterating in PTS order, the existing behavior is preserved since that is used for informational purposes, not media processing. A new private boxed type for coded frame groups was added to provide each data item to the source buffer. Another possible solution would be creation of a new GstSample representing the whole group by merging all the samples in a group into a single sample containing a GstBufferList. Also, start time filtering was removed from the API since gst_iterator_filter() can be used by callers to achieve the same result. Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasource.c: gstmediasource: Added locking Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmediasource.c: gstmediasource: Added caller-allocates annotation to get_live_seekable_range() Part-of: 2025-02-18 13:08:37 -0700 Jordan Yelloz * gst-libs/gst/mse/gstmselogging-private.h: * gst-libs/gst/mse/gstmselogging.c: gstmselogging: Added helper function to get nicknames of enum values Part-of: 2025-03-25 03:04:52 +0900 Seungha Yang * ext/closedcaption/gstcodecccinserter.c: codecccinserter: Fix event double free Need to steal GstVideoCodecFrame.events before unref Part-of: 2025-03-25 03:02:57 +0900 Seungha Yang * ext/closedcaption/gsth265reorder.c: h265ccinserter: Fix broken SPS/PPS link Apply the same h265decoder change to h265ccinserter Part-of: 2025-03-25 02:09:49 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Fix broken SPS/PPS link Because of 2 pass nalu handling in decoder, link between slice header and SPS/PPS can be broken at the second pass if SPS/PPS got updated after slice header in the same AU Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4323 Part-of: 2025-03-25 02:41:29 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser-private.h: * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Add private method to update slice header Adding a method to allow linking already parsed slice header with parser's own sps/pps Part-of: 2025-03-25 01:58:42 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Allow updating SPS/PPS without parent parameter set h265parser defers linking parameter sets until slice header is parsed. Thus valid SPS/PPS parsed by h265parser can have no linked parent parameter set. Apply this behavior to gst_h265_parser_update_{sps,pps} too Part-of: 2025-03-21 11:41:11 +0900 Dongyun Seo * gst-libs/gst/vulkan/gstvkformat.c: vkformat: fix build error fix build error when VK_KHR_format_feature_flags2 is not defined. Co-authored-by: Victor Jaquez vjaquez@igalia.com Part-of: 2025-03-07 16:05:20 -0500 Eric * docs/plugins/gst_plugins_cache.json: * ext/sctp/gstsctpdec.c: * ext/sctp/gstsctpdec.h: * ext/sctp/gstsctpenc.c: * ext/sctp/sctpassociation.c: * ext/sctp/sctpassociation.h: * ext/webrtc/webrtcsctptransport.c: webrtc: fix hangup when duplicate sctp association IDs chosen Fixes an issue where the webrtcbin would hangup when finalizing due to the sctpenc hanging up when finalizing. This occurred when the webrtcbin chose to use a sctp association ID already in use. The sctpenc would fail to reach the paused state, but startup a task anyways that was never stopped. This commit modifies the behavior to not choose sctp association IDs randomly, and instead only choose one that is free. It also prevents the sctpenc from starting up that task if it fails to reach the paused state. Fixes: #4188 Part-of: 2025-03-13 16:27:44 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: * ext/vulkan/vksink.c: vulkan: fix memory leak at dynamic registering Also it cleans up a bit the code. Part-of: 2025-01-22 15:02:03 +0100 Marc Leeman * gst-libs/gst/cuda/meson.build: meson.build: test for and link against libatomic if it exists It's needed on some platforms for some subset (or all) atomic operations and checking for the cases when it's actually needed is quite complex. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4300 Part-of: 2025-03-13 17:22:12 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Reset restart flag when creating session in set_format() Part-of: 2025-03-06 17:23:11 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtenc: Avoid deadlocking when changing properties on the fly VT supports changing properties on the fly, and old code attempted to support that. Perhaps 10 years ago that worked, but these days VTSessionSetProperty will always wait for the output callback to finish before proceeding. This means that it's very prone to deadlocking, as property setters will take the object lock, the callback thread will take the stream lock, and the main (streaming) thread attempts to take both, resulting in a deadlock. New version uses something similar to other encoders (e.g. x264enc) - changing a property when a session is already created will just flag it to be reconfigured upon the next encode call. This is done in similar fashion to how restarting the session upon an error works. Part-of: 2025-03-12 19:20:58 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaav1enc.c: * sys/va/gstvacaps.c: * sys/va/gstvacompositor.c: * sys/va/gstvadeinterlace.c: * sys/va/gstvaencoder.c: * sys/va/gstvafilter.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvajpegenc.c: * sys/va/gstvavp9enc.c: * sys/va/gstvavpp.c: va: remove unused headers Part-of: 2025-03-08 12:07:11 +0000 Philippe Normand * gst/codecalpha/gstalphacombine.c: alphacombine: De-couple flush-start/stop events handling There is no guarantee that any FLUSH_STOP event is preceded by a FLUSH_START. The element now stops flushing once it has received a FLUSH_STOP on all its sink pads. Fixes #4174 Part-of: 2025-03-10 13:14:07 -0300 Thibault Saunier * ext/svthevcenc/gstsvthevcenc.c: * gst/librfb/gstrfbsrc.c: * gst/y4m/gsty4mdec.c: * sys/nvcodec/gstcudamemorycopy.c: * sys/va/gstvapluginutils.c: video: Give better names to buffer pools Making debugging simpler Part-of: 2025-03-12 13:59:45 +0100 Tim-Philipp Müller * README.md: * RELEASE: * meson.build: Back to development in main branch after 1.26.0 Part-of: === release 1.26.0 ===