=== release 1.24.9 === 2024-10-30 20:33:30 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.9 2024-10-29 11:29:05 +0100 Edward Hervey * ext/srt/gstsrtobject.c: srt: Don't attempt to reconnect on authentication failures This is a fatal issue which can't be recovered Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1550 Part-of: 2024-10-14 11:26:20 +0200 Emil Ljungdahl * ext/webrtc/gstwebrtcbin.c: webrtcbin: Clean up bin elements when datachannel is removed When a datachannel within a session is removed after proper close, reference to the error_ignore_bin elements of the datachannel appsrc/appsink were left in webrtcbin. This caused the bin-objects to be left and not freed until the whole webrtc session was terminated. Among other things that includes a thread from the appsrc. Part-of: 2024-09-24 13:55:39 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/wayland/gstwlvideoformat.c: * gst-libs/gst/wayland/gstwlvideoformat.h: wayland: Add NV15 support This format, which maps to NV12_10LE40 in GStreamer is produced by Rockchip video decoders when decoding 4:2:0 10 bit content. Part-of: 2024-10-22 23:41:13 +0900 Seungha Yang * gst-libs/gst/codecs/gstvp8decoder.c: vp8decoder: Fix resolution change handling Do not store resolution in set_format() so that resolution change can be detected on keyframe as intended. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3928 Part-of: 2024-10-25 16:37:15 +0300 Sebastian Dröge * gst/rtmp2/gstrtmp2sink.c: rtmp2sink: Initialize base_ts / last_ts with the actual first observed timestamp Initializing it with zero can falsely trigger the overflow / underflow detection code if the first observed timestamp is a big integer. Part-of: 2024-09-30 15:51:04 +0300 Sebastian Dröge * gst/mpegtsdemux/mpegtspacketizer.c: mpegtsdemux: Handle PTS/DTS wraparound with ignore-pcr=true The wraparound handling code assumes that the PCR gets updated regularly for being able to detect wraparounds. With ignore-pcr=true that was not the case and it stayed initialized at 1h forever. To avoid this problem, update the fake PCR whenever the PTS advanced by more than 5s, and also detect wraparounds in these fake PCRs. Problem can be reproduced with $ gst-launch-1.0 videotestsrc pattern=black ! video/x-raw,framerate=1/5 ! \ x264enc speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! \ tsdemux ignore-pcr=true ! fakesink which restarts timestamps at 0 after around 26h30m. Part-of: 2024-10-26 11:42:48 +0300 Sebastian Dröge * gst-libs/gst/play/gstplay.c: * gst-libs/gst/play/gstplay.h: play: Improve play message API inconsistencies * Check for the correct message type when parsing * Use correct field name for warning message details Part-of: 2024-05-28 04:14:15 +0530 Nirbheek Chauhan * gst-libs/gst/va/meson.build: * meson.build: * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpputil.c: * sys/msdk/meson.build: msdk: Fix libdrm dependency detection and usage drm_fourcc.h should be picked up via the pkgconfig include, not the system includedir directly. Also consolidate the libdrm usage in va and msdk. All this allows it to be picked up consistently (via the subproject, for example). Part-of: 2024-05-27 18:50:23 +0530 Nirbheek Chauhan * gst-libs/gst/va/meson.build: meson: Don't use fallback: kwarg for libva deps This will cause a fallback even when the `va` option is `auto`, not giving the user a chance to provide the dependency via the system, and likely building this feature unnecessarily. Part-of: 2024-05-27 18:43:33 +0530 Nirbheek Chauhan * gst-libs/gst/va/gstvavideoformat.h: va: Fix libdrm include The libdrm/ prefix should not be used, it will be provided by the pkgconfig file. Also HAVE_LIBDRM is necessary. Part-of: 2024-10-23 14:28:30 +0200 Peter Stensson * gst/codectimestamper/gstcodectimestamper.c: * tests/check/elements/h264timestamper.c: codectimestamper: Fix gint wraparound in pts_compare_func The diff between compared timestamps might be outside the gint range resulting in wrong sorting results. This patch corrects that by comparing the timestamps and then returning -1, 0 or 1 depending on the result. Part-of: 2024-10-24 14:40:23 +0200 Andoni Morales Alastruey * sys/applemedia/vtdec.c: vtdec: add support for level 6 6.1 and 6.2 Part-of: 2024-10-11 11:58:37 -0400 Víctor Manuel Jáquez Leal * gst-libs/gst/codecparsers/gsth264bitwriter.c: * gst-libs/gst/codecparsers/gsth265bitwriter.c: h26xbitwriter: false have_space if aligning fails on aud Part-of: 2024-10-15 16:44:27 +0800 He Junyan * sys/va/gstvaav1enc.c: vaav1enc: Do not enable palette mode by default Palette mode should only be enabled only when we know that the content of the picture is simple. For example, only white letters on black screen in SCC mode. So, by default, we need to disable it. Part-of: 2024-09-27 18:01:53 +0200 Benjamin Gaignard * sys/kms/gstkmssink.c: kmssink: Add IMX-DCSS auto-detection Add IMX DCSS display controller into list of auto-detected modules. Part-of: 2024-10-09 12:32:34 -0400 Francisco Javier Velázquez-García * ext/srt/gstsrtsink.c: srtsink: Add guard for null error when SRT open fails Part-of: 2024-10-09 12:08:10 -0400 Francisco Javier Velázquez-García * ext/srt/gstsrtobject.c: srtsink: Register SRT listen callback before binding socket This change https://github.com/Haivision/srt/pull/2683 forces us to call `srt_listen_callback` before `srt_listen`. Part-of: 2024-10-11 12:07:27 -0400 Víctor Manuel Jáquez Leal * gst-libs/gst/codecparsers/gstav1bitwriter.c: * gst-libs/gst/codecparsers/gsth264bitwriter.c: * gst-libs/gst/codecparsers/gsth265bitwriter.c: codecparsers: add debug categories to bitwriters Part-of: 2024-10-09 17:16:46 -0400 Víctor Manuel Jáquez Leal * tests/check/elements/vapostproc.c: tests: va: fix vapostproc test for DMABuf Now it picks the first format in the template srcpad list and do the convertion. Also the format size is reduced because not all drives support 4K as DMABuf (radeonsi). Part-of: 2024-10-14 15:31:54 +0200 Stéphane Cerveau * gst/videofilters/gstscenechange.c: scenechange: fix memory leak A reference to the last buffer(oldbuf) was kept leading to a memory leak on stop. Part-of: 2024-10-13 23:04:58 +0530 Nirbheek Chauhan * gst-libs/gst/dxva/meson.build: meson: Explicitly use cpp_std=c++11 for dxva dxva is built unconditionally on all platforms where introspection is enabled, so let's fix the build on macOS so that introspection can be enabled there: https://gitlab.freedesktop.org/nirbheek/cerbero/-/jobs/65009118 Part-of: 2024-10-09 20:37:10 +0300 Jordan Petridis * tests/check/elements/lc3.c: tests/lc3: Allocate the same size for the buffer and the data Part-of: 2024-05-30 07:34:22 +0000 Weijian Pan * sys/applemedia/avfdeviceprovider.m: avfdeviceprovider: Fix caps leak Part-of: 2024-09-24 17:01:10 +0200 Hugues Fruchet * sys/kms/gstkmsallocator.c: kmsallocator: fix stride with planar formats This fixes a regression introduced by the merge request https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3801 The extrapolated stride was computed but not used, resulting in the same stride being applied to all planes. Part-of: 2024-09-19 12:12:53 +0200 Tim-Philipp Müller * meson.build: Back to development after 1.24.8 Part-of: === release 1.24.8 === 2024-09-19 12:01:21 +0200 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.8 2024-09-17 14:48:03 +0200 Benjamin Gaignard * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: h265: Minimize memory allocation Be smarter when allocating sink and source memory pools to reduce the memory footprint. Use gst_v4l2_decoder_get_render_delay() to know the need number of buffers for downstream element. Handle errors in case of memory allocation failures. Part-of: 2024-09-17 18:31:30 +0300 Sebastian Dröge * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Fix refcounting issue when selecting the best pad Part-of: 2024-09-11 08:40:42 +0300 Sebastian Dröge * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out This makes sure that if upstream has different latencies that we're still outputting buffers with increasining timestamps across the different streams unless buffers are arriving after the latency deadline. Part-of: 2024-09-05 22:07:24 +0300 Sebastian Dröge * gst-libs/gst/adaptivedemux/gstadaptivedemux.c: video: Don't overshoot QoS earliest time by a factor of 2 By setting the earliest time to timestamp + 2 * diff there would be a difference of 1 * diff between the current clock time and the earliest time the element would let through in the future. If e.g. a frame is arriving 30s late at the sink, then not just all frames up to that point would be dropped but also 30s of frames after the current clock time. Part-of: 2024-08-30 14:59:14 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwlshmallocator.c: * gst-libs/gst/wayland/gstwlshmallocator.h: wayland: Set a debug category for the shm allocator None was set, which meant the debug was associated with default. Part-of: 2024-09-09 16:27:43 -0400 Nicolas Dufresne * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwlcontext.c: * gst-libs/gst/wayland/gstwlcontext.h: wayland: Fix ABI break in WL context type name While transforming the internals of waylandsink into a library, the context type name was accidentally changed, causing an ABI break. Change it back to its original (as used by the libgstgl), and add support for the misnamed version as a backward compatibility measure. Part-of: 2023-07-18 17:34:54 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: set cur_caps to upstream selected caps If the UVC gadget announces multiple formats in the descriptors the uvcsink doesn't select the actual format but let's the UVC hosts select the format. If the GStreamer pipeline is started before a UVC host selected the format, upstream decides on a format until the UVC host has decided. In this case, the current format needs to be set based on the caps from the caps event to be able to detect if the format selection by the UVC host requires a format change on the GStreamer pipeline. Part-of: 2024-09-05 15:04:33 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: skip comparison with prev_caps if they are not set The uvcsink may be put into the READY state to start listening for UVC requests. Therefore, the UVC host may set a streaming format before the GStreamer pipeline is started and the uvcsink received a caps event. In this case, prev_caps will be NULL. If the EVENT_CAPS has not been received, skip the check if the format needs to be changed, since the sink will be started with the format selected by the UVC host, anyway. Part-of: 2024-09-03 17:00:09 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtenc: Restart encoding session when certain errors are detected Sometimes under certain loads, VT can error out with kVTVideoEncoderMalfunctionErr or kVTVideoEncoderNotAvailableNowErr. These have been reported to happen more often than usual if CopyProperty/SetProperty() is used close to the encode call. Both can be worked around by restarting the encoding session. These errors can be returned either directly from VTCompressionSessionEncodeFrame() or later in the encoding callback. This patch handles both scenarios the same way - a session restart is be attempted on the next encode_frame() call. If the error is returned immediately by the encode call, it's possible that some correct frames will still be given to the output callback, but for simplicity (+ because I wasn't able to verify this scenario) let's just discard those. In addition, this commit also simplifies the beach/drop logic in enqueue_buffer. Related bug reports in other projects: http://www.openradar.me/45889262 https://github.com/aws/amazon-chime-sdk-ios/issues/170#issuecomment-741908622 Part-of: 2024-09-06 10:51:01 +0200 Edward Hervey * gst-libs/gst/play/gstplay.c: gstplay: Name the different bus Makes it clearer when reading logs which one is which Part-of: 2024-09-02 18:25:56 +0900 Hou Qi * gst-libs/gst/play/gstplay.c: gstplay: check whether stream is seekable before seeking when state change If state is changing from playing to paused, and rate is reset to 1 which causes seek position is valid, current code will do seek for streams that are not seekable. So need to check whether stream is seekable before seeking. Part-of: 2024-08-29 12:01:30 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * tests/check/elements/webrtcbin.c: webrtcbin: Prevent crash when attempting to set answer on invalid SDP If the pending remote description has an invalid BUNDLE group _parse_bundle() triggers early return from _create_answer_task(), before ret has been initialized, so it needs to be checked before attempting to call gst_sdp_message_copy(). Part-of: 2024-08-21 13:23:36 +0100 Francis Quiers * docs/plugins/gst_plugins_cache.json: * ext/voamrwbenc/gstvoamrwbenc.c: voamrwbenc: fix list of bitrates Part-of: 2024-08-20 22:09:13 +1000 Jan Schmidt * gst-libs/gst/player/gstplayer.c: gstplayer: Check GstPlayerSignalDispatcher type Before trying to retrieve a GMainContext from a provided GstPlayerSignalDispatcher, check that it is actually GstPlayerGMainContextSignalDispatcher. If not, use the default GMainContext for dispatching signals via the adapter Part-of: 2024-08-21 09:19:39 +0200 Guillaume Desmottes * ext/wpe/gstwpesrcbin.cpp: wpe: fix gst-launch example wpesrc does not have num-buffers property but wpevideosrc does. Part-of: 2024-08-21 12:33:28 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.24.7 === release 1.24.7 === 2024-08-21 12:25:15 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.7 2024-08-19 12:39:21 +0200 Guillaume Desmottes * ext/wpe/gstwpethreadedview.cpp: wpe: initialize threading.ready before reading it Fixes Valgrind warning. Part-of: 2024-08-19 14:34:28 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: va: don't use GST_ELEMENT_WARNING in set_context() vmethod Since bins can set the context of their children elements, the set_context() vmethod shouldn't call bus messages post methods, since it locks the parent object, the bin, which might be already locked, leading to a deadlock. Fixes: #3706 Part-of: 2024-07-22 21:29:38 +0800 Qian Hu (胡骞) * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth265parser.c: * tests/check/libs/h264parser.c: h26xparse: bypass check for length_size_minus_one fix playback fail, when some file with length_size_minus_one == 2 According to the spec 2 cannot be a valid value, so that stream has a bad config record. but breaking the decoding because of that, perhaps is too much. and ffmpeg seem not check this Part-of: 2024-08-13 10:42:31 +0200 Víctor Manuel Jáquez Leal * sys/msdk/gstmsdkav1enc.c: * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkmpeg2enc.c: * sys/msdk/gstmsdkvc1dec.c: * sys/msdk/gstmsdkvp9enc.c: msdk: replace strcmp with g_strcmp0 Because strcmp doesn't handle NULL. Fixes: #3721 Part-of: 2024-08-07 19:14:26 +0100 Tim-Philipp Müller * docs/plugins/gst_plugins_cache.json: * ext/aom/gstav1enc.c: aom: av1enc: restrict allowed input width and height Restrict allowed input resolution to something sensible in light of libaom CVE-2024-5171. Part-of: 2024-08-06 22:48:16 +1000 Jan Schmidt * gst-libs/gst/webrtc/webrtc_fwd.h: webrtc: Add missing G_BEGIN/END_DECLS in header Fix using webrtc.h from C++ by adding the GLib begin/end decls markers around the header contents in webrtc_fwd.h Part-of: 2024-07-03 07:58:58 -0600 Jordan Yelloz * gst/videoparsers/gsth265parse.c: h265parse: Reject FD received before SPS A previous fix, a275e1e029e9b5d88be26b8304c9a162e4567346, is correct but was too permissive since it treats all un-matched NAL units the same as AU delimiters even though some other NAL unit types can be encountered in the processing loop. The problem this can cause is that some hardware decoders experience bad performance when handling FD units that precede the SPS. This change restores the original behavior for FDs so that they're ignored until the SPS is received and it preserves the codec conformance test gains that the fix has achieved. Part-of: 2024-07-26 17:13:10 +0200 Guillaume Desmottes * ext/rsvg/gstrsvgoverlay.c: rsvgoverlay: add debug category Part-of: 2024-07-29 16:48:02 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.24.6 === release 1.24.6 === 2024-07-29 16:41:37 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.6 2024-07-29 10:29:11 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: va: refactor dmabuf handle close Moved the close loop into a function guarded for non-win32 platforms. Part-of: 2024-07-28 02:01:24 +0900 Seungha Yang * sys/qsv/gstqsvav1enc.cpp: * sys/qsv/gstqsvh264enc.cpp: * sys/qsv/gstqsvh265enc.cpp: * sys/qsv/gstqsvjpegenc.cpp: * sys/qsv/gstqsvvp9enc.cpp: qsv: Fix critical warnings Fixing warnings GStreamer-CRITICAL **: 01:21:25.862: gst_value_set_int_range_step: assertion 'start < end' failed Although when QSV runtime reports a codec is supported, resolution query fails sometimes, espeically VP9 encoder case on Windows. Don't try to register an element if resolution query returned an error Part-of: 2024-07-27 02:18:45 +0530 Nirbheek Chauhan * ext/svtav1/gstsvtav1enc.c: svtav1enc: Fix segfault when flushing gst_video_encoder_get_oldest_frame() is nullable, and will signal that all frames are handled by returning NULL. Fixes #3650 Part-of: 2024-07-25 22:44:51 +1000 Jan Schmidt * gst-libs/gst/va/gstvaallocator.c: va: Fix dmabuf handle leaks Close dmabuf handles manually when they're not going to be passed into GStreamer FD memory, to avoid fd handle leaks. Part-of: 2024-07-24 22:22:03 +0200 Guillaume Desmottes * ext/qroverlay/gstbaseqroverlay.c: qroverlay: redraw overlay when caps changes The position needs to be updated as it depends of the video size. Part-of: 2024-07-24 22:21:41 +0200 Guillaume Desmottes * ext/qroverlay/gstbaseqroverlay.c: qroverlay: add some debug logs Part-of: 2024-07-24 09:16:03 +0200 tomaszmi <257184-tomaszmi@users.noreply.gitlab.freedesktop.org> * ext/avtp/gstavtpsink.c: avtp: Fixed Linux/Alpine 3.20 build Part-of: 2024-07-24 02:33:50 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudanvrtc.cpp: cuda: Fix runtime compiler loading with old CUDA tookit Fallback to PTX if CUBIN symbol is unavailable Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3685 Part-of: 2024-07-12 18:10:12 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: * tests/check/libs/vkvideodecode.c: vulkan: fix wrong stages or access in barriers Part-of: 2024-03-19 20:04:15 -0300 L. E. Segovia * ext/isac/meson.build: isac: Work around upstream having no shared library support for MSVC None of the symbols in webrtc-audio-coding-1 are marked with `__declspec(dllexport)`, rendering the library usable only if it was built with GCC/Clang. The only fix available (as the pulseaudio copy has not been updated with Google's upstream) is to ensure the fallback builds statically. Although this change will also affect webrtcdsp's dependency on webrtc-audio-processing-1, it does not break its compilation. Part-of: 2024-07-16 23:08:39 +0200 Robert Mader * sys/va/gstvabase.c: vabase: Stop aligning VideoInfo during DMABUF import Doing so resets the stride from the VideoMeta and it wasn't done before the commit below. While on it, drop the plane size check as we can't reliably predict the correct size when using DRM modifiers. Fixes: 89b0a6fa23 ("va: refactor buffer import") Part-of: 2024-07-17 12:45:31 +0200 Robert Mader * sys/va/gstvabase.c: vabase: Use correct VideoInfo during DMABUF import The changes to the VideoInfo, notably the stride from the VideoMeta, were lost. Avoid such mistakes by explicitly using the VideoInfo from drm_info. Fixes: 9f5b2c4e25 ("va: use GstVideoInfoDmaDrm when importing buffers") Part-of: 2024-07-17 23:44:09 +0530 Nirbheek Chauhan * sys/applemedia/avfdeviceprovider.m: * sys/applemedia/avfvideosrc.h: * sys/applemedia/avfvideosrc.m: avfdeviceprovider: Fix debug category initialization The device monitor calls into avfvideosrc functions without initializing the debug category, which causes multiple criticals. Part-of: 2024-07-15 12:44:52 +0200 Robert Mader * sys/va/plugin.c: va: Blocklist i965 driver for encoding The driver - AKA intel-vaapi-driver - has been unmaintained for four years now and encoding appears to be broken in various cases. As it's unlikely that the situation will improve, blocklist the driver for encoding. Decoding appears to be stable enough to keep it enabled. The driver can still be used by setting the `GST_VA_ALL_DRIVERS` env variable. Part-of: 2024-07-16 23:07:50 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: d3d12compositor: Fix transparent background mode with YUV output In case of YUV format without alpha channel, zero clear value for each channle will result in green color. Use calculated black background color with alpha=0 for transparent background mode instead. Part-of: 2024-07-16 20:38:41 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Fix transparent background mode with YUV output In case of YUV format without alpha channel, zero clear value for each channle will result in green color. Use calculated black background color with alpha=0 for transparent background mode instead. Part-of: 2024-07-03 22:57:58 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Update output frame duration when second field frame is discarded In case of an interlaced stream, if each field picture belongs to different GstVideoCodecFrame, updates output frame's duration based on discarded second field picture's timestamp information. Part-of: 2024-07-12 12:34:52 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvadisplay.c: vadisplay: fix minor version check Part-of: 2024-07-04 02:02:42 +0200 Robert Mader * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: Fix surface cropping for rotated streams The wp_viewport source rectangle is applied in surface-local coordinates after buffer_transform and buffer_scale. Therefore we need to swap width and height for 90/270 deg. rotations. This fixes playback of rotated videos such as portrait videos from mobile devices. See also: https://wayland.app/protocols/viewporter#wp_viewport Fixes: 0b648f9a2d ("waylandsink: Crop surfaces to their display width height") Part-of: 2024-07-04 22:49:38 +0900 Seungha Yang * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: d3d11converter: Fix runtime compiled shader code Restore mistakenly deleted code in a previous MR https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6803 Part-of: 2024-07-08 15:30:45 +0200 Ruben Gonzalez * ext/vulkan/vkh265dec.c: vkh265dec: Fix H.264 ref in logs Part-of: 2024-07-05 18:17:38 +0530 Taruntej Kanakamalla * tests/check/elements/lc3.c: lc3: remove bitstream comparison in the tests since the encoded output is changing based on version it does not make sense to check the output bitstream with a fixed bytearray since the version in the target might vary. So sticking to checking the number of output buffers and encoded frame size similar to the other tests Part-of: 2023-04-07 14:40:58 -0400 Chris Spoelstra * docs/plugins/gst_plugins_cache.json: * ext/srt/gstsrtobject.c: srtsrc: fix case fallthrough of authentication param Add missing breaks to two case statements. Also adds a missing lock of srtobject->element when getting the value of PROP_AUTHENTICATION. Part-of: 2024-06-26 16:09:26 +0200 Guillaume Desmottes * gst/rtmp2/rtmp/amf.c: rtmp2: guard against calling gst_amf_node_get_type() with NULL gst_amf_node_get_type() raises a CRITICAL if called with a NULL node. All callers were checking for this except those. Part-of: 2024-06-02 11:40:04 +0300 Jan Schmidt * ext/hls/m3u8.c: adaptivedemux: Fix handling closed caption streams Fix a typo "CLOSED_CAPTION" -> "CLOSED-CAPTION" and a broken if statement that always bailed out for closed captions Part-of: 2024-06-25 22:19:26 +1000 Jan Schmidt * ext/webrtcdsp/gstwebrtcdsp.cpp: webrtcdsp: Enable multi_channel processing Enable multi_channel processing in webrtc-audio-processing when the input or output has multiple channels. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3220 Part-of: 2024-06-24 16:00:45 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix redistribute latency spam Just a quick fix to only report the maximum noticed delay (measured by frames inside the encoder) instead of changing the reported latency every time the number there changes, which is way too often. Part-of: 2024-06-20 22:18:02 +0900 Seungha Yang * sys/d3d12/gstd3d12converter.cpp: d3d12converter: Make gamma remap work as intended Part-of: 2024-06-20 13:02:19 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.24.5 === release 1.24.5 === 2024-06-20 12:54:15 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.5 2024-06-18 09:10:16 +0200 Edward Hervey * gst/mpegtsdemux/mpegtspacketizer.c: tsdemux: Fix maximum PCR/DTS values * PTS/DTS are stored as 33 bit * PCR is 33bit multiplied by 300 Part-of: 2024-06-18 05:53:19 +0800 He Junyan * gst-libs/gst/codecparsers/gstav1parser.c: av1parse: Do not return error when expectedFrameId mismatch According to the SPEC: The frame id numbers (represented in display_frame_id, current_frame_id, and RefFrameId[ i ]) are not needed by the decoding process, but allow decoders to spot when frames have been missed and take an appropriate action. So we should just print out warning and should not return error in parser when mismatching. The decoder itself is already robust to handle the reference missing. Fixes #3622 Part-of: 2024-06-12 18:28:54 +0200 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Use GST_VIDEO_DECODER_ERROR instead of aborting when frame has an ERROR flag This was already being used in handle_frame() for errors that happen when queueing a frame for decoding, let's do the same when a frame is flagged with an error in the output callback. From quick testing, this makes seeking more reliable (previously, it would sometimes cause a decoding error and shut the whole decoder down due to GST_FLOW_ERROR). Also manually sets the max error count to actually stop processing if too many errors occur. Part-of: 2024-03-26 15:24:31 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Handle some errors without stopping the decoder ReferenceMissingErr is not critical and the simplest solution is to just ignore it. The frame has the FrameDropped flag set when it occurs, so we can just drop it as usual. BadDataErr is also not immediately critical, but in its case let's set the ERROR flag, so the output loop can use GST_VIDEO_DECODER_ERROR to count and error out if it happens too many times. Part-of: 2024-06-17 11:15:22 +0300 Sebastian Dröge * ext/aom/gstav1dec.c: av1dec: Don't treat decoding errors as fatal and print more error details Part-of: 2024-06-13 09:11:30 -0500 Zach van Rijn * gst/pcapparse/gstpcapparse.c: pcapparse: Avoid unaligned memory access Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3602 Part-of: 2024-05-31 13:07:51 +0200 Mathieu Duponchelle * gst/codectimestamper/gstcodectimestamper.c: codectimestamper: never set DTS to NONE If we want to avoid the DTS going backward, then we can set DTS to last_dts as a last resort. Log a warning in this case Part-of: 2024-06-07 23:09:54 -0700 Khem Raj * sys/uvcgadget/configfs.c: uvcgadget: Use g_path_get_basename instead of libc basename Musl does not implement GNU basename and have fixed a bug where the prototype was leaked into string.h [1], which resullts in compile errors with GCC-14 and Clang-17+ | sys/uvcgadget/configfs.c:262:21: error: call to undeclared function 'basename' ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] | 262 | const char *v = basename (globbuf.gl_pathv[i]); | | ^ Use glib function instead makes it portable across musl and glibc on linux [1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7a Part-of: 2024-06-10 13:11:19 +0300 Sebastian Dröge * ext/aom/gstav1enc.c: av1enc: Handle force-keyunit events properly by requesting keyframes Part-of: 2024-06-10 23:25:46 +0900 Seungha Yang * sys/d3d12/gstd3d12videosink.cpp: d3d12videosink: Disconnect window signal handler on dispose as intended Fixing typo Part-of: 2024-06-02 10:26:19 +0300 Sebastian Dröge * ext/dtls/gstdtlssrtpenc.c: dtlssrtpenc: Don't crash if no pad name is provided when requesting a new pad It is mandatory to provide a valid pad name for dtlssrtpenc. Part-of: 2024-05-30 01:30:58 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12memory.cpp: d3d12memory: Fix staging buffer alignment Not all GPUs can support arbitrary offset of D3D12_PLACED_SUBRESOURCE_FOOTPRINT when copying GPU memory between texture and buffer. Instead of calculating size/offset per plane, calculate the entire size and offsets at once. Part-of: 2024-05-29 18:54:18 +0900 Seungha Yang * sys/d3d12/gstd3d12h264enc.cpp: d3d12encoder: Do not print error log for not-supported feature gst_d3d12_result() will print message with ERROR level if failed. Use FAILED/SUCCEEDED macros instead, since not-supported feature is not a critical error Part-of: 2024-05-29 13:51:27 +0300 Tim-Philipp Müller * meson.build: Back to development after 1.24.4 === release 1.24.4 === 2024-05-29 13:44:50 +0300 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.4 2024-05-27 12:28:44 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/webrtcsdp.c: * ext/webrtc/webrtcsdp.h: * tests/check/elements/webrtcbin.c: webrtcbin: Allow session level setup attribute in SDP An SDP answer can declare its setup attribute at the session level or at the media level. Until this patch we were validating only the latter case and an assert was raised in the former case. Part-of: 2024-05-17 11:13:19 +0300 Sebastian Dröge * ext/dtls/gstdtlsconnection.c: dtlsconnection: Fix overflow in timeout calculation on systems with 32 bit time_t If a timeout of more than 4295s was scheduled, the calculation would overflow and a too short timeout would be used instead. Part-of: 2023-08-11 17:50:23 +0800 He Junyan * sys/kms/gstkmsallocator.c: kmssink: Do not close the DRM prime handle twice The prime_fds for multi planes may be the same. For example, on Intel's platform, the NV12 surface may have the same FD for the plane0 and the plane1. Then, the DRM_IOCTL_GEM_CLOSE will close the same handle twice and get an "Invalid argument 22" error the second time. Part-of: 2024-05-22 12:28:39 +0100 Daniel Stone * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/meson.build: wayland: Use wl_display_create_queue_with_name Wayland 1.23 and above allow us to attach names to an event queue, which are printed out when debugging. Do this to make the logs easier to read. Part-of: 2024-04-30 11:20:54 +0800 He Junyan * sys/va/gstvaav1enc.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: vabaseenc: delete the useless frame counter fields They are used to calculate the PTS and DTS before, no usage now. Part-of: 2024-04-30 11:12:05 +0800 He Junyan * sys/va/gstvabaseenc.c: vabaseenc: Do not set the min_pts Because all the va encoders improved their PTS/DTS algorithm, now it is impossible to generate minus DTS. So no underflow will happen and we do not need to set a 1000 hour offset now. Part-of: 2024-05-23 11:28:35 +0100 Backport Bot * tests/check/libs/d3d11device.cpp: * tests/check/meson.build: Revert "tests/d3d11: add concurrency test for gstd3d11device" This reverts commit 203f6b00d426b2ef296fbe8b6591e07b9d6f9b7e. Revert test that was added with reverted commit as well. Part-of: 2024-05-23 17:29:54 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: * tests/check/libs/d3d11device.cpp: Revert "d3d11device: protect device_lock vs device_new" This reverts commit 0cb12db96c0973e9e0534b7f25665c72b9fd29d4 (i.e. commit 926d5366b99b3498632a45147cfa329dbbf2cc30 on main). AcquireSRWLockExclusive seems to be acquiring lock in exclusive mode when the same lock is combined with write lock access. Reverting the commit because of this is unexpected behavior and unavoidable OS bug. Part-of: 2024-04-12 21:48:13 +0800 He Junyan * sys/va/gstvah265enc.c: vah265enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME bit set should be the sync point. So we should let it be an IDR frame to begin a new GOP, rather than just promote it to an I frame. Part-of: 2024-04-09 23:40:41 +0800 He Junyan * sys/va/gstvah264enc.c: vah264enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME bit set should be the sync point. So we should let it be an IDR frame to begin a new GOP, rather than just promote it to an I frame. Part-of: 2024-04-12 16:09:26 +0800 He Junyan * tests/examples/va/vaenc-dynamic-reconfigure.c: examples: vaenc-dynamic: support force key frame setting Part-of: 2024-05-03 22:57:57 +0800 He Junyan * sys/va/gstvah265enc.c: vah265enc: Fix a memory leak when destroying the object Part-of: 2024-05-03 12:08:19 +0800 He Junyan * sys/va/gstvah265enc.c: vah265enc: Use a FIFO queue to generate DTS The base parse will infer the DTS by itself, so we need to make DTS offset before PTS in order to avoid DTS bigger than PTS. We now use a FIFO queue to store all PTS and assign it to DTS by an offset. Part-of: 2024-05-02 14:18:16 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: * sys/va/gstvah264enc.c: vah264enc: Use a FIFO queue to generate DTS The base parse will infer the DTS by itself, so we need to make DTS offset before PTS in order to avoid DTS bigger than PTS. We now use a FIFO queue to store all PTS and assign it to DTS by an offset. Part-of: 2024-05-23 00:48:11 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Fix offset of subsampled planar formats Part-of: 2024-05-21 16:58:26 +0300 Sebastian Dröge * ext/aom/gstav1enc.c: av1enc: Use 1/90000 as timebase and don't use the framerate at all This mirrors the behaviour in vp8enc / vp9enc and is generally more useful than using any framerate from the caps as it provides some degree of accuracy if the stream doesn't have timestamps perfectly according to the framerate. Part-of: 2024-05-21 16:46:40 +0300 Sebastian Dröge * ext/aom/gstav1enc.c: * ext/aom/gstav1enc.h: av1enc: Fix last timestamp tracking so it actually works This behaves exactly the same as in vp8enc / vp9enc now. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3546 Part-of: 2024-05-15 15:56:37 -0500 Brad Reitmeyer * docs/plugins/gst_plugins_cache.json: * sys/nvcodec/gstnvh264dec.cpp: nvcodec: Accept progressive-high profiles for h264 Videos using progressive-high used to work on 1.16 before the parser added progressive-high. It looks like partial support was added to nvcodec in https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1634 but accidentally ommited gstnvh264dec Part-of: 2024-05-14 14:44:45 +0300 Sebastian Dröge * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Allow pads to have no caps until they receive their first buffer If the muxer times out because of the latency deadline it can happen that some pads have no caps yet. In that case skip creation of streams for these pads and create updated section tables once the first buffer arrives later. Part-of: 2024-05-09 17:11:59 +0300 Sebastian Dröge * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Correctly time out and mux anyway in live pipelines This makes sure that for sparse streams (KLV, DVB subtitles, ...) the muxer does not wait until the next buffer is available for them but times out on the latency deadline and outputs data. For non-live pipelines it will still be necessary for upstream to correctly produce gap events for sparse streams. Part-of: 2024-05-12 18:15:05 +0900 Seungha Yang * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Fix maximum QP value setting Fixing typo Part-of: 2024-04-15 13:38:15 +0200 Robert Mader * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: decoder: Reorder caps to prefer DMA_DRM ones Certain V4L2 fourccs don't (yet) have DRM counter parts, in which case we can't create DMA_DRM caps for them. This is usually the case for specific tilings, which are represented as modifiers for DMA formats. While using these tilings is generally preferable - because of e.g. lower memory usage - it can result in additional conversion steps when interacting with DMA based APIs such as GL, Vulkan or KMS. In such cases using a DMA compatible format usually ends up being the better option. Before the addition of DMA_DRM caps, this was what playbin3 ended up requesting in various cases - e.g. prefering NV12 over NV12_4L4 - but the addition of DMA_DRM caps seems to confuse the selection logic. As a simple and quite robust solution, assume that peers supporting DMA_DRM caps always prefer these and reorder the caps accordingly. In the future we plan to have a translation layer for cases where there is a matching fourcc+modifier pair for a V4L2 fourcc, ensuring optimal results. Part-of: 2024-05-04 11:56:05 +0300 Sebastian Dröge * gst-libs/gst/play/gstplay.c: * gst-libs/gst/player/gstplayer.c: play: Mention that gst_play_new() also initialized GStreamer Part-of: 2024-05-04 11:54:16 +0300 Sebastian Dröge * gst-libs/gst/play/gstplay.c: * gst-libs/gst/player/gstplayer.c: play: Initialize debug category and error quark in class_init Doing it in gst_play_new() means that bindings that directly call g_object_new() with the GType wouldn't end up initializing both. This affects at least the Python and GJS bindings. gst_init() is nonetheless only called from gst_play_new() once because calling it from class_init would likely lead to problems as that's called from somewhere in the middle of GObject. Part-of: 2024-05-07 10:35:26 +0200 Emil Pettersson * sys/applemedia/vtdec.c: vtdec: Fix deadlock when negotiating format change Part-of: 2024-05-07 11:18:10 +0200 Piotr Brzeziński * tests/check/elements/audiovisualizer.c: * tests/check/meson.build: audiovisualizer: Add simple pipeline unit test Creates pipelines with each of our visualizer elements and runs them with 20 buffers from audiotestsrc. Added after a completely broken (segfaulting) synaescope went unnoticed for a while. Part-of: 2024-05-06 20:50:21 +1000 Matthew Waters * ext/webrtc/gstwebrtcbin.c: webrtc: request-aux-sender, only sink floating refs Don't add an extra ref if non-floating as that ref will never be unreffed. gst_bin_add() is transfer floating (alias to transfer none). Fixes a leak when a non-floating ref was provided as a return value in the request-aux-sender signal. Part-of: 2024-05-04 20:08:49 +0900 Seungha Yang * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: * sys/d3d12/hlsl/PSMain_converter.hlsl: d3dshader: Fix gamma and primaries conversion pixel shader Fixing regression introduced by the commit of f52ecb960792257b7394a6dc3182b6747c902b5b Part-of: 2024-05-01 00:12:42 +0900 Seungha Yang * sys/qsv/gstqsvh264dec.cpp: * sys/qsv/gstqsvh265dec.cpp: qsvh264dec,qsvh265dec: Fix nalu leaks Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3514 Part-of: 2024-04-30 18:15:56 +0200 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix PAUSED->READY deadlock when output loop is running Makes sure the GST_PAD_STREAM_LOCK is not taken when pad is being deactivated. The lack of this was causing deadlocks when stopping the pipeline right after producing first buffers. Part-of: 2024-04-30 18:08:27 +0200 Stéphane Cerveau * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vkh26xdec: Fix stop memory leak The h26xdecoder 'stop' method was not called as the vulkan h26x class rewires the video decoder 'stop' base method to its own one. It was causing some memory leaks such as dangling parser and dpb in h26xdecoder base class. Part-of: 2024-04-30 00:36:59 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.24.3 Part-of: === release 1.24.3 === 2024-04-30 00:15:23 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.3 2024-04-29 18:24:36 +0100 Tim-Philipp Müller * tests/check/elements/unixfd.c: unixfd: disable flaky test_unixfd_segment for now It's a problem with the test, and a proper fix might require new API, so just disable it for now. 2024-04-22 15:03:56 +0800 He Junyan * sys/va/gstvah265enc.c: vah265enc: Set the correct buffer flag for output Part-of: 2024-04-22 14:44:53 +0800 He Junyan * sys/va/gstvah264enc.c: vah264enc: Set the correct buffer flag for output Part-of: 2024-04-21 14:55:31 +0800 Seungha Yang * sys/va/gstvabaseenc.c: vabaseenc: Fix frame leak on error path Part-of: 2024-04-21 14:48:02 +0800 He Junyan * sys/va/gstvah265enc.c: vah265enc: Do not touch the PTS of output frame 1. The PTS of all frames should not be changed. 2. Just update the DTS based on the PTS. For the frame which is not reordered, the DTS is equal to PTS. For frame which is reordered, the DTS is equal to previous DTS. For example: Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3] Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2] Part-of: 2024-04-21 12:51:31 +0800 He Junyan * sys/va/gstvah264enc.c: vah264enc: Do not touch the PTS of output frame 1. The PTS of all frames should not be changed. 2. Just update the DTS based on the PTS. For the frame which is not reordered, the DTS is equal to PTS. For frame which is reordered, the DTS is equal to previous DTS. For example: Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3] Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2] Part-of: 2024-04-28 23:37:55 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Fix d3d12 resource copy It was copying to self resource Part-of: 2024-04-19 00:30:47 +0800 He Junyan * sys/va/gstvabaseenc.c: vabaseenc: No need to call _finish_subframe() After vaav1enc is aligned to TU, there is no case that generates multi output for one input. Part-of: 2024-04-19 00:22:50 +0800 He Junyan * sys/va/gstvaav1enc.c: vaav1enc: Set the correct buffer flag for output Part-of: 2024-04-19 00:14:15 +0800 He Junyan * sys/va/gstvaav1enc.c: vaav1enc: Do not change the PTS/DTS of output frames The AV1 encoder does not reorder the frames, so there is no need to change the timestamp related meta data of output frames, just inheriting it from the input frames. Part-of: 2024-04-18 22:30:20 +0800 He Junyan * sys/va/gstvaav1enc.c: vaav1enc: Change the alignment of output to "tu" The current output alignment is "frame", which may cause some issues for PTS and DTS calculation. We now change the alignment to "tu", and this is also the alignment mode for av1enc and svtav1enc. Part-of: 2024-04-15 09:51:53 -0400 Xavier Claessens * gst/unixfd/gstunixfdsrc.c: unixfd: Close file descriptors on error After calling g_unix_fd_list_steal_fds() and before calling gst_fd_allocator_alloc(), we are responsible for closing those fds. Part-of: 2024-04-03 10:28:28 -0400 Xavier Claessens * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: * tests/check/elements/unixfd.c: unixfdsink: Take segment into account when converting timestamps Also rename `calculate_timestamp()` to `to_monotonic()` and `from_monotonic()` which better describe what it does. Part-of: 2024-04-03 13:17:01 -0400 Xavier Claessens * gst/unixfd/gstunixfdsrc.c: unixfd: Allow sending buffers with no memories There is no reason to not allow it, and it is useful for simple unit test. Part-of: 2024-04-24 15:44:41 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: disable derived all together for Mesa <23.3 First it derived mapping was disabled for P010 formats, but also there's an issue with interlaced frames. It would be possible to disable derived mapping only for interlaced (H.264 decoder and vadeinterlace) but it would spread the hacks along the code. It's simpler and contained to disable derived completely for Mesa <23.3 Fixes: #3450 Part-of: 2024-04-25 11:50:03 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvavideoformat.c: va: videoformat: use video library to get DRM fourcc Instead of duplicating the GStreamer format to DRM fourcc mapping, this patch uses the GstVideo library helpers. This duplicates the big O of looking for, since the two lists are traversed, but it's less error prone. Partially reverts commit 547f3e8622a39ce971c272f2c31eab8f1fdfbb45. Fixes: #3354 Part-of: 2024-04-17 18:37:30 +0900 Hou Qi * gst-libs/gst/wayland/gstwlwindow.c: wlwindow: free staged buffer when do gst_wl_window_finalize If waylandsink received buffer rate is high which causes frame drop, the cached staged buffer will be replaced when next buffer needs to be rendered and be freed after redraw. But there is chance to get memory leak if ended without redraw. So need to free staged buffer when do gst_wl_window_finalize(). Part-of: 2024-04-24 01:02:15 +0900 Haihua Hu * gst-libs/gst/wayland/gstwlwindow.c: wlwindow: clear configure mutex and cond when finalize Part-of: 2024-04-23 10:53:54 +0200 Edward Hervey * gst/mpegtsdemux/mpegtsbase.c: mpegtsbase: Fix Program equality check There was an issue with this equality check, which was to figure out what to do with PCR pids (whether they were part of the streams present or not) and whether we ignore PCR or not. Turns out ... we already took care of that further up in the function. The length check can be simplified by just checking whether the length of the *original* PMT and the new PMT are identical. Since we don't store "magic" PCR streams in those, we can just use them as-is. Part-of: 2024-04-23 01:40:44 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Lock DPB while building command Since DPB resource can be modified in output thread, protect it when building command list. Part-of: 2024-04-22 19:32:22 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Hold reference pictures in fence data Keep reference pictures alive during executing decoding commands Part-of: 2024-04-22 21:52:53 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12vp9dec.cpp: d3d12vp9dec: Disallow resolution change to larger size on non-keyframe Intel GPU seems to be crashing if the case happens. Part-of: 2024-04-21 22:38:50 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Fix potential use after free A DPB buffer held by codec picture object may not be writable at the moment, then gst_buffer_make_writable() will unref passed buffer. Specifically, the use after free or double free can happen if: * Crop meta of buffer copy is required because of non-zero top-left crop position * zero-copy is possible with crop meta * A picture was duplicated, interlaced h264 stream for example Interlaced h264 stream with non-zero top-left crop position is not very common but it's possible configuration in theory. Thus gst_buffer_make_writable() should be called with GstVideoCodecFrame.output_buffer directly. Part-of: 2024-04-21 22:07:36 +0900 Seungha Yang * sys/d3d11/gstd3d11decoder.cpp: d3d11decoder: Fix potential use after free A DPB buffer held by codec picture object may not be writable at the moment, then gst_buffer_make_writable() will unref passed buffer. Specifically, the use after free or double free can happen if: * Crop meta of buffer copy is required because of non-zero top-left crop position * zero-copy is possible with crop meta * A picture was duplicated, interlaced h264 stream for example Interlaced h264 stream with non-zero top-left crop position is not very common but it's possible configuration in theory. Thus gst_buffer_make_writable() should be called with GstVideoCodecFrame.output_buffer directly. Part-of: 2024-04-16 09:50:52 +0200 Edward Hervey * gst/mpegtsdemux/mpegtsbase.c: tsdemux: Disable smart program update The goal of this code was, for programs which were updates (i.e. adding/removing streams but not completely changing) to allow dynamic addition/removal of streams without completely removing everything. But this wasn't 100% tested and there are a bunch of issues which make it fail in plenty of ways. For now disable that feature and force the legacy "add all pads again and then remove old ones" behaviour to make it switch. Part-of: 2024-04-21 19:17:53 +0900 Seungha Yang * sys/mediafoundation/gstmfsourceobject.cpp: mediafoundation: Fix infinite loop in device provider Initialize source state with GST_MF_DEVICE_NOT_FOUND to terminate loop immediately if no available capture device is available Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3492 Part-of: 2024-04-19 20:44:44 +0900 Seungha Yang * sys/d3d12/gstd3d12videosink.cpp: d3d12videosink: Disconnect window's signal on dispose Same as the commit of 7b69d1758f77331c2801746cd91b1b6b0db9ecfb but for d3d12videosink. Part-of: 2024-04-19 21:17:17 +0900 Seungha Yang * sys/d3d12/gstd3d12window.cpp: d3d12videosink: Handle external HWND's mouse/keyboard events OS will not propagate the event to child HWND if it's handled by the parent. Thus, navigation event should be handled by parent HWND's event handler. Part-of: 2024-04-18 10:18:05 +0200 Alexander Slobodeniuk * gst-libs/gst/d3d11/gstd3d11device.cpp: * tests/check/libs/d3d11device.cpp: d3d11device: protect device_lock vs device_new It seems that when D3D11CreateDevice collides in time with other D3D11 calls, in particular the proccess of creating a shader, it can corrupt the memory in the driver. D3D11 spec doesn't seem to require any thread safety from D3D11CreateDevice. Following MSDN, it is supposed to be called in the beginning of the proccess, while GStreamer calls it with each new pipeline. Such crashes in the driver were frequently reproducing on the Intel UHD 630 machine. Part-of: 2024-04-16 23:08:51 +0200 Alexander Slobodeniuk * tests/check/libs/d3d11device.cpp: * tests/check/meson.build: tests/d3d11: add concurrency test for gstd3d11device We suspect that it's not thread safe to just create and destroy the device from any thread, particularly because of D3D11CreateDevice, that is not documented as thread-safe. While D3D11CreateDevice is usually protected from outside by the gst_d3d11_ensure_element_data, it still can cross with the Release() method of another device. Part-of: 2024-04-19 17:17:08 +0900 Elliot Chen * gst-libs/gst/play/gstplay.c: gstplay: query duration again if previous query failed Part-of: 2024-04-17 10:58:00 +0900 Hou Qi * ext/wayland/gstwaylandsink.c: waylandsink: config buffer pool with query size when propose_allocation If propose_allocation comes before set_caps, self->video_info has not been extracted from caps and self->video_info.size is 0. It causes buffer pool fail to set config . So need to use info size got from query instead when propose_allocation. Part-of: 2024-04-17 16:55:31 -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: Don't unref allocation query caps The caps obtained from parsing the allocation query is borrowed and should not be unreffed. This fixes criticals assertion introduced in 1.24.1. (gst-launch-1.0:242): GStreamer-CRITICAL **: 19:48:02.667: gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed Fixes: 5189e8b95630 ("v4l2codecs: decoders: Add DMA_DRM caps support") Closes #3462 Part-of: 2024-04-16 22:29:15 +1000 Jan Schmidt * gst/dvbsubenc/gstdvbsubenc.c: dvbsubenc: fixed some memory leaks and a crash Fix leaks of internal GstBuffers, and a crash if subtitle segments end up empty. Based on a patch by Jurijs Satcs Part-of: 2024-04-10 20:57:16 +0900 Seungha Yang * sys/mediafoundation/gstmfcapturedshow.cpp: * sys/mediafoundation/gstmfcapturedshow.h: * sys/mediafoundation/gstmfcapturewinrt.cpp: * sys/mediafoundation/gstmfcapturewinrt.h: * sys/mediafoundation/gstmfdevice.cpp: * sys/mediafoundation/gstmfsourceobject.cpp: * sys/mediafoundation/gstmfsourceobject.h: * sys/mediafoundation/gstmfsourcereader.cpp: * sys/mediafoundation/gstmfsourcereader.h: mediafoundation: Fix device enumeration Do not stop device enumerate even if a device could not be opened. Otherwise the other devices listed after the failed device will not be reported by device provider Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3460 Part-of: 2024-04-13 23:53:00 +0900 Seungha Yang * sys/d3d12/gstd3d12encoder.cpp: d3d12encoder: Fix buffer pool leak Add missing buffer pool release Part-of: 2024-04-10 22:01:18 +0900 Seungha Yang * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window.h: * sys/d3d11/gstd3d11window_dummy.cpp: d3d11videosink: Fix rendering on keyed mutex enabled handle As of the commit 69b2e1565c5d0e8b2313d52042d73c721fed7edb, keyed mutex will be handled by the memory object. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3468 Part-of: 2024-04-15 10:51:03 +0100 Tim-Philipp Müller * tests/check/meson.build: tests: fix possible libscpp build failure in gst-plugins-bad ../subprojects/gst-plugins-bad/tests/check/libs/gstlibscpp.cc:41: fatal error: gst/mpegts/gstmpegts-enumtypes.h: No such file or directory Could only pass the needed deps to the libscpp test, but gets messier to maintain, so let's at it for consistency. Part-of: 2024-04-10 00:04:02 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.24.2 === release 1.24.2 === 2024-04-09 21:48:55 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.2 2024-04-06 00:41:29 +0900 Seungha Yang * ext/closedcaption/gstccconverter.c: ccconverter: Fix caps leak and remove unnecessary code The removed code does the exactly same thing as the below code except for leaking caps Part-of: 2024-04-09 23:35:13 +0900 Seungha Yang * sys/qsv/gstqsvdecoder.cpp: qsvdecoder: Release too old frames Release too old frames manually. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3163 Part-of: 2024-04-02 18:20:43 +0900 Seungha Yang * sys/dwrite/gstdwriteoverlayobject.cpp: dwrite: Fix crash on device update Selected blend mode should not be cleared on device update Part-of: 2024-04-05 21:58:51 -0400 Daniel Morin * gst-libs/gst/codecparsers/gsth264parser.h: h264parser: maintain API changes Part-of: 2024-04-04 09:38:36 -0400 Daniel Morin * tests/check/elements/h264parse.c: Revert "h264parse: test - AU align with SEI between frame slices" This reverts commit 533f814fd9a0eff341bb8f400fff82e5f0c4c313. Part-of: 2024-04-04 09:38:16 -0400 Daniel Morin * gst-libs/gst/codecparsers/gsth264parser.h: * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: Revert "h264parse: Improved AU boundary detection" This reverts commit 49f200cb549d43067e7c6eee332cdf757a38d82a. Part-of: 2024-04-04 09:38:13 -0400 Daniel Morin * gst/videoparsers/gsth264parse.c: Revert "h264parse: Remove dead code" This reverts commit 141cd3871592292a8a6c81c1e018610a82ecaa88. Part-of: 2024-04-04 09:38:08 -0400 Daniel Morin * gst/videoparsers/gsth264parse.c: Revert "h264parse: Fix AU collection" This reverts commit 495390f63a710559b149e476d3289dc2f37be7f8. Part-of: 2024-04-04 09:37:47 -0400 Daniel Morin * gst/videoparsers/gsth264parse.c: Revert "h264parse: Remove un-needed check on SPS state" This reverts commit 73dedf9a51e70868f6aa029b968f8c7ef6af530e. Part-of: 2024-04-04 09:37:40 -0400 Daniel Morin * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: Revert "h264parse: use AUD to detect first VCL NAL" This reverts commit 90a3b63eed22d2737dbe8e33ee931e897ccfd128. Part-of: 2024-04-04 09:36:02 -0400 Daniel Morin * gst/videoparsers/gsth264parse.c: Revert "h264parse: correct NAL mode backlog processing" This reverts commit b2098849dc21c3615cb15b1e26bbbe77feb76476. Part-of: 2024-03-29 15:37:55 +0100 Edward Hervey * gst/videoparsers/gstvideoparseutils.c: videoparsers: Demote CC warning message Another warning message which isn't fatal and therefore should just be a DEBUG line. Part-of: 2024-03-20 13:57:56 -0500 Elizabeth Figura * sys/applemedia/atdec.c: * sys/applemedia/atdec.h: atdec: Handle channel counts greater than 2 Part-of: 2024-02-20 13:20:12 -0600 Elizabeth Figura * sys/applemedia/atdec.c: atdec: Use gst_audio_decoder_set_output_caps() directly The code currently sets the same caps in two different ways, and neither of them correctly handle the channel mask. Part-of: 2024-03-30 15:57:36 +0100 Robert Mader * gst/jpegformat/gstjpegparse.c: jpegparse: turn some bus warnings into object ones For some cameras `gst_jpeg_parse_app0()` fails on a invalid segment. While this is likely a driver or firmware bug that should be addressed accordingly, it's not fatal and likely does not deserve a bus message on every frame, flooding journals. Turn down the volume of the warnings by turning them into object warnings. If we conclude that in some cases we'd still want bus warnings, they can be done more fine-grained in the `gst_jpeg_parse_appX()` functions. Part-of: 2024-04-02 16:23:31 +0100 Chris Spencer * gst-libs/gst/vulkan/gstvkbufferpool.c: * gst-libs/gst/vulkan/gstvkbufferpool.h: vkbufferpool: correct usage flags type Part-of: 2024-03-18 20:50:56 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh265dec.c: vkh265dec: add missing VPS parameter and fix coded size Part-of: 2024-03-18 20:00:11 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vkh26xdec: implement close() vmethod Since a validation layer error is signaled at EOS because it's required to wait for the last frame to be processed. Part-of: 2024-04-03 16:44:18 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh265dec.c: vkh26xdec: remove unused variables Part-of: 2024-03-18 19:42:50 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh265dec.c: vkh265dec: fix resource info structure when layered DPB Part-of: 2024-04-02 18:18:14 +0200 Víctor Manuel Jáquez Leal * sys/msdk/gstmsdkcontext.c: msdk: sink context reference Part-of: 2024-04-02 18:02:26 +0200 Víctor Manuel Jáquez Leal * ext/gtk/gstgtkwaylandsink.c: gtk: sink reference of internal wayland pool Part-of: 2024-04-02 18:00:40 +0200 Víctor Manuel Jáquez Leal * ext/wayland/gstwaylandsink.c: wayland: sink reference to internal pool Part-of: 2024-04-02 14:46:32 +0200 Víctor Manuel Jáquez Leal * ext/dash/gstmpdadaptationsetnode.c: * ext/dash/gstmpdbaseurlnode.c: * ext/dash/gstmpdclient.c: * ext/dash/gstmpdcontentcomponentnode.c: * ext/dash/gstmpddescriptortypenode.c: * ext/dash/gstmpdlocationnode.c: * ext/dash/gstmpdmetricsnode.c: * ext/dash/gstmpdmetricsrangenode.c: * ext/dash/gstmpdperiodnode.c: * ext/dash/gstmpdprograminformationnode.c: * ext/dash/gstmpdreportingnode.c: * ext/dash/gstmpdrepresentationnode.c: * ext/dash/gstmpdrootnode.c: * ext/dash/gstmpdsegmentbasenode.c: * ext/dash/gstmpdsegmentlistnode.c: * ext/dash/gstmpdsegmenttemplatenode.c: * ext/dash/gstmpdsegmenttimelinenode.c: * ext/dash/gstmpdsegmenturlnode.c: * ext/dash/gstmpdsnode.c: * ext/dash/gstmpdsubrepresentationnode.c: * ext/dash/gstmpdsubsetnode.c: * ext/dash/gstmpdurltypenode.c: * ext/dash/gstmpdutctimingnode.c: dash: sink references of all MDP objects Part-of: 2024-03-15 19:03:58 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvadecoder.c: * sys/va/gstvaencoder.c: * sys/va/gstvafilter.c: va: sink reference at instantiation Part-of: 2023-12-05 12:24:01 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: * gst-libs/gst/vulkan/gstvktrash.c: vulkan: sink references at instantiation Part-of: 2024-04-02 19:00:35 +0200 eri * gst-libs/gst/play/gstplay.c: play: Update `video_snapshot` to support playbin3 Part-of: 2024-04-02 15:57:58 +0200 Guillaume Desmottes * tests/examples/webrtc/webrtcswap.c: examples: set perfect-timestamp=true on opusenc Fix audio streaming on Chrome, see https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1524 Part-of: 2024-03-25 23:33:59 +0800 He Junyan * sys/va/gstvaav1enc.c: va: av1enc: Avoid reopen encoder or renegotiate If parameters remain similar enough to avoid either encoder reopening or downstream renegotiation, avoid it. This is going to be useful for dynamic parameters setting. To check if the stream parameters changed, so the internal encoder has to be closed and opened again, are required two steps: 1. If input caps, format, profile, chroma or rate control mode have changed. 2. If any of the calculated variables and element properties have changed. Later on, only if the output caps also changed, the pipeline is renegotiated. Part-of: 2024-04-01 01:00:53 +0900 Seungha Yang * gst-libs/gst/d3d11/meson.build: meson: d3d11: Add support for MinGW DirectXMath package Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3428 Part-of: 2024-03-14 23:17:32 +0800 He Junyan * sys/va/gstvaav1enc.c: va: av1enc: Improve the LAST reference assignment The last frame which has the smallest diff should be consider as the first choice rather than the golden frame. Especially when only one reference available, this way can improve the BD rate about 5 percentage. Part-of: 2024-03-15 15:48:34 +0800 He Junyan * sys/va/gstvaav1enc.c: va: av1enc: Fix the reference number setting bug The current way will let the total reference number surplus the reference number set by the "ref-frames" property. Part-of: 2024-03-28 21:59:02 +0100 Alexander Slobodeniuk * sys/d3d11/gstd3d11videosink.cpp: d3d11videosink: disconnect signals before releasing the window It might happen that the key event arrives when the d3d11videosink is stopping. In case of GstD3D11WindowWin32 it can raise a navigation event even when the sink is already freed, because the window object's refcount may reach 0 in the window thread. In other words sometimes the GstD3D11WindowWin32 lives few ms more then the GstD3D11VideoSink, because it's freed asynchronously. Part-of: 2024-03-29 19:34:32 +0100 Ruben Gonzalez * ext/wpe/gstwpe.cpp: wpe: avoid crash with G_DEBUG=fatal_criticals and static build No plugin filenames if static build. Part-of: 2024-03-22 12:57:33 +0100 Ruben Gonzalez * gst/rist/gstristsrc.c: ristsrc: Clean caps instead of unref Fix issue unrefering null caps. Better solution than ``` if (src->caps) gst_caps_unref (src->caps); ``` Part-of: 2024-03-28 20:02:04 +0900 Seungha Yang * gst-libs/gst/d3d11/meson.build: meson: d3d11: Disable library build if DirectXMath header was not found DirectXMath header library is a hard dependency Part-of: 2024-03-27 13:53:21 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codecalphadecodebin.c: v4l2codecs: alphadecoder: Explicitly pass 64 bit integers as such through varargs Part-of: 2024-03-27 16:17:44 +0200 Sebastian Dröge * gst/codecalpha/gstalphadecodebin.c: alphadecodebin: Explicitly pass 64 bit integers as such through varargs Maybe fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3422 Part-of: 2024-03-22 16:14:24 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix caps criticals during negotiation Calling gst_pad_peer_query_caps() without a filter can give us EMPTY caps, whereas all the code below assumes that's not the case. Replacing query+intersect with a filtered query ensures we always get a subset of the template caps back. Part-of: 2024-03-26 15:32:24 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: avi1 tag can be progressive AVI1 tag in APP0 is trivalue: 0 not interleaved, 1 odd, 2 even. So if avi1 is zero then the frame is progressive. Also, this patch adds a couple log messages. Fixes: #3414 Part-of: 2024-03-26 12:46:02 +0000 Tim-Philipp Müller * tests/check/libs/gstlibscpp.cc: * tests/check/meson.build: tests: add check to make sure -bad lib headers are C++ compiler clean Only non-internal libs without external deps for now. Part-of: 2024-03-22 01:38:06 +0100 Tim-Philipp Müller * meson.build: Back to development === release 1.24.1 === 2024-03-21 21:47:53 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.1 2024-03-18 18:46:17 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Ignore output loop errors in drain() if we're flushing In an early non-linked scenario, this was causing a ton of criticals about the queue array, because the output callback would still fire for leftover frames that were still being processed by VT at the time the output loop stopped. This makes sure they're flushed correctly as well. Also renames gst_vtdec_loop to gst_vtdec_output_loop for consistency with related functions. wip Part-of: 2024-03-18 18:38:41 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix a deadlock during ProRes playback Sometimes a call to negotiate (and thus drain) can happen from the output loop (via finish_frame()), which will tell VT to output all internal frames, but that won't succeed if we happen to decide to wait for the queue to empty (because the loop is waiting for draining to finish and will not make space in the queue!). This commit adds an override for the queue size limit if we're draining/flushing. This bug could happen for any formats, but was especially obvious for ProRes, which has dpb_size of 0. Part-of: 2024-03-06 15:39:33 -0500 Ruijing Dong * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: * sys/va/gstvah265enc.c: va: enc : checking surface alignment attribute Apply surface alignment attribute when availalbe, also fix frame cropping issue for va h265 encoder. Part-of: 2024-03-16 19:32:19 +0100 Mark Nauwelaerts * gst/dvdspu/gstspu-pgs.c: dvdspu: avoid null dereference Part-of: 2024-03-17 11:18:37 +0000 Philippe Normand * gst-libs/gst/play/gstplay.c: play: Fix a critical warning in error callback `on_error()` can be called with a NULL details structure, so in that situation the `gst_structure_copy()` would raise a critical warning. Create an empty structure instead of attempting to copy a NULL one. Part-of: 2024-03-16 21:25:38 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: d3d12: Fix SDK debug layer activation Debug layer must be enabled before creating device. Otherwise already opened devices before the activation will be removed Part-of: 2024-01-06 13:07:16 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: * sys/v4l2codecs/gstv4l2decoder.c: * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: decoders: Add DMA_DRM caps support In order to simplify caps negotiations for clients and, notably, be more compatible with va* decoders. Crucially this allows clients to know ahead of time whether buffers will actually be DMABufs. Similar to GstVaBaseDec we only announce system memory caps if the peer has ANY caps. Further more, and again like va decoders, we fail in `decide_allocation()` if DMA_DRM caps are used without VideoMeta. Apart from buggy peers this can happen e.g. when a peer with ANY caps is used in combination with caps filters. Part-of: 2024-02-17 06:01:41 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: * sys/v4l2codecs/gstv4l2decoder.c: * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: decoders: Introduce and use set_output_state helper class Allowing us to avoid some code duplication. This will become more important with upcoming changes to caps generation. Part-of: 2024-02-17 05:43:23 +0100 Robert Mader * sys/v4l2codecs/gstv4l2decoder.c: * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: decoder: Clean up select_src_format() Most importantly rely on video info helpers instead of manual parsing of caps, which will allow us to use additional helpers in the future. While on it, tighen the check for supported formats - failing that indicates a bug in caps negotiation - and make some style changes. Part-of: 2024-02-17 04:20:16 +0100 Robert Mader * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: decoder: Generalize size enumeration caps By reducing the generated caps to the minimal number of fields and using intersections instead of merges. This will allow us to reuse the result in the future. Part-of: 2024-02-16 22:48:17 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: * sys/v4l2codecs/gstv4l2decoder.c: * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: decoders: Use src template for negotiation filter This ensures we don't create filter caps that are not supported by the individual codec implementations, as well as that the resulting caps have the required fields so they can be turned into a GstVideoFormat. Part-of: 2024-03-14 20:25:52 +0900 Seungha Yang * sys/asio/gstasiosink.cpp: * sys/asio/gstasiosrc.cpp: asio: Fix {input,output}-channels property handling Fixing regression introduced by the commit 06dc931b52fbd858640506616f5a1a928792b27c Part-of: 2024-03-14 00:49:45 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: d3d11device: Fix adapter LUID comparison in wrapped device mode Fix integer type mismatching Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3382 Part-of: 2024-03-13 00:42:16 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: d3d12device: Fix IDXGIFactory2 leak factory passed to gst_d3d12_device_find_adapter() method is valid handle already Part-of: 2024-03-11 12:42:48 +0100 Antonio Larrosa * sys/va/gstvaav1enc.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: va{h264,h265,av1}enc: fix potential crash on devices without rate control This fixes a crash in `gst_va_h264_enc_class_init` and `gst_va_h265_enc_class_init` (and probably also in gst_va_av1_enc_class_init) when calling `g_object_class_install_properties (object_class, n_props, properties);` When rate_control_type is 0, the following code is executed in : ``` } else { n_props--; properties[PROP_RATE_CONTROL] = NULL; } ``` n_props has initially a value of N_PROPERTIES but PROP_RATE_CONTROL is not the last element in the array, so it's making g_object_class_install_properties fail to iterate over the properties array. This applies the same fix to gstvah264enc.c, gstvah265enc.c and gstvaav1enc.c. Part-of: 2024-03-12 13:50:18 +0200 Sebastian Dröge * gst/videoparsers/gstvideoparseutils.c: videoparsers: Don't verbosely warn about CEA_708_PROCESS_EM_DATA_FLAG not being set And the same for CEA_708_PROCESS_CC_DATA_FLAG. This is not really a problem and was polluting logs with warnings for every single frame. Part-of: 2024-03-12 00:45:15 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudabufferpool.cpp: * gst-libs/gst/d3d11/gstd3d11bufferpool.cpp: * sys/d3d12/gstd3d12bufferpool.cpp: cuda,d3d11,d3d12bufferpool: Disable preallocation Do not chain up to parent's GstBufferPool::start() which will do preallocation. We don't want it to be preallocated since there are various cases where negotiated downstream buffer pool is not used at all (e.g., zero-copy decoding, IPC elements). Part-of: 2024-03-09 20:16:22 +0800 He Junyan * sys/va/gstvaav1enc.c: va: av1enc: Init the output_frame_num when resetting gf group Fixes: #3359 Part-of: 2024-02-16 18:08:36 +0100 Mathieu Duponchelle * gst/onvif/gstrtponviftimestamp.c: * gst/onvif/gstrtponviftimestamp.h: rtponviftimestamp: make sure to set E and T bits on last buffer of lists Part-of: 2024-02-28 09:30:33 +1100 Jan Schmidt * gst/onvif/gstrtponviftimestamp.c: rtponviftimestamp: Use gst_segment_to_stream_time_full() In the situation where playback starts from a keyframe before the target playback segment, then the first buffers will be outside the configured segment and gst_segment_to_stream_time() will return GST_CLOCK_TIME_NONE unconditionally. If drop-out-of-segment is false, the RTP buffers will not be dropped, but will be sent witout ONVIF extension timestamps and given GST_CLOCK_TIME_NONE timestamps on the receiver. Instead, use gst_segment_to_stream_time_full() to extrapolate stream time outside the segment so that such buffers still get assigned their correct timestamps on the receiver. Part-of: 2024-03-01 21:00:33 +1100 Jan Schmidt * gst/dvbsubenc/gstdvbsubenc-util.c: dvbsubenc: Fix bottom field size calculation Don't accidentally include the stuffing byte (if present) into the bottom field size. It should only be included in the total segment length. Fixes problems with FFmpeg not rendering the subtitles with a stuffing byte, giving a "Invalid object location!" error. Part-of: 2024-03-05 13:45:27 +0000 Tim-Philipp Müller * meson.build: Back to development Part-of: === release 1.24.0 === 2024-03-04 23:51:42 +0000 Tim-Philipp Müller * NEWS: * README.md: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.24.0 2024-03-04 18:01:50 +0100 Mathieu Duponchelle * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: analytics: whitespace matters for gtk-doc syntax Part-of: 2024-03-03 18:35:09 -0500 Olivier Crête * docs/libs/analytics/index.md: * docs/libs/analytics/sitemap.txt: * docs/meson.build: * gst-libs/gst/analytics/analytics-meta-prelude.h: * gst-libs/gst/analytics/meson.build: analytics: Add documentation to hotdoc build Part-of: 2024-03-03 18:34:41 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: analytics: Add missing documentation Part-of: 2024-03-03 18:33:48 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: analytics: Fix various typos in the documentation Part-of: 2024-02-29 02:41:42 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11bufferpool.cpp: * gst-libs/gst/d3d11/gstd3d11memory.cpp: * sys/d3d12/gstd3d12memory.cpp: d3d11memory, d3d12memory: Fix outstanding memory count tracing Gets being released memory back to queue even if allocator is flushing in order to count the number of outstanding memory objects. Also, clear queue if there's no outstanding memory object and allocator is flushing Part-of: 2024-02-29 02:30:38 +0900 Seungha Yang * tests/check/libs/d3d11memory.c: tests: d3d11: Add buffer pool test Part-of: 2024-02-29 02:06:43 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Fix outstanding memory count tracing Gets being released memory back to queue even if allocator is flushing in order to count the number of outstanding memory objects. And fixing double count increment Part-of: 2024-02-29 02:06:25 +0900 Seungha Yang * tests/check/libs/cudamemory.c: tests: cuda: Add buffer pool test Part-of: 2024-02-15 16:41:54 -0500 Damian Hobson-Garcia * 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: Move buffer commits to the display thread Syncrhonizing buffer commits to the streaming thread can lead to dropped frames when frame callbacks are not processed before the next frame is ready for rendering. Depending on the drift between the wayland compositor and buffer source timings, this can lead to periods of significant frame drop, especially when the media frame rate is close to the display frame rate. Cache buffers in the streaming thread and peform commits on the display thread to eliminate the buffer commit racing. The implementation is the same for both waylandsink and gtkwaylandsink, so move it to the common wayland library under gst-lib. Part-of: 2024-02-15 16:41:52 -0500 Damian Hobson-Garcia * gst-libs/gst/wayland/gstwlbuffer.c: * gst-libs/gst/wayland/gstwlbuffer.h: wayland: Add API to ref/unref current GstBuffer inside a GstWlBuffer Part-of: 2024-02-15 16:42:13 -0500 Damian Hobson-Garcia * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: wayland: Add synchronized requests to WlDisplay Add synchonized versions of wl_display_sync() and wl_callback_destroy() that will ensure that to callbacks can be managed in a thread safe way on the display queue even when they are dispatched from a separate thread. Part-of: 2024-02-26 09:27:40 +0100 Edward Hervey * README.md: * RELEASE: * ext/dtls/README: docs: Use Discourse and Matrix as prefered communication channels Part of: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6220 2024-02-22 15:41:16 +0100 Alexander Slobodeniuk * sys/d3d11/gstd3d11window_win32.cpp: d3d11window_win32: fix crash on RC unprepare() vs window_proc() Unprepare method posts WM_GST_D3D11_DESTROY_INTERNAL_WINDOW command to the window queue, and from that moment considers internal_hwnd to be released, and so it sets it to null. The problem is that it's possible that right at that moment the window thread might be already processing some other command, or just another command might be already in the queue. On practice we met a crash when WM_PAINT got processed in between (unprepare already finished and WM_GST_D3D11_DESTROY_INTERNAL_WINDOW was not handled yet) Part-of: === release 1.23.90 === 2024-02-23 18:20:11 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.23.90 2024-02-23 21:54:17 +0800 He Junyan * sys/va/gstvabasedec.c: vabasedec: Fix a possible NULL pointer dereference The format in _get_preferred_format_and_caps_features() may be NULL. Part-of: 2024-02-22 22:11:36 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: vabasedec: disable derived images for i965 driver Since it has a very poor performance at reading derived images, which is the most common use case for decoders. Partially fixes: #3325 Part-of: 2024-02-21 18:14:36 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvavpp.c: vapostproc: optimization for va memory to system memory only When the conversion is only caps feature from memory:VAMemory to system memory, it's possible to optimize by doing a pseudo pass-through since the va-backed buffers are the same for system memory buffers. This change will also mitigates #2940 Part-of: 2024-02-20 20:38:55 +0900 Seungha Yang * sys/asio/gstasioobject.cpp: * sys/asio/gstasiosink.cpp: * sys/asio/gstasiosrc.cpp: asiosink: Fix channel selection Fixing copy paste mistake Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3321 Part-of: 2024-02-20 17:28:29 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: vabase: fail decide allocation if dmabuf without videometa If the allocation query received from downstream doesn't handle GstVideoMeta but it requests memory:DMABuf caps feature, it's incomplete, so we rather reject the negotiation. Both in base decoder, base transform and compositor. Part-of: 2024-02-22 09:41:00 +0200 naglis <341855-naglis@users.noreply.gitlab.freedesktop.org> * gst-libs/gst/play/gstplay.c: gstplay: Fix typos in documentation Part-of: 2024-02-21 01:13:02 +0900 Seungha Yang * sys/nvcodec/plugin.c: nvcodec: Add plugin status message Part-of: 2024-02-21 00:57:32 +0900 Seungha Yang * sys/amfcodec/plugin.cpp: amfcodec: Add plugin status message Part-of: 2024-02-19 22:17:42 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: vabasedec: refactor format and capsfeature selection This is a simplification of the venerable gst_va_base_dec_get_preferred_format_and_caps_features() function, which predates since gstreamer-vaapi. It's used to select the format and the capsfeature to use when setting the output state. It was complex and hard to follow. This refactor simplifies a lot the algorithm. The first thing to remove _downstream_has_video_meta() since, most of the time it will be called before the caps negotiation, and allocation queries make sense only after caps negotiation. It might work during renegotiation but, in that case, caps feature change is uncommon. Better a simple and common approach. Also, for performance, instead of dealing with caps features as strings, GQuarks are used. The refactor works like this: 1. If peer pad returns any caps, the returned caps feature is system memory and looks for a proper format in the allowed caps. 2. The allowed caps are traversed at most 3 times: one per each valid caps feature. First VAMemory, later DMABuf, and last system memory. The first to match in allowed caps is picked, and the first format matching with the chroma is picked too. Notice that, right now, using playbin videoconvert never return any. Part-of: 2024-02-20 16:00:07 +0100 Edward Hervey * docs/plugins/gst_plugins_cache.json: * ext/ttml/gstttmlparse.c: subparsers: Give proper category to subtitle "decoders" Some subtitle "decoders" had a wrong category of "Parser", which `parsebin` relies on to identify elements which do not *decode* streams but *parse* them. This would cause such subtitle decoders to be plugged in within parsebin, preventing the original stream to be properly used by (more efficient) downstream decoders or subtitle renderers. Fixes #1757 Part-of: 2024-02-19 12:50:53 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkvpp.c: msdk: Fix possible memory leaks Part-of: 2024-02-21 21:50:20 +0900 Seungha Yang * sys/wasapi/gstwasapiutil.c: wasapi: Fix alloc/free function mismatch ... and fix leak in wasapi device provider Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3326 Part-of: 2024-02-21 21:46:49 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Fix task memory leak Part-of: 2024-02-01 14:49:21 +0900 ekwange * gst-libs/gst/mse/gstmediasourcesamplemap.c: mse: Add logging init for mediasource sample map Part-of: 2024-02-17 13:19:15 -0800 Kamal Mostafa * tests/check/elements/cudafilter.c: tests: cudafilter: actually check for cudascale Actually check for availability of 'cudascale' instead of accidentally checking for 'cudadownload' twice. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3327 Part-of: 2024-02-19 14:24:51 +0100 Stéphane Cerveau * tests/check/libs/vkimagebufferpool.c: test: vkimagebufferpool: fix queue leak Part-of: 2023-01-28 02:15:24 +0000 Tim-Philipp Müller * sys/qsv/plugin.cpp: qsv: use new plugin status message API Minimal example. Part-of: 2024-02-19 20:57:26 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Respect ringbuffer buffer/latency time Decide buffer size based on configured buffer/latency time if low-latency is disabled, so that ringbuffer can buffer more than minimum required size. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870 Part-of: 2024-02-20 08:47:21 +0100 Edward Hervey * gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.h: mpegst: Fix ownership of return value This inherits from the same rule as gst_buffer_add_meta ``` gst-mpegtspesmetadatameta.h:98: Warning: GstMpegts: gst_buffer_add_mpegts_pes_metadata_meta: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip) ``` Part-of: 2024-02-16 17:06:52 +0100 Guillaume Desmottes * docs/plugins/gst_plugins_cache.json: docs: initialize values when GST_PLUGIN_API_FLAG_IGNORE_ENUM_MEMBERS is set Part-of: 2024-02-17 00:11:32 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Fix choppy rendering This reverts questionable commit 009bc15f3397252e9e3954ae4af15ffcdbdeac69 which looks completely wrong. The GstWasapi2RingBuffer:buffer_size variable is used to calculate available buffer size we can write (i.e., available size = buffer_size - padding_size). But the commit makes the size to be exactly same as buffer period. Then, it can confuse this element as if the endpoint buffer is full on I/O event callback (if padding size is equal to buffer period) but it's not true. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870 Part-of: 2024-02-14 22:11:51 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codech264dec.c: v4l2codecs: h264: Fix a memory leak on renegotiation We only use this anchor when streaming, in which case output_state is set and needs to get unreffed. This is in line with how it is handled for all other codecs. Part-of: 2024-02-15 16:38:53 +0000 Tim-Philipp Müller * meson.build: Back to development Part-of: === release 1.23.2 === 2024-02-15 15:37:17 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.23.2 2024-02-15 15:37:11 +0000 Tim-Philipp Müller * gst/audiobuffersplit/gstaudiobuffersplit.c: Revert "audiobuffersplit: Update out_segment even without discont" This reverts commit c0dc65d40a0dd2b3c0f75ff17bdb5b2664923c1c. 2023-10-11 12:30:31 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gstvideoparseutils.c: videoparseutils: Don't double-attach AFD, Bar or unregistered data We already did this for captions. We also need to do it for the other meta types to ensure our parsers are idempotent and don't attach duplicates. Part-of: 2023-10-10 08:45:06 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gstvideoparseutils.c: * gst/videoparsers/gstvideoparseutils.h: videoparseutils: Store multiple user data unregistered messages A frame can have multiple unregistered messages attached. We need to store them all. For: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3008 Part-of: 2023-10-10 08:41:12 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gstvideoparseutils.c: * gst/videoparsers/gstvideoparseutils.h: videoparsers: Clear user_data_unregistered explicitly in _reset_frame This fits better with the model used by the parser elements. It also properly resets the data when the parser is reset. Part-of: 2023-10-10 08:34:29 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gstmpegvideoparse.c: * gst/videoparsers/gstvideoparseutils.c: * gst/videoparsers/gstvideoparseutils.h: videoparsers: Clear user data explicitly in _reset_frame This fits better with the model used by the parser elements. It also properly resets the data when the parser is reset. Part-of: 2023-10-10 08:29:02 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gstvideoparseutils.c: videoparseutils: Minor improvements to _parse_afd - Add the missing field parameter and put the output parameter at the end. - Use a switch to verify valid values instead of hard-to-follow range checks. - Don't consider bad values a programming error, just a regular failure. - Set all data fields at the end so we can pass a pointer to an uninitialized structure without GCC complaining. Part-of: 2023-10-10 08:27:23 +0200 Jan Alexander Steffens (heftig) * gst/videoparsers/gstvideoparseutils.c: videoparseutils: Minor improvements to _parse_bar Use the enum type for the argument and loudly complain when not passing a place to output. Part-of: 2024-01-30 15:05:55 +0100 Jan Alexander Steffens (heftig) * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: Update out_segment even without discont We need to forward the segments we get even if we don't see a discont buffer, or discont was suppressed by gapless mode. Part-of: 2024-02-14 11:44:22 -0500 Xavier Claessens * sys/aja/gstajacommon.cpp: * sys/aja/gstajacommon.h: * sys/aja/gstajasink.cpp: * sys/aja/gstajasrc.cpp: aja: Replace global semaphore with per-device flock() The global semaphore was never closed/unlinked, causing permission denied issue if the device is later used by another user. Properly removing the semaphore when stopping the pipeline would still leave it open in case of a crash. With a GStreamer specific name, it was also not preventing other apps to access the device concurrently. Finally, if the system has multiple cards, the lock should be per card and not global (to be confirmed). Fixes: #3283. Sponsored-by: Netflix Inc. Part-of: 2024-02-15 08:52:33 +0100 Edward Hervey * gst-libs/gst/play/gstplay.c: libgstplay: Use playbin3 by default Part-of: 2024-02-12 23:51:12 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Fix DPB size calculation MaxDpbSize specified in A.4.2 tells upper bound of decoded picture buffer size but does not tell actual required size. Use max_dec_pic_buffering value as a dpb size. Some backends such as DXVA and NVDEC might require pre-allocated DPB buffer and unnecessary large DPB size will result in waste of GPU memory. Part-of: 2024-02-13 18:57:05 +0100 Mathieu Duponchelle * ext/webrtc/gstwebrtcbin.c: webrtcbin, rtpbin: check before setting properties on jitterbuffer In rtpbin we already systematically check for all property names except latency, correct that. In webrtcbin we need to check before trying to use the do-retransmission property. This is useful for the case where an element like identity gets passed to rtpbin's request-jitterbuffer property, when the application wants to use webrtcbin in an SFU situation, with no reordering and no added latency Part-of: 2024-02-14 00:38:40 +0000 Tim-Philipp Müller * po/lv.po: gst-plugins-bad: update translations Part-of: 2024-02-11 22:08:12 -0500 Daniel Morin * gst/videoparsers/gsth264parse.c: h264parse: correct NAL mode backlog processing - Only process what is left in backlog when AU was completed, draining or next nal is AUD. Part-of: 2024-02-12 22:16:23 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Enable zero-copy only if explicitly enabled Keep pre-1.24 behavior unless user specifies the number of output surface size. We are calculating output surface size conservatively, and it can result in over allocation. Part-of: 2024-02-12 22:01:45 +0900 Seungha Yang * sys/nvcodec/gstnvh265dec.cpp: nvh265dec: Don't convert unknown video format to string gst_video_format_to_string() method does not allow unknown format Part-of: 2024-02-03 11:54:01 +0000 Philippe Normand * ext/dash/gstdashdemux.c: dashdemux: Basic support for container-specific-track-id tag Part-of: 2024-02-11 20:35:19 +0900 Seungha Yang * sys/d3d12/gstd3d12dxgicapture.cpp: d3d12screencapturesrc: Fix choppy display According to recommendation from MS, IDXGIOutputDuplication::ReleaseFrame() needs to be called just before IDXGIOutputDuplication::AcquireNextFrame() for performance reasons, so that driver can accumulate dirty rects and update texture at once. But it seems to cause choppy output. Do release acquired frame immediately once processing done, like d3d11 implementation does. Part-of: 2024-02-07 19:07:24 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/gstvulkan.c: * ext/vulkan/meson.build: * ext/vulkan/vkh265dec.c: * ext/vulkan/vkh265dec.h: vulkanh265dec: add H.265 decoder Part-of: 2024-02-08 11:32:56 +0100 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideodecode.c: tests: vkvideodecode: add H.265 decoding test Part-of: 2024-02-07 20:11:59 +0100 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideodecode.c: tests: vkvideodecode: choose the queue's codec Part-of: 2024-02-07 20:06:37 +0100 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideodecode.c: tests: vkvideodecode: h264 prefix to global variables Part-of: 2024-02-09 10:22:55 +0100 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideodecode.c: tests: vkvideodecode: refactor functions for later reuse Part-of: 2024-02-09 11:30:58 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: vulkanh264dec: don't remove graphics queue if it's the same as decoder Since graphics queue is used for the context transference. So lets' keep it with its own reference. Part-of: 2024-02-07 19:06:52 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkh264dec.c: vulkanh264dec: small cleanups Part-of: 2024-02-05 15:14:38 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder.c: vulkan/decoder: fix documentation generation GstVulkanDecoderParameters is an union, not a struct, and that isn't handled by hotdoc. Part-of: 2024-02-07 19:03:56 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder.c: vulkan/decoder: don't initialize function table once Since it has to be associated with the device and it gets destroyed when the decoder is freed. Now it's created when the decoder starts and it's flagged. Part-of: 2024-02-10 19:23:25 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12vp8dec.cpp: * sys/d3d12/gstd3d12vp8dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add VP8 decoder Part-of: 2024-02-10 20:11:29 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Fix bitstream buffer usage Resource state of a buffer in upload heap should stay in generic-read although it's effectively in common state. Some drivers complains about the wrong state. Part-of: 2024-02-10 20:01:14 +0900 Seungha Yang * gst-libs/gst/dxva/gstdxvavp8decoder.cpp: dxvavp8decoder: Fix reference frame setting Fixing typo Part-of: 2024-02-09 20:24:13 +0000 Tim-Philipp Müller * sys/aja/meson.build: aja: suppress compiler warnings for aja ntv2 subproject Part-of: 2024-02-10 01:45:44 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/amfcodec/gstamfav1enc.cpp: * sys/amfcodec/gstamfh264enc.cpp: * sys/amfcodec/gstamfh265enc.cpp: amfcodec: Update plugin cache Adding AV1 encoder documentation (added in 1.22) with various new properties Part-of: 2024-02-09 13:38:53 +0100 Jonas K Danielsson * ext/srt/meson.build: meson: srt: make sure srt_dep is defined Without this we will get errors when we try to build with srt disabled. Part-of: 2023-12-18 15:39:07 -0500 Xavier Claessens * tests/examples/nvcodec/cudaipc.c: structure: Allow STRICT flag only in _serialize_full() The STRICT flag makes _serialize() nullable which is an API break for bindings. Forbid it and add _serialize_full() that accepts it and is properly annotated. Part-of: 2024-02-09 10:50:39 +0200 Sebastian Dröge * gst/sdp/gstsdpdemux.c: sdpdemux: Add SDP message (aka session) attributes to the caps too They apply to all medias, and if overridden by the specific media then they would also be overridden just below in the created caps. Part-of: 2024-02-09 20:27:29 +0900 Seungha Yang * sys/winks/ksvideohelpers.c: ksdeviceprovider: Fix crash while probing device caps Ignore unexpected media type reported by driver, instead of abort Part-of: 2024-02-08 15:50:43 +0100 Edward Hervey * ext/musepack/gstmusepackdec.c: musepack: Prefer using FFmpeg musepack decoder/demuxer * Bump the rank of the musepack v7/v8 FFmpeg demuxers to SECONDARY * Bump the rank of the musepack v7/v8 FFmpeg audio decoders to SECONDARY * Demote the rank of the musepackdec element to MARGINAL This is for two reasons: * The musepack library is no longer maintained, whereas the FFmpeg implementation can/will receive fixes * The `musepackdec` implementation was a all-in-one "parsing and decoding" blob which doesn't play nicely with decodebin3 and others Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3033 Part-of: 2024-02-08 23:03:29 +0900 Seungha Yang * ext/closedcaption/gstccconverter.c: ccconverter: Send gap event if generated output is empty Sends a gap event if nothing to output for a given input buffer. For example, an input buffer might not contain any caption data for downstream requested field, then we need to inform downstream of the case. Part-of: 2022-02-09 15:45:16 +0100 Guillaume Desmottes * sys/bluez/gstavdtpsink.c: avdtpsink: post error message when failing to start Subclasses are supposed to report errors messages if their start implementation failed. Part-of: 2024-01-19 14:35:05 +0100 Marvin Schmidt * ext/wpe/gstwpesrcbin.cpp: * ext/wpe/gstwpethreadedview.cpp: * ext/wpe/gstwpethreadedview.h: * ext/wpe/gstwpevideosrc.cpp: * ext/wpe/meson.build: wpe: Rename WPEView to GstWPEThreadedView WebKit commit b12e7ed2ad3a ("[WPE] Upstream the new WPE platform API https://bugs.webkit.org/show_bug.cgi?id=265286")[1] added a `WPEView` typedef which clashes with our `WPEView` class. Rename the `WPEView` class to `GstWPEThreadedView` to avoid the collision. Also prefix the `WPEContextThread` class with `Gst` and rename the source files to reflect the new class name and use lowercase while at it for consistency [1] https://github.com/WebKit/WebKit/commit/b12e7ed2ad3a47ab322507ebac214225f2298acc Part-of: 2023-05-14 16:36:13 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Rework gst_switch_bin_get_allowed_caps() to limit path lock Previously, the path lock was held even while issuing caps queries to other elements. This can lead to deadlocks in more complex pipelines. Avoid this by reworking gst_switch_bin_get_allowed_caps() to acquire references to switchbin paths and then releasing the path lock. Subsequent operations in that function then act on the acquired references, thus eliminating the need for holding the path lock for the entirety of that function. Part-of: 2023-05-10 12:38:11 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Always respond to caps query with all allowed caps The caps query specifies _all_ caps that the element can handle, not just caps from the current path element. If for example a switchbin has two paths, with one having an element that handles video/x-h264, and another path whose element handles video/x-raw, and the second path is the current path, then the existing code would report only video/x-raw as supported. Fix this by report all allowed caps, even if there is a current path defined. Part-of: 2023-05-09 15:44:02 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Update and improve documentation Part-of: 2023-05-09 16:31:44 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Forward filter caps to internal caps queries Part-of: 2023-05-04 21:20:18 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Rework allowed-caps computation to allow for passthrough paths The rationale is that a passthrough path (= one with no element) behaves as if the switchbin's sink- and srcpad were one. In particular, internal caps queries (needed for computing the allowed caps) then go to the peers instead to path elements. Rework gst_switch_bin_get_allowed_caps () for a clear handling of NULL path elements and for proper dataflow passthrough and caps & accept-caps query handling. Part-of: 2023-05-04 21:18:28 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: switchbin: Improve filter caps application Part-of: 2023-05-03 09:55:27 +0200 Carlos Rafael Giani * gst/switchbin/gstswitchbin.c: * gst/switchbin/gstswitchbin.h: switchbin: Remove leftover drop probe code bits The drop probe was present in early switchbin versions to implement paths that drop dataflow. However, this feature turned out to be too problematic and thus was removed. Some bits remained though. This commit removes those bits and clarifies that in the current switchbin version, a NULL path element instead means passthrough. Part-of: 2024-01-16 16:50:11 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * sys/aja/gstajasink.cpp: * sys/aja/gstajasink.h: ajasink: Add HANC/VANC ancillary data from GstAncillaryMeta Part-of: 2024-01-16 15:19:42 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * sys/aja/gstajasrc.cpp: * sys/aja/gstajasrc.h: ajasrc: Add GstAncillaryMeta for any HANC/VANC ancillary data that is captured Part-of: 2024-02-05 23:35:31 -0500 Daniel Morin * ext/analyticsoverlay/gstobjectdetectionoverlay.c: analyticsoverlay: fix gst-launch exemple - Adapt example to new onnx elements. Part-of: 2024-02-07 21:55:01 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/nvcodec/gstcudaipcclient.cpp: * sys/nvcodec/gstcudaipcserver.cpp: * sys/nvcodec/gstcudaipcsink.cpp: * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvh265encoder.cpp: * sys/nvcodec/gstnvjpegenc.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvcodec: Update plugin cache Updating plugin cache for IPC elements, JPEG encoder, and newly added properties. Also removing Gst*SLDec which does not exist anymore but renamed to Gst*Dec. Part-of: 2024-02-07 12:13:29 +0200 Sebastian Dröge * gst-libs/gst/analytics/gstanalyticsmeta.c: analytics: Allow getting a related meta with ANY type Part-of: 2024-01-31 05:16:39 +1100 Jan Schmidt * gst/mpegtsdemux/tsdemux.c: tsdemux: Detect reaching the end of configured segment If the current segment has a configured stop point, detect when when pad timestamps proceed past that point and mark them as EOS. Otherwise, tsdemux continues streaming the whole input downstream (unless something downstream detects and returns EOS for us) Part-of: 2024-01-25 03:02:59 +1100 Jan Schmidt * gst/mpegtsdemux/mpegtsbase.c: * gst/mpegtsdemux/tsdemux.c: tsdemux: Support segment seeking Add support for segment seeks and posting segment-done for seamless non-flushing looping Part-of: 2024-02-05 23:04:45 +0530 Nirbheek Chauhan * ext/openjpeg/meson.build: meson: Fix several warnings in the build Deprecations, incorrect options, etc. Part-of: 2024-02-06 18:09:02 +0000 Tim-Philipp Müller * meson.build: Back to development Part-of: === release 1.23.1 === 2024-02-06 16:37:19 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-plugins-bad.doap: * meson.build: Release 1.23.1 2024-02-04 12:20:41 +0100 Tim-Philipp Müller * gst-libs/gst/codecparsers/gstav1bitwriter.h: codecparsers: av1bitwriter: fix Since marker ... and add them to the symbol index to make hotdoc happy 2024-02-04 10:20:59 +0100 Tim-Philipp Müller * gst-libs/gst/codecparsers/gsth264parser.h: * gst-libs/gst/codecparsers/gsth265parser.h: codecparsers: document new GstH265Level and GstH264Level enums ... and add them to the symbol index to make hotdoc happy. 2024-02-03 17:43:23 +0100 Tim-Philipp Müller * gst-libs/gst/va/gstvapool.c: va: fix g-i annotation This parameter annotation is unknown :[allow-null-none] None 2024-01-26 04:57:21 +0530 Nirbheek Chauhan * gst/y4m/gsty4mdec.c: y4mdec: Fix some debug log categories Fatal errors should be logged as ERROR, extremely spammy messages should be logged with TRACE Part-of: 2024-01-26 04:26:07 +0530 Nirbheek Chauhan * docs/plugins/gst_plugins_cache.json: * gst/y4m/gsty4mdec.c: y4mdec: Parse extended headers written out by FFmpeg References: https://wiki.multimedia.cx/index.php/YUV4MPEG2 https://github.com/FFmpeg/FFmpeg/blob/eee3b7e2/libavformat/yuv4mpegenc.c#L74-L166 The primary purpose is to add high bit-depth y4m support, which is commonly used for testing codecs. Part-of: 2024-01-26 03:44:44 +0530 Nirbheek Chauhan * gst/y4m/gsty4mdec.c: y4mdec: Simplify header parsing Use string parsing instead of pointer arithmetic, which makes the code easier to understand and less error-prone. This has no functional changes, and is preparation for the next commit, which extends the header parsing. Part-of: 2024-01-17 13:35:48 +0700 sergey radionov * gst-libs/gst/webrtc/nice/nice.c: nice: resolve result should go to nice helper thread Part-of: 2024-02-05 22:27:59 -0500 Daniel Morin * ext/onnx/decoders/gstssdobjectdetector.c: * ext/onnx/gstonnxclient.cpp: onnx: fix, update tensor producer and consumers - Propagate GstTensor.type becoming to GstTensor.data_type to tensor producer (onnx) and consumer (TensorDecoder) Part-of: 2024-02-05 14:59:06 -0500 Olivier Crête * ext/analyticsoverlay/meson.build: analyticsoverlay: Don't error out on lack on dependency in auto mode If the option is set to auto, it shouldn't fail if the dependency is missing. Fixes #3266 Part-of: 2024-02-05 17:14:24 +0200 Sebastian Dröge * sys/aja/gstajasink.cpp: ajasink: Remove workaround for NTV SDK bug that is fixed since a while Part-of: 2024-02-05 14:18:28 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/meson.build: * ext/vulkan/vkh264dec.h: vkh264dec: GST_USE_UNSTABLE_API for plugin compilation The code to include H264 decoder base class header wrongly disabled the unstable API message. This patch fixes it by setting it as a compilation define of the plugin.¡ Part-of: 2024-01-22 16:48:30 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vkupload: remove unused parameter fetching It's not required to create a vulkan buffer to fetch its size since all this handled by internally by the allocator and it was never needed, so it looks like dead code. Let's delete it. Part-of: 2024-02-04 22:06:09 +0700 sergey radionov * ext/webrtc/gstwebrtcbin.c: webrtcbin: it's better to have thread default main context on thread bound to that main context. fixes #3271 Part-of: 2024-02-04 23:25:19 +0900 Seungha Yang * sys/d3d12/gstd3d12-private.h: * sys/d3d12/gstd3d12commandqueue.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/plugin.cpp: d3d12: Fix potential self thread join Fence data could hold GstD3D12Device directly or indirectly. Then if it's holding last refcount, the device object will be released from the device object's internal thread, and will try join self thread. Delegates it to other global background thread to avoid self thread joining. Part-of: 2024-02-02 01:17:43 +0900 Seungha Yang * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12memory: Remove unused method Part-of: 2024-01-25 00:02:30 -0500 Olivier Crête * ext/onnx/decoders/gstobjectdetectorutils.cpp: * ext/onnx/decoders/gstobjectdetectorutils.h: * ext/onnx/decoders/gstssdobjectdetector.c: * ext/onnx/decoders/gstssdobjectdetector.h: * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/meson.build: * ext/onnx/tensor/gsttensormeta.h: onnx: Port SSD detector to C Part-of: 2024-01-24 22:31:21 -0500 Olivier Crête * ext/onnx/decoders/gstobjectdetectorutils.cpp: * ext/onnx/decoders/gstobjectdetectorutils.h: * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/decoders/gstssdobjectdetector.h: * ext/onnx/meson.build: onnx: Only read labels file one and use GIO Part-of: 2024-01-24 21:31:44 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxinference.cpp: * ext/onnx/tensor/gsttensormeta.h: onnx: Add more tensor data types Part-of: 2024-01-24 21:22:47 -0500 Olivier Crête * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/tensor/gsttensormeta.c: * ext/onnx/tensor/gsttensormeta.h: onnx: Remove unecessary gst_tensor_meta_get_all_from_buffer Part-of: 2024-01-24 21:14:39 -0500 Olivier Crête * ext/onnx/tensor/gsttensor.h: * ext/onnx/tensor/gsttensormeta.c: * ext/onnx/tensor/gsttensormeta.h: onnx: Merge tensor into tensor meta file Part-of: 2024-01-25 20:09:19 +0100 Loïc Le Page * docs/plugins/gst_plugins_cache.json: * ext/webp/gstwebpenc.c: * ext/webp/gstwebpenc.h: webpenc: add animation properties - animation background color - number of animation loops Part-of: 2024-01-25 20:06:46 +0100 Loïc Le Page * ext/webp/gstwebpenc.c: webpenc: don't allow changing resolution in animation mode - fails on image resolution changes in animation mode - fails with a log message on invalid color spaces Part-of: 2024-01-25 19:51:53 +0100 Loïc Le Page * ext/webp/gstwebpenc.c: webpenc: fix naming and libwebp API calls - uniformize parameters naming - call symetric init and clear functions systematically from libwebp API Part-of: 2020-10-23 00:15:32 +0200 Mathieu Duponchelle * ext/webp/gstwebpenc.c: * ext/webp/gstwebpenc.h: * ext/webp/meson.build: webpenc: add support for animated WebP The libwebp API doesn't match very well with the GstVideoEncoder API, as it only delivers an unframed bitstream once all pictures have been processed, which means we can only push a single buffer manually on our srcpad on finish(). Supporting animated webp is still valuable, and the feature is behind an opt-in property. Part-of: 2024-02-01 18:03:58 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: analytics: Always return a string from mtd_type_get_name() It makes it easier to use in printf() style strings without worrying about getting a NULL. Part-of: 2023-10-05 16:01:40 +0200 Jonas K Danielsson * tests/check/elements/srt.c: * tests/check/meson.build: srt: Add basic check test of srt[src|sink] Add some basic tests for the srtsrc and the srtsink and set us up for more advanced tests down the road. Part-of: 2023-09-13 10:42:45 +0200 Jonas K Danielsson * ext/srt/gstsrtobject.c: srt: Add more fields to application/x-srt-statistics In order to see how many packets where retransmitted and how many was dropped we add some new fields. Please see https://github.com/Haivision/srt/blob/master/docs/API/statistics.md For details about the new fields. Part-of: 2024-02-02 00:18:56 +0100 Heiko Becker * ext/neon/meson.build: neon: Allow building against neon 0.33.x From its NEWS file: "API and ABI backwards-compatible with 0.27.x and later" Part-of: 2024-01-31 15:22:37 +0000 Philippe Normand * ext/srtp/gstsrtpenc.c: srtpenc: Fix potential leak When attempting to process a buffer after the rtcp session was closed the output buffer memory would remain referenced. Part-of: 2023-12-05 21:11:31 -0500 Daniel Morin * docs/plugins/gst_plugins_cache.json: * ext/analyticsoverlay/gstanalyticsoverlay.c: * ext/analyticsoverlay/gstobjectdetectionoverlay.c: * ext/analyticsoverlay/gstobjectdetectionoverlay.h: * ext/analyticsoverlay/meson.build: * ext/meson.build: * meson_options.txt: analyticsoverlay: add object-detection overlay - Overlay analytics-meta-od attached to video buffer Part-of: 2024-01-29 22:26:09 -0500 Daniel Morin * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsclassificationmtd.h: analytics: Change indexes type from i32 -> gsize - gst_analytics_cls_mtd_get_length() return a gsize, this type dicated index type for gst_analytics_cls_mtd_get_quark() and gst_analytics_cls_mtd_get_level(). - Minor cleanup/improvement on index validation. Part-of: 2024-01-29 22:13:36 -0500 Daniel Morin * tests/check/libs/analyticsmeta.c: analytics: add test for OD confidence level retrieval Part-of: 2024-01-29 22:11:17 -0500 Daniel Morin * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h: analytics: add api on OD to retrieve bbox confidence - Add a specific api to retrieve bbox confidence level without having to retrieve it's location. Part-of: 2024-01-30 02:58:03 +0900 Seungha Yang * sys/nvcodec/gstnvjpegenc.cpp: * sys/nvcodec/gstnvjpegenc.h: * sys/nvcodec/meson.build: * sys/nvcodec/plugin.c: nvcodec: Add JPEG encoder Adding nvJPEG library based JPEG encoder element Part-of: 2024-01-30 23:17:28 +0900 Seungha Yang * sys/nvcodec/gstcudafilter.c: * sys/nvcodec/gstcudafilter.h: * sys/nvcodec/meson.build: * sys/nvcodec/plugin.c: nvcodec: Move runtime compiler check to plugin init function Required information for other elements Part-of: 2024-01-12 08:00:31 -0300 Thibault Saunier * docs/plugins/gst_plugins_cache.json: * gst/autoconvert/gstautodeinterlace.c: * gst/autoconvert/plugin.c: bad: Update plugins cache Part-of: 2023-05-19 18:37:14 -0400 Thibault Saunier * gst/autoconvert/gstbaseautoconvert.c: * gst/autoconvert/gstbaseautoconvert.h: auto: Reuse subbins instead of recreating them over and over Part-of: 2023-10-10 16:05:34 -0300 Thibault Saunier * gst/autoconvert/gstautovideoconvert.c: autoconvert: Force raw memory when using videoconvertscale videoconvertscale advertises `ANY` feature, but it supports it only in passthrough. Our goal with autoconvert is to ensure that conversion is possible with the elements that are being plugged so we avoid plugging `videoconvertscale` if the memory type is not system memory. Part-of: 2023-04-29 00:33:26 +0200 Thibault Saunier * gst/autoconvert/gstautovideoconvert.c: autovideoconvert: Use cudaconvert for formats not allowed by glcolorconverts There are some pixel formats supported by `cudaconvert` but not `glcolorconvert` so prefer using `cudaconvert` for those cases rather than using `videoconvertscale` and system memory Part-of: 2023-04-24 15:54:47 -0400 Thibault Saunier * gst/autoconvert/gstautovideoflip.c: * gst/autoconvert/gstautovideoflip.h: * gst/autoconvert/meson.build: * gst/autoconvert/plugin.c: auto: Add an 'autovideoflip' element Part-of: 2023-04-18 18:13:54 -0400 Thibault Saunier * gst/autoconvert/gstbaseautoconvert.c: autoconvert: Accept new caps when they are exactly equal to previous ones That basically was overlooked as the code was clearly intending to do that Part-of: 2023-03-31 17:14:19 -0300 Thibault Saunier * gst/autoconvert/gstautodeinterlace.c: * gst/autoconvert/gstautodeinterlace.h: * gst/autoconvert/gstautovideo.c: * gst/autoconvert/gstautovideo.h: * gst/autoconvert/gstautovideoconvert.c: * gst/autoconvert/gstautovideoconvert.h: * gst/autoconvert/meson.build: * gst/autoconvert/plugin.c: auto: Add a gstautodeinterlace element Which can do colorspace conversion if necessary. Part-of: 2023-03-31 13:28:09 -0300 Thibault Saunier * gst/autoconvert/gstautoconvert.c: * gst/autoconvert/gstautovideoconvert.c: * gst/autoconvert/gstautovideoconvert.h: * gst/autoconvert/gstbaseautoconvert.c: * gst/autoconvert/gstbaseautoconvert.h: * tests/validate/autovideoconvert/renegotiate.validatetest: * tests/validate/autovideoconvert/renegotiate/flow-expectations/log-^convert-src569JNRXZghikmsexpected: autovideoconvert: Handle passing bin description instead of factories This way we can build our own well know bins for conversion keeping the code simple. Part-of: 2023-03-30 17:04:58 -0300 Thibault Saunier * gst/autoconvert/gstautoconvert.c: * gst/autoconvert/gstautoconvert.h: * gst/autoconvert/gstbaseautoconvert.c: * gst/autoconvert/gstbaseautoconvert.h: * gst/autoconvert/meson.build: autoconvert: Factor out a new GstBaseAutoConvert class Part-of: 2022-03-28 19:09:56 +0200 Thibault Saunier * gst/autoconvert/gstautovideoconvert.c: auto: Expose colorspace and scaler elements for well know elements And require Scaler in the class of elements to be plugged by autovideoconvert Part-of: 2021-05-25 20:44:46 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: * tests/validate/autovideoconvert/renegotiate.validatetest: * tests/validate/autovideoconvert/renegotiate/flow-expectations/log-convert-src-expected: * tests/validate/meson.build: autoconvert: Handle reconfiguring on the srcpad Only upstream renegotiation was properly handled, we needed to answer that when downstream forces a renegotiation we take into account the new downstream restrictions. And add tests for it Part-of: 2021-05-24 16:07:41 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: autoconvert: Remove unused elements from the bin Instead of letting all the elements that were added into the bin, add them only when strictly needed and removed them when we stop using them. With previous refactoring we are keeping them in our own hashmap in amy case so we can keep reusing the same elements as before. Part-of: 2021-05-21 23:06:34 -0400 Thibault Saunier * gst/autoconvert/gstautovideoconvert.c: autovideoconvert: Ignore elements with rank == NONE Part-of: 2021-05-21 22:25:15 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: autoconvert: Fix the way we compare element types We used to conside elements that were subclassses of another element type as being the same (for example with videoconvertscale, bother videoconvert and videoscale are subclasses of videoconvertscale and that code was lost) Part-of: 2021-05-20 23:46:15 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: * gst/autoconvert/gstautoconvert.h: autoconvert: Stop using qdata and unsafe weak refs We are still using internal pads that are not added to the bin but we now have a subclass and avoid qdata and weak refs as they are not MT safe. Part-of: 2021-05-20 18:50:46 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: * gst/autoconvert/gstautoconvert.h: * gst/autoconvert/gstautovideoconvert.c: * gst/autoconvert/gstautovideoconvert.h: autovideoconvert: Make it a subclass of GstAutoConvert Instead of a wrapper, making it much simpler. Part-of: 2021-05-20 18:13:27 -0400 Thibault Saunier * docs/plugins/gst_plugins_cache.json: * gst/autoconvert/gstautoconvert.c: * gst/autoconvert/meson.build: autoconvert: Add a 'factory-names' property Making the element more gst-launch friendly. This also stop trying to handle usage of ->factories atomic and instead use the object lock to handle them. Part-of: 2021-05-20 17:37:47 -0400 Thibault Saunier * gst/autoconvert/gstautoconvert.c: autoconvert: Remove not thread safe use of ->current_subelement Part-of: 2021-05-20 17:22:32 -0400 Thibault Saunier * gst/autoconvert/gstautovideoconvert.c: autoconvert: Stop using generic element name It makes it harder to debug for no real benefice in the case Part-of: 2024-01-24 17:11:34 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcaps.c: msdk: Use gst_video_info_dma_drm_to_video_info to extract video info Note that we need mappings for all drm_fourcc, otherwise we will get GST_VIDEO_FORMAT_UNKNOWN for some formats... Part-of: 2024-01-30 22:18:06 +0800 He Junyan * sys/va/gstvabaseenc.c: va: baseenc: Fix the wrong parameter order to call va_map_buffer() The current gst_va_base_enc_copy_output_data() uses wrong parameter order to call va_map_buffer(). Part-of: 2024-01-29 23:25:35 +0900 Seungha Yang * gst-libs/gst/cuda/stub/cuda.h: * sys/nvcodec/gstnvbaseenc.c: * sys/nvcodec/gstnvencobject.cpp: * sys/nvcodec/plugin.c: cuda: Report device open error Call gst_cuda_result() with CUDA_ERROR_NO_DEVICE error code if we could not open device, so that application can catch the error Part-of: 2024-01-29 23:20:39 +0900 Seungha Yang * gst-libs/gst/cuda/stub/cuda.h: cuda: Use cuStreamDestroy_v2 API Sync up with CUDA 11.x/12.0 header Part-of: 2024-01-29 21:37:26 +0900 Seungha Yang * sys/nvcodec/gstcudaipc.cpp: * sys/nvcodec/gstcudaipc.h: * sys/nvcodec/gstcudaipcclient.cpp: * sys/nvcodec/gstcudaipcclient.h: * sys/nvcodec/gstcudaipcclient_unix.cpp: * sys/nvcodec/gstcudaipcclient_win32.cpp: * sys/nvcodec/gstcudaipcserver.cpp: * sys/nvcodec/gstcudaipcserver.h: * sys/nvcodec/gstcudaipcsink.cpp: * tests/examples/nvcodec/cudaipc.c: * tests/examples/nvcodec/meson.build: cudaipc: Add support for custom meta forwarding Forward custom meta to peer ipcsrc elements Part-of: 2024-01-24 19:12:57 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: vkformat: fetch correctly feature flags2 Feature flags2 are fetch through VkFormatProperties3KHR and needs more guards checking. Moved out all the feature flags fetching to another function for clarity. Part-of: 2023-09-13 11:10:56 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: vkformat: use VK_KHR_get_physical_device_properties2 to guard and VK_KHR_format_feature_flags2 rather than a meaningless version handling. Also the patch brings back the usage of features2 for video extensions, use KHR version to support the guarded symbols. Part-of: 2024-01-18 18:35:21 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkdownload.c: * ext/vulkan/vkupload.c: * gst-libs/gst/vulkan/gstvkvideofilter.c: vulkan: early return if gst_buffer_pool_set_config() fails Part-of: 2022-09-12 14:48:50 +0800 He Junyan * sys/va/gstvaav1enc.c: * sys/va/gstvaav1enc.h: * sys/va/meson.build: * sys/va/plugin.c: va: Implement the vaav1enc plugin Part-of: 2023-06-11 20:17:19 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: va: baseenc: Extend the create_output_buffer() to accept prefix data Part-of: 2022-11-10 20:36:05 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: va: encoder: Add copy_output_data() helper function Part-of: 2022-11-10 17:00:28 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: va: encoder: extend prepare_output() virtual function The output of VP9 and AV1 encoder is a little different from the H264 and H265 encoder, it may contain repeat frames and so the output frame number may be more than the input. We need to call finish_subframe() when some frame will be repeated later. So we need to extend the current prepare_output() virtual function. Part-of: 2022-07-19 17:39:30 +0800 He Junyan * tests/check/libs/av1bitwriter.c: * tests/check/meson.build: tests: Add the av1 bit code writer test case Part-of: 2022-07-19 17:33:13 +0800 He Junyan * gst-libs/gst/codecparsers/gstav1bitwriter.c: * gst-libs/gst/codecparsers/gstav1bitwriter.h: * gst-libs/gst/codecparsers/meson.build: codecparsers: Implement the AV1 bit code writer Part-of: 2022-09-12 11:17:25 +0800 He Junyan * gst-libs/gst/codecparsers/gstav1parser.h: codecparsers: av1: add ref_global_motion_params in frame header In order to ease the AV1 bit writer to write the global_motion_params when primary_ref_frame is enabled, we need to add this field to set the global_motion_params of the reference frame. Part-of: 2022-07-19 17:25:50 +0800 He Junyan * gst-libs/gst/codecparsers/gstav1parser.h: codecparsers: av1: add expected_frame_id in frame header We need it to ease the bit code writing of AV1 frame header. Part-of: 2024-01-28 20:52:40 -0500 Daniel Morin * gst/videoparsers/gsth264parse.c: h264parse: Remove un-needed check on SPS state Fixes #3254 - Having SEI before SPS is not an issue anymore with AU boundary detection based on backlog. Part-of: 2024-01-23 15:34:15 +0100 Robert Mader * gst-libs/gst/va/gstvaallocator.c: vaallocator: Allow non-linear modifiers for dummy mem_maps A client may map dmabufs without the intention to either read or write to the memory. One example is clients wanting to use the `gst_video_frame_map()` helper function. Thus, in order to make buffers from `GstVaDmabufAllocator` conveniently usable, ignore the modifier check if the client specified neither `GST_MAP_READ` nor `GST_MAP_WRITE`. Also skip the `va_sync_surface()` call in that case, as it's likely only needed for CPU reads/writes. Part-of: 2024-01-25 16:16:03 -0500 Nicolas Dufresne * gst-libs/gst/vulkan/gstvkvideo-private.c: vulkan: Fix clang compiler warning clang does not like the array index assignment without the `=` sign in it. This is a gnu extension I believe, and adding the sign is proper. This fixes the following two warnings: ``` ../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:32:40: warning: use of GNU 'missing =' extension in designator [-Wgnu-designator] [GST_VK_VIDEO_EXTENSION_DECODE_H264] { ^ = ../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:36:40: warning: use of GNU 'missing =' extension in designator [-Wgnu-designator] [GST_VK_VIDEO_EXTENSION_DECODE_H265] { ^ = ``` Part-of: 2023-12-19 19:00:57 +0900 Seungha Yang * sys/qsv/gstqsvh264enc.cpp: qsvh264enc: Always specify field order qsv runtime will report error when encoding interlaced stream if session was initialized with unknown field order but tff/bff is specified in per frame encoding parameter. Part-of: 2024-01-25 22:25:19 +1100 Jan Schmidt * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/utils.c: * ext/webrtc/utils.h: webrtcbin: Improve SDP intersection for Opus Remove optional sprop-stereo and sprop-maxcapture fields from Opus remote offer caps before intersecting with local codec preferences. According to https://datatracker.ietf.org/doc/html/rfc7587#section-7.1 those fields are sender-only informative, and don't affect interoperability. Fixes cases where the webrtc media will end up receive-only if the local side wants to send stereo but the remote is sending mono, or vice versa. There may be other fields in other codecs, so the implementation anticipates needing to add further fields and codecs in the future. Part-of: 2024-01-25 02:17:36 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/dxva/gstdxvampeg2decoder.cpp: * gst-libs/gst/dxva/gstdxvampeg2decoder.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12mpeg2dec.cpp: * sys/d3d12/gstd3d12mpeg2dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add MPEG-2 decoder Most of code additions are just gluing already implemented GstDxva and GstD3D12Decoder interfaces Part-of: 2024-01-18 21:56:35 +1100 Jan Schmidt * gst/timecode/gsttimecodestamper.c: timecodestamper: Improve error handling and don't crash Post a bus message explaining that input buffers must have timestamps and return GST_FLOW_ERROR, instead of a confusing NOT-NEGOTIATED Also remove an errant buffer unref in the error handling that would lead to crashes after. Part-of: 2024-01-16 02:52:49 +1100 Jan Schmidt * gst/timecode/gsttimecodestamper.c: timecodestamper: Don't do finalizing in dispose Add a finalize method and release locks and things in there, instead of in the dispose method. Dispose may be called multiple times, at any time, and should just safely release references to other memory that might reference it back. In this case, timecodestamper would later crash in the element dispose method trying to take the freed mutex from gst_timecodestamper_release_pad(). Part-of: 2024-01-24 17:58:29 +0100 Ruben Gonzalez * sys/va/meson.build: SA: Remove extra check since libva min version is 1.12 The libva version was updated to 1.12 in PR 4781 [1] [1] https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4781 NOTE: I also sort va_sources Part-of: 2024-01-24 12:36:48 +0000 Philippe Normand * gst/videoparsers/gstvp9parse.c: vp9parse: Fix critical warning during caps negotiation `gst_pad_get_allowed_caps()` returns a non-writable caps, so we need to make it writable, otherwise the `gst_caps_remove_structure()` call below might trigger a critical warning. Part-of: 2024-01-23 23:58:53 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: d3d12av1dec: Fix object type name on multi-gpu system Fixing typo Part-of: 2023-10-23 17:10:54 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdecoder.c: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: vulkan video: add GST_VK_VIDEO_EXTENSIONS enum To avoid using mysterious value, use an enum to show the valid value in _vk_codec_extensions Part-of: 2023-10-30 16:16:34 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: also get features in the fallback case Part-of: 2023-10-30 15:53:44 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: don't assign an uneeded boolean We don't actually need the basics_primary/secondary boolean. The returned format is decided by the requested usage with fallbacks as necessary. Part-of: 2023-10-30 15:52:44 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: there is no current need to use the 64-bit feature flags All of our feature flags are currently covered by the first VkFormatFeatureFlag enum so far. Part-of: 2023-10-30 14:59:33 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: correct fallback features in from_video_info_2 The features were not actually used and were written into a boolean value. Part-of: 2024-01-10 03:33:59 +0900 Seungha Yang * gst-libs/gst/codecparsers/gstav1parser.c: av1parser: Fix potential stack overflow during tile list parsing The tile_count_minus_1 must be less than or equal to 511 as specified in spec "6.11.1 General tile list OBU semantics" Fixes #3214 / CVE-2024-0444 / ZDI-CAN-22873 Part-of: 2024-01-23 11:47:31 +0000 Daniel Stone * gst-libs/gst/wayland/meson.build: wayland: Actually use wayland-protocols version dep Closes: #3242 Part-of: 2022-06-26 17:44:33 +0100 Daniel Stone * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwlwindow.c: * gst-libs/gst/wayland/meson.build: gstwayland: Support wp_single_pixel_buffer_v1 This protocol does what it says on the box, avoiding the need for a 1x1 wl_shm buffer. A wayland-projects wrap has been added for users who do not have v1.26 available. This commit was partly authored by Robert Mader. Part-of: 2024-01-21 19:43:18 +0900 Seungha Yang * sys/d3d12/gstd3d12h264enc.cpp: d3d12h264enc: Fix profile support check Add missing CheckFeatureSupport() call, and remove unused field Part-of: 2024-01-22 18:58:44 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12: Pass target rectangle to ClearRenderTargetView() Some drivers seem to be crashing if ClearRenderTargetView() is called for P010/P016 texture's second subresource (UV plane) without specified target rectangle. Part-of: 2024-01-06 21:26:46 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12-private.h: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12dpbstorage.cpp: * sys/d3d12/gstd3d12dpbstorage.h: * sys/d3d12/gstd3d12encoder.cpp: * sys/d3d12/gstd3d12encoder.h: * sys/d3d12/gstd3d12encoderbufferpool.cpp: * sys/d3d12/gstd3d12encoderbufferpool.h: * sys/d3d12/gstd3d12h264enc.cpp: * sys/d3d12/gstd3d12h264enc.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: * tests/examples/d3d12/d3d12enc-dynamic-reconfigure.c: * tests/examples/d3d12/meson.build: * tests/examples/meson.build: d3d12: Add H.264 video encoder Adding video encoder element Part-of: 2024-01-15 16:05:07 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkdec.c: msdkdec: Fix leaks Part-of: 2024-01-17 20:35:26 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix PAUSED->READY deadlock when output loop is running Explicitly calls gst_vtenc_pause_output_loop when going PAUSED->READY to make sure GST_PAD_STREAM_LOCK is not taken. Before this change, a deadlock would occur if pipeline got stopped right after one output buffer was generated by vtenc. Part-of: 2023-12-06 21:25:44 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Handle malformed avc/avc3 packets Packetized stream format should not contain start-code prefix in bitstream and each [nal-length-byte, nal-byte] unit should consist of single nal unit. But there are malformed streams in the world. Use newly added gst_h264_parser_identify_and_split_nalu_avc() method to identify each nal unit. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3219 Part-of: 2023-12-06 21:23:08 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth264parser.h: * tests/check/libs/h264parser.c: h264parser: Add gst_h264_parser_identify_and_split_nalu_avc() method Equivalent to _split_nalu_hevc() method in h265parser. This method will scan start-code prefix and split into individual NAL units if start-code prefix is detected Part-of: 2024-01-10 15:11:33 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: Let msdk base decoder maintain the output_state Part-of: 2024-01-12 14:42:29 +0000 Chris Spencer * gst-libs/gst/vulkan/gstvkmemory.c: * gst-libs/gst/vulkan/gstvkmemory.h: vkmemory: don't map memory more than once vkMapMemory may not be called on a memory object that is already host-mapped. If the gstreamer memory object is mapped more than once then reuse the existing Vulkan mapping. Part-of: 2023-12-20 13:25:51 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpputil.c: msdkvpp: Fix dma caps negotiation Modify the fix_output_format in vpp to directly generate caps with negotiated src caps, and we have the correct dma caps negotiation in fix_output_format function. And thus, we can remove the redundant negotiation of using function pad_accept_memory in vpp. Part-of: 2024-01-11 22:20:28 +0900 Seungha Yang * gst/videoparsers/gsth264parse.c: h264parse: Fix AU collection If remaining NALUs are expected to be drained in the current process_frame() loop, do not adjust offsets. Otherwise NALU data will point to random byte position and it would be broken data. Part-of: 2024-01-14 21:22:39 +0900 Seungha Yang * sys/d3d12/gstd3d12memory.cpp: d3d12memory: Don't use persistent staging buffer map Persistent map is not recommended in case of readback Part-of: 2024-01-14 19:32:43 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12memory-private.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12decoder: Use D3D12_HEAP_FLAG_CREATE_NOT_ZEROED flag Since the first access to a texture is always write, zero initialization is unnecessary Part-of: 2024-01-04 15:23:54 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnxinference: Return caps based on model preference when possible This should enable zero-copy when the model has the right type Part-of: 2024-01-04 15:07:10 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: Use the element pointer for debug message Part-of: 2024-01-04 14:56:41 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: Extract data type from the model itself Part-of: 2023-11-28 14:07:32 +0000 Chris Spencer * ext/vulkan/vkh264dec.c: * gst-libs/gst/vulkan/gstvkdecoder.c: * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkimagebufferpool.h: * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkimagememory.h: * sys/applemedia/iosurfacevulkanmemory.c: * tests/check/libs/vkimagebufferpool.c: * tests/check/libs/vkvideodecode.c: vkimagebufferpool: allow specifying initial image layout The pool currently defaults to performing a layout transition to VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, with some special exceptions for video usages. This may not be a legal transition depending on the usage. Provide an API to explicitly control the initial image layout. Part-of: 2023-08-30 10:56:19 -0600 Scott Moreau * gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c: * gst-libs/gst/wayland/gstwlwindow.c: gst-launch: accept option to set program name The option --prog-name="PROGRAM-NAME" can be passed to set the program name. The program name is used by gtk and gstreamer to set the class or app-id. Part-of: 2023-02-16 15:48:32 +0100 Víctor Manuel Jáquez Leal * docs/plugins/gst_plugins_cache.json: * gst/jpegformat/gstjpegparse.c: jpegparse: bump to primary rank Also updates medias modules for CI. Fixes: #1775 Part-of: 2023-11-12 02:37:58 +0700 Ratchanan Srirattanamet * sys/androidmedia/jni/gstamc-jni.c: * sys/androidmedia/meson.build: * sys/androidmedia/ndk/gstamc-codec-ndk.c: * sys/androidmedia/ndk/gstamc-format-ndk.c: * sys/androidmedia/ndk/gstamc-internal-ndk.h: * sys/androidmedia/ndk/gstamc-ndk.h: androidmedia: add NDK implementation of Android MediaCodec This reduces the amount of Java <-> native calls, which should reduce overhead a bit. It also paves a way to share the code between Android and a libhybris-based backend (where GNU/Linux system uses Android driver) in the future. Bug: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1242 Part-of: 2023-11-12 02:32:21 +0700 Ratchanan Srirattanamet * sys/androidmedia/gstamc-codec.c: * sys/androidmedia/gstamc-codec.h: * sys/androidmedia/gstamc-format.c: * sys/androidmedia/gstamc-format.h: * sys/androidmedia/jni/gstamc-codec-jni.c: * sys/androidmedia/jni/gstamc-format-jni.c: * sys/androidmedia/jni/gstamc-jni.c: * sys/androidmedia/jni/gstamc-jni.h: * sys/androidmedia/magicleap/gstamc-codec-ml.c: * sys/androidmedia/magicleap/gstamc-format-ml.c: * sys/androidmedia/magicleap/gstamc-internal-ml.h: * sys/androidmedia/magicleap/gstamc-ml.c: * sys/androidmedia/meson.build: androidmedia: allow multiple implementations of codec and format When implementing NDK media support, it would be useful to also have JNI implementation in the same binary as NDK media compatibility is lower. As such, implement a rudimentary vtable system for gstamc-codec and gstamc-format, and allow choosing the implementation at static_init() time. Part-of: 2023-11-12 02:27:22 +0700 Ratchanan Srirattanamet * sys/androidmedia/gstamc-codec.h: * sys/androidmedia/gstamc-codeclist.h: * sys/androidmedia/gstamc-format.h: * sys/androidmedia/gstamc.c: * sys/androidmedia/gstamc.h: * sys/androidmedia/gstamcsurfacetexture.h: * sys/androidmedia/jni/gstamc-codec-jni.c: * sys/androidmedia/jni/gstamc-codeclist-jni.c: * sys/androidmedia/jni/gstamc-format-jni.c: * sys/androidmedia/jni/gstamc-jni.c: * sys/androidmedia/jni/gstamc-jni.h: * sys/androidmedia/jni/gstamcsurfacetexture-jni.c: * sys/androidmedia/magicleap/gstamc-codec-ml.c: * sys/androidmedia/magicleap/gstamc-codeclist-ml.c: * sys/androidmedia/magicleap/gstamc-format-ml.c: * sys/androidmedia/magicleap/gstamc-ml.c: * sys/androidmedia/magicleap/gstamc-surfacetexture-ml.c: * sys/androidmedia/meson.build: androidmedia: call all static_init() functions from single entry point This allows the implementations to do custom logic behind the hood. For example, when NDK implementation is added, the entrypoint can chooses to statically initialize the NDK implementations or the JNI one. Part-of: 2023-12-21 11:49:12 +0100 Stéphane Cerveau * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: codecparsers: add slice type name for h265 Add a method to convert the slice type to a descriptive name. Part-of: 2023-12-20 17:03:34 +0100 Stéphane Cerveau * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth264parser.h: codecparsers: add helper methods for h264 Add two helper methods to convert profile and slice types Part-of: 2023-12-04 16:34:42 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkvpp.c: msdk: Fix memory leaks Part-of: 2024-01-05 13:54:21 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/meson.build: analytics: Implement scale meta transform for Object detection meta Part-of: 2024-01-04 19:27:22 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsclassificationmtd.h: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h: * tests/check/libs/analyticsmeta.c: analytics: Replace type quark with opaque struct pointer This way, we can add function pointers in there for things like transformations. Part-of: 2023-12-22 19:45:35 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: analyticsmeta: Make the GstAnalyticsRelatableMtdData struct private Only ask the subclass about how much space they need, this way we can keep the allocation details more private. Part-of: 2023-10-30 16:40:47 +0100 Stéphane Cerveau * ext/vulkan/vkh264dec.c: * gst-libs/gst/vulkan/gstvkdecoder.c: * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: * tests/check/libs/vkvideodecode.c: vulkan: decoder: create union for profile usage As a profile can include a VkVideoDecodeUsageInfoKHR or VkVideoEncodeUsageInfoKHR, use union to separate the both. Part-of: 2024-01-10 12:40:54 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: va: basedec: fix return type Part-of: 2024-01-08 11:09:51 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcaps.c: msdk: Modify the caps order when register plugins With this patch, the caps is registered in the order of memory features as: VAMemory, DMABuf then raw caps in linux path, and D3D11Memory then raw caps in windows path. It helps to prioritize the video memory for all msdk elements when doing negotiation. Part-of: 2024-01-09 10:30:00 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: * sys/msdk/gstmsdkvc1dec.c: * sys/msdk/gstmsdkvp8dec.c: msdk: Remove useless function for vp8dec and vc1dec in windows path Part-of: 2024-01-07 16:43:19 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: v4l2codecs: Always chain up to parent decide_allocation function for all codecs Apply the changes to the codecs previously left out, fixing playback issues seen with VP9. See: 70ff80a873 ("v4l2codecs: Always chain up to parent decide_allocation function") Part-of: 2024-01-08 23:45:58 +0100 Robert Mader * sys/v4l2codecs/gstv4l2codecav1dec.c: v4l2codecs/av1decoder: Allow output caps to be updated To bring AV1 in line - needed for the next commit. See: d3c5fc815e ("v4l2codecs: Allow output caps to be updated") Part-of: 2024-01-05 14:32:00 +0100 Stéphane Cerveau * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth265bitwriter.c: * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/nalutils.c: * gst-libs/gst/codecparsers/nalutils.h: gstutils: add gst_util_ceil_log2 Move ceil_log2 from nalutils.* to gstutils.* Part-of: 2024-01-09 22:40:55 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Release decoder and heap on stop Sometimes driver crash happens if ID3D12VideoDevice got closed first, and then ID3D12VideoDecoderHeap/ID3D12VideoDecoder are released. Part-of: 2024-01-09 20:44:33 +0900 Seungha Yang * sys/d3d12/gstd3d12window.cpp: d3d12videosink: Fix crash on set_buffer() set_buffer() can be called with null buffer Part-of: 2024-01-09 20:27:36 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12testsrc.cpp: d3d12: Fix warnings reported by debug layer Fixing below debug layer report ID3D12Device::CreateCommittedResource: Ignoring InitialState D3D12_RESOURCE_STATE_COPY_DEST. Buffers are effectively created in state D3D12_RESOURCE_STATE_COMMON. Buffer resource will be automatically promoted to D3D12_RESOURCE_STATE_COPY_DEST at the very first COPY operation time. Part-of: 2024-01-09 20:18:38 +0900 Seungha Yang * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12compositor.cpp: * sys/d3d12/gstd3d12convert.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12dxgicapture.cpp: * sys/d3d12/gstd3d12fencedatapool.cpp: * sys/d3d12/gstd3d12fencedatapool.h: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12testsrc.cpp: * sys/d3d12/gstd3d12window.cpp: d3d12: Simplify fence data setup Adding COM and GstMiniObject specific methods to skip passing free function pointer Part-of: 2024-01-09 19:45:16 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: d3d12device: Print live objects on finalize() The report from debug layer can help tracing resource leak Part-of: 2024-01-06 21:15:13 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Set buffer flag on output buffer ... and remove unnecessary condition check Part-of: 2024-01-06 19:31:01 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12videosink.cpp: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/gstd3d12window.h: d3d12videosink: Add gamma, primaries and sampling filter properties Add properties to control conversion methods Part-of: 2024-01-06 19:05:33 +0900 Seungha Yang * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12converter.h: * sys/d3d12/gstd3d12pluginutils.cpp: * sys/d3d12/gstd3d12pluginutils.h: * sys/d3d12/gstd3d12videosink.cpp: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/gstd3d12window.h: d3d12videosink: Add support for 3D transformation Add x, y, and z axis rotation with scaling support Part-of: 2024-01-05 20:40:33 +0900 Seungha Yang * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12pluginutils.cpp: * sys/d3d12/gstd3d12pluginutils.h: * sys/d3d12/gstd3d12videosink.cpp: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/gstd3d12window.h: d3d12videosink: Add support for MSAA Adding "msaa" property to support MSAA rendering Part-of: 2024-01-05 21:22:00 +0900 Seungha Yang * sys/d3d12/gstd3d12videosink.cpp: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/gstd3d12window.h: d3d12videosink: Add support for fullscreen mode Adding "fullscreen-on-alt-enter" and "fullscreen" properties so that use can control fullscreen mode switch Part-of: 2024-01-05 21:25:32 +0900 Seungha Yang * sys/d3d11/gstd3d11dxgicapture.cpp: d3d11screencapturesrc: Hide symbols Fix potential linking error in case of static build Part-of: 2024-01-02 01:05:23 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12dxgicapture.cpp: * sys/d3d12/gstd3d12dxgicapture.h: * sys/d3d12/gstd3d12screencapture.cpp: * sys/d3d12/gstd3d12screencapture.h: * sys/d3d12/gstd3d12screencapturedevice.cpp: * sys/d3d12/gstd3d12screencapturedevice.h: * sys/d3d12/gstd3d12screencapturesrc.cpp: * sys/d3d12/gstd3d12screencapturesrc.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add screen capture element Since DXGI desktop duplication API does not work with Direct3D12 device, this element will use Direct3D11 device to acquire frame. Then other rendering operations (e.g., texture copy, render pipeline) will happen using Direct3D12 API Part-of: 2024-01-04 14:07:05 -0500 Olivier Crête * ext/onnx/gstonnxclient.cpp: onnxinference: Fix leak of the output tensors Part-of: 2024-01-04 14:06:44 -0500 Olivier Crête * ext/onnx/decoders/gstssdobjectdetector.cpp: onnx: Fix leak in ssdobjectdetector decoder Part-of: 2024-01-03 13:20:09 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: msdkvpp: Remove passthrough condition in propose_allocation According to basetransform func: gst_base_transform_do_bufferpool, it is the upstream to decide if it needs a bufferpool from vpp, so we don't need passthrough condition in subclass propose_allocation. Part-of: 2023-12-22 15:58:20 -0500 Daniel Morin * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: h264parse: use AUD to detect first VCL NAL - Fix skipsize on _update_backlog failure. - Add robustness to AU completion detection by using AUD when present. If we've received a AUD we overwrite the first VCL NAL detection when the result was negative. VCL following AUD is the first VCL of next AU. Part-of: 2023-12-29 10:23:16 +0200 Sebastian Dröge * ext/codec2json/gsth2652json.c: h2652json: Fix mix-up of different enum types Part-of: 2024-01-03 02:03:23 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Try zero-copy in case of reverse playback too In case of tier 1 decoder, always use reference-only picture to avoid fixed-size pool limitation and output decoded picture without copy even for negative rate. Also do not use copy queue for GPU to GPU copy. Copy queue is specialized for upload/download and may occupy PCIE bandwidth. Use direct queue as recommended by vendors. Part-of: 2024-01-03 00:36:05 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Fix crash on flush On flush event, baseclass will discard all pictures from DPB but there can be still in-flight commands not finished yet. Use our command queue, allocator and fence data helper objects to keep resource available during command execution. Part-of: 2024-01-03 01:15:27 +0900 Seungha Yang * sys/d3d12/gstd3d12commandallocatorpool.cpp: * sys/d3d12/gstd3d12commandallocatorpool.h: d3d12: Add {set,get}_user_data() methods to command allocator Part-of: 2024-01-02 23:36:48 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Fix barrier usage Common state promotion and decay does not seem to be applied to decoder commands. Use barriers explicitly Part-of: 2023-12-18 16:52:13 +0100 Edward Hervey * docs/plugins/gst_plugins_cache.json: * gst/dvdspu/gstdvdspu.c: dvdspu: Support all video caps for "ANY" feature Part-of: 2013-08-30 22:08:01 +0200 Arnaud Vrac * gst/dvdspu/gstspu-vobsub.c: * gst/dvdspu/gstspu-vobsub.h: dvdspu: handle frame size event from upstream An IDX file or codec_data normally contains the original frame size of the video. Allow upstream to provide this information by sending a custom event, which will allow scaling the overlay correctly. Part-of: 2013-09-02 17:48:50 +0200 Arnaud Vrac * gst/dvdspu/gstdvdspu.c: * gst/dvdspu/gstdvdspu.h: dvdspu: cache overlay composition This avoids rendering the overlay buffer for each video frame. Part-of: 2013-01-23 17:59:01 +0100 Arnaud Vrac * gst/dvdspu/gstdvdspu.c: * gst/dvdspu/gstdvdspu.h: dvdspu: negotiate overlay composition meta with downstream This allows attaching the overlay composition as a meta on the video buffer instead of blending with the video. Part-of: 2015-04-07 14:38:08 +0200 Arnaud Vrac * gst/dvdspu/gstdvdspu.c: * gst/dvdspu/gstspu-common.h: * gst/dvdspu/gstspu-pgs.c: * gst/dvdspu/gstspu-vobsub-render.c: dvdspu: render to ARGB overlay instead of AYUV Part-of: 2013-01-23 17:59:01 +0100 Arnaud Vrac * gst/dvdspu/gstdvdspu-render.c: * gst/dvdspu/gstdvdspu.c: * gst/dvdspu/gstdvdspu.h: * gst/dvdspu/gstspu-common.h: * gst/dvdspu/gstspu-pgs.c: * gst/dvdspu/gstspu-pgs.h: * gst/dvdspu/gstspu-vobsub-render.c: * gst/dvdspu/gstspu-vobsub.c: * gst/dvdspu/gstspu-vobsub.h: * gst/dvdspu/meson.build: dvdspu: render to AYUV overlay Instead of only supporting writing SPU data directly to YUV frames, render the SPU data to an intermediate AYUV overlay buffer. The overlay data is then blended to the video frame. For the PGS format, the overlay buffer size is set to the size of the Composition Window, and its position in the overlay composition is set to the window position. The objects to render are now cropped when the cropping flag is set. For the Vobsub format, the overlay buffer size is set to the size of the Display Area. Once rendered, the overlay composition rectangle is now moved and scaled to fit the video output size, to avoid clipping. Part-of: 2024-01-02 21:03:49 +0900 Seungha Yang * sys/d3d12/gstd3d12videosink.cpp: d3d12videosink: Fix buffer leak Part-of: 2024-01-02 20:32:50 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: d3d12device: Store adapter index ... and remove unused fence object Part-of: 2024-01-01 17:19:16 +0900 Seungha Yang * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12: Reduce shader visible descriptor size Shader visible descriptors occupy GPU resource and there are hardware limits. Thus, in order to minimize the amount of shader visible heaps, only non shader visible descriptor heap (staging) will be held by d3d12memory. Then converter will copy the staging descriptor to shader visible descriptor heap per draw. Part-of: 2024-01-01 01:18:18 +0900 Seungha Yang * sys/d3d12/gstd3d12compositor.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12testsrc.cpp: d3d12: Use CREATE_NOT_ZEROED heap flag if possible Zero initialization would have overhead and it's not required most cases except for textures. Use CREATE_NOT_ZEROED flag in case of buffer resource or if a texture will be rendered without any prior read operation. Part-of: 2023-12-31 00:29:10 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d12compositor.cpp: * sys/d3d12/gstd3d12compositor.h: * sys/d3d12/hlsl/PSMain_checker_luma.hlsl: * sys/d3d12/hlsl/PSMain_checker_rgb.hlsl: * sys/d3d12/hlsl/PSMain_checker_vuya.hlsl: * sys/d3d12/hlsl/VSMain_pos.hlsl: * sys/d3d12/hlsl/meson.build: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add compositor element Adding d3d12compositor element. d3d12compositor will build GPU commands asynchronously and each command is serialized at final render stage. Part-of: 2023-12-31 20:20:56 +0900 Seungha Yang * sys/d3d12/gstd3d12convert.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12pluginutils.cpp: * sys/d3d12/gstd3d12pluginutils.h: * sys/d3d12/gstd3d12testsrc.cpp: d3d12converter: Don't map output buffer with write flag Conversion will happen when constructed command list is executed, not by converter element. Thus this object should not map output buffer with write flag which will result in error if multiple threads are building commands for the same output target frame. Part-of: 2023-12-31 20:03:39 +0900 Seungha Yang * sys/d3d12/gstd3d12converter.cpp: d3d12converter: Add support for texture upload If buffer is not a d3d12 memory or allocated by other device, upload to internal d3d12 memory Part-of: 2023-12-30 23:40:39 +0900 Seungha Yang * sys/d3d12/gstd3d12convert.cpp: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12converter.h: * sys/d3d12/gstd3d12testsrc.cpp: * sys/d3d12/gstd3d12window.cpp: d3d12converter: Add support for blending Create new PSO if blend state update is required Part-of: 2023-12-30 00:08:27 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/gstd3d11on12.cpp: * sys/d3d12/gstd3d11on12.h: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12testsrc.cpp: * sys/d3d12/gstd3d12testsrc.h: * sys/d3d12/hlsl/PSMain_checker.hlsl: * sys/d3d12/hlsl/PSMain_color.hlsl: * sys/d3d12/hlsl/PSMain_snow.hlsl: * sys/d3d12/hlsl/VSMain_color.hlsl: * sys/d3d12/hlsl/meson.build: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add testsrc element Adding testsrc element with d2d interop support via d3d11on12 Part-of: 2023-11-11 00:37:02 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudanvrtc.cpp: * gst-libs/gst/cuda/gstcudanvrtc.h: * sys/nvcodec/gstcudaconverter.c: cuda: Prefer CUBIN over PTX System installed NVRTC library might be newer version than driver, then generate PTX can be incompatible with the driver. Instead of the intermediate code PTX, use actual assembly code directly. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3108 Part-of: 2023-12-29 21:55:36 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: docs: Update Windows plugins cache Part-of: 2023-12-26 17:12:31 +0900 Seungha Yang * sys/d3d12/gstd3d12overlaycompositor.cpp: * sys/d3d12/gstd3d12overlaycompositor.h: * sys/d3d12/gstd3d12videosink.cpp: * sys/d3d12/gstd3d12videosink.h: * sys/d3d12/gstd3d12window.cpp: * sys/d3d12/gstd3d12window.h: * sys/d3d12/hlsl/PSMain_sample.hlsl: * sys/d3d12/hlsl/PSMain_sample_premul.hlsl: * sys/d3d12/hlsl/VSMain_coord.hlsl: * sys/d3d12/hlsl/meson.build: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add video sink element Part-of: 2023-12-29 21:22:41 +0900 Seungha Yang * sys/d3d12/gstd3d12-private.h: * sys/d3d12/gstd3d12.h: * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12convert.cpp: * sys/d3d12/gstd3d12convert.h: * sys/d3d12/gstd3d12converter-builder.cpp: * sys/d3d12/gstd3d12converter-builder.h: * sys/d3d12/gstd3d12converter.cpp: * sys/d3d12/gstd3d12converter.h: * sys/d3d12/gstd3d12format.cpp: * sys/d3d12/gstd3d12format.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/gstd3d12pluginutils.cpp: * sys/d3d12/gstd3d12pluginutils.h: * sys/d3d12/hlsl/PSMain_converter.hlsl: * sys/d3d12/hlsl/VSMain_converter.hlsl: * sys/d3d12/hlsl/collect_hlsl_header.py: * sys/d3d12/hlsl/meson.build: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add convert element Implement converter object with convert element Part-of: 2023-12-28 21:34:17 +0900 Seungha Yang * sys/d3d12/gstd3d12.h: * sys/d3d12/gstd3d12fencedatapool.cpp: * sys/d3d12/gstd3d12fencedatapool.h: * sys/d3d12/meson.build: d3d12: Add helper object for fence operation Part-of: 2023-12-27 00:04:06 +0900 Seungha Yang * sys/d3d12/plugin.cpp: d3d12: Enable plugin only for Windows8 or newer Part-of: 2023-12-29 21:26:29 +0900 Seungha Yang * sys/d3d12/gstd3d12-private.h: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12download.cpp: * sys/d3d12/gstd3d12format.cpp: * sys/d3d12/gstd3d12format.h: * sys/d3d12/gstd3d12pluginutils.h: * sys/d3d12/gstd3d12upload.cpp: d3d12: Define more formats Part-of: 2023-12-26 17:26:55 +0900 Seungha Yang * sys/d3d12/gstd3d12.h: * sys/d3d12/gstd3d12basefilter.cpp: * sys/d3d12/gstd3d12basefilter.h: * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12commandallocatorpool.cpp: * sys/d3d12/gstd3d12commandlistpool.cpp: * sys/d3d12/gstd3d12commandqueue.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12descriptorpool.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12download.cpp: * sys/d3d12/gstd3d12format.cpp: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12upload.cpp: * sys/d3d12/gstd3d12utils.cpp: * sys/d3d12/gstd3d12utils.h: * sys/d3d12/gstd3d12vp9dec.cpp: * sys/d3d12/plugin.cpp: d3d12: Add header containing core features ... and include the single header instead of listing many ones Part-of: 2023-12-24 21:33:34 +0900 Seungha Yang * sys/d3d12/gstd3d12utils.h: d3d12: Remove unused methods Part-of: 2023-12-25 22:21:24 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12bufferpool: Don't pre-allocate memory for size calculation Unlike d3d11, we can know CPU accessible memory layout without allocation Part-of: 2023-12-24 01:28:26 +0900 Seungha Yang * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12memory: Add alloc_wrapped() method Part-of: 2023-12-24 01:05:21 +0900 Seungha Yang * sys/d3d12/gstd3d12upload.cpp: * sys/d3d12/gstd3d12upload.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add upload element Part-of: 2023-12-21 20:49:39 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12bufferpool: Wait fence before reusing buffer Buffer can be released without waiting fence for previous commands Part-of: 2023-12-26 20:41:33 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/plugin.cpp: d3d12decoder: Remove ID3D12Device4 interface requirement Old OS may not support the interface. And allow 11_0 feature level hardware. Part-of: 2023-12-24 16:36:37 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Reduce the number of resource barriers Single barrier per texture is sufficient in case of array-of-textures. Avoid unnecessary decay barriers Part-of: 2023-12-24 21:05:06 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Use flexible task queue Instead of using fixed size command allocator array, make it resizable. Part-of: 2023-12-25 16:14:39 +0900 Seungha Yang * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12commandqueue.cpp: * sys/d3d12/gstd3d12commandqueue.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12fence.cpp: * sys/d3d12/gstd3d12fence.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Rework command scheduling * Use single fence object per queue and remove GstD3D12Fence implementation * Add a helper method for texture copy * Run background thread and release unused resource from the thread Part-of: 2023-12-24 15:49:56 +0900 Seungha Yang * sys/d3d12/gstd3d12commandallocatorpool.cpp: * sys/d3d12/gstd3d12commandallocatorpool.h: * sys/d3d12/gstd3d12commandlistpool.cpp: * sys/d3d12/gstd3d12commandlistpool.h: * sys/d3d12/gstd3d12descriptorpool.cpp: * sys/d3d12/gstd3d12descriptorpool.h: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/meson.build: d3d12: Add resource pool objects Adding pool objects for command list, command allocator, and descriptor heap Part-of: 2023-12-16 21:07:14 +0900 Seungha Yang * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12memory: Add more SRV/RTV getter methods Adding a method so that memory object can create SRV/RTV on external descriptor heap. And remove unused methods Part-of: 2023-12-16 19:22:34 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12av1dec.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h264dec.h: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12h265dec.h: * sys/d3d12/gstd3d12vp9dec.cpp: * sys/d3d12/gstd3d12vp9dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Remove d3d11 dependency Part-of: 2023-12-22 14:41:31 -0500 Olivier Crête * ext/onnx/README.md: * ext/onnx/gstonnxinference.cpp: onnx: Update build instructions to use onnx-runtime 0.16.3 This synchronizes it with the meson.build file Part-of: 2023-12-19 13:40:13 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvajpegdec.c: vajpegdec: only support progressive mjpeg streams Part-of: 2023-12-20 21:41:00 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: * gst/jpegformat/gstjpegparse.h: * tests/check/elements/jpegparse.c: jpegparse: always forward pixel-aspect-ratio And by default it's 1/1 Part-of: 2023-12-20 21:34:29 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: fix endianness Part-of: 2023-12-20 20:58:04 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: on app0 use fourcc rather than strings Part-of: 2023-12-20 20:35:32 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: dump whole failed app marker Instead of just log the parsed string. It's better for debugging. Part-of: 2023-12-19 13:16:34 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: don't trigger message for failed com marker Part-of: 2023-12-19 13:16:02 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: * gst/jpegformat/gstjpegparse.h: jpegparse: refactor renegotation Instead of comparing caps, just signal when renegotation is needed. Part-of: 2023-12-19 13:13:48 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: * gst/jpegformat/gstjpegparse.h: jpegparse: pass colorimetry in caps Part-of: 2023-12-19 10:39:31 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: * gst/jpegformat/gstjpegparse.h: * tests/check/elements/jpegparse.c: jpegparse: add support interlaced mjpeg Interlaced MJPEG is a big hack. Most of the streams we've found are from old AVID tools. There are two methods to detect interlaced stream: the container offers a height bigger (or double) than the image's height in SOF. The other is from a APP0 marker. Part-of: 2023-12-15 15:21:50 -0500 Aaron Boxer * ext/onnx/README.md: * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/gstonnxinference.cpp: onnx: add README outlining install and test instructions Part-of: 2023-12-10 14:28:42 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: Switch gst_codec_picture_ts_ns() to gst_util_uint64_scale_int() Instead of plain multiplication, use gst_util_uint64_scale_int() to achieve the same effect with additional checks. Part-of: 2023-12-10 14:22:00 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/v4l2codecs/gstv4l2codecvp9dec.c: * sys/v4l2codecs/gstv4l2decoder.h: v4l2codecs: Deduplicate picture frame number to timestamp in ns Add macro which converts picture frame number to suitable timestamp in nanoseconds for use in V4L2 VB2 buffer lookup. Since multiple codecs do the same operation and almost all got it wrong, do it in one place so it can be fixed in one place again, if needed. Part-of: 2023-12-10 14:23:42 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecvp9dec.c: vp9decoder: Simplify gst_v4l2_codecs_vp9_dec_fill_refs() In case reference_frames is NULL, return outright. Remove the duplicate check from subsequent conditionals. No functional change. Part-of: 2023-12-09 16:29:03 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codech265dec.c: h265decoder: Align wraparound fix Instead of casting GST_CODEC_PICTURE_FRAME_NUMBER (ref_pic) to u64, use 1000ULL which is also u64 . This only aligns the behavior here with '*decoder: Fix multiplication wraparound' commits. Part-of: 2023-12-09 16:27:49 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codech264dec.c: h264decoder: Align wraparound fix Instead of casting GST_CODEC_PICTURE_FRAME_NUMBER (ref_pic) to u64, use 1000ULL which is also u64 . This only aligns the behavior here with '*decoder: Fix multiplication wraparound' commits. Part-of: 2023-12-09 16:26:22 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: mpeg2decoder: Fix multiplication wraparound The GstMpeg2Picture system_frame_number is guint32, constant 1000 is guint32, GstV4l2CodecMpeg2Dec *_ref_ts multiplication result is u64 . ``` u64 result = (u32)((u32)system_frame_number * (u32)1000); ``` behaves the same as ``` u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff); ``` so in case `system_frame_number > 4294967295 / 1000`, the `result` will wrap around. Since the `result` is really used as a cookie used to look up V4L2 buffers related to the currently decoded frame, this wraparound leads to visible corruption during MPEG2 decoding. At 30 FPS this occurs after cca. 40 hours of playback . Fix this by changing the 1000 from u32 to u64, i.e.: ``` u64 result = (u64)((u32)system_frame_number * (u64)1000ULL); ``` this way, the wraparound is prevented and the correct cookie is used. Part-of: 2023-12-09 16:24:22 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecav1dec.c: av1decoder: Fix multiplication wraparound The GstAV1Picture system_frame_number is guint32, constant 1000 is guint32, GstV4l2CodecAV1Dec v4l2_av1_frame.*_frame_ts multiplication result is u64 . ``` u64 result = (u32)((u32)system_frame_number * (u32)1000); ``` behaves the same as ``` u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff); ``` so in case `system_frame_number > 4294967295 / 1000`, the `result` will wrap around. Since the `result` is really used as a cookie used to look up V4L2 buffers related to the currently decoded frame, this wraparound leads to visible corruption during AV1 decoding. At 30 FPS this occurs after cca. 40 hours of playback . Fix this by changing the 1000 from u32 to u64, i.e.: ``` u64 result = (u64)((u32)system_frame_number * (u64)1000ULL); ``` this way, the wraparound is prevented and the correct cookie is used. Part-of: 2023-12-09 16:08:31 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecvp9dec.c: vp9decoder: Fix multiplication wraparound The GstVp9Picture system_frame_number is guint32, constant 1000 is guint32, GstV4l2CodecVp9Dec v4l2_vp9_frame.*_frame_ts multiplication result is u64 . ``` u64 result = (u32)((u32)system_frame_number * (u32)1000); ``` behaves the same as ``` u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff); ``` so in case `system_frame_number > 4294967295 / 1000`, the `result` will wrap around. Since the `result` is really used as a cookie used to look up V4L2 buffers related to the currently decoded frame, this wraparound leads to visible corruption during VP9 decoding. At 30 FPS this occurs after cca. 40 hours of playback . Fix this by changing the 1000 from u32 to u64, i.e.: ``` u64 result = (u64)((u32)system_frame_number * (u64)1000ULL); ``` this way, the wraparound is prevented and the correct cookie is used. Part-of: 2023-12-09 16:08:31 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2codecvp8dec.c: vp8decoder: Fix multiplication wraparound The GstVp8Picture system_frame_number is guint32, constant 1000 is guint32, GstV4l2CodecVp8Dec v4l2_vp8_frame.*_frame_ts multiplication result is u64 . ``` u64 result = (u32)((u32)system_frame_number * (u32)1000); ``` behaves the same as ``` u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff); ``` so in case `system_frame_number > 4294967295 / 1000`, the `result` will wrap around. Since the `result` is really used as a cookie used to look up V4L2 buffers related to the currently decoded frame, this wraparound leads to visible corruption during VP8 decoding. At 30 FPS this occurs after cca. 40 hours of playback . Fix this by changing the 1000 from u32 to u64, i.e.: ``` u64 result = (u64)((u32)system_frame_number * (u64)1000ULL); ``` this way, the wraparound is prevented and the correct cookie is used. Part-of: 2023-12-19 16:41:30 +0800 Mengkejiergeli Ba * gst/videoparsers/gsth264parse.c: h264parse: Remove dead code Part-of: 2023-12-19 13:57:04 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: video-format: Fix format order once again RGBA should be before RBGA. Both the Python script and the gstreamer-rs tests agree on that, but somehow this is not caught by the CI. Part-of: 2023-12-18 16:33:07 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: meta: Add API to register metas in two steps And also remove the specific registration APIs for serializable meta. Part-of: 2023-12-18 13:40:53 -0500 Olivier Crête * gst-libs/gst/analytics/gstanalyticsmeta.c: meta: Move the clear operation to its own vfunc Some transforms always assumed that the transformation was some kind of copy. So adding a "clear" operation didn't work out in practice. Part-of: 2023-12-18 17:02:22 +0000 Philippe Normand * gst-libs/gst/play/gstplay.c: * gst-libs/gst/play/gstplay.h: play: Include pipeline dump in error details structure This can be useful for debugging purposes. It can't be done on application side because the on_error callback tears down the pipeline. Part-of: 2023-12-18 17:01:36 +0000 Philippe Normand * gst-libs/gst/play/gstplay.c: play: Fix error details parsing Part-of: 2023-11-18 18:51:04 +0100 Robert Mader * gst/camerabin2/gstcamerabin2.c: camerabin: Correctly relink viewfinderbin_queue This reverts a part of de92a6c7f2. Unlike `image_filter` and `video_filter`, `viewfinder_filter` does not get linked to `src` but `viewfinderbin_queue`. Thus the fix in the mentioned commit does not apply for it and should be reverted. This was not spotted earlier as only the other filters are used in the project that uncovered the issue. Fixes: de92a6c7f2 ("camerabin: Fix source updates with user filters") Part-of: 2023-11-23 20:24:42 +0900 Seungha Yang * gst-libs/gst/codecparsers/gstav1parser.h: * gst/videoparsers/gstav1parse.c: av1parser: Fix array sizes in scalability structure Since the AV1 specification is not explicitly mentioning about the array size bounds, array sizes in scalability structure should be defined as possible maximum sizes that can have. Also, this commit removes GST_AV1_MAX_SPATIAL_LAYERS define from public header which is API break but the define is misleading and this patch is introducing ABI break already ZDI-CAN-22300 Part-of: 2023-01-04 11:29:27 -0500 Xavier Claessens * tests/check/elements/h264parse.c: h264parse: test - AU align with SEI between frame slices Part-of: 2023-01-11 11:08:58 -0500 Daniel Morin * gst-libs/gst/codecparsers/gsth264parser.h: * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: h264parse: Improved AU boundary detection - AU boundary detection reviewed to follow more closely H.264 spec. and more specifically clauses 7.4.1.2.3 and 7.4.1.2.4. - The gist of the changes is a look-a-head in then next AU required identify the last vcl-nal of current AU and firt vcl-nal of next AU (according to 7.4.1.2.4) followed by the identification of the first nal of next AU (according to 7.4.1.2.3). - A backlog of all nals of current AU and next AU up to the point where current AU can identified completed is kept. - In NAL alignement mode vcl-nal are sent immediatly but the history is kept to allow AU boundary detection. Non-vcl-nal can be delayed up to the reception of the next vcl-nal to allow a correct AUD insertion. - Based on this improved AU boudary detection we can avoid erronous AUD insertion, like the one highlighted by test test_parse_sliced_with_prefix_and_sei_nal_au. - Add support for MVC AU boundary detection. (H.7.4.1.2.4) - Explicitly report SVC not supported. We don't have the SVC NAL parsing required to identify boundary. (missing dependency_id and quality_id fields from SVC, see G.7.4.1.2.4) Part-of: 2023-09-22 14:32:27 -0400 Xavier Claessens * gst/unixfd/gstunixfd.c: * gst/unixfd/gstunixfd.h: * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: * tests/check/elements/unixfd.c: unixfd: Serialize buffer metas Serialize every GstMeta that supports serialization into the NEW_BUFFER payload. This is especially important for GstVideoMeta in the case of multiplanar buffers, or if stride!=width. Sponsored-by: Netflix Inc. Part-of: 2023-09-01 15:38:16 +0800 He Junyan * sys/va/gstvacompositor.c: vacompositor: consider the DMA kind input for sink pad Co-authored-by: Víctor Jáquez Part-of: 2023-08-08 15:45:49 +0800 He Junyan * sys/va/gstvacompositor.c: vacompositor: Override the update_caps() of video aggregator class The input of the vacompositor may be DMA buffers. And in this case, the input caps has the format=DMA_DRM, which can not be recognized by base video aggregator class' find_best_format() function. So we need to override the update_caps() virtual function. Also we consider the DMA kind caps in negotiated_src_caps() for output. Part-of: 2023-08-08 15:42:26 +0800 He Junyan * sys/va/gstvacompositor.c: vacompositor: add helper function to get formats from caps Co-authored-by: Víctor Jáquez Part-of: 2023-08-08 15:34:46 +0800 He Junyan * sys/va/gstvacompositor.c: vacompositor: add helper function to choose format The function is based on the most supported formats by Intel/Mesa VA drivers. Co-authored-by: Víctor Jáquez Part-of: 2023-08-08 15:11:29 +0800 He Junyan * sys/va/gstvacompositor.c: vacompositor: record the input caps for each input pad The caps of each input sink pad wil decide the final output format and caps of the src pad. Co-authored-by: Víctor Jáquez Part-of: 2023-12-15 18:56:47 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12vp9dec.cpp: d3d12decoder: Implement threaded decoding To achieve maximum throughput, waiting on command commit thread is not ideal. And render-delay will introduce unwanted latency. Best is to split thread and wait finished decoding job in a dedicated output thread Part-of: 2023-12-15 19:55:28 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d12/plugin.cpp: d3d12decoder: Disable d3d11 interop It does not seem to work with some AMD iGPU Part-of: 2023-12-15 19:18:02 +0900 Seungha Yang * sys/d3d12/gstd3d12fence.cpp: d3d12fence: Reset fence after waiting done Part-of: 2023-12-15 19:45:44 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: d3d12: Enable debug layer Part-of: 2023-12-14 21:07:10 +0900 Seungha Yang * sys/d3d12/plugin.cpp: d3d12: Requires ID3D12Device4 interface ID3D12Device4::CreateCommandList1() method is required Part-of: 2023-12-14 20:22:35 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12memory-private.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12: Update allocation params signalling Sync up with d3d11 implementation Part-of: 2023-12-13 12:55:06 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: vabasedec: clean up decide_allocation() vmethod When creating a new VA pool set config size to zero because it's not used. Also, given the potential different sizes from software buffer pools and VA buffer pools, this patch handle that potential different values. Part-of: 2023-12-13 11:34:43 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabasetransform.c: vabasetransform: clean up decide_allocation() vmethod When creating a new VA pool set config size to zero because it's not used. Also, given the potential different sizes from software buffer pools and VA buffer pools, this patch handle that potential different values. Part-of: 2023-12-13 11:06:01 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvacompositor.c: vacompositor: clean up decide_allocation() vmethod When creating a new VA pool set config size to zero because it's not used. Also, given the potential different sizes from software buffer pools and VA buffer pools, this patch handle that potential different values. Part-of: 2023-12-13 11:31:12 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvapluginutils.c: * sys/va/gstvapluginutils.h: vapluginsutils: add helper gst_va_create_other_pool() This helper function creates a software-based buffer pool, where if size is zero, its value is retrieved from the canonical size. Part-of: 2023-12-13 10:20:33 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvapool.c: * gst-libs/gst/va/gstvapool.h: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkvpp.c: * sys/qsv/gstqsvencoder.cpp: * sys/va/gstvaav1dec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: * sys/va/gstvaencoder.c: va: no need to provide a buffer size for VA pool VA drivers allocate surfaces given their properties, so there's no need to provide a buffer size to the VA pool. Though, the buffer size is provided by the driver, or the canonical size is used for single planed surfaces. This patch removes the need to provide a size for the function gst_va_pool_new_with_config() and adds a helper method to retrieve the surface size, gst_va_pool_get_buffer_size(). Also change the callers accordingly. Changes for custom VA pool creation will be addressed in the following commits. Part-of: 2023-12-14 00:50:01 +0900 Seungha Yang * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12format.cpp: * sys/d3d12/gstd3d12format.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12utils.cpp: * sys/d3d12/gstd3d12utils.h: * sys/d3d12/meson.build: d3d12: Use d3dx12.h helper library ... and remove manually implemented helper methods Part-of: 2023-12-14 00:21:00 +0900 Seungha Yang * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/meson.build: d3d12: Use DirectX-Headers and drop MinGW build support There are some conflicts between MinGW toolchan and DirectX-Headers. And due to ABI differences, more fixes are required. We will support only MSVC build for now Part-of: 2023-12-12 15:30:39 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcontext.c: msdk: Remove dead code Part-of: 2023-12-11 20:35:25 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: use gst_va_display_check_version() Instead of the local method to parse the vendor string. Part-of: 2023-12-11 20:34:30 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvadisplay.c: * gst-libs/gst/va/gstvadisplay.h: vadisplay: add gst_va_display_check_version() This function compares the driver version with the user provided one to check if driver's is equal or bigger. Part-of: 2023-12-11 17:28:06 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: vaallocator: clean up use derived feature Remove allocator member variable for use derived feature which doesn't need to be kept, it's just for configuration purposes. Part-of: 2023-12-12 17:14:03 +0800 He Junyan * sys/va/gstvah265dec.c: va: h265dec: Add support for more -still and -intra profiles They are actually compitable with the main and main-10 profiles. Part-of: 2023-12-12 17:09:56 +0800 He Junyan * sys/va/gstvaprofile.c: va: Add decoder compatible caps string field into profiles' map Some profiles such as main or main-10 in HEVC can support more compatible profiles such as main-still-picture or main-10-intra. We should add them into decoder's sink caps. Part-of: 2023-12-12 20:41:54 +0800 He Junyan * sys/va/gstvacaps.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvaprofile.c: * sys/va/gstvaprofile.h: va: Add the entrypoint parameter to gst_va_profile_caps() Part-of: 2023-06-26 18:29:01 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpputil.c: msdkvpp: Add fix_format for src caps Part-of: 2023-06-02 17:30:31 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcaps.c: msdk: Add a help func to fix the map Part-of: 2023-06-01 17:45:36 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator_libva.c: msdk: Remove func to export dmabuf to va surface Since we use va allocator and va dma allocator to create surface, the surface is already exported in the case of dma allocator. So remove redundant export function in msdk allocator. Part-of: 2023-05-30 18:12:38 +0800 Yinhang Liu * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: msdkenc: Add modifier support Co-authored-by: Mengkejiergeli Ba Part-of: 2023-05-30 18:01:49 +0800 Yinhang Liu * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: * sys/msdk/gstmsdkvpputil.c: msdkvpp: Add modifier support Co-authored-by: Mengkejiergeli Ba Part-of: 2023-05-30 17:25:45 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: Add modifier support Co-authored-by: Mengkejiergeli Ba Part-of: 2023-08-22 14:15:39 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator_libva.c: msdk: Config pool with max/min number of buffers Part-of: 2023-05-30 16:24:46 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdk: Add help functions to handle drm caps Co-authored-by: Mengkejiergeli Ba Part-of: 2023-05-18 15:00:37 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdk: Add modifier when creating dynamic caps Add modifier in gst-inspect for dma features. Co-authored-by: Mengkejiergeli Ba Part-of: 2023-05-18 14:36:23 +0800 Yinhang Liu * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkallocator_libva.h: msdk: Add a helper function to get supported modifiers The modifiers will be used when creating caps for dma feature. co-authored-by: Mengkejiergeli Ba Part-of: 2023-12-10 04:26:59 +0100 Stefan Brüns * ext/ladspa/meson.build: * meson_options.txt: ladspa: Make RDF parsing truely optional If the ladspa plugin is enabled explicitly or via auto-features, the liblrdf dependency can not be disabled. As the RDF parsing currently provides hardly any features, the possibility to disable it fairly useful. Fixes: #3168 Part-of: 2023-12-06 14:58:38 +0100 Kalev Lember * ext/openh264/gstopenh264dec.cpp: * ext/openh264/gstopenh264element.c: * ext/openh264/gstopenh264elements.h: * ext/openh264/gstopenh264enc.cpp: * ext/openh264/meson.build: openh264: Drop runtime version checks With the way the runtime checks are currently set up, every single openh264 release, no matter how minor, is considered an ABI break and requires gst-plugins-bad recompilation. This is unnecessarily strict because it doesn't allow downstream distributions to ship any openh264 bug fix version updates without breaking gstreamer's openh264 support. Years ago, at the time when gstreamer's openh264 support was merged, openh264 releases were done without a versioned soname (the library was just libopenh264.so, unversioned). Since then, starting with version 1.3.0, openh264 has started using versioned sonames and the intent has been to bump the soname every time there's a new release with an ABI change. This patch drops the strict version check. meson.build already has a minimum requirement on openh264 version 1.3.0 where soname versioning was added, which should be good enough to ensure that the library is using soname versioning. Part-of: 2023-12-09 20:05:31 +0800 He Junyan * gst-libs/gst/codecs/gsth265picture.c: codecs: correct the print log for h265 picture getting by poc Part-of: 2023-12-06 15:32:40 +0200 Jordan Petridis * gst-libs/gst/mse/meson.build: build/mse: Add the enum sources to the test gstmse_private_test_dep Part-of: 2023-12-06 12:01:36 +0100 Alessandro Bono * ext/dtls/gstdtlscertificate.c: gstdtlscertificate: Define _WINSOCKAPI_ before including windows.h This avoid a build failure when compiling against OpenSSL 3.2.0. The problem is when windows.h is included before WinSock2.h. Because windows.h includes winsock.h[1]. Defining _WINSOCKAPI_ stops windows.h including winsock.h. Error: ``` [748/1041] Compiling C object ext/dtls/gstdtls.dll.p/gstdtlscertificate.c.obj FAILED: ext/dtls/gstdtls.dll.p/gstdtlscertificate.c.obj [...] Windows Kits\10\include\10.0.17763.0\shared\ws2def.h(235): error C2011: 'sockaddr': 'struct' type redefinition Windows Kits\10\include\10.0.17763.0\um\winsock.h(482): note: see declaration of 'sockaddr' ``` [1] https://stackoverflow.com/a/1372836 Closes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3167 Part-of: 2023-12-07 15:36:26 +0100 Alexander Slobodeniuk * sys/d3d11/meson.build: d3d11: fix building with address sanitizer When building with address sanitizer it gives next error: "gstd3d11window_corewindow.cpp : fatal error C1128: number of sections exceeded object file format limit: compile with /bigobj" Part-of: 2023-12-04 20:05:48 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: force non-derived for old mesa drivers Mesa <23.3 can't map derived images for P010 format. This patch forces non-derived if this is the case. See: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24381 Part-of: 2023-11-30 16:52:02 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/vasurfaceimage.c: va: check surface status before get derive image According with documentation the surface has to be in ready state before getting it derived image. This patch adds that check. Part-of: 2023-11-30 14:47:06 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: remove runtime mapping selection The original idea was to select the type of mapping (either using derive images or downloading the image) in runtime, under the assumption that both methods shared the same memory layout (offsets and strides), because a single GstVideoMeta is assigned by the buffer pool at allocation time. Nonetheless, in recent hardware this assumption is invalid, raising memory access errors. This patch removes completely the mapping type selection at runtime, using the method selected when the allocator is configured, synced with the bufferpool allocation. This problem was fixed originally for iHD driver only. But now it makes sense to remove all of it. Original-patch-by: Mengkejiergeli Ba Part-of: 2023-11-30 12:00:27 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: don't fail if drm fourcc are different When exporting a DMABuf from a VASurface the user might tell that the surface was allocated with certain fourcc, but the returned VADRMPRIMESurfaceDescriptor migth tell a different fourcc, as in the case or radeonsi driver, for duplicated fourcc, such as YUY2 and YUYV. Originally it was supposed to be a failed exportation. This patch relax this validation by allowing different fourcc. Part-of: 2023-11-15 16:35:38 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcontext.c: * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: Let deviceID config the mfx implementation In multi-card scenario, user can set GST_MSDK_DRM_DEVICE env variable to choose the device. This patch can align vpl's queried results with the users' choice by passing deviceID when creating mfx implementation. Co-authored-by: Víctor Manuel Jáquez Leal Part-of: 2023-12-05 12:21:37 -0500 Daniel Morin * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/meson.build: onnx: replace video-region-of-interest with analytics-meta - Use analytics-meta/OD to transport object detection results Part-of: 2023-12-05 20:12:36 -0500 Daniel Morin * gst-libs/gst/analytics/gstanalyticsmeta.c: analytics: fix analytics-meta re-use - Fix alignment error when source and destination analytics-meta have the same relation order. Part-of: 2023-12-01 21:38:17 +0900 Seungha Yang * sys/nvcodec/gstcudaipcserver.cpp: * sys/nvcodec/gstcudaipcserver.h: * sys/nvcodec/gstcudaipcserver_unix.cpp: * sys/nvcodec/gstcudaipcserver_win32.cpp: cudaipcsink: Fix deadlock on stop Manually close connection if client does not hold any shared memory on stop. Part-of: 2023-12-01 21:15:00 +0900 Seungha Yang * sys/d3d11/gstd3d11ipcserver.cpp: d3d11ipcsink: Fix deadlock on stop Manually close connection if client does not hold any shared memory on stop. Part-of: 2023-12-05 19:52:22 +0900 Seungha Yang * sys/nvcodec/gstnvdec.c: nvdec: Fix division by zero when calculating buffer duration Don't try to calculate buffer duration from variable framerate Part-of: 2023-11-28 03:25:00 +0000 renjun wang * sys/v4l2codecs/gstv4l2codecav1dec.c: v4l2codecs: av1: Fix typo in debug log message Part-of: 2023-12-04 20:47:31 -0500 Daniel Morin * ext/onnx/gstonnxinference.cpp: onnx: avoid leak on failure and cleanup - Unmap buffer on Ort exception - Avoid retrieving unused videometa Part-of: 2023-12-04 19:57:39 -0500 Daniel Morin * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: add offset and scale properties - Offset each datapoint by the value set on offset property. - Scale each datapoint by the value set on scale property. Part-of: 2023-12-04 19:11:23 -0500 Daniel Morin * ext/onnx/gstonnxclient.cpp: onnx: fix tensor id loading - Fix quark genaration. String loaded from the model/file are not static. Part-of: 2023-08-02 20:43:48 -0400 Daniel Morin * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxinference.cpp: onnx: Add support for float datatype This is a bit of a hack solution has I think the correct solution is to expose model caps on sinkpad (eventually sinkpads). Till then I think this is reasonable. - Add a property to onnxinference to set datatype. - Fix internal buffer allocation size based on datatype. - Extract method to remove alphe channel and convert to planar image when requested. Also template the method to support writing to buffers of different datatype. Part-of: 2023-12-05 09:28:25 +0100 Guillaume Desmottes * meson.build: meson: update PACKAGE_BUGREPORT Some were still using pre-monorepo links. Part-of: 2023-11-29 20:58:51 +0100 Ruben Gonzalez * gst/gaudieffects/gstgaussblur.c: gstgaussblur: delete unused code Part-of: 2023-12-02 22:17:34 -0500 Daniel Morin * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsclassificationmtd.h: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h: * tests/check/libs/analyticsmeta.c: analytics: replace id type from gint to guint - Replace all id type from gint to guint - Fix annotation for GstAnalyticsODMtdData Part-of: 2023-06-15 22:14:02 -0400 Aaron Boxer * gst/mpegtsmux/gstbasetsmux.c: * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmux.h: * gst/mpegtsmux/tsmux/tsmuxstream.h: mpegtsmux: allow attaching PCR to non-PES streams There is an existing PMT mapping between PCR_%s and an mpegtsmux sink pad name, where %s equals the program number that the PCR corresponds to. We re-purpose this functionality to also support a mapping between PCR_%s and an arbitrary PID. If this mapping is set, then the header PCR PID is set to this value, and PCR is attached to the stream with this PID. Note: the current implementation also attaches PCR to the video stream, so this may be inefficient. Co-authored-by: Jordan Yelloz Part-of: 2023-11-30 21:55:24 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/qsv/gstqsvh265dec.cpp: qsv: Update plugin doc cache Part-of: 2023-11-22 01:15:03 +0900 Seungha Yang * sys/qsv/gstqsvallocator.cpp: * sys/qsv/gstqsvallocator.h: * sys/qsv/gstqsvallocator_d3d11.cpp: * sys/qsv/gstqsvdecoder.cpp: * sys/qsv/gstqsvh265dec.cpp: * sys/qsv/gstqsvutils.cpp: * sys/qsv/gstqsvutils.h: qsvh265dec: Add support for GBR decoding Use GBR equivalent output formats if RGB colorspace is detected Part-of: 2023-11-21 21:58:35 +0900 Seungha Yang * sys/qsv/gstqsvh265dec.cpp: qsvh265dec: Add support for HEVC RExt profiles Adding 4:2:0 high bitdepth and 4:2:2/4:4:4 decoding support Part-of: 2023-11-21 20:56:36 +0900 Seungha Yang * sys/qsv/gstqsvallocator.cpp: * sys/qsv/gstqsvallocator.h: * sys/qsv/gstqsvallocator_d3d11.cpp: * sys/qsv/gstqsvav1enc.cpp: * sys/qsv/gstqsvdecoder.cpp: * sys/qsv/gstqsvh264dec.cpp: * sys/qsv/gstqsvh264enc.cpp: * sys/qsv/gstqsvh265dec.cpp: * sys/qsv/gstqsvh265enc.cpp: * sys/qsv/gstqsvjpegdec.cpp: * sys/qsv/gstqsvjpegenc.cpp: * sys/qsv/gstqsvutils.cpp: * sys/qsv/gstqsvutils.h: * sys/qsv/gstqsvvp9dec.cpp: * sys/qsv/gstqsvvp9enc.cpp: qsv: Add util methods for video format mapping Remove duplicated format mapping code Part-of: 2023-11-28 23:27:49 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter-builder.cpp: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/meson.build: d3d11: Add RBGA format support Allocates DXGI_FORMAT_AYUV texture for RBGA so that it can be used by video decoders. Part-of: 2023-11-22 00:07:57 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: video: Add RBGA format This new format is intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but stream is encoded with GBR color space, HEVC and VP9 GBR streams for example. Part-of: 2023-11-21 14:26:54 +0100 Benjamin Gaignard * gst-libs/gst/codecparsers/gstav1parser.c: codecparsers: av1: Clip max tile rows and cols values Clip tile rows and cols to 64 as describe in AV1 specification to avoid writing outside array range but preserve sb_cols and sb_rows value which are used to futher computation. Fixes ZDI-CAN-22226 / CVE-2023-44429 Part-of: 2023-11-21 14:04:49 +0100 Benjamin Gaignard * gst-libs/gst/codecparsers/gstav1parser.c: Revert "codecparsers: av1: Clip max tile rows and cols values" This reverts commit b76a801f57353b893c344025cac56413140fca6d. Part-of: 2023-11-29 13:04:36 +0100 Stéphane Cerveau * ext/vulkan/vkupload.c: vkupload: unref vkimagebufferpool Since the vkupload pool refacto, the pool was not properly unrefed leading to a leak. Fix for fd5c344fb6 Part-of: 2023-11-21 01:41:16 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Fix GstVideoCodecFrame leak If current buffer has no slice data, frame should be released. Otherwise frames will stay in decoder baseclass forever. Part-of: 2023-09-12 16:11:42 +0200 Stéphane Cerveau * ext/vulkan/vkupload.c: vkupload: browse over the input buffer mems To upload/convert the GstBuffer to vkImage, need to browse over the input mems to fill the out gst buffer vkImage. This patch is fixing a missing plane/mem with encoders. Part-of: 2023-07-11 15:51:20 +0200 Stéphane Cerveau * ext/vulkan/vkupload.c: vkupload: implement decide_allocation vmethod in the case of an upstream element proposing a buffer pool, use it to allocate the buffer image with the given parameters set by the upstream element. Besides the buffer pool handling is sync'd with GstBaseTransform base class. See the case of vulkanupload ! vulkanh264enc Co-authored-by: Victor Jaquez Part-of: 2023-11-28 21:02:44 +0900 Seungha Yang * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: d3d11: Fix string version shader code RGBA to BGRA conversion code should have written in compute shader. Part-of: 2023-11-28 19:17:20 +0900 Seungha Yang * sys/msdk/gstmsdkdec.c: msdk: Fix build error after d3d11 API change Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3158 Part-of: 2023-11-25 19:34:12 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter-builder.cpp: * gst-libs/gst/d3d11/gstd3d11converter-helper.cpp: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11format.cpp: * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/meson.build: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11testsrc.cpp: d3d11: Add support for more packed formats using compute shader Adding below listed formats support, and reorders supported format list based on preference UYVY, VYUY, YVYU, v210, v216 v308, IYU2 RGB16, RGB15, BGR16, BGR15 ARGB, xRGB, ABGR, xBGR, RGB, BGR r210, BGR10A2 BGRA64 Part-of: 2023-11-27 01:11:04 +0900 Seungha Yang * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Allow MSAA only for native DXGI formats Enable MSAA only if converter can render directly on texture without post-processing Part-of: 2023-11-24 21:18:38 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11bufferpool.cpp: * gst-libs/gst/d3d11/gstd3d11format.cpp: * gst-libs/gst/d3d11/gstd3d11format.h: * gst-libs/gst/d3d11/gstd3d11memory-private.h: * gst-libs/gst/d3d11/gstd3d11memory.cpp: * gst-libs/gst/d3d11/gstd3d11memory.h: * sys/amfcodec/gstamfencoder.cpp: * sys/d3d11/gstd3d11compositor.cpp: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11decoder.cpp: * sys/d3d11/gstd3d11deinterlace.cpp: * sys/d3d11/gstd3d11overlay.cpp: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11testsrc.cpp: * sys/d3d11/gstd3d11upload.cpp: * sys/dwrite/gstdwriteoverlayobject.cpp: * sys/qsv/gstqsvdecoder.cpp: * tests/check/libs/d3d11memory.c: d3d11: Rework memory allocation params signalling Hide GstD3D11AllocationParams detail from public header and set setter methods. Part-of: 2023-11-25 01:52:44 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.cpp: * gst-libs/gst/d3d11/hlsl/meson.build: * sys/d3d11/hlsl/meson.build: d3d11: Use shader model 4 Since shader model 4 is sufficient for the current pixel shader implementations, prebuild HLSL with shader model 4 as well. Part-of: 2023-11-25 01:26:31 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter-helper.cpp: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/meson.build: d3d11converter: Do not use R32_UINT UAV It does not work well with YUY2 texture on some GPUs. Always use the same DXGI formats for each SRV and UAV Part-of: 2023-11-24 00:17:02 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: d3d11device: Remove outdated comment We do support 4:2:2 YUV formats using compute shader now Part-of: 2023-11-23 23:32:15 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: * sys/d3d11/plugin.cpp: d3d11: Drop legacy device support Direct3D feature level 10 supported GPUs were released more than 15 years ago, around the time when Windows Vista / 7 were released. Also our d3d11 plugin/library does not support feature level 9.x very well already. Part-of: 2023-11-13 12:01:03 +0000 Link Mauve * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: Query the right buffer before expbuf We were previously always querying index 0, and while the number of planes per buffer will never change, it seems more proper to query the right buffer rather than always the first one. This was found while reading strace logs, and wondering why the V4L2_BUF_FLAG_MAPPED flag was present on all ¬0 indices even though that happened before VIDIOC_EXPBUF. Part-of: 2023-11-21 12:47:38 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkbufferpool.c: vkbufferpool: add support for video encoded buffers Add support for non video raw buffers to allocate memory such as in encoded content scenario. Part-of: 2023-11-03 16:52:19 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkbufferpool.c: * gst-libs/gst/vulkan/gstvkbufferpool.h: vkbufferpool: allow to set allocation params Add the possibility to change the vulkan usage and mem properties from external source. Part-of: 2023-07-03 16:44:22 -0400 Daniel Morin * gst-libs/gst/analytics/analytics-meta-prelude.h: * gst-libs/gst/analytics/analytics.h: * gst-libs/gst/analytics/gstanalyticsclassificationmtd.c: * gst-libs/gst/analytics/gstanalyticsclassificationmtd.h: * gst-libs/gst/analytics/gstanalyticsmeta.c: * gst-libs/gst/analytics/gstanalyticsmeta.h: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c: * gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c: * gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h: * gst-libs/gst/analytics/meson.build: * gst-libs/gst/meson.build: * tests/check/libs/analyticsmeta.c: * tests/check/meson.build: analytics: base class for analytics meta - GstAnalyticRelationMeta is a base class for analytics meta. It's able to store analytics results (GstAnalyticRelatableMtd) and describe the relation between each analysis results. - GstAnalysisRelationMeta also contain an algorithm able to explore analysis results relation using a bfs. - Relation(edge) between analysis results (vertice) are stored in an adjacency-matrix that allow to quickly identify if two analysis results are related and by which relation they related. It also work for indirect relation and can provide the path of analysis results by which two analysis results are related. - One allocation per buffer to store analysis results. Here we rely on the application to guess how much space will be required to store all analysis results. This is something that could be improved significantly but it's a starting point. - Define common analysis results, classification, object-detection, tracking that are subclass of GstAnalyticRelatableMtd. The also provide exemple of how to extend GstAnalyticRelatableMtd to have them benefit for the mechanim to express relation with other analysis results. Part-of: 2023-06-30 18:00:38 +0200 Stéphane Cerveau * ext/vulkan/vkdownload.c: * ext/vulkan/vkupload.c: * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkvideofilter.c: * tests/check/libs/vkimagebufferpool.c: vulkan: use gst_vulkan_device_select_queue Use gst_vulkan_device_select_queue api to retrieve a valid queue in vkupload, vkdownload, vkimagebufferpool, and vkvideofilter Part-of: 2023-06-28 18:15:59 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkdevice.h: * gst-libs/gst/vulkan/gstvkutils.h: vkdevice: select queue with expected flags Allow to select a queue with the given flags such as compute bit etc from a given device. Part-of: 2023-11-21 21:14:12 +0900 Seungha Yang * sys/qsv/gstqsvh264dec.cpp: * sys/qsv/gstqsvh265dec.cpp: qsvdecoder: Fix stream format detection Fixing typo Part-of: 2023-11-20 08:22:41 +0000 Nirbheek Chauhan * gst-libs/gst/d3d11/meson.build: directxmath.wrap: Fix cpuid mismatch on MinGW This fixes a build failure with meson 1.3.0, which was caused by a bugfix in Meson that made the cc.compile() check succeed on MSYS2 MinGW and enable DirectXMath SIMD, which in turn triggered the broken `__cpuid()` issue mentioned in the meson.build file. Upstream fix: https://github.com/microsoft/DirectXMath/pull/172 Part-of: 2023-11-20 08:12:48 +0000 Nirbheek Chauhan * gst-libs/gst/d3d11/meson.build: * meson_options.txt: meson: Rework d3d11 checks, add new d3d11-math option This allows us to ensure that directxmath SIMD is enabled. Part-of: 2023-11-21 00:00:27 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter-builder.cpp: * gst-libs/gst/d3d11/gstd3d11converter-helper.cpp: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11format.cpp: * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/meson.build: d3d11: Add Y412 format support It's mapped to DXGI_FORMAT_Y416 and major format for 12bits 4:4:4 video decoding. Since DXGI_FORMAT_Y416 format cannot be a render target, adding corresponding compute shader code too. Part-of: 2023-07-03 13:22:47 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/gstvulkan.c: * ext/vulkan/meson.build: * ext/vulkan/vkh264dec.c: * ext/vulkan/vkh264dec.h: vulkanh264dec: add Vulkan H.264 decoder Part-of: 2023-06-15 12:09:01 +0200 Stéphane Cerveau * tests/check/libs/vkimagebufferpool.c: test: look for proper queue among multiple physical device There might be multiple GPUs in a system and only one might provided vulkan video extensions. Now, in order to run the tests, the proper GPU is looked. Part-of: 2023-05-24 08:49:06 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkvideodecode.c: * tests/check/meson.build: test: add vkvideodecode test Part-of: 2023-05-23 22:05:06 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkqueue.c: * gst-libs/gst/vulkan/gstvkqueue.h: vkqueue: add decoder factory Part-of: 2023-05-11 16:47:55 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdecoder.c: * gst-libs/gst/vulkan/gstvkdecoder.h: * gst-libs/gst/vulkan/gstvkhandle.h: * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/vulkan/vulkan_fwd.h: vkdecoder: add gstvkdecoder helper object Part-of: 2023-05-25 19:03:09 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkhandle.h: * gst-libs/gst/vulkan/gstvkvideo-private.c: * gst-libs/gst/vulkan/gstvkvideo-private.h: * gst-libs/gst/vulkan/meson.build: vkvideo-private: video structures and session handle Part-of: 2023-07-10 14:44:05 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: * tests/check/libs/vkimagebufferpool.c: vkvideoutils: add GstVulkanVideoOperation enum To differentiate a video/x-h264 caps use with a decoder or an encoder and get the correct video profile, the API expects an enum GstVulkanVideoOperation to handle this difference. Part-of: 2023-06-29 18:46:29 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: * tests/check/libs/vkimagebufferpool.c: vkvideoutils: add dec postfix to profiles So it the future don't collide with encoding profiles. Original-patch-by: Stéphane Cerveau Part-of: 2023-06-23 17:50:16 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.h: * gst-libs/gst/vulkan/vulkan_fwd.h: vkvideoutils: add video capabilities structure Part-of: 2023-07-03 17:43:05 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: vkvideoutils: add gst_vulkan_video_profile_is_equal() Part-of: 2023-05-24 10:03:30 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: vkvideoutils: add gst_vulkan_video_profile_is_valid() Part-of: 2023-08-09 11:28:37 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: vkvideoutils: add VkVideoDecodeUsageInfoKHR in profile Part-of: 2023-06-19 13:26:49 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: vkvideoutils: if unknown codec nullify pNext Part-of: 2023-11-13 19:50:07 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.h: vkvideoutils: mark as private members of profile structure Part-of: 2023-08-10 13:10:04 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: set image's number of layers Handle the image's number of layers as configuration so it can be set by the user, still isn't exposed as function since it's very niche. Part-of: 2023-06-16 16:31:36 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkmemory.c: vkmemory: avoid the property flag check During the video session memory allocation, the property flags can be different from the expected ones, so do not expect all the property flags and test it with G_MAXUINT32 It's failing with driver 525.47.26 and NVidia HW NVIDIA GeForce RTX 3050 and 2060 Part-of: 2023-11-20 20:41:07 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: d3d11: Update plugin doc cache Part-of: 2023-11-20 00:26:44 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter-helper.cpp: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11format.cpp: * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/meson.build: d3d11: Add support for Y210 and Y212 formats Part-of: 2023-11-18 23:31:30 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: d3d11testsrc: Bind UAV if needed YUV packed formats require UAV Part-of: 2023-11-18 22:51:41 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11-private.h: * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Add support for YUY2 and Y410 output Part-of: 2023-11-18 20:45:57 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Port to converter helper ... add support YUY2 and Y410 output Part-of: 2023-11-17 20:51:31 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter-builder.cpp: * gst-libs/gst/d3d11/gstd3d11converter-builder.h: * gst-libs/gst/d3d11/gstd3d11converter-helper.cpp: * gst-libs/gst/d3d11/gstd3d11converter-helper.h: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.h: * gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/collect_hlsl_header.py: * gst-libs/gst/d3d11/hlsl/meson.build: * gst-libs/gst/d3d11/meson.build: d3d11: Implement helper object for converter This object will upload system memory to GPU and preprocess texture using compute shader or software converter if needed Part-of: 2023-08-03 17:05:17 -0600 Jordan Yelloz * docs/libs/mse/index.md: * docs/libs/mse/sitemap.txt: * docs/meson.build: * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/meson.build: * gst-libs/gst/mse/gstappendpipeline-private.h: * gst-libs/gst/mse/gstappendpipeline.c: * gst-libs/gst/mse/gstmediasource-private.h: * gst-libs/gst/mse/gstmediasource.c: * gst-libs/gst/mse/gstmediasource.h: * gst-libs/gst/mse/gstmediasourcesamplemap-private.h: * gst-libs/gst/mse/gstmediasourcesamplemap.c: * gst-libs/gst/mse/gstmediasourcetrack-private.h: * gst-libs/gst/mse/gstmediasourcetrack.c: * gst-libs/gst/mse/gstmediasourcetrackbuffer-private.h: * gst-libs/gst/mse/gstmediasourcetrackbuffer.c: * gst-libs/gst/mse/gstmseeventqueue-private.h: * gst-libs/gst/mse/gstmseeventqueue.c: * gst-libs/gst/mse/gstmselogging-private.h: * gst-libs/gst/mse/gstmselogging.c: * gst-libs/gst/mse/gstmsemediatype-private.h: * gst-libs/gst/mse/gstmsemediatype.c: * gst-libs/gst/mse/gstmsesrc-private.h: * gst-libs/gst/mse/gstmsesrc.c: * gst-libs/gst/mse/gstmsesrc.h: * gst-libs/gst/mse/gstsourcebuffer-private.h: * gst-libs/gst/mse/gstsourcebuffer.c: * gst-libs/gst/mse/gstsourcebuffer.h: * gst-libs/gst/mse/gstsourcebufferlist-private.h: * gst-libs/gst/mse/gstsourcebufferlist.c: * gst-libs/gst/mse/gstsourcebufferlist.h: * gst-libs/gst/mse/meson.build: * gst-libs/gst/mse/mse-prelude.h: * gst-libs/gst/mse/mse.h: * gst/meson.build: * gst/mse/gstmse.c: * gst/mse/gstmse.h: * gst/mse/meson.build: * meson_options.txt: * tests/check/libs/mse.c: * tests/check/meson.build: * tests/files/mse.mp4: * tests/files/mse.webm: bad: Added W3C Media Source Extensions library Part-of: 2023-11-16 20:09:21 +0100 Alexander Slobodeniuk * gst-libs/gst/insertbin/gstinsertbin.c: * gst-libs/gst/insertbin/gstinsertbin.h: * gst/insertbin/plugin.c: insertbin/doc: add "Since" markers to pass CI Part-of: 2023-10-20 00:55:00 +0200 Alexander Slobodeniuk * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/insertbin/gstinsertbin.c: * gst/insertbin/meson.build: * gst/insertbin/plugin.c: * gst/meson.build: * meson_options.txt: insertbin: make it available in the registry so it could also be used from the gst-parse-launch Part-of: 2023-10-22 11:06:27 +0200 Robert Mader * gst/camerabin2/gstcamerabin2.c: camerabin: Fix source updates with user filters Take the case into account when user filters have been set before the source gets updated. Note that the further linking of the filters, if present, happens below in the `gst_camera_bin_check_and_replace_filter()` calls. The audio filter is still affected by the same issue but left out for now. Part-of: 2023-11-15 22:41:47 +0900 Seungha Yang * sys/d3d11/gstd3d11dxgicapture.cpp: * sys/d3d11/gstd3d11screencapture.cpp: * sys/d3d11/gstd3d11screencapture.h: * sys/d3d11/gstd3d11screencapturedevice.cpp: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11winrtcapture.cpp: d3d11screencapturesrc: Fix wrong color with HDR enabled Even if IDXGIOutput6 says current display colorspace is HDR, captured texture via IDXGIOutputDuplication::AcquireNextFrame() is converted frame by OS unless we use IDXGIOutput5::DuplicateOutput1() with DXGI_FORMAT_R16G16B16A16_FLOAT format, in order for captured frame to be scRGB color space. Then application should perform tonemap operation based on reported display white level, color primaries, etc. Since we don't have any tonemapping implementation, ignores colorimetry reported by IDXGIOutput6. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3128 Part-of: 2023-11-15 19:13:08 +0200 Sebastian Dröge * gst-libs/gst/player/gstplayer.c: player: Without dispatcher emit signals directly instead of via the default main context This is how it was documented and how it worked before the port to GstPlay. Without this, applications expecting signals to be emitted directly without anything running the main context will simply not receive any signals. Part-of: 2023-11-15 00:38:14 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * sys/d3d11/gstd3d11compositor.cpp: * sys/d3d11/gstd3d11overlaycompositor.cpp: * sys/d3d11/gstd3d11testsrc.cpp: d3d11: Avoid ID3D11DeviceContext::Map if possible Allocate resource with initial date instead of calling Map/Unmap after allocation Part-of: 2023-11-15 01:11:24 +0900 Seungha Yang * sys/dwrite/gstdwriteoverlayobject.cpp: dwrite: Protect entire draw operation with D3D11 lock d2d runtime seems to execute pending GPU command list when DXGI ID2D1RenderTarget is being released, and it will invoke d3d11 immediate context APIs. Should protect all rendering operations and DXGI resources with lock. Part-of: 2023-11-07 16:20:10 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdk.c: msdk: Add device env in plugin dependencies Add env vars GST_MSDK_DRM_DEVICE in plugin_add_dependencies to register msdk plugins according to user's choice in a multi-gpu platform. Part-of: 2023-02-28 23:59:45 +0100 Michael Grzeschik * gst-libs/gst/codecparsers/gsth264bitwriter.c: codecparsers: h264bitwriter: Fix trace typo Part-of: 2023-11-13 22:16:06 +0900 Seungha Yang * ext/closedcaption/gstcea608mux.c: cea608mux: Fix buffer leak Release buffer after use Part-of: 2022-08-08 14:46:16 -0400 Olivier Crête * ext/webrtc/webrtcsdp.c: webrtcsdp: Don't require fingerprint in inactive media Inactive m-lines don't need a fingerprint as they may not have a connection. Part-of: 2021-10-12 11:29:21 -0400 Olivier Crête * ext/webrtc/webrtcsdp.c: webrtcsdp: Remove comparison between media and session fingerprint The code seems to validate that the media-level fingerprint matches the fingerprint of the previous media or of the whole session. There is no such requirement in any RFC I found. The session-session one is just meant to act as a fallback when there is no media-level fingerprint. Part-of: 2023-10-19 21:21:51 +0200 Stéphane Cerveau * gst-libs/gst/codecparsers/gsth265parser.h: * gst-libs/gst/codecs/gsth265decoder.c: * gst/videoparsers/gsth265parse.c: codecparsers: introduce h265 level enum Part-of: 2023-02-06 15:47:41 +0100 Benjamin Gaignard * docs/plugins/gst_plugins_cache.json: * ext/codec2json/gsth2652json.c: * ext/codec2json/gsth2652json.h: * ext/codec2json/meson.build: * ext/codec2json/plugin.c: codec2json: Add h2652json element This element convert H.265 frame parameters into human readable json data. Part-of: 2023-02-01 16:44:39 +0100 Benjamin Gaignard * docs/plugins/gst_plugins_cache.json: * ext/codec2json/gsth2642json.c: * ext/codec2json/gsth2642json.h: * ext/codec2json/meson.build: * ext/codec2json/plugin.c: codec2json: Add h2642json element This element convert H.264 frame header into human readable json data. Part-of: 2023-11-12 11:07:37 +0000 Philippe Normand * gst-libs/gst/play/gstplay.c: play: Improve documentation header If the application relies on GstPlaySignalAdapter, no special clean-up is required. Part-of: 2023-11-08 09:53:17 +0000 HuQian * gst-libs/gst/wayland/gstwlvideoformat.c: waylandsink: fix incorrect RGB and BGR mapping about GST DRM and WL_SHM This commit corrects the mapping relationship between RGB and BGR in GST and DRM. The previous mapping was incorrect, causing potential color mismatches in the output. The changes are as follows: {WL_SHM_FORMAT_RGB888, DRM_FORMAT_RGB888, GST_VIDEO_FORMAT_BGR}, {WL_SHM_FORMAT_BGR888, DRM_FORMAT_BGR888, GST_VIDEO_FORMAT_RGB}, Part-of: 2023-11-11 14:10:37 +0200 Sebastian Dröge * gst-libs/gst/play/gstplay-signal-adapter.c: play: Automatically flush the bus when disposing the signal adapter See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3107 Part-of: 2023-11-09 17:57:22 +0000 Philippe Normand * gst-libs/gst/play/gstplay.c: gstplay: Add a minimal documentation header Also mentioning the need to set the bus to flushing state before disposing the player in order to avoid reference cycles. Fixes #3107 Part-of: 2023-11-10 14:49:50 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: vulkan/operation: wait for pending objects at reset Part-of: 2023-11-09 19:47:33 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: vulkan/operation: get query only if a operation is submitted To avoid a validation error if get query is performed before. Part-of: 2023-11-02 12:18:47 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: vulkan/operation: remove stored fences at the end Part-of: 2023-10-31 19:39:02 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: vulkan/operation: don't fail if extension isn't available gst_vulkan_operation_add_dependency_frame() is a noop if the required extensions aren't available. Part-of: 2023-10-20 00:09:57 +0300 Sebastian Dröge * gst/mxf/mxfdemux.c: * gst/mxf/mxfdemux.h: mxfdemux: Store GstMXFDemuxEssenceTrack in their own fixed allocation Previously they were stored inline inside a GArray, but as references to the tracks were stored in various other places although the array could still be updated (and reallocated!), this could lead to dangling references in various places. Instead now store them in a GPtrArray in their own allocation so each track's memory position stays fixed. Fixes ZDI-CAN-22299 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3055 Part-of: 2023-10-04 11:14:38 +0200 Benjamin Gaignard * gst-libs/gst/codecparsers/gstav1parser.c: codecparsers: av1: Clip max tile rows and cols values Clip tile rows and cols to 64 as describe in AV1 specification. Fixes ZDI-CAN-22226 / CVE-2023-44429 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3015 Part-of: 2023-11-09 14:22:06 +0100 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: * gst/timecode/gsttimecodestamper.c: timecodestamper: set drop-frame property default to TRUE After talking with Vivia on IRC, she does not remember why the default was FALSE and it is in my opinion preferable to stick to whatever representation best represents time for a given framerate as a default behavior. Part-of: 2023-11-08 13:59:44 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvabase.c: * sys/va/gstvabase.h: * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: * sys/va/gstvabasetransform.c: * sys/va/gstvabasetransform.h: va: use GstVideoInfoDmaDrm when importing buffers In the case of encoders and filters when importing a DMABuf, use GstVideoInfoDmaDrm to get the drm fourcc and modifier. In both cases, instead of keeping the original GstVideoInfoDmaDrm from caps, the GstVideoInfo part of the structure is converted as canonical one, given the format from the fourcc. It's kept in the way to handle V4L2 linear DMABufs and to avoid too many changes in the current code. Part-of: 2023-08-30 21:49:22 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: * sys/va/gstvabase.c: vaallocator: use GstVideoInfoDmaDrm for dmabuf setup Instead of guessing the DRM format and modifier, pass a DRM video info to gst_va_dmabuf_memories_setup(). Still, it checks for the DRM parameters in DRM info, if they are not available, as in the case of V4L2 buffers, the part of the video info is used. This is an API breakage, but since the plugin is still in stage, it's still allowed. Part-of: 2023-08-30 21:34:58 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/vasurfaceimage.c: * gst-libs/gst/va/vasurfaceimage.h: vaallocator: use VADRMPRIMESurfaceDescriptor to create surfaces To import DMAbufs we used VASurfaceAttribExternalBuffers which works, but it's not specific for DRM PRIME 2, since it lacks of many metadata. This patch replaces VASurfaceAttribExternalBuffers with VADRMPRIMESurfaceDescriptor in va_create_surfaces(). Still, this patch assumes linear modifier only. The hack for RGB surfaces in I965 driver was pushed down into va_create_surfaces() to avoid handling both structures. Part-of: 2023-08-30 21:25:41 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: * sys/va/gstvabase.c: vallocator: remove n_planes argument in dmabuf_memories_setup() Instead of passing the number of planes to process, take that number from the passed GstVideoInfo. This is an API breakage, but since the plugin is still in stage, it's still allowed. Part-of: 2023-08-30 13:01:04 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: fix assumption object size equal fd size Remove the comment and warning message that object size should be equal to the file descriptor size. Part-of: 2023-11-08 17:23:17 +0100 Tobias Rapp * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosrc.cpp: decklink: Fix typo in element documentation DechLink -> DeckLink Part-of: 2023-11-08 16:59:48 +0100 Tobias Rapp * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosrc.cpp: decklink: Increase section level of video sink/source element documentation Should fix auto-generated follow-up sections like "Hierarchy" or "Factory details" to be listed under the element name in the table-of-contents of the document, instead of a stand-alone "Duplex-Mode" section. Also cleanup some spurious colon suffix after section names. Part-of: 2023-11-07 11:56:20 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvadisplay.c: * sys/va/plugin.c: vadisplay: only register elements of allowed drivers Now that nvidia-vaapi-driver appeared and isn't yet supported by GstVA, we've to add an allowed list of supported drivers. This patch implements it adding a environment variable to disable this driver check: GST_VA_ALL_DRIVERS Part-of: 2023-10-02 15:34:42 +0300 Vivia Nikolaidou * ext/closedcaption/ccutils.c: * ext/closedcaption/ccutils.h: * ext/closedcaption/gstcccombiner.c: * ext/closedcaption/gstccconverter.c: * ext/closedcaption/gstcea608mux.c: * tests/check/elements/cccombiner.c: ccutils: Add padding also for ccp data Part-of: 2023-11-03 06:53:35 -0700 Slava Andrejev * gst-libs/gst/wayland/meson.build: meson: change Wayland scanner command from "code" to "private-code" Part-of: 2023-11-03 06:47:44 -0700 Slava Andrejev * gst-libs/gst/wayland/meson.build: meson: add processing of "staging" Wayland protocols Part-of: 2023-11-02 18:41:15 -0700 Slava Andrejev * gst-libs/gst/wayland/meson.build: meson: prevent sandbox violation if GStreamer and wayland-protocols are subprojects Suppose you have a project where GStreamer and wayland-protocols are pulled in as dependencies via .wrap files. In that case, Meson's setup step will fail for gst-plugins-bad with the message "Sandbox violation: Tried to grab file viewporter.xml outside current (sub)project." To avoid this exception, one should use Meson's `files` and `join_paths` functions. The suggested solution is identical to how GTK 4 processes Wayland files. Part-of: 2023-05-26 17:38:13 +0000 Balló György * gst-libs/gst/wayland/meson.build: gstwayland: Don't depend on wayland-protocols wayland-protocols are needed to build gstwayland, but not for dependent projects. Part-of: 2023-11-06 20:44:08 +0900 Seungha Yang * sys/d3d11/gstd3d11window.cpp: d3d11window: Fix scale factor setting Part-of: 2023-11-04 21:23:31 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter-private.h: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: * gst-libs/gst/d3d11/meson.build: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/meson.build: d3d11: Enable DirectXMath SIMD * Enable SIMD except for x86 target * Use aligned matrix struct * Remove unnecessary matrix copy operations Part-of: 2023-10-18 15:12:38 +0300 Vivia Nikolaidou * ext/closedcaption/ccutils.c: * tests/check/elements/ccconverter.c: ccutils: Keep upstream padding payload A payload of 0x80 0x80 means that it's padding. It's not a good idea to throw this away though, because of the cc_valid field. According to CEA 10-B section 25.2.1, if cc_valid is zero, the run-in clock and start bit should not be generated. In practice, this means that any closed captions will be erased and the end-user TV will show that captions are not available for this stream. This might have undesired consequences, e.g. we were just showing a long line of captions and we disable it before the user has had time to read it, or you can't enable closed captions during silence/music intervals. We cannot reliably detect whether there's a currently-silent closed caption stream or just nothing, but we have this information coming from upstream, so we can at least not discard it. Part-of: 2023-11-04 19:36:06 +0900 Seungha Yang * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2client.h: * sys/wasapi2/gstwasapi2device.c: wasapi2device: Ignore activation failed device Enumerates all devices even if activation error is detected Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3090 Part-of: 2023-11-04 03:16:47 +0100 Marek Vasut * sys/v4l2codecs/gstv4l2decoder.c: v4l2codecs: Avoid QBUF/DQBUF struct timeval .tv_usec wrap-around at frame 1000000 When decoding stream using hardware V4L2 decoder element, in any of the currently supported formats, the decoding will fail once frame number 1000000 is reached. The reported error clearly indicates a wrap-around occured, instead of receiving decoded frame 1000000, frame 0 is received from the hardware V4L2 decoder driver. The problem is actually not in the driver itself, but rather in gstreamer, which uses `struct v4l2_buffer` member `.timestamp` in a special way. The timestamp of buffers with encoded data added to the SINK (input) queue of the driver is copied by the driver into matching buffers with decoded data added to the SOURCE (output) queue of the driver. In fact, the timestamp is not a timestamp at all, but rather in this special case, only part of it is used as an incrementing frame counter. The `.timestamp` is of type `struct timeval`, which is defined in `sys/time.h` [1]. Only the `tv_usec` member of this structure is used for the incrementing frame counter. However, suseconds_t tv_usec [2] may be limited to range [-1, 1000000]: " [XSI] The type suseconds_t shall be a signed integer type capable of storing values at least in the range [-1, 1000000]. " Therefore, once frame 1000000 is reached, a rollover occurs and decoding fails. Fix this by using both `struct timeval` members, `.tv_sec` and `.tv_usec` with matching modular arithmetic, this way the failure would occur again just short of 2^84 frames, which should be plenty. [1] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_time.h.html [2] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html A test case using stateless hardware h264 decoder, the WARN/ERROR output in gstreamer log indicates a failure occurred. With this change, that error no longer occurs and the WARN/ERROR are not present: ``` pc$ gst-launch-1.0 videotestsrc num-buffers=1001001 pattern=6 ! \ video/x-raw,width=16,height=16,format=I420 ! \ x264enc ! filesink location=/tmp/test.h264 dut$ GST_DEBUG="*:3" gst-launch-1.0 filesrc location=/tmp/test.h264 ! \ h264parse ! v4l2slh264dec ! fakesink ... 0:03:51.393677606 12111 0x370df400 WARN \ v4l2codecs-decoder gstv4l2decoder.c:1157:gst_v4l2_request_set_done: \ Requested frame 1000000, but driver returned frame 0. 0:03:51.394140597 12111 0x370df400 WARN \ v4l2codecs-decoder gstv4l2decoder.c:1157:gst_v4l2_request_set_done: \ Requested frame 1000001, but driver returned frame 1. 0:03:51.394425216 12111 0x370df400 WARN \ v4l2codecs-decoder gstv4l2decoder.c:1157:gst_v4l2_request_set_done: \ Requested frame 1000002, but driver returned frame 2. 0:03:51.394665211 12111 0x370df400 WARN \ v4l2codecs-decoder gstv4l2decoder.c:1157:gst_v4l2_request_set_done: \ Requested frame 1000003, but driver returned frame 3. 0:03:51.394785833 12111 0x370df400 WARN \ v4l2codecs-h264dec gstv4l2codech264dec.c:1059:gst_v4l2_codec_h264_dec_output_picture: \ error: Failed to decode frame 1000000 ERROR: from element /GstPipeline:pipeline0/v4l2slh264dec:v4l2slh264dec0: Failed to decode frame 1000000 ``` Part-of: 2023-10-23 15:11:23 -0400 Xavier Claessens * gst/unixfd/gstunixfd.c: * gst/unixfd/gstunixfd.h: * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: unixfd: Add support for abstract socket Part-of: 2023-09-28 13:34:32 -0400 Xavier Claessens * gst/unixfd/gstunixfd.h: * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: unixfd: Use DMABuf allocator when needed Part-of: 2023-09-18 14:38:27 -0400 Xavier Claessens * docs/plugins/gst_plugins_cache.json: unixfd: Update gst_plugins_cache.json Sponsored-by: Netflix Inc. Part-of: 2023-09-18 14:38:26 -0400 Xavier Claessens * gst/meson.build: * gst/unixfd/gstunixfd.c: * gst/unixfd/gstunixfd.h: * gst/unixfd/gstunixfdsink.c: * gst/unixfd/gstunixfdsrc.c: * gst/unixfd/meson.build: * meson_options.txt: * tests/check/elements/unixfd.c: * tests/check/meson.build: unixfd: New plugin with unixfdsink and unixfdsrc elements This pair of elements, inspired from shmsink/shmsrc, send unix file descriptors (e.g. memfd, dmabuf) from one sink to multiple source elements in other processes. The unixfdsink proposes a memfd/shm allocator, which causes for example videotestsrc to write directly into memories that can be transfered to other processes without copying. Sponsored-by: Netflix Inc. Part-of: 2023-09-18 14:38:23 -0400 Xavier Claessens * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwlshmallocator.c: * gst-libs/gst/wayland/gstwlshmallocator.h: * gst-libs/gst/wayland/gstwlwindow.c: GstShmAllocator: New shared memory allocator This makes Wayland's allocator public. It is generally useful to have a shared memory allocator that can create memfd on Linux. Sponsored-by: Netflix Inc. Part-of: 2023-11-02 00:33:46 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.h: wasapi2: Fix build with GST_DISABLE_GST_DEBUG Part-of: 2023-11-02 00:30:19 +0900 Seungha Yang * sys/mediafoundation/gstmfutils.h: mediafoundation: Fix build with GST_DISABLE_GST_DEBUG Part-of: 2023-11-02 00:24:35 +0900 Seungha Yang * sys/d3d12/gstd3d12utils.h: * sys/d3d12/meson.build: d3d12: Fix build with GST_DISABLE_GST_DEBUG Part-of: 2023-11-02 00:21:17 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11utils.cpp: * gst-libs/gst/d3d11/gstd3d11utils.h: * gst-libs/gst/d3d11/meson.build: d3d11: Fix build with GST_DISABLE_GST_DEBUG Part-of: 2023-11-02 00:03:28 +0900 Seungha Yang * meson.build: meson: Fix MSVC build with GST_DISABLE_GST_DEBUG MSVC does not understand Wno-unused Part-of: 2023-10-28 22:55:04 +0800 He Junyan * docs/plugins/gst_plugins_cache.json: * ext/libde265/libde265-dec.c: libde265dec: Only decode the main profile The src caps of the libde265 is now fixed to I420, and so if the stream is other format, such as 4:4:4 or 10 bits format, the pipeline will crash because the dowstream element accesses the video buffer as I420 format. We now restrain the input caps to "main" profile, which only contains 4:2:0 8 bits stream. Part-of: 2023-10-31 17:59:32 +0100 Kalev Lember * ext/openh264/gstopenh264dec.cpp: * ext/openh264/gstopenh264enc.cpp: openh264: Fail gracefully if openh264 encoder/decoder creation fails This can happen with the dummy "noopenh264" library that the freedesktop flatpak runtime ships, and Fedora is planning on shipping as well. In both cases the dummy implementation gets replaced with the actual openh264 library that's downloaded directly from Cisco, but just to be on safe side, this patch makes it careful to check the return values to avoid crashing if the underlying library hasn't been swapped out yet. The patch is taken from freedesktop-sdk and was originally written by Valentin David . Part-of: 2023-11-01 01:58:14 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * sys/d3d11/gstd3d11pluginutils.cpp: d3d11: Set MaxAnisotropy value for the best quality ... and use anisotropic filter without comparison, which is actually intended one. Part-of: 2023-11-01 01:32:27 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Simplify private struct ctor Initialize transform matrix using memcpy Part-of: 2023-11-01 01:20:02 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: d3d11device: Store device formats in hash map Part-of: 2023-11-01 00:38:31 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: Avoid heap allocation per upload Don't allocate list per upload Part-of: 2023-09-29 20:11:52 +0000 robert * ext/dtls/gstdtlsenc.c: gstdtlsenc: fix stream_id and missing group_id Part-of: 2023-10-29 23:43:56 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11window.h: d3d11videosink: Add redraw-on-update property If users update geometry related properties very frequently for a stream to be animated, redrawing on every update can make rendering choppy or can be a performance bottleneck. To address the issue, adding a property to control the behavior of redrawing scene when geometry related properties are updated. Also, do not resize swapchain on such property update, since re-allocating backbuffer and multi-sampled render target is unnecessary in that case. Part-of: 2023-10-30 00:00:30 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Don't update vertex buffer on transform matrix change Transform matrix change requires only constant buffer update Part-of: 2023-10-29 22:42:52 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Fix window switching in case of fullscreen mode Other Windows applications allow window switching even when an application window is in fullscreen mode. Also fixing regression introduced in 15248d8b84db9e79e6d4587b212b12ca82fc4a6b which makes restored window is always located at topmost since we do not call SetWindowPos() anymore when restoring Part-of: 2023-10-29 00:36:23 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Fallback to linear sampler if filter is not supported Use linear sampler if requested filter is not supported Part-of: 2023-10-28 23:12:30 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d11/gstd3d11videosink.cpp: d3d11videosink: Add sampling-method property Identical to "method" property in d3d11convert element Part-of: 2023-10-28 22:38:02 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: d3d11convert: Add support for sampling with anisotropic filter Anisotropic filtering might produce better quality than linear filtering Part-of: 2023-10-28 22:08:31 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Add support for transform Adding 3D rotation and scale transform support to d3d11convert element Part-of: 2023-10-28 20:15:34 +0900 Seungha Yang * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11window.cpp: d3d11: Move transform matrix related method to utils Part-of: 2023-10-28 19:34:55 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: Set rasterizer state Part-of: 2023-10-27 23:43:03 +0900 Seungha Yang * sys/d3d11/gstd3d11dxgicapture.cpp: * sys/d3d11/gstd3d11screencapture.cpp: * sys/d3d11/gstd3d11screencapture.h: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11winrtcapture.cpp: d3d11screencapturesrc: Set rasterizer state Part-of: 2023-10-27 23:30:43 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Set rasterizer state Part-of: 2023-10-27 23:24:15 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: d3d11testsrc: Set rasterizer state Part-of: 2023-10-27 22:51:22 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: d3d11converter: Reuse rasterizer state object Part-of: 2023-10-27 22:23:46 +0900 Seungha Yang * sys/d3d11/gstd3d11dxgicapture.cpp: d3d11screencapturesrc: Use DirectXMath struct and C++ mutex Part-of: 2023-10-22 01:10:54 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11window.h: * sys/d3d11/meson.build: d3d11videosink: Add support for transform and MSAA Adding properties for 3D rotation with arbitrary angle and scaling. And adding Multi Sampling Anti-Aliasing rendering support to smooth borders if arbitrary angle is applied Part-of: 2023-10-22 01:09:34 +0900 Seungha Yang * sys/d3d11/gstd3d11window.cpp: d3d11videosink: Fix typo Part-of: 2023-10-19 22:27:20 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11converter: Add support for MSAA render target Create multi-sample render target view if sample count > 1 and MSAA enabled rasterizer for multi-sample render target Part-of: 2023-10-19 21:52:27 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: d3d11converter: Add support for custom transform matrix Adding gst_d3d11_converter_set_transform_matrix() method so that user specified transform matrix can be applied when "video-direction=custom" Part-of: 2023-10-17 20:05:12 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/hlsl/VSMain_converter.hlsl: d3d11converter: Use transform matrix for rotation/flip Part-of: 2023-10-25 21:37:24 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Don't use global volume control object ISimpleAudioVolume controls volume of corresponding audio session and there would be only single input/output audio session in case of share-mode, which means that it controls audio volume of the process. Instead, use IAudioStreamVolume interface which controls volume of the stream. Part-of: 2023-10-28 01:23:36 +0900 Seungha Yang * sys/d3d11/gstd3d11screencapturesrc.cpp: d3d11screencapturesrc: Fix mouse cursor blending Ignore alpha component of source (mouse cursor texture) when blending alpha channel, otherwise the background area of source (which has zeros) will be written to render target. Then it will result in black rectangle if output texture is converted to premultiplied alpha texture Part-of: 2023-10-26 16:37:23 +0300 Sebastian Dröge * sys/aja/.clang-format: aja: Move clang-format configuration from the top-level to the plugin subdirectory This shouldn't have been left at the top-level but was forgotten to be moved when merging the repository histories. Part-of: 2023-10-26 10:48:01 +0100 Tim-Philipp Müller * gst/debugutils/fpsdisplaysink.c: * gst/debugutils/fpsdisplaysink.h: fpsdisplaysink: fix copy'n'paste-o in license header It's LGPL licensed, remove confusing GPL reference. Part-of: 2023-09-12 12:36:55 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vkformat: also use the correct srgb vs unorm when using older gst_video_info_from_video_info() Fixes sRGB colorspace chosen by GstVulkanSwapper and therefore used for display. Part-of: 2023-09-27 17:47:25 +0200 Tim-Philipp Müller * REQUIREMENTS: * docs/plugins/gst_plugins_cache.json: * ext/kate/README: * ext/kate/gstkate.c: * ext/kate/gstkatedec.c: * ext/kate/gstkatedec.h: * ext/kate/gstkateelement.c: * ext/kate/gstkateelements.h: * ext/kate/gstkateenc.c: * ext/kate/gstkateenc.h: * ext/kate/gstkateparse.c: * ext/kate/gstkateparse.h: * ext/kate/gstkatespu.c: * ext/kate/gstkatespu.h: * ext/kate/gstkatetag.c: * ext/kate/gstkatetag.h: * ext/kate/gstkatetiger.c: * ext/kate/gstkatetiger.h: * ext/kate/gstkateutil.c: * ext/kate/gstkateutil.h: * ext/kate/meson.build: * ext/meson.build: * gst/inter/gstintersubsrc.c: * meson_options.txt: * tests/check/elements/kate.c: * tests/check/meson.build: kate: remove plugin Bitrotten and not really used in the wild. The actual render library (libtiger) is not just unmaintained but the upstream location has disappeared, and it's also not even packaged by e.g. debian/ubuntu. Closes #3071 Part-of: 2023-10-23 17:24:40 +0100 Philippe Normand * ext/wpe/gstwpesrcbin.cpp: wpesrcbin: Fix audio metadata The meta expects the number of samples in the buffer, not the total size. Part-of: 2023-10-26 16:32:28 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/opencv/meson.build: build: opencv: disable opencv deps if it's not installed When hotdoc documentation is enabled and opencv plugin is set as auto-detected, but the library isn't installed, meson configuration fails with this message: ../subprojects/gst-plugins-bad/docs/meson.build:139:21: ERROR: Unknown variable "gstopencv_dep". This patch fixes this case defined gstopencv_dep as disabler() when dependencies aren't found. Part-of: 2023-10-16 15:28:21 +0800 Mengkejiergeli Ba * gst-libs/gst/va/gstvaallocator.c: vaallocator: Do not try derive image for d3d backend Current codes try derive image in _update_image_info first, if derive returns no error, the va_allocator->info is the one from derived image, but in va_map_unlocked, we disable derive manner for d3d backend because it doesn't seem to work, this will cause issue for d3d path, i.e. possibly using derived info in va_get_image to do mapping... This patch disables derive image for d3d backend in _update_image_info, to ensure we only use info from va_create_image for d3d path. Part-of: 2023-07-20 18:23:12 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkdownload.c: vulkandownload: use GstVulkanOperation Part-of: 2023-06-29 14:11:05 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkupload.c: vulkanupload: use GstVulkanOperation Part-of: 2023-06-29 08:24:18 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: use GstVulkanOperation Part-of: 2023-05-15 17:14:55 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkoperation.c: * gst-libs/gst/vulkan/gstvkoperation.h: * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/vulkan/vulkan.h: * gst-libs/gst/vulkan/vulkan_fwd.h: vkoperation: synchronization helper object An operation is an arbitrary amount of work to be executed on the host, a device, or an external entity such as a presentation engine. The purpose of this object is to help on the operation's synchronization through declaring explicit execution dependencies, and memory dependencies between two sets of operations defined by the command’s two synchronization scopes. Part-of: 2023-06-29 12:30:13 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkbarrier.h: * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkimagememory.c: vulkan: add a timeline semaphore per image Part-of: 2023-07-31 18:41:24 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkbarrier.h: vkbarrier: Use guint64 for VkFlags and VkFlags2 While VkPipelineStageFlags is an enum (arguably backed as uint32 in 32bit platforms), VkPipelineStageFlags2 is a redefinition of guint64; likewise for VkAccessFlags and VkAccessFlags2. This patch types both members in GstVulkanBarrierMemoryInfo as guint64 for compatibility, so it could be used with or without synchronization2 vulkan extension. Part-of: 2023-06-28 19:38:33 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkbuffermemory.c: * gst-libs/gst/vulkan/gstvkimagememory.c: vkmemory: unref queue in barriers Queue might be assigned for queue transfers, so we need to unref it if the memory has been assigned to a specific queue. Part-of: 2023-06-27 16:35:36 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: use macro VK_KHR_synchronization2 as guard Instead of (defined(VK_VERSION_1_3) || (defined(VK_VERSION_1_2) && VK_HEADER_VERSION >= 170)) Part-of: 2023-10-23 11:03:32 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * sys/aja/README.md: * sys/aja/gstajacommon.cpp: * sys/aja/gstajasink.cpp: * sys/aja/gstajasrc.cpp: * sys/aja/plugin.cpp: aja: Add basic documentation Also remove the `gst-inspect-1.0` output from the README.md. This is listed in the actual documentation and more up to date there. 2023-10-21 10:26:40 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * meson_options.txt: * sys/aja/meson.build: * sys/aja/meson_options.txt: * sys/meson.build: aja: Integrate AJA plugin into the build system Co-Authored-By: Nirbheek Chauhan 2023-10-21 10:22:39 +0300 Sebastian Dröge * sys/aja/README.md: * sys/aja/gstajacommon.cpp: * sys/aja/gstajacommon.h: * sys/aja/gstajadeviceprovider.cpp: * sys/aja/gstajadeviceprovider.h: * sys/aja/gstajasink.cpp: * sys/aja/gstajasink.h: * sys/aja/gstajasinkcombiner.cpp: * sys/aja/gstajasinkcombiner.h: * sys/aja/gstajasrc.cpp: * sys/aja/gstajasrc.h: * sys/aja/gstajasrcdemux.cpp: * sys/aja/gstajasrcdemux.h: * sys/aja/meson.build: * sys/aja/meson_options.txt: * sys/aja/plugin.cpp: Prepare for merging into GStreamer 2020-07-15 07:04:47 +0300 Jordan Petridis * ext/opencv/meson.build: * gst-libs/gst/opencv/meson.build: opencv: move the dependency check to a single place Previously we were checking for opencv dep in 2 different places, and the checks would vary in terms of how complex and exhaustive they were. Move the check into the libs module and reuse the result later on. Part-of: 2023-10-25 23:19:51 +0900 Seungha Yang * sys/mediafoundation/gstmfvideoencoder.cpp: mfvideoencoder: Fix typo in template caps Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3058 Part-of: 2023-10-25 16:07:26 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vulkan/physical-device: don't assume that queue_family_ops is filled On old enough vulkan (< 1.2), we will never retrieve the family operations and will perform a NULL pointer dereference when dumping the queue family op properties. Part-of: 2023-10-24 16:32:36 +0200 Adrien De Coninck * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window_win32.cpp: * sys/d3d11/gstd3d11window_win32.h: d3d11videosink: post "have-window-handle" element message on the bus * when window_id is not user-provided and window_type==GST_D3D11_WINDOW_NATIVE_TYPE_HWND * allows user to retrieve internally created window handle * for custom positionning * for custom icons * ... Part-of: 2023-10-12 10:39:39 +0200 David Rosca * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/vasurfaceimage.c: * gst-libs/gst/va/vasurfaceimage.h: * sys/va/gstvabaseenc.c: va: Use vaMapBuffer2 Part-of: 2023-10-03 17:33:42 +0300 Jordan Petridis * gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.h: vkwindow_xcb: Make the visible private field a guint This field is used to store gbooleans (which are ints) but if it's a :1 bit depth assigning ints to it changes it's value as the only valid values are -1 and 0. Make it a guint instead so the cast would be correct. ``` ../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c:151:25: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion] window_xcb->visible = TRUE; ``` Part-of: 2022-04-06 12:56:30 +0100 Tim-Philipp Müller * meson.build: meson: Bump GLib requirement to >= 2.64 This includes fixes to make GstBus watches non-racy. Part-of: 2020-07-10 12:16:35 +0300 Jordan Petridis * docs/plugins/gst_plugins_cache.json: ci: switch the Fedora base image to f34 Part-of: 2023-09-29 16:55:15 +0200 Jordan Petridis * ext/svthevcenc/gstsvthevcenc.c: svthevcenc: Fix potential use of unitialized variable In gst_svthevc_enc_propose_allocation if we don't get info from the caps, we'd goto done, which could potentially try to unref and unitialized pool variable. Part-of: 2023-10-20 13:50:16 +0200 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix deadlock when attempting to negotiate This was wrongly calling the base class method, which unnecessairly took the stream lock, already taken by handle_frame(). The drain() call in negotiate() would then wait for the output loop to pause, while that loop is stuck waiting to take the stream lock, thus causing a deadlock. Part-of: 2023-10-20 12:54:44 +0530 Nirbheek Chauhan * ext/svtav1/gstsvtav1enc.c: svtav1enc: Don't segfault on not-negotiated Don't drain on finish if we didn't configure the encoder. Part-of: 2023-10-19 19:33:49 -0400 Olivier Crête * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxenums.h: * ext/onnx/gstonnxinference.cpp: * ext/onnx/gstonnxinference.h: onnx: Remove enums file Part-of: 2023-10-19 19:26:51 -0400 Olivier Crête * ext/onnx/decoders/gstobjectdetectorutils.cpp: * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/gstonnxclient.cpp: * ext/onnx/meson.build: * ext/onnx/tensor/gsttensorid.cpp: * ext/onnx/tensor/gsttensorid.h: onnx: Remove unnecessary tensorid class Part-of: 2023-10-19 16:16:21 -0400 Olivier Crête * ext/onnx/gstonnxclient.cpp: * ext/onnx/meson.build: onnx: Update to build against 1.16.1 Part-of: 2023-06-26 10:55:53 -0400 Aaron Boxer * ext/onnx/decoders/gstobjectdetectorutils.cpp: * ext/onnx/decoders/gstobjectdetectorutils.h: * ext/onnx/decoders/gstssdobjectdetector.cpp: * ext/onnx/decoders/gstssdobjectdetector.h: * ext/onnx/gstml.h: * ext/onnx/gstonnx.c: * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxclient.h: * ext/onnx/gstonnxelement.c: * ext/onnx/gstonnxenums.h: * ext/onnx/gstonnxinference.cpp: * ext/onnx/gstonnxinference.h: * ext/onnx/gstonnxobjectdetector.cpp: * ext/onnx/gstonnxobjectdetector.h: * ext/onnx/meson.build: * ext/onnx/tensor/gsttensor.h: * ext/onnx/tensor/gsttensorid.cpp: * ext/onnx/tensor/gsttensorid.h: * ext/onnx/tensor/gsttensormeta.c: * ext/onnx/tensor/gsttensormeta.h: onnx: add gstonnxinference element This element refactors functionality from gstonnxinference element, namely separating out the ONNX inference from the subsequent analysis. The new element runs an ONNX model on each video frame, and then attaches a TensorMeta meta with the output tensor data. This tensor data will then be consumed by downstream elements such as gstobjectdetector. At the moment, a provisional TensorMeta is used just in the ONNX plugin, but in future this will upgraded to a GStreamer API for other plugins to consume. Part-of: 2023-10-10 10:39:55 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/gstatscmux.c: * gst/mpegtsmux/tsmux/tsmuxstream.c: * gst/mpegtsmux/tsmux/tsmuxstream.h: tsmux: Fix default get_es_descrs_func `tsmux_stream_default_get_es_descrs` is missing the `user_data` parameter and shouldn't be cast to `TsMuxStreamGetESDescriptorsFunc`. Prefer not casting at all to make sure we don't miss such an issue. Part-of: 2023-10-10 10:22:44 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/gstatscmux.c: * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmux.h: tsmux: Fix default new_stream_func `tsmux_stream_new` is missing the `user_data` parameter and shouldn't be cast to `TsMuxNewStreamFunc`. Prefer not casting at all to make sure we don't miss such an issue. Part-of: 2023-10-10 10:12:44 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmuxstream.h: tsmux: Add missing include We need `GstMpegtsPMTStream` here. Part-of: 2023-10-17 00:57:56 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Simplify tsmux_section_write_packet - Don't try to make the parameters match `GHFunc`. Use a dedicated callback for `g_hash_table_foreach`. - Don't try to be clever with buffer memories. We're allocating a full packet anyway, might as well memcpy and save on a lot of complexity. Part-of: 2023-10-17 00:54:38 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: tsmux_packet_out should always consume its buffer Consuming the buffer only when successful is an antipattern and easily leads to leaks. Part-of: 2023-10-16 23:54:20 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Don't memset in pad_stream when writing a PCR packet tsmux_write_ts_header will write a stuffing adaptation field, so we don't need to prefill the buffer. Part-of: 2023-10-16 23:52:48 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Move out parameters of tsmux_write_ts_header Move them to the end of the parameter list and also allow passing NULLs to ignore the payload information, but assert that the payload length is zero in this case. Part-of: 2023-10-16 23:50:16 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Fix two more uses of gst_buffer_map The buffers should be used for writing. Part-of: 2023-10-18 14:19:44 +0530 Nirbheek Chauhan * ext/dtls/meson.build: * ext/sctp/meson.build: * ext/srtp/meson.build: * meson.build: * meson_options.txt: meson: Add a top-level option to enable webrtc There are a bunch of plugins that you need for webrtc support, and it's not obvious at all to users which those are. With this commit, srtp, sctp and dtls options will be auto-enabled if the webrtc option is enabled. Requires meson 1.1 Part-of: 2023-10-17 14:56:34 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: h265: Fix entry_point_offsets array leak This array was being leaked. Part-of: 2023-10-17 12:42:59 -0400 Detlev Casanova * gst-libs/gst/codecs/gsth265decoder.c: codecs: h265: Do not free slice header before using it The v4l2codecs H.265 decoder uses the GstH265SliceHdr::entry_point_offset_minus1 array so make sure that it is not freed before decoding the frame. Before this patch, some H.265 input would segfault in gst_v4l2_codec_h265_dec_fill_slice_params() when executing the line: guint32 entry_point_offset = slice_hdr->entry_point_offset_minus1[i] + 1; Make sure that the array is not freed before using it. Part-of: 2023-10-17 21:07:39 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Fix deadlock on taking property mutex SRWLOCK should be zero initialized, but since we changed the private struct to C++, use C++ mutex instead. Part-of: 2023-10-17 00:53:46 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Create ID3D11Buffer with initial data ... and remove unnecessary device lock Part-of: 2023-10-17 00:12:56 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Don't set unnecessary constant buffer Skip PSSetConstantBuffers() if it's not used by pixel shader Part-of: 2023-10-16 22:58:24 +0200 Diego Nieto * gst/mpegtsdemux/mpegtspacketizer.c: mpegtsdemux: Fix comment about the jitter description According to the information provided below, the Jitter (J) is defined by a network delay (D) + a noise(i) Part-of: 2023-10-16 15:41:48 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Fix error handling in pad_stream Don't leak the map or the buffer if we encounter an error. Part-of: 2023-10-16 15:31:04 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/tsmux/tsmux.c: tsmux: Fill padding packets with stuffing bytes Instead of leaving it uncleared, emitting probably old packet data but potentially also random or sensitive application data. Also fix the mapping mode. Part-of: 2023-10-16 00:59:59 +0900 Seungha Yang * sys/d3d11/gstd3d11winrtcapture.cpp: d3d11screencapturesrc: Fix HWND capture mode Use per-monitor-aware context to cover different DPI settings per monitor Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2425 Part-of: 2023-10-15 18:58:14 +0900 Seungha Yang * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: d3d11converter: Update shader code to make 4_0_level_9_1 compatible 4_0_level_9_1 target requires float4 SV_TARGET Part-of: 2023-10-15 01:47:29 +0900 Seungha Yang * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: d3d11converter: Fix 10/12bits planar output Simple division can result in 10/12bits overflow. Part-of: 2023-10-15 00:27:27 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Print calculated matrix for debugging Part-of: 2023-10-14 20:46:57 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Calculate gamma LUT only once Reuse calculated gamma lookup table and use immutable 1D texture Part-of: 2023-10-14 20:22:45 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Remove unused variable Part-of: 2023-10-14 01:04:35 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: docs: Update Windows plugin docs Part-of: 2023-10-14 00:42:34 +0900 Seungha Yang * docs/libs/dxva/index.md: * docs/libs/dxva/sitemap.txt: * docs/meson.build: * gst-libs/gst/dxva/gstdxvaav1.h: * gst-libs/gst/dxva/gstdxvaav1decoder.cpp: * gst-libs/gst/dxva/gstdxvaav1decoder.h: * gst-libs/gst/dxva/gstdxvah264decoder.cpp: * gst-libs/gst/dxva/gstdxvah264decoder.h: * gst-libs/gst/dxva/gstdxvah265decoder.cpp: * gst-libs/gst/dxva/gstdxvah265decoder.h: * gst-libs/gst/dxva/gstdxvampeg2decoder.cpp: * gst-libs/gst/dxva/gstdxvampeg2decoder.h: * gst-libs/gst/dxva/gstdxvatypedef.h: * gst-libs/gst/dxva/gstdxvavp8decoder.cpp: * gst-libs/gst/dxva/gstdxvavp8decoder.h: * gst-libs/gst/dxva/gstdxvavp9decoder.cpp: * gst-libs/gst/dxva/gstdxvavp9decoder.h: * gst-libs/gst/dxva/meson.build: dxva: Build gir and remove SDK header dependency Build gir for documentation Part-of: 2023-10-13 21:40:45 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12vp9dec.cpp: * sys/d3d12/plugin.cpp: d3d12decoder: Hide non-default device from docs ... and add since marker Part-of: 2023-10-13 21:36:50 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Fix typo in property description Part-of: 2023-10-02 21:57:19 +0900 Seungha Yang * sys/nvcodec/gstnvenc.c: * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Add support for new preset/tune/multi-pass options Adding new P1 ~ P7 presets and deprecate old preset values. Also adding tune and multi-pass properties. Part-of: 2023-10-13 09:28:41 +0300 Mart Raudsepp * docs/plugins/gst_plugins_cache.json: * ext/bs2b/gstbs2b.c: bs2b: Add missing space in plugin description Part-of: 2023-10-13 10:04:39 +0300 Mart Raudsepp * ext/colormanagement/gstlcms.c: colormanagement: Fix typo in pipeline example Part-of: 2023-10-12 16:25:59 +0530 Rahul T R * sys/kms/gstkmssink.c: kmssink: Add TIDSS auto-detection Add Texas Instruments TIDSS display controller into list of auto-detected modules. Part-of: 2023-10-12 18:56:57 +0900 Seungha Yang * gst-libs/gst/va/gstvadisplay_win32.cpp: * sys/d3d12/gstd3d12basefilter.cpp: * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12fence.cpp: * sys/d3d12/meson.build: * sys/dwrite/gstdwrite-renderer.cpp: d3d12, dwrite, va: Fix various msys2 build error/warning Part-of: 2023-10-10 09:52:48 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: msdkvpp: Use filter flag to handle passthrough for tone mapping Part-of: 2023-10-12 02:47:28 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Don't use DXGI_ALPHA_MODE_PREMULTIPLIED for HWND swapchain It's allowed only for a swapchain type which does composition Part-of: 2023-10-12 02:26:07 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Fix rendering with initial fullscreen state Change fullscreen mode once the swapchain is fully configured Part-of: 2023-10-11 23:29:04 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Fix toggling between fullscreen and maximized Use GetWindowPlacement() and SetWindowPlacement() APIs to remember and restore window status, such as maximized, position, restore position, etc. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3016 Part-of: 2023-10-10 19:40:36 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converterbuilder.cpp: * gst-libs/gst/d3d11/gstd3d11converterbuilder.h: * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11format.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.h: * gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/VSMain_converter.hlsl: * gst-libs/gst/d3d11/hlsl/collect_hlsl_header.py: * gst-libs/gst/d3d11/hlsl/meson.build: * gst-libs/gst/d3d11/meson.build: * sys/d3d11/gstd3d11pluginutils.cpp: d3d11converter: Add support for HLSL precompile and bytecode caching Precompile pixel shaders for simple conversion path (without gamma/primaries conversion) in case of MSVC build. Even if runtime compile is required (cross-compiled or complex conversion path), do it only once and reuse the compiled bytecode. This precompile/caching can save about 95% of time taken by gst_d3d11_converter_new() call. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3004 Part-of: 2023-10-10 20:01:57 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * sys/d3d11/gstd3d11dxgicapture.cpp: * sys/d3d11/gstd3d11overlaycompositor.cpp: * sys/d3d11/gstd3d11screencapturesrc.cpp: d3d11: Reuse sampler object The linear sampler object can be reused Part-of: 2023-10-10 19:35:36 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.h: * sys/d3d11/gstd3d11pluginutils.cpp: d3d11: Pass HLSL source size to compile function The string size is known at build time Part-of: 2023-10-09 01:05:34 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11testsrc.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/dwrite/gstdwriteoverlayobject.cpp: d3d11converter: Set alpha-mode using config ... and disallow runtime alpha-mode update for now Part-of: 2023-10-06 20:46:23 +0900 Seungha Yang * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/hlsl/PSMain_checker.hlsl: * sys/d3d11/hlsl/PSMain_checker_luma.hlsl: * sys/d3d11/hlsl/PSMain_checker_rgb.hlsl: * sys/d3d11/hlsl/PSMain_checker_vuya.hlsl: * sys/d3d11/hlsl/PSMain_color.hlsl: * sys/d3d11/hlsl/PSMain_sample.hlsl: * sys/d3d11/hlsl/PSMain_sample_premul.hlsl: * sys/d3d11/hlsl/PSMain_snow.hlsl: * sys/d3d11/hlsl/VSMain_color.hlsl: * sys/d3d11/hlsl/VSMain_coord.hlsl: * sys/d3d11/hlsl/VSMain_pos.hlsl: * sys/d3d11/hlsl/gstd3d11plugin-hlsl.h: * sys/d3d11/hlsl/meson.build: d3d11: Simplify HLSL build Unify source/header/entrypoint names Part-of: 2023-10-10 15:43:07 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2format.c: v4l2codecs: Fix tiled formats stride conversion While adding arbitrary tile support, a round up operation was badly converter. This caused the Y component of the stride to be 0. This eventually lead to a crash in glupoad preceded by the following assertion. gst_gl_buffer_allocation_params_new: assertion 'alloc_size > 0' failed Part-of: 2023-10-09 19:09:15 +0900 Seungha Yang * sys/decklink/gstdecklink.h: decklink: Fix broken COM string conversion WideCharToMultiByte return is the string length without null terminate character if passed "cchWideChar" does not include the null terminate character size. Instead of passing the exact string length, pass -1 so that the API can understand the input string is null terminated already and returned value from the API includes the character. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3023 Part-of: 2023-08-10 16:40:41 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: use the pad's current caps to update caps_changed The caps that were sent by the caps event can be retrieved from the sinkpad using gst_pad_get_current_caps(). This is more reliable than using cur_caps as we know exactly which caps upstream selected when the UVC host didn't select a format, yet. This further allows to simplify the check, if the uvcsink has to wait for the caps event before switching to the internal v4l2sink. Part-of: 2023-07-18 15:40:02 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: use event function instead of probe The probe passes all events except the EVENT_CAPS. Installing and removing the probe doesn't provide any additional value. Install an event function and always handle EVENT_CAPS. Use the caps_changed field, to decide, if the element has to do anything special on a EVENT_CAPS. Part-of: 2023-07-19 11:22:03 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: refactor gst_uvc_sink_update_streaming Move the sanity checks to the beginning of the function. Make the actual effect of the function more obvious and reset the flags in the end. This should make it easier to understand what this function is doing. Part-of: 2023-07-18 17:54:49 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: extract helper function for updating the stream state The uvcsink may switch to the v4l2sink after a STREAMON either on a caps event or on a caps query. Extract the code that handles the STREAMON into a helper function, as this is the same code. Part-of: 2023-07-19 10:24:04 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: extract common code to reset caps_changed The caps_changed flag must be reset for streamon and streamoff. Extract it to a common path. Part-of: 2023-07-18 15:52:40 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: remove separate function for buffer probe installation The probe that installs the buffer probe is already on the correct pad. There is no need for a separate function to install the probe. While at it, change the signature of the probe functions to GstPadProbeCallback to avoid the cast when installing the probes. Part-of: 2023-07-19 10:38:40 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: extract common code in idle_probe The RECONFIGURE event has to be sent in streamon and streamoff. Extract the common code to a separate branch to make it easier to understand. Part-of: 2023-07-18 14:28:40 +0200 Michael Tretter * sys/uvcgadget/gstuvcsink.c: uvcsink: return caps when reading the host configured caps The uvcsink calculates the caps for the format that the UVC host selected. The gst_uvc_sink_parse_cur_caps() sets these caps as cur_caps as a side effect. This behavior is surprising as cur_caps is later updated to reflect the actually used caps. Just return the configured caps to avoid side effects. This makes the function easier to understand. Update the function name to reflect the new behavior. Part-of: 2023-06-12 23:31:24 +0200 Michael Grzeschik * sys/uvcgadget/gstuvcsink.c: uvcsink: fix event peer probe The only job of the event peer probe is to catch the upcoming caps event and be able to react with the sink change. All other events that are passing the pad shall be passed and ignored. Since the probe is a blocking probe, there is no use in returning with GST_PAD_PROBE_OK on other events. Otherwise the event would just be blocked. Since we are handling the probe removal of the probe already in the event switch, we can remove the second explicit probe removal. Part-of: 2023-06-16 01:05:22 +0200 Michael Grzeschik * sys/uvcgadget/gstuvcsink.c: uvcsink: drop useless debug messages in peer event probe Part-of: 2023-10-06 13:49:15 +0200 Guillaume Desmottes * gst/audiobuffersplit/gstaudiobuffersplit.c: audiobuffersplit: disable max-silence-time if set to 0 According to the property documentation max-silence-time is supposed to be disabled when set to 0 but it was not. Part-of: 2023-10-05 13:34:14 +0800 James Oliver * sys/nvcodec/gstnvh265encoder.cpp: nvh265encoder: fix bounds for auto-select GPU enumeration Fixes the bounds-check for encoder auto-select GPU enumeration to be between 0-7 instead of 0-6. This should allow 8-GPU machines to work with nvautogpuh265enc for the last enumerated GPU. Part-of: 2023-10-05 13:29:49 +0800 James Oliver * sys/nvcodec/gstnvh264encoder.cpp: nvh264encoder: fix bounds for auto-select GPU enumeration Fixes the bounds-check for encoder auto-select GPU enumeration to be between 0-7 instead of 0-6. This should allow 8-GPU machines to work with nvautogpuh264enc for the last enumerated GPU. Part-of: 2023-09-27 12:42:40 +0200 Stéphane Cerveau * docs/plugins/gst_plugins_cache.json: * ext/dash/gstdashsink.c: dashsink: add dashmp4mux support As mp4mux is not correctly suppporting the fragment generation, see https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1722, we deprecate and advertize the current status of usage. Added the possibility to use the rust dashmp4mux element. Part-of: 2022-02-15 13:12:32 +0100 Stéphane Cerveau * ext/dash/gstdashsink.c: dashsink: Do not reset muxer only for TS The MP4 needs to be reset to continue to produce segments. Closes #1015 Part-of: 2023-10-03 15:05:15 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: doc: Update plugin cache for added DMA_DRM format Part-of: 2023-09-27 13:55:33 +0200 Nicolas Dufresne * ext/assrender/gstassrender.c: * ext/qroverlay/gstbaseqroverlay.c: * ext/ttml/gstttmlrender.c: * gst/debugutils/gstfakevideosink.c: * gst/dvbsuboverlay/gstdvbsuboverlay.c: video-filters: Fix passthrough with ANY caps feature With the support for DRM modifiers, passthrough caps must now include DMA_DRM format, otherwise pipeline using thhese filters unconditionally may fail to negotiate. Part-of: 2023-10-02 17:13:17 +0200 Jonas K Danielsson * docs/plugins/gst_plugins_cache.json: doc: rist: Update cache for new properties Part-of: 2023-09-29 06:39:22 +0200 Jonas K Danielsson * gst/rist/gstristsrc.c: ristsrc: Add support for dynamic payload This commit ports functionality from the `rtpsrc` to make the `ristsrc` work with dynamic payload types. It adds two properties: - `caps` - `encoding-name` These can be used to make the `ristsrc` receive other payload types than the MPEG TS one. Part-of: 2023-09-30 22:21:40 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.cpp: * gst-libs/gst/d3d11/gstd3d11shadercache.h: * gst-libs/gst/d3d11/meson.build: * meson_options.txt: * sys/d3d11/gstd3d11compositor.cpp: * sys/d3d11/gstd3d11dxgicapture.cpp: * sys/d3d11/gstd3d11overlaycompositor.cpp: * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11testsrc.cpp: * sys/d3d11/hlsl/gstd3d11-hlsl.h: * sys/d3d11/hlsl/meson.build: * sys/d3d11/hlsl/ps-checker-luma.hlsl: * sys/d3d11/hlsl/ps-checker-rgb.hlsl: * sys/d3d11/hlsl/ps-checker-vuya.hlsl: * sys/d3d11/hlsl/ps-checker.hlsl: * sys/d3d11/hlsl/ps-color.hlsl: * sys/d3d11/hlsl/ps-sample-premul.hlsl: * sys/d3d11/hlsl/ps-sample.hlsl: * sys/d3d11/hlsl/ps-snow.hlsl: * sys/d3d11/hlsl/vs-color.hlsl: * sys/d3d11/hlsl/vs-coord.hlsl: * sys/d3d11/hlsl/vs-pos.hlsl: * sys/d3d11/meson.build: d3d11: Add support for HLSL precompile and shader caching Compile HLSL at build time in case of MSVC, and use it if device supports shader model 5. Also cache/reuse pixel shader and vertex shader objects. Part-of: 2023-09-30 20:30:44 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: d3d11testsrc: Use const buffer in shader Part-of: 2023-09-29 15:47:48 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: docs: Update plugins caches Part-of: 2023-09-27 20:44:45 +0300 Sebastian Dröge * gst-libs/gst/wayland/gstwlvideoformat.h: video-format: Fix up video formats ordering by quality Part-of: 2023-09-29 15:07:42 +0200 Jordan Petridis * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/gstsvtav1enc.h: svtav1enc: Avoid svtav1 defining TRUE/FALSE Make sure we include the svt headers first and then undefine TRUE and FALSE so we will only ever be using glib's defines for those. Part-of: 2023-09-28 21:32:12 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Handle output surface alignment in decoder helper object Output resolution might not be an even number. Set output resolution without round up but consider the alignment inside of decoder Part-of: 2023-09-28 00:03:08 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvav1dec.h: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh264dec.h: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvh265dec.h: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp8dec.h: * sys/nvcodec/gstnvvp9dec.cpp: * sys/nvcodec/gstnvvp9dec.h: * sys/nvcodec/plugin.c: nvdecoder: Add support for D3D11 output Since DXVA does not support some profiles such as HEVC RExt, vendor specific decoding API is still required. When decoder is negotiated with d3d11 caps, decoder will convert semi-planar frame to planar since semi-planar format (e.g., DXGI_FORMAT_NV12) is not supported by CUDA/D3D11 interop. Part-of: 2023-09-27 23:02:43 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Handle GstContext in helper object ... and move common code to helper object Part-of: 2023-09-27 20:50:20 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudautils.cpp: cuda: Use d3d11 token data for interop data Part-of: 2023-09-28 00:11:53 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * sys/nvcodec/gstcudaconverter.c: * sys/nvcodec/gstcudaconvertscale.c: * sys/nvcodec/gstcudaformat.h: cuda: Add support for I420_12LE format Part-of: 2023-09-27 15:24:05 +0200 Philippe Normand * ext/wpe/gstwpevideosrc.cpp: wpevideosrc: Add a simple example for headless rendering Part-of: 2023-09-20 09:53:41 +0200 David Svensson Fors * ext/dash/gstdashsink.c: * ext/dash/gstmpdhelper.c: * ext/dash/gstmpdhelper.h: dashsink: Use gst_codec_utils_caps_get_mime_codec() Use gst_codec_utils_caps_get_mime_codec() in pbutils for codec strings. That function gives more elaborate RFC 6381 compatible strings than the helper functions in gstmdphelper.c, such as "avc1.F4000D". Remove the helper functions, as they were only used from dashsink. Part-of: 2023-09-27 12:33:39 +0200 Philippe Normand * gst/inter/gstinteraudiosink.c: interaudiosink: Ensure adapters don't store buffers with audio meta The interaudiosrc might take buffers of different sizes from the audio adapter, so keeping metas consistency would be an issue. So the sink now strips the audio metas away and the src adds them back (for non-interleaved layouts only) when taking buffers from the adapter. Part-of: 2023-09-13 15:11:32 +0100 Philippe Normand * gst/inter/gstinteraudiosrc.c: interaudiosrc: Add audio meta to buffers containing non-interleaved samples Without this a downstream audioconverter wouldn't be able to map the GstAudioBuffer prior to conversion. Part-of: 2023-09-27 08:46:35 -0400 Xavier Claessens * ext/qroverlay/gstqroverlay.c: GstCustomMeta: Use simplified API where possible Part-of: 2023-08-09 00:20:46 +0200 Piotr Brzeziński * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: Handle output in separate thread Moves outputting frames to a task on the source pad, bringing vtdec in line with vtenc. This brings possible performance improvements thanks to decoupling queueing new frames from outputting processed ones. The queue length is limited to `2*DBP` to prevent decoding too far ahead compared to what we're pushing downstream. Part-of: 2023-09-27 01:12:01 +0900 Seungha Yang * sys/d3d11/gstd3d11decoder.cpp: d3d11decoder: Fix crash on negotiate() when decoder is not configured The negotiate() can be called by GstVideoDecoder baseclass on GAP event, and decoder helper object might not be configured at the time when negotiate() is called. Part-of: 2023-09-21 22:18:56 +0900 Seungha Yang * sys/nvcodec/gstnvdecobject.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Add support for HEVC GBR output ... and use P012 format for 12bits instead of P016 Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2991 Part-of: 2023-09-21 18:35:58 +0900 Seungha Yang * sys/nvcodec/gstnvencobject.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvh265encoder: Add support for RGB encoding Adding GBR format support to nv{autogpu,cuda,d3d11}h265enc. Note that the only difference between GBR and Y444 encoding is matrix_coeffs value written in VUI. Part-of: 2023-09-21 19:21:18 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * sys/nvcodec/gstcudaconverter.c: * sys/nvcodec/gstcudaconvertscale.c: * sys/nvcodec/gstcudaformat.h: cuda: Add support for P012_LE and Y444/GBR high bitdepth formats Adding P012, Y444_10, Y444_12, GBR_10, GBR_12 and GBR_16 formats support Part-of: 2023-09-21 20:20:35 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11device.cpp: d3d11: Add support for GBR_16LE format Part-of: 2023-09-21 19:50:31 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: video: Add GBR 16bits formats Adding 16bits planar RGB formats Part-of: 2023-09-21 20:34:02 +0800 Tong Wu * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: msdkvpp: fix an issue which causes dangling pointer Put all the external buffer structures into thiz to avoid being freed early. Part-of: 2023-09-20 22:54:06 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Set discont state after new_picture() Subclass might negotiate with downstream inside of the new_picture(). Set discont state after the new_picture() call Part-of: 2023-08-10 15:47:03 +0300 Sebastian Dröge * gst/mxf/mxfd10.c: mxfdemux: Check number of channels for AES3 audio Only up to 8 channels are allowed and using a higher number would cause integer overflows when copying the data, and lead to out of bound writes. Also check that each buffer is at least 4 bytes long to avoid another overflow. Fixes ZDI-CAN-21661, CVE-2023-40475 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2897 Part-of: 2023-08-10 15:45:01 +0300 Sebastian Dröge * gst/mxf/mxfup.c: mxfdemux: Fix integer overflow causing out of bounds writes when handling invalid uncompressed video Check ahead of time when parsing the track information whether width, height and bpp are valid and usable without overflows. Fixes ZDI-CAN-21660, CVE-2023-40474 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2896 Part-of: 2023-08-09 12:49:19 -0400 Nicolas Dufresne * gst-libs/gst/codecparsers/gsth265parser.c: h265parser: Fix possible overflow using max_sub_layers_minus1 This fixes a possible overflow that can be triggered by an invalid value of max_sub_layers_minus1 being set in the bitstream. The bitstream uses 3 bits, but the allowed range is 0 to 6 only. Fixes ZDI-CAN-21768, CVE-2023-40476 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2895 Part-of: 2023-09-08 00:26:51 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix deadlock after GST_FLOW_ERROR is received on frame push This was easy to trigger when testing with e.g. vtenc ! vtdec ! glimagesink and closing the sink via window button, causing GST_FLOW_ERROR to be received by the output loop, stopping it with the queue still full. This made the enqueue_buffer() callback to lock waiting for space in our queue, while handle_frame() was waiting for the internal VideoToolbox queue to free up, so that VTCompressionSessionEncodeFrame could finish. As the output loop was not running, both functions waited forever. Fixed by 1) immediately emptying our queue when GST_FLOW_ERROR is received (like we already did with _FLUSHING) and 2) unconditionally setting the flushing flag in finish_encoding() when it sees the output loop stopped because of GST_FLOW_ERROR, so that enqueue_buffer() will immediately discard any new frames coming out of VideoToolbox. Both of those make sure we never run into the both-queues-full scenario. Part-of: 2023-09-20 01:37:30 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12av1dec.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h264dec.h: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12h265dec.h: * sys/d3d12/gstd3d12vp9dec.cpp: * sys/d3d12/gstd3d12vp9dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12decoder: Add support for D3D11 interop As a short-term solution before full d3d12 rendering feature, copy decoded d3d12 texture to shared d3d11 texture in order to use existing various d3d11 implementations such as conversion, resizing, and videosink. Part-of: 2023-09-20 01:13:15 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11memory: Allow CreateSharedHandle() without keyed mutex For d3d11 resource to be shared with d3d12, keyed mutex shouldn't be enabled since d3d12 resource does not expose the keyed mutex interface Part-of: 2023-09-20 00:09:04 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12utils.h: * sys/d3d12/gstd3d12vp9dec.cpp: d3d12decoder: Move common part to helper object Store device at helper object Part-of: 2023-09-19 18:57:53 +0900 Seungha Yang * sys/d3d12/gstd3d12fence.cpp: d3d12fence: Check completed value before waiting If currently completed fence value is larger than target value, skip waiting. Part-of: 2023-09-11 18:12:28 +0200 Hugues Fruchet * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: Fix cropping for video with non-square aspect ratio Padding of unaligned content is still visible at right with some aspect-ratio. Fix this by giving the original content resolution to wp_viewport_set_source() instead of pixel aspect ratio scaled one. Fixes !5259 Part-of: 2023-06-14 11:24:49 +0200 Hugues Fruchet * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: do not use drm dumb pool when importing DMAbuf buffers There is no need to use DRM dumb pool if buffer to render is already a DMABuf, just import it and render it. This fixes a DMAbuf memory leakage when waylandsink downstream element exports DMABuf while waylandsink is configured to be DMABuf exporter (drm-device=/drv/dri/card0): gst-launch-1.0 v4l2src io-mode=4 ! gtkwaylandsink drm-device=/dev/dri/card0 leakage identfied with command: watch "cat /sys/kernel/debug/dma_buf/bufinfo | grep attached " Fixes #2729 Part-of: 2023-06-14 16:19:49 +0200 Hugues Fruchet * ext/wayland/gstwaylandsink.c: waylandsink: do not use drm dumb pool when importing DMAbuf buffers There is no need to use DRM dumb pool if buffer to render is already a DMABuf, just import it and render it. This fixes a DMAbuf memory leakage when waylandsink downstream element exports DMABuf while waylandsink is configured to be DMABuf exporter (drm-device=/drv/dri/card0): gst-launch-1.0 v4l2src io-mode=4 ! waylandsink drm-device=/dev/dri/card0 leakage identfied with command: watch "cat /sys/kernel/debug/dma_buf/bufinfo | grep attached " Fixes #2729 Part-of: 2023-09-19 21:40:22 +0900 Seungha Yang * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11vp9dec.cpp: d3d11vp9dec: Fix critical warning Don't query GPU vendor using null device. Part-of: 2023-09-18 23:38:03 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/gstd3d12vp9dec.cpp: d3d12decoder: Add support for d3d12 output ... and enable zero-copy decoding if downstream supports d3d12 memory Part-of: 2023-09-18 21:00:42 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Use GstD3D12BufferPool Part-of: 2023-09-18 20:27:27 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: d3d12decoder: Use global copy queue and fence value Part-of: 2023-09-18 22:56:31 +0900 Seungha Yang * sys/d3d12/plugin.cpp: d3d12: Remove unused debug category Part-of: 2023-09-18 18:54:07 +0900 Seungha Yang * sys/d3d12/gstd3d12basefilter.cpp: * sys/d3d12/gstd3d12basefilter.h: * sys/d3d12/gstd3d12download.cpp: * sys/d3d12/gstd3d12download.h: * sys/d3d12/gstd3d12format.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add d3d12download element Part-of: 2023-09-18 01:31:41 +0900 Seungha Yang * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12bufferpool.cpp: * sys/d3d12/gstd3d12bufferpool.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/meson.build: d3d12: Add GstD3D12BufferPool Adding d3d12 specific bufferpool impl. Part-of: 2023-09-18 00:44:10 +0900 Seungha Yang * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/gstd3d12utils.h: d3d12memory: Add GstD3D12AllocationParams struct Will be used for buffer pool configuration. And update C++ helper to reduce the number of required arguments Part-of: 2023-09-17 23:53:18 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: d3d12memory: Make d3d12memory CPU accessible Add support for gst_memory_{map,unmap} without GST_MAP_D3D12 flag Part-of: 2023-09-18 21:27:19 +0900 Seungha Yang * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/meson.build: d3d12: Fix d3d12sdklayer setup and d3d12device debug category Part-of: 2023-09-09 15:12:39 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: vaallocator: don't update size in info for single plane images Don't update info's size with the VA image reported data size for single plane images, since drivers might allocate bigger space than the strictly required to store the image, but when we dump the buffer as is (using filesink, for example) the produced stream is corrupted. For multi-plane images video meta is required to read/write them. We updated info's size because gstreamer-vaapi did it too, but the reason to update it there was for uploading and rendering surfaces (commit c698a015). Furthermore, this patch adds an error message if the allocated data size for the image by the driver is lesser than the expected because it would be a buggy driver. Fixes: #2959 Part-of: 2023-09-14 20:17:06 +0200 Víctor Manuel Jáquez Leal * sys/msdk/meson.build: msdk: meson: don't warn deprecated symbols Since it's impossible to not to use any because any possible version mismatch between the header and the runtime, such in the case of the denoise structure. Part-of: 2023-09-14 20:14:21 +0200 Víctor Manuel Jáquez Leal * sys/msdk/gstmsdkdec.c: msdkdec: fix method declaration signature Thus silencing a compilation warning. Part-of: 2023-09-15 23:55:14 +0900 Seungha Yang * sys/d3d12/gstd3d12av1dec.cpp: * sys/d3d12/gstd3d12av1dec.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add AV1 decoder Part-of: 2023-09-15 23:53:24 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12vp9dec.cpp: * sys/d3d12/gstd3d12vp9dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add VP9 decoder Part-of: 2023-09-15 23:52:34 +0900 Seungha Yang * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12h265dec.cpp: * sys/d3d12/gstd3d12h265dec.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: d3d12: Add H.265 decoder Part-of: 2023-09-10 23:34:26 +0900 Seungha Yang * meson_options.txt: * sys/d3d12/gstd3d12_fwd.h: * sys/d3d12/gstd3d12decoder.cpp: * sys/d3d12/gstd3d12decoder.h: * sys/d3d12/gstd3d12device.cpp: * sys/d3d12/gstd3d12device.h: * sys/d3d12/gstd3d12fence.cpp: * sys/d3d12/gstd3d12fence.h: * sys/d3d12/gstd3d12format.cpp: * sys/d3d12/gstd3d12format.h: * sys/d3d12/gstd3d12h264dec.cpp: * sys/d3d12/gstd3d12h264dec.h: * sys/d3d12/gstd3d12memory.cpp: * sys/d3d12/gstd3d12memory.h: * sys/d3d12/gstd3d12utils.cpp: * sys/d3d12/gstd3d12utils.h: * sys/d3d12/meson.build: * sys/d3d12/plugin.cpp: * sys/meson.build: d3d12: Add H.264 decoder Adding Direct3D12 h264 decoder Part-of: 2023-09-16 23:57:18 +0900 Seungha Yang * sys/d3d11/gstd3d11av1dec.cpp: * sys/d3d11/gstd3d11av1dec.h: * sys/d3d11/gstd3d11decoder.cpp: * sys/d3d11/gstd3d11decoder.h: * sys/d3d11/gstd3d11h264dec.cpp: * sys/d3d11/gstd3d11h264dec.h: * sys/d3d11/gstd3d11h265dec.cpp: * sys/d3d11/gstd3d11h265dec.h: * sys/d3d11/gstd3d11mpeg2dec.cpp: * sys/d3d11/gstd3d11mpeg2dec.h: * sys/d3d11/gstd3d11vp8dec.cpp: * sys/d3d11/gstd3d11vp8dec.h: * sys/d3d11/gstd3d11vp9dec.cpp: * sys/d3d11/gstd3d11vp9dec.h: * sys/d3d11/meson.build: d3d11decoder: Port to GstDxva Use new DXVA baseclass Part-of: 2021-11-28 19:29:23 +0900 Seungha Yang * gst-libs/gst/dxva/dxva-prelude.h: * gst-libs/gst/dxva/gstdxva.h: * gst-libs/gst/dxva/gstdxvaav1.h: * gst-libs/gst/dxva/gstdxvaav1decoder.cpp: * gst-libs/gst/dxva/gstdxvaav1decoder.h: * gst-libs/gst/dxva/gstdxvah264decoder.cpp: * gst-libs/gst/dxva/gstdxvah264decoder.h: * gst-libs/gst/dxva/gstdxvah265decoder.cpp: * gst-libs/gst/dxva/gstdxvah265decoder.h: * gst-libs/gst/dxva/gstdxvampeg2decoder.cpp: * gst-libs/gst/dxva/gstdxvampeg2decoder.h: * gst-libs/gst/dxva/gstdxvatypes.h: * gst-libs/gst/dxva/gstdxvautils.cpp: * gst-libs/gst/dxva/gstdxvautils.h: * gst-libs/gst/dxva/gstdxvavp8decoder.cpp: * gst-libs/gst/dxva/gstdxvavp8decoder.h: * gst-libs/gst/dxva/gstdxvavp9decoder.cpp: * gst-libs/gst/dxva/gstdxvavp9decoder.h: * gst-libs/gst/dxva/meson.build: * gst-libs/gst/meson.build: dxva: Add DXVA decoder baseclass implementation Extract Direct3D version independent common DXVA logic from d3d11 decoder so that it can be used by the other APIs (D3D9 and D3D12) as well Part-of: 2023-09-14 01:18:59 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth264picture.h: h264decoder: Update latency dynamically The actual number of reorder frames is unknown unless frame reordering is disabled (e.g., POC type 2 or constrained-* profiles). Also derived maximum DPB size or max_num_reorder_frames in VUI is not the upper bound of output delay. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2702 Part-of: 2023-09-16 23:26:27 +0900 Seungha Yang * sys/nvcodec/gstnvdecobject.cpp: * sys/nvcodec/gstnvdecobject.h: * sys/nvcodec/gstnvdecoder.cpp: nvdecoder: Copy output frame if needed Even if decoder is negotiated with CUDA memory feature, if downstream proposed no buffer pool, assume that the pool size is unknown. And disable zero-copy if there's no more free output surface. Or, in case of reverse playback, always copy frames. Part-of: 2023-09-16 22:59:54 +0900 Seungha Yang * sys/nvcodec/gstnvh265dec.cpp: nvh265dec: Reconfigure decoder on max-dpb-size change Decoder should create new picture pool for larger DPB size Part-of: 2023-09-16 22:49:30 +0900 Seungha Yang * sys/d3d11/gstd3d11h265dec.cpp: d3d11h265dec: Reconfigure decoder on max-dpb-size change Decoder should create new picture pool for larger DPB size Part-of: 2023-09-16 03:13:33 +0900 Seungha Yang * gst-libs/gst/codecparsers/gstav1parser.c: av1parser: Fix segmentation params update Even if the segmentation feature value is not updated, the parsed "segmentation_update_map" and "segmentation_temporal_update" values should not be cleared as it's referenced during lower level bitstream parsing. Also, don't use assert() in parser unless it's clearly impossible condition. Part-of: 2023-09-15 19:54:59 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Fix DPB overflow If DPB is full already, GstH265Decoder::new_picture() might fail if subclass uses fixed size picture pool and its size is equal to the DPB size. Call the new_picture() after DPB is cleared in gst_h265_decoder_dpb_init() Part-of: 2023-09-15 11:06:52 +1000 Matthew Waters * sys/androidmedia/gstamcvideoenc.c: androidmedia/enc: handle codec-data before popping GstVideoCodecFrames Issue is that when amc was producing a codec-data buffer, a GstVideoCodecFrame was being popped off the internal queue. This meant that the codec-data was being associated with the first input frame and the second (first encoded buffer) output buffer with the second input frame. At the end (assuming one input produces one output which seems to hold in my testing and how the encoder is currently implemented) there would be an input frame missing and would be pushed without any timing information. This would lead to e.g. muxers rejecting the buffer without PTS and failing to mux. Part-of: 2023-09-15 11:06:07 +1000 Matthew Waters * sys/androidmedia/gstamc-constants.h: * sys/androidmedia/gstamcvideoenc.c: androidmedia/enc: add fixme log about partial frames Part-of: 2023-07-20 15:46:32 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: * sys/msdk/msdk-enums.c: msdkvpp: Add compute scaling mode Part-of: 2023-08-11 15:20:30 +0800 Mengkejiergeli Ba * docs/plugins/gst_plugins_cache.json: * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: msdkvpp: Enable HDR-to-SDR tone mapping Part-of: 2023-08-11 11:52:19 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: * sys/msdk/msdk.h: msdkvpp: Set color properties for input and output Part-of: 2023-09-12 13:05:43 +1000 Matthew Waters * ext/vulkan/vkcolorconvert.c: vulkancolorconvert: actually support passthrough correctly e.g. passthrough of YUV (or RGB) formats should not modify any buffers. Part-of: 2023-07-18 10:00:19 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkh265enc.h: msdkh265enc: Use vpl APIs to handle HDR SEIs Part-of: 2023-09-05 14:15:04 +0200 Thomas Schneider * sys/androidmedia/gstamc.c: androidmedia: fix hevc codec profile registration Fix the codec registration logic such that all supported profiles are available instead of just the first in the list. Part-of: 2023-09-06 17:01:09 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * gst/rtmp2/gstrtmp2locationhandler.c: rtmp2: Set default flash version to NULL This is consistent with the librtmp-based old rtmp plugin and ffmpeg. While some servers require a valid flash-version, others are failing with a too long or any flash-version at all. By changing to the same default as in the old plugin and in ffmpeg, GStreamer will at least behave the same and will work and fail with the same servers without setting a flash-version. Part-of: 2023-09-10 19:13:28 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: doc: Update cache after template pixel formats changes Part-of: 2023-09-08 15:03:51 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlvideoformat.h: wayland: Use generated formats list Update the order according to what the generator produces. Part-of: 2023-09-08 17:54:25 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkbufferimagepool: short circuit usage for decoding NVIDIA & RADV drivers don't report decoding features for color format. Setting requested usage to zero to short circuit validation. Part-of: 2023-09-06 13:13:27 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vkformat: assume that unknown rgb transfer is sRGB Part-of: 2023-09-06 12:46:32 +1000 Matthew Waters * ext/vulkan/vkupload.c: * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkformat.h: * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * tests/check/libs/vkformat.c: vkformat: also check configured usage flags This does also mean that if the primary format fails this check, we need to try the secondary format before returning an error Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2957 Part-of: 2023-09-06 12:41:29 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: * tests/check/libs/vkformat.c: vkformat: invert srgb and multiplane && planes > 1 checks The primary format for RGB includes sRGB transfer but was not actually being used. The !(no_multiplane && planes > 1) check for YUV resulted in those formats never being used. Part-of: 2023-09-06 12:29:05 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vkformat: FORMAT_FEATURE_COLOR_ATTACHMENT also includes INPUT_ATTACHMENT Part-of: 2023-09-06 12:23:57 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vkformat: reorder RGBA formats before RGBx formats Fixes gst_vulkan_format_to_video_format to use the RGBA formats instead of RGBx formats. Fixes vulkansink exposing a RGBx/BGRx format instead of the more relevant RGBA/BGRA formats Part-of: 2023-09-05 23:36:47 +0200 Aleksandr Slobodeniuk * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth265parser.c: h264/h265parser: clarify some gtk-doc annotations Needed for the documentation since the transfer is not obvious. Part-of: 2023-09-07 20:06:02 +0900 Seungha Yang * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: h264parse, h265parse: Fix potential integer overflow Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2961 Part-of: 2023-09-06 01:00:42 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Move common logic to decoder helper object Part-of: 2023-09-05 23:06:19 +0900 Seungha Yang * sys/d3d11/gstd3d11av1dec.cpp: * sys/d3d11/gstd3d11decoder.cpp: * sys/d3d11/gstd3d11decoder.h: * sys/d3d11/gstd3d11h264dec.cpp: * sys/d3d11/gstd3d11h265dec.cpp: * sys/d3d11/gstd3d11mpeg2dec.cpp: * sys/d3d11/gstd3d11vp8dec.cpp: * sys/d3d11/gstd3d11vp9dec.cpp: d3d11decoder: Move common logic to decoder helper object We can remove duplicated code by using the GstCodecPicture struct Part-of: 2023-09-05 22:21:45 +0900 Seungha Yang * gst-libs/gst/codecs/gstav1decoder.c: * gst-libs/gst/codecs/gstav1decoder.h: * gst-libs/gst/codecs/gstav1picture.c: * gst-libs/gst/codecs/gstav1picture.h: * sys/d3d11/gstd3d11av1dec.cpp: * sys/nvcodec/gstnvav1dec.cpp: * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/va/gstvaav1dec.c: av1decoder: Port to GstCodecPicture struct Part-of: 2023-09-05 22:14:42 +0900 Seungha Yang * gst-libs/gst/codecs/gstvp9decoder.c: * gst-libs/gst/codecs/gstvp9decoder.h: * gst-libs/gst/codecs/gstvp9picture.c: * gst-libs/gst/codecs/gstvp9picture.h: * sys/d3d11/gstd3d11vp9dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: * sys/v4l2codecs/gstv4l2codecvp9dec.c: * sys/va/gstvavp9dec.c: vp9decoder: Port to GstCodecPicture struct Part-of: 2023-09-05 22:01:21 +0900 Seungha Yang * gst-libs/gst/codecs/gstvp8decoder.c: * gst-libs/gst/codecs/gstvp8decoder.h: * gst-libs/gst/codecs/gstvp8picture.c: * gst-libs/gst/codecs/gstvp8picture.h: * sys/d3d11/gstd3d11vp8dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/v4l2codecs/gstv4l2codecvp8dec.c: * sys/va/gstvavp8dec.c: vp8decoder: Port to GstCodecPicture struct ... and remove unused "pts" variable from GstVp8Picture struct Part-of: 2023-09-05 21:50:33 +0900 Seungha Yang * gst-libs/gst/codecs/gstmpeg2decoder.c: * gst-libs/gst/codecs/gstmpeg2decoder.h: * gst-libs/gst/codecs/gstmpeg2picture.c: * gst-libs/gst/codecs/gstmpeg2picture.h: * sys/d3d11/gstd3d11mpeg2dec.cpp: * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: * sys/va/gstvampeg2dec.c: mpeg2decoder: Port to GstCodecPicture struct Part-of: 2023-09-05 21:37:28 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gsth265decoder.h: * gst-libs/gst/codecs/gsth265picture.c: * gst-libs/gst/codecs/gsth265picture.h: * sys/d3d11/gstd3d11h265dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/va/gstvah265dec.c: h265decoder: Port to GstCodecPicture struct Part-of: 2023-09-05 21:27:30 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth264decoder.h: * gst-libs/gst/codecs/gsth264picture.c: * gst-libs/gst/codecs/gsth264picture.h: * sys/d3d11/gstd3d11h264dec.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/va/gstvah264dec.c: h264decoder: Port to GstCodecPicture struct Part-of: 2023-09-03 01:46:41 +0900 Seungha Yang * gst-libs/gst/codecs/gstcodecpicture-private.h: * gst-libs/gst/codecs/gstcodecpicture.c: * gst-libs/gst/codecs/gstcodecpicture.h: * gst-libs/gst/codecs/meson.build: codecs: Define common codec picture struct Adding parent class of codec picture struct Part-of: 2023-09-04 20:39:36 +0200 Robert Mader * docs/plugins/gst_plugins_cache.json: * gst-libs/gst/wayland/gstwlvideoformat.c: * gst-libs/gst/wayland/gstwlvideoformat.h: * gst-libs/gst/wayland/meson.build: wlvideoformat: Add P010 It is similar to NV12 but has 10bits per channel instead of 8. As it is supported by many modern GPUs, VA-API and an increasing number of Wayland compositors, let's support it as well. Also bump the required libdrm version accordingly and add a temporary define for the WL_SHM format. Tested with Weston, Mutter and Sway. Part-of: 2023-09-06 15:26:48 +0200 Robert Mader * docs/plugins/gst_plugins_cache.json: * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwlvideoformat.h: waylandsink: Move format caps list to shared library So it can be shared and more easily updated. While on it, order the formats according to the documentation for GstVideo.VIDEO_FORMATS_ALL. Part-of: 2023-09-03 13:21:30 +0000 Akihiro Sagawa * gst-libs/gst/codecparsers/gstmpegvideoparser.c: codecparsers: Fix MPEG-1 aspect ratio table The values defined in ISO/IEC 11172-2 are different from those used so far. Part-of: 2023-09-06 15:40:03 +0800 He Junyan * sys/va/gstvabaseenc.c: va: baseenc: use in_info rather than input_state->info The in_info is correct video info which already considers the DMA kind caps case. Part-of: 2023-09-01 17:26:51 +0800 He Junyan * gst-libs/gst/va/vasurfaceimage.c: va: Add modifier paramters check for va_create_surfaces() Part-of: 2023-08-29 03:23:21 +0900 Seungha Yang * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth265parse.c: h264parse, h265parse: Fix timecode parsing The scaling factor for nFrame part should be "(1 + nuit_field_based_flag) / 2" Part-of: 2023-08-29 12:36:34 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/vasurfaceimage.c: va: retry if surface creation fails Old versions of mesa doesn't support VASurfaceAttribDRMFormatModifiers. To solve it, by just ignoring the modifiers assuming that linear is accepted and produced, the creation of frames will be tried again without that attribute. Part-of: 2023-08-29 20:33:33 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvabase.c: * sys/va/gstvabase.h: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: va: refactor caps convertion to va caps To avoid code duplication in code related with buffer importation. Part-of: 2023-08-29 12:21:36 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvabase.c: * sys/va/gstvabase.h: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: * sys/va/meson.build: * sys/va/plugin.c: va: refactor buffer import This patch removes the code duplication of input buffer importation, in all the va elements that import video frames. It defines a synthetic object whose members are required to create a new input buffer and do the importation of the upstream buffer. Part-of: 2023-08-29 14:55:03 -0400 Nicolas Dufresne * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: Crop surfaces to their display width height Setting the surface source rectangle has been omitted so far. As a side effect surface created with padded width/height are being scaled down. Fix this using the viewporter source rectangle configuration. This can later be enhanced to support crop meta. Part-of: 2023-08-29 23:56:30 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * ext/qt6d3d11/plugin.cpp: qt6d3d11: Add plugin docs Part-of: 2023-08-29 23:39:30 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: bad: Update Windows plugin docs Updating wasapi, wasapi2, mediafoundation, and winks plugin docs Part-of: 2023-08-29 23:34:31 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: qsv: Update plugin docs Part-of: 2023-08-29 23:29:48 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/dwrite/gstdwritebaseoverlay.cpp: dwrite: Add plugin docs Part-of: 2023-08-29 23:06:42 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11ipcclient.cpp: * sys/d3d11/gstd3d11pluginutils.cpp: * sys/d3d11/gstd3d11pluginutils.h: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11testsrc.cpp: d3d11: Update plugin docs Part-of: 2023-08-15 21:31:40 +0800 He Junyan * sys/va/gstvabaseenc.c: va: baseenc: Add the DMA buffer input support Part-of: 2023-08-15 21:25:41 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvabaseenc.h: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: va: encoder: Add in_info field to base encoder When we consider the DMA kind caps as input, the input_state->info only contains the video format of GST_VIDEO_FORMAT_DMA_DRM, which is not enough for va plugins. The new info in base encoder contains the correct video info after the DMA caps parsing. Part-of: 2023-08-28 20:58:22 +0900 Seungha Yang * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Passthrough allocation query on same caps Since d3d11convert and its variant elements does not enable basetransform's passthrough, passthrough allocation query needs to be handled manually in order to respect downstream element's min/max buffer requirement. Part-of: 2023-08-25 01:40:08 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Use premultiplied-alpha swapchain Don't ignore alpha component if it's present Part-of: 2023-08-25 22:27:10 +0900 Seungha Yang * ext/codec2json/meson.build: codec2json: Fix plugin loading on Windows * Library versioning should not be used for plugins since it will add -{version}.dll suffix (and versioned libraries on Linux with symlink). Then the library file name and plugin init function name mismatch will result in blacklisted plugin. * Don't define BUILDING_GST_CODECS, makes no sense * Don't define G_LOG_DOMAIN, which should be used only for libraries, not plugins * Depends on gstcodecparsers libary, not gstcodecs. Part-of: 2023-08-24 21:29:29 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * tests/validate/testsrcbin/caps_spec/flow-expectations/log-testsrcbin0-video_src_0-expected: video: Fix ordering of video formats in GST_VIDEO_FORMATS_ALL_STR This now follows the algorithm again that is described in the documentation and implemented in gstreamer-rs. Part-of: 2023-08-23 19:17:57 +0900 Seungha Yang * sys/nvcodec/gstcudaipcclient.cpp: * sys/nvcodec/gstcudaipcsrc.cpp: cudaipcclient: Protect IPC handle import/close with global lock Protect import/close with signle lock to avoid importing a IPC handle while it's being closed by another cudaipcsrc from other thread. Also fixing cuda context leak Part-of: 2023-08-24 17:40:42 +0200 Jan Alexander Steffens (heftig) * gst/rtmp2/rtmp/rtmpclient.c: rtmp2: Allow NULL flash version, omitting the field rtmpsink omits it by default. Allow us to do the same. Part-of: 2023-08-24 12:12:09 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvadecoder.c: * sys/va/gstvadisplay_priv.c: va: Fix in error logs functions mismatches Part-of: 2023-08-24 13:32:46 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvabasedec.c: vabasedec: Remove assertion for resolution change in input state This is reported from https://bugs.webkit.org/show_bug.cgi?id=259032 Though I couldn't reproduce the issue, it looks to me unneeded to assert for resolution changes in old frames, since renegotiation is carried out. Part-of: 2023-08-23 19:27:43 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: nvencoder: Fix negotiation error when interlace-mode is unspecified Use GST_PAD_SET_ACCEPT_INTERSECT() to accept caps without interlace-mode field Part-of: 2023-08-21 17:17:43 +0800 He Junyan * sys/va/gstvacompositor.c: va: compositor: Use va_get_surface_usage_hint() to get the usage hint Part-of: 2023-08-21 16:54:31 +0800 He Junyan * sys/va/gstvabaseenc.c: * sys/va/gstvaencoder.c: va: baseenc: Use va_get_surface_usage_hint() to get the usage hint Part-of: 2023-08-21 16:50:39 +0800 He Junyan * sys/va/gstvacaps.c: va: Use va_get_surface_usage_hint() to detect the modifiers Part-of: 2023-08-21 16:33:05 +0800 He Junyan * sys/va/gstvaav1dec.c: * sys/va/gstvabasedec.c: va: basedec: Use va_get_surface_usage_hint() to get the usage hint Part-of: 2023-08-21 15:59:33 +0800 He Junyan * sys/va/gstvabasetransform.c: va: basetransform: Use va_get_surface_usage_hint() to get the usage hint Part-of: 2023-08-21 15:03:56 +0800 He Junyan * gst-libs/gst/va/vasurfaceimage.c: * gst-libs/gst/va/vasurfaceimage.h: va: Add helper function va_get_surface_usage_hint() Part-of: 2023-08-24 11:32:51 +1000 Matthew Waters * docs/plugins/gst_plugins_cache.json: video: add support for A420/A422/A444 16-bit formats Part-of: 2023-08-23 16:33:16 +1000 Matthew Waters * docs/plugins/gst_plugins_cache.json: video: add support for 12-bit A420/A422/A444 Part-of: 2023-08-22 14:54:36 -0400 Nicolas Dufresne * ext/wayland/gstwaylandsink.c: waylandsink: Restore support for render-rectangle Fixes #2519 Part-of: 2023-08-15 19:55:34 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: * tests/check/elements/h265parse.c: h265parser: Allow partially broken hvcC data Ignores parsing error on the last nalu of the array if the nalu type is not VPS/SPS/PPS Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2905 Part-of: 2023-08-23 18:07:31 +0900 Seungha Yang * sys/win32ipc/protocol/win32ipcpipeserver.cpp: win32ipc: Fix pipe handle leak Named pipe handle must be closed if it's no longer needed Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2923 Part-of: 2023-08-21 21:02:01 +1000 Matthew Waters * docs/plugins/gst_plugins_cache.json: video: add support for 8-bit A422/A444 Part-of: 2023-07-17 16:21:47 +0000 Rabindra Harlalka <13387-rabindra-harlalka@users.noreply.gitlab.freedesktop.org> * ext/aes/gstaesenc.c: aesenc: Fix IV length addition to output buffer length Add length of IV to output buffer length only for the first buffer. Part-of: 2023-08-18 18:21:18 +1000 Jan Schmidt * ext/mdns/gstmicrodnsdevice.c: mdns: Fix a crash on context error Make sure not to free the microdns provider context until the device provider asks it to stop. Fixes a crash if there is an error (such as MDNS port being busy) that makes the mdns listener exit early. Part-of: 2023-08-18 09:27:36 +0200 Guillaume Desmottes * gst/rtmp2/gstrtmp2sink.c: rtmp2sink: fix crash if message conversion failed The message pointer is not set so we can't display it in logs. Part-of: 2020-09-25 17:18:10 +0200 Johan Sternerup * docs/plugins/gst_plugins_cache.json: * ext/webrtc/gstwebrtcbin.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/nice/nice.c: webrtcice: Add webrtc ALPN header for HTTP proxy Section 3.4 in RFC8835 states that if a WebRTC endpoint uses an HTTP proxy to access the Internet it MUST include the "ALPN" header. This commit adds this header. By default the ALPN used when connecting to the TURN/TCP server via a proxy is set to "webrtc". It can be changed by adding an alpn url option for the http-proxy. For example: http://user:pass@my.http.proxy.com:8080?alpn=c-webrtc This will add the header "ALPN: c-webrtc" to the HTTP proxy CONNECT request. Part-of: 2023-08-16 13:43:56 +0000 L. E. Segovia * sys/applemedia/avsamplevideosink.m: * sys/applemedia/helpers.c: applemedia: Also fix inconsistent pixel format definition for NV12 Part-of: 2023-08-15 21:45:56 +0000 L. E. Segovia * sys/applemedia/coremediabuffer.c: * sys/applemedia/corevideobuffer.c: * sys/applemedia/helpers.c: applemedia: Fix pixel format for I420 In Intel Macs, using full range 8-bit 4:2:0 YCbCr results in a failure on initialization. I've validated this to be the correct pixel format with FFmpeg: https://github.com/FFmpeg/FFmpeg/blob/8653dcaf7d665b15b40ea9a560c8171b0914a882/libavutil/hwcontext_videotoolbox.c#L45 Part-of: 2023-08-14 21:58:29 -0300 L. E. Segovia * sys/d3d11/gstd3d11ipcclient.cpp: * sys/nvcodec/gstcudaipcclient.cpp: windows: Fix mutexes leaking into the exports table Translation unit-local variables must be marked static on Windows, otherwise they're made available to the whole binary. See: https://learn.microsoft.com/en-us/cpp/cpp/program-and-linkage-cpp?view=msvc-170#external-vs-internal-linkage Part-of: 2023-08-12 21:16:59 +0900 Seungha Yang * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2: Use C++ atomic instead of GLib Release-Acquire ordering could be faster than MemoryBarrier() Part-of: 2023-08-12 00:58:10 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2ringbuffer: Don't use GLib's weak pointer implementation GWeakRef takes global mutex. Use C++ weak_ptr which will perform atomic operation internally. Part-of: 2023-08-13 00:31:50 +0900 Seungha Yang * gst-libs/gst/cuda/stub/cuda.h: cuda: Add workaround for gir build ERROR:../girepository/girparser.c:343:state_switch: assertion failed: (ctx->state != newstate) Bail out! ERROR:../girepository/girparser.c:343:state_switch: assertion failed: (ctx->state != newstate) Part-of: 2023-04-19 01:56:20 +0900 Seungha Yang * sys/nvcodec/gstcudaipc.cpp: * sys/nvcodec/gstcudaipc.h: * sys/nvcodec/gstcudaipcclient.cpp: * sys/nvcodec/gstcudaipcclient.h: * sys/nvcodec/gstcudaipcclient_unix.cpp: * sys/nvcodec/gstcudaipcclient_unix.h: * sys/nvcodec/gstcudaipcclient_win32.cpp: * sys/nvcodec/gstcudaipcclient_win32.h: * sys/nvcodec/gstcudaipcserver.cpp: * sys/nvcodec/gstcudaipcserver.h: * sys/nvcodec/gstcudaipcserver_unix.cpp: * sys/nvcodec/gstcudaipcserver_unix.h: * sys/nvcodec/gstcudaipcserver_win32.cpp: * sys/nvcodec/gstcudaipcserver_win32.h: * sys/nvcodec/gstcudaipcsink.cpp: * sys/nvcodec/gstcudaipcsink.h: * sys/nvcodec/gstcudaipcsrc.cpp: * sys/nvcodec/gstcudaipcsrc.h: * sys/nvcodec/gstnvcodecutils.h: * sys/nvcodec/meson.build: * sys/nvcodec/plugin.c: nvcodec: Add support for CUDA IPC Adding cudaipc{src,sink} element for CUDA IPC support. Implementation note: * For the communication between end points, Win32 named-pipe and unix domain socket will be used on Windows and Linux respectively. * cudaipcsink behaves as a server, and all GPU resources will be owned by the server process and exported for other processes, then cudaipcsrc (client) will import each exported handle. * User can select IPC mode via "ipc-mode" property of cudaipcsink. There are two IPC mode, one is "legacy" which uses legacy CUDA IPC method and the other is "mmap" which uses CUDA virtual memory API with OS's resource handle sharing method such as DuplicateHandle() on Windows. The "mmap" mode might be better than "legacy" in terms of stability since it relies on OS's resource management but it would consume more GPU memory than "legacy" mode. Part-of: 2023-06-04 00:53:40 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudabufferpool.cpp: * gst-libs/gst/cuda/gstcudabufferpool.h: cudabufferpool: Add support for virtual memory Configure malloc or mmap allocator depending on config option Part-of: 2023-06-03 23:58:50 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudacontext.cpp: * gst-libs/gst/cuda/stub/cuda.h: cudacontext: Add memory allocation related properties Adding "virtual-memory" and "os-handle" properties. New properties will be used to query device's capability Part-of: 2023-08-10 01:37:59 +0900 Seungha Yang * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/meson.build: cudamemory: Add support for virtual memory in pool allocator Adding new memory pool allocator for virtual memory Part-of: 2023-06-10 17:48:49 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Add support for virtual memory management Adding new CUDA memory allocation methods Part-of: 2023-08-10 01:58:57 +0900 Seungha Yang * gst-libs/gst/cuda/cuda-gst.h: * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcudaloader.cpp: * gst-libs/gst/cuda/stub/cuda.h: cuda: Load virtual memory management and IPC API symbols Part-of: 2023-08-13 22:02:47 +0900 Seungha Yang * sys/dwrite/gstdwritetimeoverlay.cpp: dwritetimeoverlay: Fix debug category name Part-of: 2023-08-13 21:58:39 +0900 Seungha Yang * sys/dwrite/gstdwrite-renderer.cpp: dwrite: Re-add background geometry combine If glyphrun unit is changed in a single line, there could be overlapped background area which result in drawing background twice. Adding geometry combine so that background geometry objects with the same color can be merged and rendered at once Part-of: 2023-08-11 12:03:59 +0000 Marcin Kolny * ext/qroverlay/gstqroverlay.c: qroverlay: fix updating "data" property in qroverlay element Part-of: 2023-08-10 23:39:06 +0900 Seungha Yang * sys/va/plugin.c: va: Update decoder ranks Most software decoders are ranked as primary, so use primary + 1 for all codecs except for jpeg. But ranks should be demoted on Windows since it's still experimental Part-of: 2023-06-13 03:36:45 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Add max-display-delay property The same as in old nvdec implementation so that user can control the number of delayed output frames. Part-of: 2023-06-13 03:05:48 +0900 Seungha Yang * sys/nvcodec/gstnvdecoder.cpp: nvdecoder: Reduce DPB size Decoder will copy decoded picture to downstream buffer or output CUDA memory even in case of zero-copy mode. Additional margin should be unnecessary unless baseclass passed wrong max DPB size. Part-of: 2023-08-08 14:42:40 +0100 Nirbheek Chauhan * sys/wasapi/gstwasapiutil.c: * sys/wasapi/meson.build: wasapi: Don't redefine GUIDs when building under newer MinGW Latest MSYS2 MinGW provides these now, so we don't need to define them if they're already present in the header. The AudioClient3 GUID requires the Windows 10 SDK, so it's only available in the latest MinGW, and the MinGW in Cerbero is too old. Part-of: 2023-08-08 16:00:02 +0530 Nirbheek Chauhan * sys/wasapi/gstwasapiutil.c: wasapi: Remove obsolete ifdefs for older MinGW We no longer ship that ancient MinGW toolchain, and it's causing build errors with MSYS2 now: https://gitlab.freedesktop.org/slomo/gstreamer/-/jobs/46866129 Part-of: 2022-04-27 17:03:31 +0200 Víctor Manuel Jáquez Leal * sys/va/plugin.c: va/vaapi: promote va ranks and demote vaapi ones VA decoders implementation has been verified from 1.18 through 1.22 development cycles and also via the Fluster test framework. Similar to other cases, we can prefer hardware over software in most cases. At the same time, GStreamer-VAAPI decoders are demoted to NONE to avoid collisions. The first step to their deprecation. Part-of: 2023-08-09 00:36:35 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix cosmetic issues Removes accidental GST_VIDEO_DECODER macro usage. Also sets the initial size of the output queue to avoid having to expand when first buffers come through. Part-of: 2023-08-06 09:23:28 +0100 Tim-Philipp Müller * ext/lc3/meson.build: lc3: fix pkg-config file lookup There's a mismatch between the pkg-config file ('lc3') and the subproject/wrap which meant an installed liblc3 wasn't picked up. Fixes #2883 Part-of: 2022-11-21 11:33:09 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2format.c: * sys/v4l2codecs/gstv4l2format.h: * sys/v4l2codecs/linux/videodev2.h: v4l2codecs: Enable Mediatek 10bit 4:2:0 support Part-of: 2022-11-11 15:10:02 -0500 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: video: Add Mediatek 10bit formats These 10bit formats are identical to NV12_16L32S, but 64bytes of data is being prefixed with 16bytes data with four pixels of lower 2bits per byte. For MT2110T, the lower two bits set so each bytes contains a column of 4 pixels, also describe as tiled lower 2 bits. MT2110T has been chosen as a name to match the vendor chosen name. This format is unlikely to exist for other vendors. For MT2110R, the 2 low bits are in raster order. Part-of: 2023-08-07 14:59:25 +0200 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.c: srt: Set SRTO_IPV6ONLY to 0 by default Since SRT 1.5.2 this option must be explicitly set to `0` or `1` before binding to `::`, or binding will fail. Part-of: 2023-08-08 01:29:40 +0900 Seungha Yang * ext/hls/gsthlssink2.c: hlssink2: Always use forward slash separator g_build_filename() will insert back slash on Windows, and resulting playlist will contain media segment path with back slash if "playlist-root" property is specified Part-of: 2023-07-19 09:51:00 +0200 Fabian Orccon * gst-libs/gst/codecparsers/gsth264parser.c: * tests/check/libs/h264parser.c: h264parser: Write Unregistered User Data Part-of: 2023-08-07 13:12:02 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvajpegdec.c: vajpegdec: simply fixup src caps for iHD Part-of: 2023-06-16 20:12:32 +0800 He Junyan * sys/va/gstvajpegdec.c: va: jpegdec: Do not change the DMA template src caps Part-of: 2023-06-03 21:56:09 +0800 He Junyan * sys/va/gstvabasetransform.c: va: Delete the usage hint hack when we support DRM modifier Part-of: 2023-02-22 19:36:06 +0800 He Junyan * sys/va/gstvabasetransform.c: * sys/va/gstvavpp.c: va: Apply the new DMA format:modifier pair negotiation in vpp Part-of: 2023-02-22 19:23:47 +0800 He Junyan * sys/va/gstvaav1dec.c: * sys/va/gstvabasedec.c: * sys/va/gstvabasedec.h: * sys/va/gstvajpegdec.c: va: Apply the new DMA format:modifier pair negotiation in decoder We will consider the DMA modifier for negotiation, setting caps and memory pool allocation. Part-of: 2023-07-17 21:46:35 +0800 He Junyan * gst-libs/gst/va/gstvavideoformat.c: va: update the gst_va_dma_drm_info_to_video_info() to use DMA_DRM format Part-of: 2023-02-22 18:53:32 +0800 He Junyan * sys/va/gstvacaps.c: * sys/va/gstvacaps.h: * sys/va/gstvafilter.c: va: Improve the template caps for DMA, use new drm-format kind caps We should add the modifier information for each surface format when we report the template caps. Part-of: 2023-02-22 18:39:22 +0800 He Junyan * gst-libs/gst/va/gstvapool.c: va: Use new dma drm caps in va pool when we setup DMA pools Part-of: 2023-06-14 16:32:52 +0800 He Junyan * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: va: Use GstVideoInfoDmaDrm in DMA allocator's get/set_format() API Part-of: 2023-08-04 20:47:38 +0800 He Junyan * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvavideoformat.h: va: Include drm fourcc header file in gstvavideoformat.h And add some definition to pass the Windows compiling. Part-of: 2023-08-05 01:39:29 +1000 Jan Schmidt * gst/audiolatency/gstaudiolatency.c: audiolatency: Fix event refcounting bug handling latency events Fix a refcounting bug introduced in https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5146 If upstream returns FALSE when processing a latency event, it will be unreffed an extra time Part-of: 2023-08-04 17:25:26 +1000 Jan Schmidt * gst/audiolatency/gstaudiolatency.c: audiolatency: Forward latency query and event upstream Make sure the pipeline still configures the latency that it would configure if audiolatency was not in the pipeline. Part-of: 2023-07-27 17:14:23 +0200 Guillaume Desmottes * docs/plugins/gst_plugins_cache.json: * gst/rtmp2/gstrtmp2src.c: rtmp2src: add 'no-eof-is-error' property There is currently no way for applications to know if the stream has been properly terminated by the server or if the network connection was disconnected as EOS is sent in both cases. Adding a property so connection errors can be reported as errors allowing applications to distinguish between both scenarios. Fix #2828 Part-of: 2023-07-19 18:08:32 -0500 Ryan Pavlik * sys/androidmedia/gstjniutils.c: androidmedia: Add more null checks (of env) to JNI utilities Part-of: 2023-07-22 10:42:39 +0100 Philippe Normand * gst/transcode/gsttranscodebin.c: transcodebin: Fixes for upstream selectable support The upstream selectable query was not performed in all situations where we handle the stream-start event. This could potentially lead to unlinked pads between decodebin3 and encodebin later on. Part-of: 2023-07-19 18:08:32 -0500 Ryan Pavlik * sys/androidmedia/gstjniutils.c: androidmedia: Add more null checks to JNI utilities Part-of: 2023-07-28 14:02:22 -0500 Ryan Pavlik * sys/androidmedia/gstamcvideodec.c: androidmedia: Fix typo Part-of: 2023-07-19 18:08:16 -0500 Ryan Pavlik * sys/androidmedia/gst-android-hardware-camera.c: androidmedia: Clear err if we don't have an optional camera field/constant Fixes startup on devices where those fields/constants are not found. Part-of: 2023-07-26 16:45:18 -0500 Ryan Pavlik * ext/webrtc/gstwebrtcbin.c: webrtc: Fix docs for create-data-channel action signal Initial line of the doc comment was incorrect, so the nicely written docs were not being extracted. Part-of: 2023-07-28 15:56:32 -0400 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwllinuxdmabuf.c: * gst-libs/gst/wayland/gstwllinuxdmabuf.h: * gst-libs/gst/wayland/gstwlshmallocator.c: waylandsink: Improve DMA DRM integration Pass GstVideoInfoDmaDrm or GstVideoInfo whenever possible, avoiding passing strange combination of GstVieoFormat + modifier. Even though we don't have any at the moment, this also allow supporting GstVideoFormat that are not supported in our DRM integration. Part-of: 2023-08-02 00:54:34 +0900 Seungha Yang * sys/dwrite/gstdwrite-effect.cpp: * sys/dwrite/gstdwrite-effect.h: * sys/dwrite/gstdwrite-renderer.cpp: * sys/dwrite/gstdwrite-renderer.h: * sys/dwrite/gstdwritebaseoverlay.cpp: * sys/dwrite/gstdwriteoverlayobject.cpp: * sys/dwrite/gstdwriteoverlayobject.h: dwrite: Move background-color and color-emoji options to effect object ... and simplify background rendering Part-of: 2023-08-01 22:56:37 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: * sys/dwrite/gstdwriteoverlayobject.cpp: * sys/dwrite/gstdwriteoverlayobject.h: * sys/dwrite/meson.build: dwrite: Add helper object for blending operation For easy integration with a new text rendering baseclass Part-of: 2023-08-01 22:50:37 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: dwritebaseoverlay: Handle only d3d11 allocation query ... and passthrough allocation queries of the other types Part-of: 2023-07-29 02:38:01 +0900 Seungha Yang * sys/dwrite/gstdwritetextoverlay.cpp: dwritetextoverlay: Remove leading CRLF sequence from CC The CRLF sequence is unnecessary Part-of: 2023-07-25 19:57:27 +0900 Seungha Yang * sys/dwrite/gstdwrite-effect.h: * sys/dwrite/gstdwrite-renderer.cpp: * sys/dwrite/gstdwritebaseoverlay.cpp: dwrite: Remove some properties Remove outline color and auto resize related properties to be consistent with textoverlay elements Part-of: 2023-07-28 00:39:46 +0900 Seungha Yang * gst/onvif/gstrtponviftimestamp.c: rtponviftimestamp: Fix drop-out-of-segment=false mode Fixing unexpected buffer dropping and flow error in case that: * use-reference-timestamps=false * drop-out-of-segment=false * Calculated utc offset is not valid because buffer is out-of-segment The above case should be considered as a valid data flow without returning errors. Fixing regression introduced by https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1683 Part-of: 2023-07-27 15:53:55 +0800 Cheah, Vincent Beng Keat * ext/wayland/gstwaylandsink.c: waylandsink: Add gst_buffer_pool_config_set_params() to a pool Part-of: 2023-07-25 11:37:02 +0800 Cheah, Vincent Beng Keat * docs/plugins/gst_plugins_cache.json: * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwllinuxdmabuf.c: * gst-libs/gst/wayland/gstwllinuxdmabuf.h: * gst-libs/gst/wayland/gstwlshmallocator.c: * gst-libs/gst/wayland/gstwlvideoformat.c: * gst-libs/gst/wayland/gstwlvideoformat.h: waylandsink: Add DRM modifiers support Part-of: 2023-07-19 13:19:06 +0800 Mengkejiergeli Ba * sys/va/gstvah265enc.c: vah265enc: Correct the value of cu_qp_delta flag and depth According to libva API description, cu_qp_delta in VAConfigAttribValEncHEVCFeatures is supposed to be used as a flag not the value of depth. And if flag enabled, diff_cu_qp_delta_depth should be decided by log2_diff_max_min_luma_coding_block_size. Part-of: 2023-07-26 14:58:57 +0800 Mengkejiergeli Ba * gst-libs/gst/va/gstvaallocator.c: va:allocator: Rework the func va_map_unlocked Rework the va_map_unlocked() after we keep mapping behavior (whether to use derive) consistent with allocator_try stage. Also remove the flag for iHD case because pitch/stride difference between vaCreateImage and vaDeriveImage only possibly happen on iHD by now. Part-of: 2023-07-13 16:56:56 +0800 Mengkejiergeli Ba * gst-libs/gst/va/gstvaallocator.c: va:allocator: Let pool alloc_info be consitent with the test order in gst_va_allocator_try In gst_va_allocator_try, the first try is to use derive_image, if it succeeds, we should use info from derived image to create bufferpool. If derive fails, then try create_image and give created image info to the pool. Part-of: 2023-07-27 19:08:59 +1000 Matthew Waters * sys/applemedia/avfdeviceprovider.m: * sys/applemedia/avfvideosrc.m: * sys/applemedia/iosassetsrc.h: * sys/applemedia/iosassetsrc.m: * sys/applemedia/videotexturecache-gl.m: applemedia: silence some deprecation warnings from ios 12.0 Part-of: 2023-07-26 16:27:43 +0800 He Junyan * gst-libs/gst/codecs/gstav1decoder.c: codecs: AV1: Ensure current picture and frame to NULL before return The current code fails to clear the current picture and frame pointer if some flow error such as EOS happens. This causes the double free issue in gst_av1_decoder_reset(). Part-of: 2023-07-14 13:41:34 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkh264enc.c: msdkh264enc: Set profile as unknown when not specified by downstream Part-of: 2023-07-25 22:00:27 +0800 He Junyan * docs/plugins/gst_plugins_cache.json: * gst/debugutils/gstfakevideosink.c: fakevideosink: Add DMA_DRM format into sink template caps Part-of: 2023-07-19 09:51:12 +0200 Fabian Orccon * gst-libs/gst/codecparsers/gsth265parser.c: * tests/check/libs/h265parser.c: h265parser: Write Unregistered User Data Part-of: 2023-07-18 10:08:54 +0200 Fabian Orccon * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth265parse.h: * tests/check/elements/h265parse.c: h265parse: Parse SEI unregistered user data Part-of: 2023-07-04 17:39:58 +0200 Piotr Brzeziński * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtenc: Move output loop to a separate thread vtenc has an async output queue, which we only iterate over after another frame is enqueued. At the very least it means we're always a frame behind the fastest possible output. In edge cases it's also bug-prone - for example if we only have 1 frame, the downstream caps negotiation will never happen. This commit adds a separate task running on the source pad, which only iterates over the output queue and pushes frames out as soon as they're put there. The queue length is limited to ensure we don't encode too far ahead compared to what downstream can consume. Any failures that occur when pushing data downstream will be signalled in self->downstream_ret so that other parts of code can act accordingly. Part-of: 2023-07-17 14:48:39 +0800 Jakub Adam * gst/videoparsers/gstav1parse.c: av1parse: calculate framerate from AV1 timing info When framerate info isn't provided by upstream elements, try to extract it from AV1 timing info, if present. Part-of: 2023-07-19 13:08:03 +0530 Nirbheek Chauhan * ext/webrtc/gstwebrtcbin.c: webrtcbin: Fix support for glib older than 2.74 G_CONNECT_DEFAULT was added in 2.74, and passing `0` in older versions gets the same behaviour. Part-of: 2023-07-17 16:41:25 +0530 Nirbheek Chauhan * tests/examples/webrtc/webrtcrenego.c: webrtcrenego: Use payload type correctly for the dynamic stream All streams were using pt=96 which is incorrect. In some cases that can cause EOS to be sent to both branches of the receiver. Part-of: 2023-07-17 16:40:05 +0530 Nirbheek Chauhan * tests/examples/webrtc/webrtcrenego.c: webrtcrenego: Fix incorrect release of non-request pad GStreamer-CRITICAL **: 16:39:23.230: gst_element_release_request_pad: assertion 'GST_PAD_PAD_TEMPLATE (pad) == NULL || GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad)) == GST_PAD_REQUEST' failed Part-of: 2023-07-17 15:56:37 +0530 Nirbheek Chauhan * tests/examples/webrtc/webrtcrenego.c: webrtcrenego: Port to updated mechanism for doing renegotiation Sending an EOS event is actually really bad because rtpbin doesn't handle that very well. It was only being used as a way to notify webrtcbin to check if re-negotiation is needed. We don't need that anymore, since changing the direction is enough to notify webrtcbin to check for re-negotiation. Part-of: 2023-07-17 15:39:59 +1000 Matthew Waters * ext/webrtc/gstwebrtcbin.c: webrtcbin: don't hold the webrtc lock over on-new-transceiver emission Could potentially produce a deadlock if the direction is changed in the callback. Part-of: 2022-11-09 14:25:00 +1100 Matthew Waters * ext/webrtc/gstwebrtcbin.c: webrtc: don't disallow transceiver direction changes Initial testing seems to suggest that we support them reasonably well (at least for BUNDLEd streams). Part-of: 2023-07-17 14:55:30 +1000 Matthew Waters * ext/webrtc/gstwebrtcbin.c: webrtc: add check for negotiation on transceiver direction changes As required by the webrtc specification. Part-of: 2023-07-05 18:46:25 -0600 Olivier Crête * scripts/gen-changelog.py: gst-omx: Retire the whole package The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. Part-of: 2023-07-13 20:38:29 +0900 Seungha Yang * sys/qsv/meson.build: qsv: Remove x86_64 constraint on Linux Updated oneVPL SDK supports 32bit and ARM build Part-of: 2023-07-13 20:34:24 +0900 Seungha Yang * sys/qsv/libmfx/dispatcher/vpl/mfx_dispatcher_vpl_config.cpp: * sys/qsv/libmfx/dispatcher/windows/mfx_dxva2_device.h: qsv: Re-apply MinGW build workaround Apply the changes of the commits c80132e4a3fb1fda6d196effe0e6d12dfcc75f25 and 23261bccbba84abb1334ffc4dea0514f74a5f2af Part-of: 2023-07-13 20:31:40 +0900 Seungha Yang * sys/qsv/libmfx/api/vpl/mfx.h: * sys/qsv/libmfx/api/vpl/mfxadapter.h: * sys/qsv/libmfx/api/vpl/mfxbrc.h: * sys/qsv/libmfx/api/vpl/mfxcamera.h: * sys/qsv/libmfx/api/vpl/mfxcommon.h: * sys/qsv/libmfx/api/vpl/mfxdefs.h: * sys/qsv/libmfx/api/vpl/mfxdispatcher.h: * sys/qsv/libmfx/api/vpl/mfxencodestats.h: * sys/qsv/libmfx/api/vpl/mfxjpeg.h: * sys/qsv/libmfx/api/vpl/mfxstructures.h: * sys/qsv/libmfx/api/vpl/mfxsurfacepool.h: * sys/qsv/libmfx/api/vpl/mfxvideo++.h: * sys/qsv/libmfx/api/vpl/mfxvideo.h: * sys/qsv/libmfx/dispatcher/linux/device_ids.h: * sys/qsv/libmfx/dispatcher/linux/mfxloader.cpp: * sys/qsv/libmfx/dispatcher/vpl/mfx_dispatcher_vpl.h: * sys/qsv/libmfx/dispatcher/vpl/mfx_dispatcher_vpl_config.cpp: * sys/qsv/libmfx/dispatcher/vpl/mfx_dispatcher_vpl_loader.cpp: * sys/qsv/libmfx/dispatcher/vpl/mfx_dispatcher_vpl_msdk.cpp: * sys/qsv/libmfx/dispatcher/windows/mfx_dxva2_device.h: qsv: Update oneVPL SDK version to v2023.3.0 Part-of: 2023-07-13 01:26:46 +0900 Seungha Yang * gst-libs/gst/codecs/gstav1decoder.c: * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gstmpeg2decoder.c: * gst-libs/gst/codecs/gstvp8decoder.c: * gst-libs/gst/codecs/gstvp9decoder.c: codecs: Use release_frame() instead of drop_frame() drop_frame() will post QoS message which is not intended here Part-of: 2023-07-12 00:34:31 +0900 Seungha Yang * gst-libs/gst/codecs/gstav1decoder.c: * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth265decoder.c: * gst-libs/gst/codecs/gstmpeg2decoder.c: * gst-libs/gst/codecs/gstvp8decoder.c: * gst-libs/gst/codecs/gstvp9decoder.c: codecs: Propagate downstream flow ERROR Don't translate downstream flow ERROR to OK Part-of: 2023-07-12 12:46:17 +0530 Nirbheek Chauhan * tests/examples/d3d11/d3d11overlay.cpp: d3d11: Fix build on MSYS2 GCC ``` ../subprojects/gst-plugins-bad/tests/examples/d3d11/d3d11overlay.cpp:145:37: error: invalid conversion from 'unsigned int' to 'D2D1_DRAW_TEXT_OPTIONS' [-fpermissive] 145 | D2D1_DRAW_TEXT_OPTIONS_CLIP | D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int ``` Part-of: 2023-07-12 09:27:22 +0530 Nirbheek Chauhan * tests/check/meson.build: * tests/examples/camerabin2/meson.build: meson: Always use forward slashes in defines with paths Fixes the following build failure on MSYS2: ``` ../subprojects/gstreamer/tests/check/elements/filesrc.c: In function 'test_seeking': ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: error: incomplete universal character name \U 107 | g_object_set (G_OBJECT (src), "location", TESTFILE, NULL); | ^ ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\A' ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\g' ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\s' ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\g' ../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\c' ``` Due to: `-DTESTFILE=\"C:\\Users\\Administrator\[...]` https://gitlab.freedesktop.org/nirbheek/gstreamer/-/jobs/45317733 Part-of: 2023-07-11 21:41:46 +0200 Carlos Rafael Giani * meson.build: gl: Take into account viv-fb vs. viv_fb naming in meson scripts Part-of: 2023-05-16 21:24:44 +1000 Matthew Waters * meson.build: gl: provide a pkg-config/gir file for the viv-fb backend Required to be able to generate coherent bindings for window system specific APIs due to limitations in gobject-introspection. Part-of: 2023-07-10 22:56:30 +0900 Seungha Yang * ext/qt6d3d11/gstqt6d3d11videoitem.cpp: qt6d3d11: Set sampler filtering method QQuickItem::smooth property doesn't seem to be propagated to newly created QSGSimpleTextureNode automatically. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2793 Part-of: 2023-07-10 12:03:25 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * tests/check/elements/webrtcbin.c: webrtcbin: Prevent critical warning when creating an additional data channel The max_channels value wasn't clamped to 65534 in all situations. Part-of: 2023-06-28 03:41:26 +0900 Seungha Yang * meson_options.txt: * sys/d3d11/meson.build: meson: d3d11: Add d3d11-wgc option for Windows Graphics Capture feature Make the feature requirement explicitly controllable via build option Part-of: 2023-07-05 19:55:17 +0300 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: video: Move NV12_10LE40_4L4 before the BE variant on LE platforms This keeps the sorting rules for the format list intact. Part-of: 2023-05-30 11:31:22 +0530 Taruntej Kanakamalla * docs/plugins/gst_plugins_cache.json: * ext/lc3/gstlc3dec.c: * ext/lc3/gstlc3dec.h: * ext/lc3/gstlc3enc.c: * ext/lc3/lc3-plugin.c: * tests/check/elements/lc3.c: * tests/check/meson.build: lc3: add unit test Part-of: 2022-08-26 13:35:21 +0530 Taruntej Kanakamalla * ext/lc3/gstlc3common.h: * ext/lc3/gstlc3dec.c: * ext/lc3/gstlc3dec.h: * ext/lc3/gstlc3enc.c: * ext/lc3/gstlc3enc.h: * ext/lc3/lc3-plugin.c: * ext/lc3/meson.build: * ext/meson.build: * meson_options.txt: lc3: plugin for LC3 audio codec lc3enc: - encodes raw audio into lc3 format - uses the default bitrate property and frame duration from the caps to determine the byte count of the encoded frames if it is not specified in the downstream caps after negotiation - uses the same byte count value for all the channels - all the common session configuration parameters are passed in the src caps lc3dec: - decodes an lc3 encoded audio - sink caps should contain all the common session configuration params - uses frame_duration and frame_bytes (byte count) in the sink caps as parameters along with sample rate and channel count - byte count is same for all the channels Part-of: 2023-06-30 18:30:46 +0100 Philippe Normand * ext/webrtc/gstwebrtcstats.c: webrtcstats: Properly report IceCandidate type strcmp returns a positive value if s1 is greater than s2, while we actually needed to check equality here. Part-of: 2023-06-30 15:14:59 +0200 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.c: srt: Always format reject reason code `srt_rejectreason_str` doesn't give us a unique string for every possible reason. Peers can define their own reasons and SRT just gives us the string `"Application-defined rejection reason"` for all of them. Part-of: 2023-06-30 23:21:21 +0900 Seungha Yang * sys/dwrite/gstdwritesubtitlemux.cpp: * sys/dwrite/gstdwritesubtitlemux.h: dwritesubtitlemux: Update object name Add missing prefix `DWrite` so that this element can coexist with subtitlemux proposed in https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4938 Part-of: 2023-06-29 22:13:51 +0900 Seungha Yang * sys/dwrite/gstdwrite-utils.h: * sys/dwrite/gstdwritebaseoverlay.cpp: * sys/dwrite/gstdwritesubtitleoverlay.cpp: dwrite: Add support for non-d3d11/system memory Attach meta if downstream supports it whatever the negotiated memory type is, or just silently passthrough when meta is not supported Part-of: 2023-06-27 23:40:20 +0900 Seungha Yang dwrite: Add dwritesubtitleoverlay element Adding new subtitle overlay element. It's a bin which is wrapping two internal elements dwritesubtitlemux and dwritetextoverlay. * dwritesubtitlemux: A new internal element to aggregate subtitle buffers and to attach the aggregated subtitle buffers on video buffer as meta. * dwritetextoverlay: Extracts/renders the subtitle meta and discard the meta after rendering. Part-of: 2023-06-27 23:39:32 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: dwritebaseoverlay: Fix color-font property get/set Part-of: 2023-06-27 21:31:42 +0900 Seungha Yang * sys/dwrite/gstdwritesubtitlemux.cpp: * sys/dwrite/gstdwritesubtitlemux.h: * sys/dwrite/meson.build: * sys/dwrite/plugin.cpp: dwrite: Add dwritesubtitlemux element dwrite plugin internal use and will be removed once it's added to -base Part-of: 2023-06-27 22:29:09 +0900 Seungha Yang * sys/dwrite/gstdwrite-utils.cpp: * sys/dwrite/gstdwrite-utils.h: dwrite: Add GstDWriteSubtitleMeta dwrite plugin internal use and will be removed once it's added to -base Part-of: 2023-06-16 21:53:11 +0200 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: * gst/sdp/gstsdpdemux.c: * gst/sdp/gstsdpdemux.h: rtpsession: expose timeout-inactive-sources property In some situations it is not desirable to time out when no data is received any longer, users can opt in to this behavior via a new property. The property is also exposed on rtpbin and sdpdemux Part-of: 2023-06-27 05:09:49 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11bufferpool.cpp: * tests/check/libs/d3d11memory.c: * tests/check/meson.build: d3d11bufferpool: Fix heavy CPU usage in case of fixed-size pool There's no reason to release GstMemory manually at all. If we do release GstMemory, corresponding GstBuffer will be discarded by GstBufferPool baseclass because the size is changed to zero. Actual cause of heavy CPU usage in case of fixed-size pool (i.e., decoder output buffer pool) and if we remove GstMemory from GstBuffer is that GstBufferPool baseclass is doing busy wait in acquire_buffer() for some reason. That needs to be investigated though, discarding and re-alloc every GstBuffer is not ideal already. Part-of: 2023-06-27 04:26:23 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11poolallocator: Initialize flush flag with TRUE If it's not active state, it should return flushing from acquire method Part-of: 2023-06-27 22:15:12 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: dwritebaseoverlay: Forward downstream wanted min buffer size Upstream element might want to know the min buffer size, d3d11 decoders for example. Part-of: 2023-06-27 22:07:02 +0900 Seungha Yang * sys/dwrite/gstdwrite-utils.h: * sys/dwrite/gstdwritebaseoverlay.cpp: dwrite: Remove unused values Part-of: 2023-06-24 00:00:02 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: * sys/dwrite/gstdwritebaseoverlay.h: * sys/dwrite/gstdwritetextoverlay.cpp: * sys/dwrite/libcaption/meson.build: * sys/dwrite/meson.build: dwrite: Add support for closed caption overlay Adding closed caption rendering feature to dwritetextoverlay element. Part-of: 2023-06-23 23:44:19 +0900 Seungha Yang * sys/dwrite/libcaption/LICENSE.txt: * sys/dwrite/libcaption/caption.c: * sys/dwrite/libcaption/caption.h: * sys/dwrite/libcaption/eia608.c: * sys/dwrite/libcaption/eia608.h: * sys/dwrite/libcaption/eia608_charmap.c: * sys/dwrite/libcaption/eia608_charmap.h: * sys/dwrite/libcaption/eia608_from_utf8.c: * sys/dwrite/libcaption/utf8.c: * sys/dwrite/libcaption/utf8.h: * sys/dwrite/libcaption/version.txt: * sys/dwrite/libcaption/xds.c: * sys/dwrite/libcaption/xds.h: dwrite: Import libcaption source code Import the code from gst-plugins-rs (origin is https://github.com/szatmary/libcaption) Part-of: 2023-06-24 01:43:50 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.h: * sys/dwrite/gstdwritetimeoverlay.cpp: dwritetimeoverlay: Fix member variable initialization Use GstBaseTransform::start() instead Part-of: 2023-06-18 14:30:14 +0800 He Junyan * gst-libs/gst/va/gstvavideoformat.c: * gst-libs/gst/va/gstvavideoformat.h: * sys/va/gstvacaps.c: va: Only change video format in gst_va_video_info_from_dma_info() The current way of using gst_video_info_set_format() will change all fields of the GstVideoInfo. We only need to change its format, stride and offset fields. In order to keep the consistency with th common drm API, we rename the gst_va_video_info_from_dma_info() into gst_va_dma_drm_info_to_video_info(). Part-of: 2023-05-30 09:38:57 +0200 Stéphane Cerveau * sys/va/gstvah264enc.c: va: use GstH264Level enum in _va_h264_level_limits The 1B value has been changed to 9 instead of 11 in the list of level limits. Part-of: 2023-05-31 14:51:34 +0200 Stéphane Cerveau * gst-libs/gst/codecparsers/gsth264parser.h: * gst-libs/gst/codecs/gsth264decoder.c: * gst/codectimestamper/gsth264timestamper.c: * gst/videoparsers/gsth264parse.c: codecparsers: keep naming consistency in GST_H264_LEVEL GST_H264_LEVEL_2 should be used instead of GST_H264_LEVEL_2_0 Part-of: 2023-05-22 16:07:08 +0800 Haihua Hu * docs/plugins/gst_plugins_cache.json: * ext/dash/gstdashsink.c: * ext/dash/gstmpdrootnode.c: dashsink: add property to set suggested presentation delay of MPD add property suggested-presentation-delay to configure MPD info Part-of: 2023-06-23 20:01:04 +0800 He Junyan * sys/va/gstvabasedec.c: va: basedec: Select the best format of the whole caps The current way only selects the best video format from the first structure of the caps. The caps like: video/x-raw(memory:VAMemory),drm-format=(string)NV12; \ video/x-raw(memory:VAMemory),format=(string){ NV12, Y210 } Will just choose NV12 as the result, even the bitstream is 10 bits. Part-of: 2023-05-19 13:06:37 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: msdkenc: Apply update functions when setting property Part-of: 2023-04-23 17:20:05 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: msdkenc: Add help functions to check and update property Part-of: 2023-06-21 13:44:40 +0200 Edward Hervey * tests/validate/testsrcbin/caps_spec/flow-expectations/log-testsrcbin0-video_src_0-expected: streamcollection: Use upstream-id as name It is more coherent, in the same vein as 08dc5d29 Fixes #2640 Part-of: 2023-06-19 14:25:09 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkvideoutils.c: vkvideoutils: fix memory leak in structure's string Retrieve a const char* from structure for "chromat-format" and avoid extra mem copy. Part-of: 2023-06-19 14:27:24 +0200 Stéphane Cerveau * tests/check/libs/vkimagebufferpool.c: tests: fix mem leak in vkimagebufferpool caps should be freed after usage. Part-of: 2023-06-16 14:37:42 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: fix beta extensions symbol Missing 's' to VK_ENABLE_BETA_EXTENSIONS Part-of: 2023-06-19 12:57:23 +0200 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vkphysicaldevice: fix leak with queue_family_query_props Part-of: 2023-06-20 14:33:48 +0100 Stéphane Cerveau * gst-libs/gst/vulkan/gstvkformat.c: vulkan: fix C2099 error with VS2019 As VK_FORMAT_FEATURE_2_xxx are defined as static const variable, the vscoce C compiler prevents the initialization of the vk_usage_map structure with error "C2099: initializer is not a constant". Init the structure separately. Part-of: 2023-06-20 23:42:35 +0800 He Junyan * sys/va/gstvabasetransform.c: va: basetransform: Copy the interested meta data for importing The current way of using parent's copy_metadata() virtual function will selectively filter out some meta such as crop meta. That virtual function should be used when copying input buffer's meta data into output buffer, not suitable when importing the input buffer. Part-of: 2023-06-20 21:45:56 +0800 He Junyan * sys/va/gstvabasetransform.c: va: basetransform: Check the crop meta when importing When the input buffer has crop meta, and we need to do copy, we should consider the uncropped video size and copy the full size of video memory. The video meta in this case should contain the full uncropped resolution info. We can use it to create full size va buffers. Part-of: 2023-06-20 20:20:24 +0800 He Junyan * sys/va/gstvabasetransform.c: va: basetransform: Only need va pool for internal usage Part-of: 2022-12-09 02:10:13 +0900 Seungha Yang * ext/meson.build: * ext/qt6d3d11/gstqml6d3d11sink.cpp: * ext/qt6d3d11/gstqml6d3d11sink.h: * ext/qt6d3d11/gstqsg6d3d11node.cpp: * ext/qt6d3d11/gstqsg6d3d11node.h: * ext/qt6d3d11/gstqt6d3d11videoitem.cpp: * ext/qt6d3d11/gstqt6d3d11videoitem.h: * ext/qt6d3d11/meson.build: * ext/qt6d3d11/plugin.cpp: * meson_options.txt: * tests/examples/meson.build: * tests/examples/qt6d3d11/meson.build: * tests/examples/qt6d3d11/qml6d3d11sink-dyn-add/meson.build: * tests/examples/qt6d3d11/qml6d3d11sink-dyn-add/qml6d3d11sink-dyn-add.cpp: * tests/examples/qt6d3d11/qml6d3d11sink-dyn-add/qml6d3d11sink-dyn-add.qml: * tests/examples/qt6d3d11/qml6d3d11sink-dyn-add/qml6d3d11sink-dyn-add.qrc: * tests/examples/qt6d3d11/qml6d3d11sink/meson.build: * tests/examples/qt6d3d11/qml6d3d11sink/qml6d3d11sink.cpp: * tests/examples/qt6d3d11/qml6d3d11sink/qml6d3d11sink.qml: * tests/examples/qt6d3d11/qml6d3d11sink/qml6d3d11sink.qrc: qt6d3d11: Add Direct3D11 Qt6 QML sink Adding Direct3D11 backend Qt6 QML videosink element, qml6d3d11sink. Implementation details are similar to the qt6 plugin in -good but there are a few notable differences. * qml6d3d11sink accepts all GstD3D11 supported video formats (e.g., NV12). * Scene graph (owned by qml6d3d11sink) will hold dedicated and sharable RGBA texture which belongs to Qt6's Direct3D11 device, instead of sharing GStreamer's own texture with Qt6. * All rendering operations will be done by using GStreamer's Direct3D11 device. Specifically, upstream texture will be copied (in case of RGBA) or converted to the above mentioned Qt6's sharable texture. Part-of: 2023-06-13 11:53:57 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvavpp.c: vapostproc: evaluate op_flags validations as boolean Part-of: 2023-06-13 14:25:04 +0300 Sebastian Dröge * gst/dvdspu/gstspu-pgs.c: dvdspu: Avoid integer overflow when checking if enough data is available Part-of: 2023-06-13 14:23:47 +0300 Sebastian Dröge * gst/dvdspu/gstspu-pgs.c: dvdspu: Make sure enough data is allocated for the available data If the size read from the stream is smaller than the currently available data then the size is bogus and the data should simply be discarded. Fixes ZDI-CAN-20994 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2660 Part-of: 2023-04-18 09:59:36 +0200 Andoni Morales Alastruey * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: vtenc: remove duplicated framerate and size variables Part-of: 2023-03-30 15:38:22 +0200 Andoni Morales Alastruey * sys/applemedia/meson.build: * sys/applemedia/vtdec.h: * sys/applemedia/vtenc.c: * sys/applemedia/vtenc.h: * tests/validate/meson.build: * tests/validate/vtenc/vtenc_h264.validatetest: * tests/validate/vtenc/vtenc_h264/flow-expectations/log-enc-src-expected: * tests/validate/vtenc/vtenc_h264_b_frames.validatetest: * tests/validate/vtenc/vtenc_h264_b_frames/flow-expectations/log-enc-src-expected: * tests/validate/vtenc/vtenc_h265.validatetest: * tests/validate/vtenc/vtenc_h265/flow-expectations/log-enc-src-expected: * tests/validate/vtenc/vtenc_h265_b_frames.validatetest: * tests/validate/vtenc/vtenc_h265_b_frames/flow-expectations/log-enc-src-expected: vtenc: apply DTS offset to ensure DTS <= PTS Part-of: 2023-06-19 00:06:56 +0900 Seungha Yang * sys/dwrite/gstdwritebaseoverlay.cpp: dwrite: Protect ID2D1Factory API with lock ID2D1Factory::CreateDxgiSurfaceRenderTarget is not thread-safe Part-of: 2023-06-16 19:22:55 +0900 Seungha Yang * sys/d3d11/gstd3d11decoder.cpp: d3d11decoder: Reduce DPB size Now all codec baseclasses can inform subclasses of correct max DPB size, and exception handling (e.g., emergency bumping in h.264) has been improved as well. Smaller number of additional DPB frame allocation seems to be safe. Part-of: 2023-05-29 21:53:52 +0900 Seungha Yang * docs/libs/cuda/index.md: * gst-libs/gst/cuda/gstcudautils.cpp: cuda: Introduce GST_CUDA_CRITICAL_ERRORS env to abort on critical error Adding GST_CUDA_CRITICAL_ERRORS env variable so that program can be terminated on unrecoverable error. Example) GST_CUDA_CRITICAL_ERRORS=2,700 gst-launch-1.0 ... In this example, CUDA_ERROR_OUT_OF_MEMORY(2) and CUDA_ERROR_ILLEGAL_ADDRESS(700) are registered as critical error and program will be aborted on those errors Part-of: 2023-05-29 21:27:17 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/gstcudautils.h: cuda: Move cuda debug helper function to .cpp Part-of: 2023-06-18 23:58:22 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: Fix resource leak Fixing regression since 94eadc9810bb1797e291fc36fb48801e3b10d3f2 Part-of: 2023-04-09 00:36:22 +0900 Seungha Yang * sys/amfcodec/gstamfav1enc.cpp: amfav1enc: Workaround driver bug with bt601 color matrix If bt601 is specified, driver generates sequence header with identity color matrix Part-of: 2022-03-18 12:37:46 -0400 Daniel Almeida * sys/v4l2codecs/gstv4l2codecav1dec.c: * sys/v4l2codecs/gstv4l2codecav1dec.h: * sys/v4l2codecs/meson.build: * sys/v4l2codecs/plugin.c: v4l2codecs: Add AV1 decoder This patch adds AV1 stateless v4l2 decode support using the new v4l2 request API to communicate with hardware accelerators. Part-of: 2022-12-05 14:21:42 +0100 Benjamin Gaignard * gst-libs/gst/codecparsers/gstav1parser.c: codecparser: AV1: fix reference frame ordering In AV1 specifications earliest_order_hint is initialized at beginning of the process and not before each frame ordering. FFMPEG parser does the same. Part-of: 2023-05-11 15:28:35 +0200 Michael Olbrich * gst/sdp/gstsdpdemux.c: sdpdemux: ensure that only one srcpad is created per stream If two senders use the same multicast IP and port then new_session_pad() may try to add a srcpad to the same stream twice. stream->srcpad is updated but gst_element_add_pad() fails the second time. As a result stream->srcpad points to a deleted object and access in gst_sdp_demux_stream_free() fails with a segfault. Just ignore the second pad. Nothing useful can be done with it anyway. Part-of: 2023-06-15 01:47:37 +0900 Seungha Yang * gst-libs/gst/va/gstvaallocator.c: va: Fix Windows build DRM_FORMAT_MOD_LINEAR and DRM_FORMAT_MOD_INVALID are not defined on Windows Part-of: 2023-05-14 13:23:17 +0100 James Cowgill * sys/v4l2codecs/gstv4l2codech264dec.c: * sys/v4l2codecs/gstv4l2codech265dec.c: * sys/v4l2codecs/gstv4l2codecvp8dec.c: v4l2codecs: Always chain up to parent decide_allocation function The `gst_video_decoder_negotiate_pool` function expects the `decide_allocation` function to always provide a pool and will fail to negotiate if the pool is missing. If we return immediately (even if we don't need to do anything special) negotiation will fail if the downstream element does not propose a pool. Fix by chaining up to the default `decide_allocation` function which adds a fallback pool if one was not already proposed. Part-of: 2023-06-15 10:41:26 -0400 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: doc: Update plugin cache Part-of: 2022-11-21 11:33:09 -0500 Nicolas Dufresne * sys/v4l2codecs/gstv4l2format.c: * sys/v4l2codecs/gstv4l2format.h: v4l2codecs: Enable Verisilicon 10bit 4:2:0 support Part-of: 2023-06-14 17:18:04 -0400 Nicolas Dufresne * sys/v4l2codecs/linux/media.h: * sys/v4l2codecs/linux/v4l2-common.h: * sys/v4l2codecs/linux/v4l2-controls.h: * sys/v4l2codecs/linux/videodev2.h: v4l2: Sync headers to current media_stage commit d78b9d6671decdaedb539635b1d0a34f8f5934f8 Part-of: 2023-05-28 01:59:23 +0900 Seungha Yang dwrite: Add DirectWrite text rendering plugin Adding DirectWrite text rendering elements * dwriteclockoverlay: Equivalent to clockoverlay * dwritetimeoverlay: Equivalent to timeoverlay * dwritetextoverlay: Similar to textoverlay but subtitle is not supported Newly added elements support system memory and d3d11 memory Part-of: 2023-06-15 18:40:38 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: Add support for d3d11 memory If overlay buffer is d3d11 memory, use it directly Part-of: 2023-06-09 14:05:58 -0400 Aaron Boxer * docs/plugins/gst_plugins_cache.json: * gst/mpegtsmux/gstatscmux.c: * gst/mpegtsmux/gstbasetsmux.c: * gst/mpegtsmux/gstbasetsmux.h: * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmux.h: * gst/mpegtsmux/tsmux/tsmuxstream.c: * gst/mpegtsmux/tsmux/tsmuxstream.h: mpegtsmux: add stream-number property on GstBaseTsMuxPad This new property allows setting of PES stream number for AAC audio and AVC video streams. The stream number is subject to the following constraints: 1. it must be between 0 and 15 for video 2. it must be between 0 and 31 for audio Currently the PES stream number is hard-coded to zero for these stream types. Part-of: 2023-05-20 19:33:27 +0200 Marek Vasut * docs/plugins/gst_plugins_cache.json: * gst/bayer/gstbayer2rgb.c: * gst/bayer/gstbayerorc-dist.c: * gst/bayer/gstbayerorc-dist.h: * gst/bayer/gstbayerorc.orc: bayer2rgb: Support video/x-bayer 10/12/14/16 bit depths Add support for 10/12/14/16 bit depths . This consists of multiple parts. First is the parsing of caps, which pulls out the bitness and endianness from the video/x-bayer format. Second, gst_bayer2rgb_split_and_upsample_horiz() is split into two similar functions, one for 8bit bayer handling and another for 16bit bayer handling. The content is basically identical, except one uses 8bpp and the other 16bpp inputs and outputs, and they each use different ORC code to match. The 16bpp variant also handles endian swapping. There is now a wrapper called gst_bayer2rgb_split_and_upsample_horiz() which selects the correct function based on bpp from the parser. Third, gst_bayer2rgb_process() is extended to handle both 8bit and 16bit bayer data. Yet again there are matching ORC functions to handle the 16bit data. This time however the 16bit handling of data is slightly special. The ORC is not able to emit opcodes for 'x2 mergelq', so the trick here is to store the BG and GR longs into separate 'dtmp' temporary buffer, and then do one more ORC post-processing step, compensate for the less-than-16bpp bitness using left shift, and reorder them into the destination frame using 'mergelq' . Example usage: ``` $ gst-launch-1.0 videotestsrc ! \ video/x-bayer,width=512,height=512,format=bggr16le ! \ bayer2rgb ! \ video/x-raw,format=RGBA64_LE ! \ videoconvert ! \ autovideosink ``` Example usage: ``` $ gst-launch-1.0 videotestsrc ! \ video/x-raw,width=512,height=512,format=ARGB ! \ rgb2bayer ! \ video/x-bayer,format=bggr12le ! \ bayer2rgb ! \ video/x-raw,format=RGBA64_LE ! \ videoconvert ! \ autovideosink ``` Part-of: 2023-05-20 23:33:14 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Add comments explaining gst_bayer2rgb_process() Add comments regarding which LINE()s point to which data in the temporary buffer and a large comment explaining how the buffer is processed. This will hopefully be useful to someone, as the code is not obvious. No functional change. Part-of: 2023-05-20 16:55:48 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Add comment on bayer_orc_horiz_upsample Explain how the bayer_orc_horiz_upsample function works and what it does with the pixels, as this may not be obvious. Part-of: 2023-05-20 23:34:15 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Pass filter pointer into gst_bayer2rgb_split_and_upsample_horiz() Instead of passing a single element of GstBayer2RGB structure into the gst_bayer2rgb_split_and_upsample_horiz(), pass the entire pointer and let the funciton pick out whatever it needs out of the structure. This is a preparatory patch. No functional change. Part-of: 2023-05-20 16:03:10 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Pass all parameters to LINE() macro Pass all three parameters used by the LINE() macro to the LINE() macro and unroll the code for readability. Add more comments regarding which of these LINE()s point to which data in the temporary buffer to make the code less confusing. Part-of: 2023-05-20 21:43:13 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Fold src_stride into gst_bayer2rgb_process() The source stride parameter can be easily obtained from GstBayer2RGB structure, do it within gst_bayer2rgb_process() and drop the parameter. No functional change. Part-of: 2023-05-20 16:01:13 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Inline the j=0 value The j variable is used as an iterator further down in this code, but here it can be just inlined in the macro parameters to make the code easier to read. This is done in preparation for further changes. No functional change. Part-of: 2023-06-07 23:33:05 +0200 Marek Vasut * gst/bayer/gstbayer2rgb.c: bayer2rgb: Disable in-place transform The bayer2rgb process implemented doesn't support in-place tranform. This element doesn't implement a "transform_ip" vmethod of GstBaseTransform it will revert to using the "tranform" vmethod. It's misleading to set it to TRUE, here. Change this to FALSE. Part-of: 2023-05-21 00:02:55 +0200 Marek Vasut * docs/plugins/gst_plugins_cache.json: * gst/bayer/gstrgb2bayer.c: * gst/bayer/gstrgb2bayer.h: rgb2bayer: Support video/x-bayer 10/12/14/16 bit depths Add support for conversion to 10/12/14/16 bit bayer pattern. The implementation is rather simplistic, just take the ARGB input, generate 16-bit data out of it instead of 8-bit, shift them as required by the output bitness, and apply endian swap. Example usage: ``` $ gst-launch-1.0 videotestsrc num-buffers=1 ! \ video/x-raw,width=512,height=512,format=ARGB ! \ rgb2bayer ! \ video/x-bayer,format=bggr12le ! \ filesink location=/tmp/bayer12.raw ``` Part-of: 2023-06-15 01:36:25 +0900 Seungha Yang * sys/d3dvideosink/d3dvideosink.c: d3dvideosink: Fix navigation event leak Fixing regression introduced in 6c2f6c3bd4dd525eb02c6d7000e84b76663d3daf Part-of: 2023-06-15 00:47:11 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: * sys/d3d11/gstd3d11videosink.cpp: d3d11videosink: Fixing unexpected overlay composition meta drops A buffer can hold multiple GstVideoOverlayCompositionMeta objects. Should scan all metas on a buffer and render all overlay rectangles if any. Part-of: 2023-06-11 22:22:36 +0200 Marek Vasut * sys/kms/gstkmssink.c: kmssink: Add ST STM32 LTDC auto-detection Add STM32 LTDC controller into list of auto-detected modules. Part-of: 2023-06-11 22:22:25 +0200 Marek Vasut * sys/kms/gstkmssink.c: kmssink: Add NXP i.MX8M Plus LCDIFv3 auto-detection Add i.MX8M Plus LCDIFv3 controller into list of auto-detected modules. Part-of: 2023-06-13 11:41:43 -0400 Arun Raghavan * ext/webrtcdsp/gstwebrtcdsp.cpp: * ext/webrtcdsp/gstwebrtcechoprobe.cpp: * ext/webrtcdsp/gstwebrtcechoprobe.h: webrtcdsp: Deal with echo probe info not being available Even if we don't yet know what the echo probe format is, we want to be able to provide silence for the reverse path, so that when the probe becomes available, there is no ambiguity around what time period the new set of samples are for. Part-of: 2023-06-06 16:34:19 +0530 Nirbheek Chauhan * ext/webrtcdsp/gstwebrtcdsp.cpp: webrtcdsp: Map probe buffers with probe info, not dsp info The probe's info may not precisely match the dsp's info. For instance, the number of channels or their layout might be different. ``` GStreamer-Audio-CRITICAL **: 16:21:32.899: the GstAudioInfo argument is not equal to the GstAudioMeta's attached info ``` This broke in d5755744c3e2b70e9f04704ae9d18b928d9fa456. Part-of: 2023-06-13 19:19:13 +0900 Seungha Yang * gst-libs/gst/codecs/gstav1decoder.c: av1decoder: Fix DPB size signalling Take current frame into account for the DPB size signalling Part-of: 2023-06-13 19:18:02 +0900 Seungha Yang * gst-libs/gst/codecs/gstmpeg2decoder.c: mpeg2decoder: Fix DPB size signalling Take current frame into account for the DPB size signalling Part-of: 2023-06-13 19:12:32 +0900 Seungha Yang * gst-libs/gst/codecs/gstvp9decoder.c: vp9decoder: Fix DPB size signalling Take current frame into account for the DPB size signalling Part-of: 2023-06-13 19:08:03 +0900 Seungha Yang * gst-libs/gst/codecs/gstvp8decoder.c: vp8decoder: Fix DPB size signalling Take current frame into account for the DPB size signalling Part-of: 2023-06-14 10:08:51 +0200 François Laignel * ext/srtp/gstsrtpdec.c: srtpdec: fix Got data flow before segment event A race condition can occur in `srtpdec` during the READY -> NULL transition: an RTCP buffer can make its way to `gst_srtp_dec_chain` while the element is partially stopped, resulting in the following critical warning: > Got data flow before segment event The problematic sequence is the following: 1. An RTCP buffer is being handled by the chain function for the `rtcp_sinkpad`. Since, this is the first buffer, we try pushing the sticky events to `rtcp_srcpad`. 2. At the same moment, the element is being transitioned from PAUSED to READY. 3. While checking and pushing the sticky events for `rtcp_srcpad`, we reach the Segment event. For this, we try to get it from the "otherpad", in this case `rtp_srcpad`. In the problematic case, `rtp_srcpad` has already been deactivated so its sticky events have been cleared. We won't be pushing any Segment event to `rtcp_srcpad`. 4. We return to the chain function for `rtcp_sinkpad` and try pushing the buffer to `rtcp_srcpad` for which deactivation hasn't started yet, hence the "Got data flow before segment event". This commit: - Adds a boolean return value to `gst_srtp_dec_push_early_events`: in case the Segment event can't be retrieved, `gst_srtp_dec_chain` can return an error instead of calling `gst_pad_push`. - Replaces the obsolete `gst_pad_set_caps` with `gst_pad_push_event`. The additional preconditions checked by previous function are guaranteed here since we push a fixed Caps which was built in the same function. Part-of: 2023-06-12 11:05:34 +0200 François Laignel * ext/srtp/gstsrtpdec.c: srtpdec: fix assertion 'parent->numsinkpads <= 1' failed A race condition can occur in `srtpdec` during the READY -> NULL transition: an RTCP buffer can make its way to `gst_srtp_dec_chain` while the element is partially stopped, resulting in the following critical warning: > assertion 'parent->numsinkpads <= 1' failed This can occur when the first RTCP buffer is received during the READY -> NULL transition. If deactivation of the `rtp_srcpad` has already reached `post_activate`, the sticky events are removed from this Pad. In this case, `gst_srtp_dec_push_early_events` branches to the generation of a stream id using `gst_pad_create_stream_id`. This function ensures that the element doesn't own more than 1 sink pad. Since `srtpdec` owns two of them, the assertion fails. This commit uses `gst_element_decorate_stream_id` which doesn't perform this check. The preconditions is not necessary in this particular context since the stream id for the RTP / RTCP pads are derived from the same id. Part-of: 2023-03-14 20:56:14 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11-private.h: * gst-libs/gst/d3d11/gstd3d11device.cpp: * gst-libs/gst/d3d11/gstd3d11utils.cpp: d3d11: Log device removed reason ... and live objects. It could be useful hint for GPU debugging Part-of: 2023-06-13 01:29:14 +0100 Tim-Philipp Müller * gst/asfmux/gstasfobjects.c: asfmux: fix potentially unaligned write on 32-bit ARM Fixes #2665 Part-of: 2023-06-13 11:48:31 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: va: dmabuf allocator to use GstVideoInfoDmaDrm Change the internal GstVideoInfo structure in the GstVaDmabufAllocator to GstVideoInfoDmaDrm in order to keep track of the exported DRM format by the driver, and thus removing the DRMModifier quark attached as qdata in the GstMemory. Though, the exposed API isn't updated yet; that has to go in a second iteration. Also this patch clean up some code (remove an unused buffer size assignation) and fix some typos in documentation. Part-of: 2023-02-22 19:00:45 +0800 He Junyan * sys/va/gstvacaps.c: * sys/va/gstvacaps.h: va: Add helper functions to convert GstVideoInfoDmaDrm into va video info The VA has its internal video format mapping(because different drivers may have different interpretation for the same format), so we should convert the info in GstVideoInfoDmaDrm into the according video info based on that mapping. Part-of: 2023-02-22 19:04:07 +0800 He Junyan * sys/va/gstvacaps.h: va: Replace the tabs into spaces in gstvacaps.h Part-of: 2023-02-22 16:25:32 +0800 He Junyan * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvaallocator.h: va: Add a helper function to detect the surface modifier Part-of: 2023-06-09 22:19:47 +0800 He Junyan * gst-libs/gst/va/vasurfaceimage.c: va: Lower the message level for va_export_surface_to_dmabuf() Some surface formats such as GST_VIDEO_FORMAT_Y42B and GST_VIDEO_FORMAT_RGB can be created but can not be exported as DMA buffer. You can not say that this is a driver bug because the driver may never want to share this kind of surface out of libva. And this function will be used to detect modifiers later, so the error message will be annoying. Part-of: 2023-02-22 16:25:32 +0800 He Junyan * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/vasurfaceimage.c: * gst-libs/gst/va/vasurfaceimage.h: va: Extend the va_create_surfaces() function to accept modifiers Part-of: 2023-06-08 21:53:28 +0800 He Junyan * gst-libs/gst/va/gstvavideoformat.c: * gst-libs/gst/va/gstvavideoformat.h: va: Add a helper function to convert video drm info to video info Part-of: 2023-06-04 00:10:36 +0800 He Junyan * gst-libs/gst/va/gstvavideoformat.c: * gst-libs/gst/va/gstvavideoformat.h: va: Map drm fourcc into va fourcc in video format The fourcc defined in va.h and drm_fourcc.h sometimes is not identical. For example, the I420 format is defined as "I420" in va.h but defined as "YU12" in drm_fourcc.h. Part-of: 2023-06-02 15:02:57 -0400 Nicolas Dufresne * gst/debugutils/gstfakeaudiosink.c: * gst/debugutils/gstfakevideosink.c: fakesinks: Fix recursive notify loop The proxy callback for the notify::last-message was emiting the signal again on the child, which caused an infinit loop. We could swap the child and the user data to signal to the bin instead, but it was found that proxying this signal was not very useful. Typical use case it to set silent=0 and use deep-notify feature. Proxying that signal just duplicate that output which isn't very useful. Part-of: 2023-04-13 16:03:13 -0400 Nicolas Dufresne * sys/v4l2codecs/gstv4l2codech265dec.c: v4l2codecs: h265: Set num_delta_pocs_of_ref_rps_idx Part-of: 2023-04-13 15:31:50 -0400 Nicolas Dufresne * sys/v4l2codecs/linux/v4l2-controls.h: v4l2codecs: Extend the API with num_delta_pocs_of_ref_rps_idx This value is an alternative to short_term_ref_pic_set_size and can be used to parse the RPS portion of a slice header, instead of skipping over it. Part-of: 2023-06-13 01:51:48 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Calculate DPB size based on level As specified in "A.4 Tiers and levels", calculate DPB size based on level in order to avoid over preallocated DPB Part-of: 2023-06-07 14:05:46 +0200 Jan Alexander Steffens (heftig) * gst/mpegtsmux/gstbasetsmux.c: mpegtsmux: Use terminological ISO 639-2 language codes These are preferred in most circumstances. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2649 Part-of: 2023-06-10 17:35:14 +0900 Seungha Yang * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Add support for premultiplied alpha conversion Adding "src-alpha-mode" and "dest-alpha-mode" properties to support alpha mode conversion Part-of: 2023-06-10 03:55:31 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: d3d11testsrc: Add "alpha" and "alpha-mode" properties Adding global alpha and alpha mode options Part-of: 2023-06-10 03:19:44 +0900 Seungha Yang * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: Handle premultiplied alpha in pixel shader Do premultiplied -> straight alpha conversion using GPU Part-of: 2023-06-10 02:52:09 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: d3d11converter: Add support for premultiplied alpha Adding "src-alpha-mode" and "dest-alpha-mode" properties and performs premultiplied alpha conversion if needed Part-of: 2023-06-08 21:29:32 +0900 Seungha Yang * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcudamemory.cpp: * sys/nvcodec/gstcudamemorycopy.c: * sys/nvcodec/gstnvdecobject.cpp: cudadownload: Always download CUDA memory if it's bound to decoder Decoder bounded CUDA memory is allocated by driver and the pool size is fixed. Since we don't know how many buffers would be held by downstream non-CUDA element, we should download such CUDA memory and release it back to decoder. Part-of: 2023-06-07 12:53:17 +0200 Víctor Manuel Jáquez Leal * docs/meson.build: doc: use gir file if dependency is not available Part-of: 2023-06-06 13:27:39 +0200 Víctor Manuel Jáquez Leal * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/msdk_libva.c: msdk: remove libva check before 1.12 Since gstmsdk depends on gstva library it also bumps the required version. Part-of: 2023-06-06 13:26:12 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvasurfacecopy.c: * gst-libs/gst/va/meson.build: * gst-libs/gst/va/vasurfaceimage.c: * sys/va/gstvaencoder.c: * sys/va/gstvafilter.c: * sys/va/gstvah265dec.c: * sys/va/gstvah265enc.c: * sys/va/gstvaprofile.c: * sys/va/plugin.c: va: bump libva version to 1.12 Remove all checks in gstva for all version lower than 1.12 Part-of: 2023-06-07 20:36:36 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/gstwin32ipcvideosrc.cpp: win32ipc: Use gst_util_get_timestamp() Instead of duplicating the same code Part-of: 2023-06-07 20:32:41 +0900 Seungha Yang * sys/d3d11/gstd3d11ipc.cpp: * sys/d3d11/gstd3d11ipc.h: * sys/d3d11/gstd3d11ipcclient.cpp: * sys/d3d11/gstd3d11ipcsink.cpp: * sys/d3d11/gstd3d11ipcsrc.cpp: d3d11: Use gst_util_get_timestamp() instead of duplicating the same code Part-of: 2023-06-06 20:18:53 +0300 Vivia Nikolaidou * gst/mpegtsmux/gstbasetsmux.c: basetsmux: Fix language crash when ts_pad->stream is NULL Part-of: 2023-05-25 13:02:09 +0300 Vivia Nikolaidou * gst/mpegtsdemux/gstmpegdesc.h: * gst/mpegtsdemux/tsdemux.c: tsdemux: Detect language from ac3 descriptor Part-of: 2023-06-05 23:44:12 +0900 Seungha Yang * sys/d3d11/gstd3d11ipcclient.cpp: * sys/d3d11/gstd3d11ipcclient.h: * sys/d3d11/plugin.cpp: d3d11ipcsrc: Stop asynchronously in case of io-mode=import In case of import mode, d3d11ipcsrc does not know when outputted memories will be released. Part-of: 2023-06-05 22:34:27 +0900 Seungha Yang * sys/d3d11/gstd3d11ipc.cpp: * sys/d3d11/gstd3d11ipc.h: * sys/d3d11/gstd3d11ipcclient.cpp: * sys/d3d11/gstd3d11ipcserver.cpp: * sys/d3d11/gstd3d11ipcserver.h: * sys/d3d11/gstd3d11ipcsink.cpp: d3d11ipc: Use unnamed shareable handle Exchanging HANDLE would have smaller overhead than string Part-of: 2023-06-05 21:16:28 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: * gst-libs/gst/d3d11/gstd3d11memory.h: d3d11memory: Add support for resource sharing via NT handle Adding gst_d3d11_memory_get_nt_handle() method so that GstD3D11Memory can hold shareable NT handle and for easy reuse of it Part-of: 2023-06-05 20:50:18 +0900 Seungha Yang * sys/d3d11/gstd3d11ipcsink.cpp: d3d11ipcsink: Don't clear prepared sample on render render() can be called multiple times for the same prepared sample Part-of: 2023-06-01 15:16:47 +0300 Sebastian Dröge * sys/decklink/gstdecklink.h: decklink: Implement Windows string conversion with common API between MinGW and MSVC Part-of: 2023-06-01 15:17:26 +0300 Sebastian Dröge * sys/decklink/gstdecklink.h: decklink: Add some newlines in long defines Part-of: 2023-05-31 23:44:42 +0300 Maksym Khomenko * sys/decklink/gstdecklink.h: decklink: Calculate string size before malloc Part-of: 2023-05-30 15:27:21 +0300 Sebastian Dröge * sys/decklink/gstdecklink.h: decklink: Use the macOS version of the SDK on macOS and not the Linux one Part-of: 2023-05-30 13:23:28 +0300 Sebastian Dröge * sys/decklink/gstdecklink.h: decklink: Free SDK strings after usage on Linux While they're const char* they still need to be freed like on Windows and macOS and would be leaked otherwise. Part-of: 2023-05-30 13:22:44 +0300 Sebastian Dröge * sys/decklink/gstdecklink.h: decklink: Correctly handle SDK strings on macOS They're CFStringRef* and not plain NUL-terminated char* C strings. Part-of: 2023-06-02 13:21:06 -0400 Aaron Boxer * ext/onnx/gstonnxclient.cpp: * ext/onnx/gstonnxobjectdetector.cpp: onnxobjectdetector: gracefully handle Ort exceptions rather than dumping core Part-of: 2023-06-04 18:51:56 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvaallocator.c: va: remove unused parameters in internal function gst_va_buffer_surface_new() don't use neither format, width nor height. Part-of: 2023-05-30 15:31:47 +1000 Matthew Waters * ext/soundtouch/meson.build: * ext/webrtcdsp/meson.build: * meson.build: build/android: remove all references to gnustl Not needed anymore with NDK R25. Part-of: 2023-06-01 02:13:32 +0900 Seungha Yang * sys/d3d11/gstd3d11basefilter.cpp: d3d11basefilter: Forward video related metas if needed The same as in GstVideoFilter Part-of: 2023-03-21 09:24:18 +0100 Michael Grzeschik * sys/uvcgadget/gstuvcsink.c: * sys/uvcgadget/gstuvcsink.h: uvcsink: add probe handling for live pipelines Currently the uvcsink is only capable to run in an application that is handling the state transitions of the pipeline properly by checking on streaming event from the uvcsink. This code is improving the element by adding an fakesink to consume possible videostream flow in case the pipeline state is not changing on hosts streamoff. This is helpfull when using local gst-launch pipelines where the streaming event is not monitored to change the pipelines state. Part-of: 2023-04-17 23:53:58 +0200 Michael Grzeschik * docs/plugins/gst_plugins_cache.json: * meson_options.txt: * sys/meson.build: * sys/uvcgadget/gstuvcsink.c: * sys/uvcgadget/gstuvcsink.h: * sys/uvcgadget/meson.build: * sys/uvcgadget/uvc.c: * sys/v4l2codecs/linux/usb/g_uvc.h: * sys/v4l2codecs/linux/usb/video.h: uvcsink: add new bin element around v4l2sink This patch adds an element to stream video data to an uvc video gadget. The element handles the uvc events STREAMON, STREAMOFF, SETUP and DATA. to start, stop and configure the video buffer flow by the use of pad probes. It works with linux kernels of versions higher than v6.1. The element makes use of the v4l2sink proxy property v4l2sink::device to locate the corresponding device to parse the configfs for additional data. The code in uvc.c is basically derived from /lib/uvc.c in https://git.ideasonboard.org/uvc-gadget.git. Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: * sys/uvcgadget/configfs.h: uvcsink: configfs.{c,h}: add helper function to parse by videodev - add helper function video_find_config_name - add helper function configfs_parse_uvc_videodev With these helper functions it is possible to parse the configfs entry corresponding to the used videodev. Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: uvcsink: configfs.c: use G_N_ELEMENTS instead of ARRAY_SIZE We don't have ARRAY_SIZE in glib. Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: uvcsink: configfs.c: fix globing in uvc_video_device The gadget in the sysfs can be postfixed with an index. Fix the globbing by adding a wildcard after /gadget*/. Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: uvcsink: configfs.c: refactor location of GUID formats - move GUID handling to beginning Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: * sys/uvcgadget/configfs.h: uvcsink: configfs.{c,h}: add parsing of more fields from format - add parsing of dwMaxVideoFrameBufferSize Part-of: 2023-05-09 00:50:41 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: uvcsink: configfs.c: fix code for local usage - use local header file and remove unused reference to tools.h Part-of: 2023-04-17 23:51:52 +0200 Michael Grzeschik * sys/uvcgadget/configfs.c: * sys/uvcgadget/configfs.h: uvcsink: add configfs.{c,h} from https://git.ideasonboard.org/uvc-gadget.git - imported both files and run gst-indent on them Part-of: 2023-05-25 16:39:46 +0300 Vivia Nikolaidou * gst/mpegtsmux/gstbasetsmux.c: tsmux: Resend PMT whenever the language changes Part-of: 2023-06-01 11:55:34 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: use basic features (v1) as fallback if vkGetPhysicalDeviceFormatProperties2 isn't available. This approach assumes that, for basic features flags symbols, VkFormatFeatureFlagBits and VkFormatFeatureFlagBits2 are binary equivalent. Part-of: 2023-05-30 16:08:54 +1000 Matthew Waters * gst-libs/gst/vulkan/gstvkformat.c: vulkan/format: don't rely on vulkan header version for function availability e.g. android will have update vulkan.h headers but old platforms will not contain the function and will result in a link error. Part-of: 2020-12-02 18:31:44 -0500 Arun Raghavan * ext/webrtcdsp/gstwebrtcdsp.cpp: * ext/webrtcdsp/gstwebrtcechoprobe.cpp: * ext/webrtcdsp/gstwebrtcechoprobe.h: * ext/webrtcdsp/meson.build: webrtcdsp: Update code for webrtc-audio-processing-1 Updated API usage appropriately, and now we have a versioned package to track breaking vs. non-breaking updates. Deprecates a number of properties (and we have to plug in our own values for related enums which are now gone): * echo-suprression-level * experimental-agc * extended-filter * delay-agnostic * voice-detection-frame-size-ms * voice-detection-likelihood Part-of: 2023-05-31 17:33:46 +0200 Mathieu Duponchelle * gst-libs/gst/webrtc/nice/meson.build: * gst-libs/gst/webrtc/nice/nice.c: webrtc/nice: put usage of OPTION_CONSENT_FRESHNESS behind check See https://gitlab.freedesktop.org/libnice/libnice/-/merge_requests/257 Part-of: 2023-05-31 09:39:35 -0400 Thibault Saunier * sys/nvcodec/gstcudabasetransform.c: cudabasetransform: Handle video related meta as appropriate This implements the same logic as GstVideoFilter Part-of: 2023-05-29 12:32:08 -0400 Thibault Saunier * sys/nvcodec/gstcudamemorycopy.c: cuda: memory: Enhance debug when CU_GL_DEVICE_LIST_ALL fails Ensuring error from cuda is logged Part-of: 2023-05-26 13:26:42 +0100 Colin Kinloch * ext/gtk/gstgtkwaylandsink.c: * gst-libs/gst/wayland/gstwlwindow.c: waylandsink: Emit "map" signal boarder surface is ready This allows gtkwaylandsink to queue a draw of its gtk widget at the correct time, avoiding a race. Signed-off-by: Colin Kinloch Part-of: 2023-03-14 11:49:57 +0100 Stéphane Cerveau * meson_options.txt: * tools/meson.build: tools: add bad/ges/omx tools to gst_tools In static mode, these tools must be built after the gstreamer-full library to use the symbol gst_init_static_plugins. Part-of: 2023-03-07 14:05:54 +0100 Stéphane Cerveau * tests/meson.build: gstreamer-full: add full static support Allow a project to use gstreamer-full as a static library and link to create a binary without dependencies. Introduce the option 'gst-full-target-type' to select the build type, dynamic(default) or static. In gstreamer-full/static build configuration gstreamer (gst.c) needs the symbol gst_init_static_plugins which is defined in gstreamer-full. All the tests and examples are linking with gstreamer but the symbol gst_init_static_plugins is only defined in the gstreamer-full library. gstreamer-full can not be built first as it needs to know what plugins will be built. One option would be to build all the examples and tests after gstreamer-full as the tools. Disable tools build in subprojects too as it will be built at the end of build process. Part-of: 2023-05-25 17:02:24 +0200 Jan Alexander Steffens (heftig) * ext/fdkaac/gstfdkaacdec.c: fdkaacdec: Support up to 5 rear channels The `switch (n_rear)` supports up to 5 rear channels, but our channel set only had space for 3. Size the set properly to fix this. This didn't actually cause any memory unsafety as `PUSH_CHAN` would stop incrementing `n_rear` if the channel set is already full. Thanks to @alatiera for noticing this. Part-of: 2023-04-27 13:10:33 +0800 Mengkejiergeli Ba * docs/plugins/gst_plugins_cache.json: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh264enc.h: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkh265enc.h: msdkenc: Add a property to insert pic timing SEI for avc and hevc User can decide whether to insert pic timing sei with pic_struct syntax via oneVPL API mfxExtCodingOption.PicTimingSEI. Part-of: 2023-05-25 19:30:29 +0300 Jordan Petridis * ext/openjpeg/gstopenjpegenc.c: openjpegenc: do not set bpp field on opj_image_cmptparm_t It's deprecated in favor of the .prec field which we already set. https://github.com/uclouvain/openjpeg/pull/1383/ Part-of: 2023-05-25 19:03:29 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.h: vkvideoutils: fix code-style Part-of: 2023-05-23 11:52:36 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkimagebufferpool.c: tests: check if vulkan h264 decoding is supported Part-of: 2023-05-23 12:26:37 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkphysicaldevice.h: * gst-libs/gst/vulkan/vulkan_fwd.h: vkphysicaldevice: fetch queue family query result support And merged in a single structure the queue family operations report. Part-of: 2023-05-24 20:37:13 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: chain the correct structure Part-of: 2023-05-24 20:36:14 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: vkvideoutils: fix bug for chroma string comparison Part-of: 2023-05-24 22:12:51 +0900 Seungha Yang * sys/d3d11/gstd3d11videosink.cpp: d3d11videosink: Fix error on pause and play The show_frame() can be called without prepare() call on paused to playing state change. Thus the prepared buffer should not be cleared on show_frame() Part-of: 2023-05-22 13:51:47 +0300 Vivia Nikolaidou * gst/mpegtsmux/tsmux/tsmux.h: tsmux.h: Remove TSMUX_MAX_ES_INFO_LENGTH dead code Also TsMux.es_info_buf which was also not used anywhere Part-of: 2023-05-19 16:23:50 +0300 Vivia Nikolaidou * gst/mpegtsmux/gstatscmux.c: * gst/mpegtsmux/gstatscmux.h: * gst/mpegtsmux/tsmux/tsmuxstream.c: tsmux: Separate DVB and ATSC AC3 descriptors The previous code was ATSC-specific. Separated it into gstatscmux.c and added the DVB-specific one from ETSI EN 300 468 V1.11.1 (2010-04) https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf Part-of: 2023-05-22 14:37:55 +0300 Vivia Nikolaidou * gst/mpegtsmux/tsmux/tsmuxstream.c: tsmux: Refactor AC3 descriptor to use GstByteWriter Part-of: 2023-05-19 16:21:15 +0300 Vivia Nikolaidou * gst/mpegtsmux/gstbasetsmux.c: * gst/mpegtsmux/gstbasetsmux.h: * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmux.h: tsmux: Parse bitrate from tags into the stream Instead of parsing a hardcoded zero and always writing the highest limit. Part-of: 2023-05-19 16:18:08 +0300 Vivia Nikolaidou * gst/mpegtsmux/tsmux/tsmuxstream.c: tsmux: Fix 0x81 descriptor for AC3 streams According to ATSCA/52:2018 https://prdatsc.wpenginepowered.com/wp-content/uploads/2021/04/A52-2018.pdf Used wireshark as ground truth for detection/parsing. Part-of: 2023-05-19 15:50:11 +0200 Ruben Gonzalez * docs/plugins/gst_plugins_cache.json: * ext/dash/gstdashdemux.c: * ext/hls/gsthlsdemux.c: * ext/mpeg2enc/gstmpeg2enc.cc: * ext/mplex/gstmplex.cc: * gst/mpegtsdemux/tsdemux.c: * gst/removesilence/gstremovesilence.c: * sys/dvb/dvbbasebin.c: * sys/dvb/gstdvbsrc.c: * sys/winks/gstksvideosrc.c: doc: Fix newline char between authors Found running `gst-inspect-1.0 -a |& grep -v ":" | grep @` Part-of: 2023-05-20 03:01:03 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Don't use CS_OWNDC style It's completely unnecessary since we never use the device context (e.g., BeginPaint() or GetDC() never called). Part-of: 2023-05-19 15:10:12 +0800 Shengqi Yu * gst/videoparsers/gsth264parse.c: h264parse: adjust some logs printing level in h264parse adjust log level from GST_ERROR to GST_WARNING when h264 caps have codec_data but no avc format or have no codec data or stream-format. Because theses are not real errors, it is easy to mislead if print error logs. Part-of: 2023-05-18 09:27:29 -0400 Thibault Saunier * gst/debugutils/gsttestsrcbin.c: testsrcbin: Remove spurious caps unref Caps are cleared at the end of the function Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2575 Part-of: 2023-04-18 15:57:45 +0800 Ma, Mingyang * sys/msdk/gstmsdkdec.c: msdkdec: Fix decoding cases with resolution change (VP9) The resolution of VP9 video can be changed without keyframe. The change detected by MSDK/VPL should be negotiated with downstream. Only the situation can be fixed here if the changed resolution is less than or equal to the initial surface resolution. Part-of: 2023-05-11 13:18:18 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: prepare new allocated buffers This means change initial memory undefined layout and access to the ones required for their usage. This is only used if VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME is available. Part-of: 2023-01-30 18:35:26 +0100 Víctor Manuel Jáquez Leal * ext/vulkan/vkdownload.c: vkdownload: input memories may not match output memories Split the iterations, one for images and another for buffers, while first barrier on images, and later in buffers after copy. Part-of: 2023-05-09 17:17:31 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkcolorconvert.c: * ext/vulkan/vkdownload.c: * ext/vulkan/vkupload.c: * ext/vulkan/vkviewconvert.c: * gst-libs/gst/vulkan/gstvkfullscreenquad.c: vulkan: number of memories in buffer rather than number of planes New vulkan formats don't match the number of planes with the number of memories attached to the buffer. This patch changes the pattern of using planes for traverse the memories with the number of attached memories. Part-of: 2023-01-13 16:02:22 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkutils.c: * gst-libs/gst/vulkan/gstvkutils.h: vkutils: add gst_vulkan_get_or_create_image_view_with_info() It's a generalization of the original gst_vulkan_get_or_create_image_view(). The reason for passing the whole VkImageViewCreateInfo structure rather than just the missing fields, is because VkImageSubresourceRange and VkComponentMapping can be different and those are most of VkImageViewCreateInfo. Part-of: 2023-04-21 16:49:01 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: enable device optional extensions Enable before-hand what the user might use. Part-of: 2023-04-04 19:20:43 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkformat.c: * tests/check/libs/vkimagebufferpool.c: * tests/check/meson.build: tests: vkimagebufferpool and format mapping This test will create a pool for VkImageMemory for decoding and others usages. And a test for the new Vulkan format mapping. Part-of: 2023-05-09 18:04:13 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: vkformat: add VK_FORMAT_G8_B8R8_2PLANE_420_UNORM Part-of: 2023-04-05 10:53:57 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkswapper.c: vkswapper: use gst_vulkan_format_to_video_format() Part-of: 2023-04-05 10:53:31 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkformat.h: vkformat: add gst_vulkan_format_to_video_format() Part-of: 2023-04-05 10:09:39 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkimagememory.h: * sys/applemedia/iosurfacevulkanmemory.c: vulkan: use gst_vulkan_format_get_aspect() In order to use it, without depending in a previous calling of _create_info_from_args(), VkFormat as input parameter to gst_vulkan_image_memory_init() was added. Part-of: 2023-04-04 22:23:23 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkformat.h: vkformat: add gst_vulkan_format_get_aspect() Part-of: 2023-05-08 17:07:12 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: fail if image cannot be allocated Part-of: 2023-04-03 21:01:34 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkimagebufferpool.h: vkimagebufferpool: gst_vulkan_image_buffer_pool_config_set_decode_caps() This is going to be used when the pool is used by a video decoder for VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, since the frame allocation needs the VkVideoProfileInfoKHR, and for that here GstCaps is used to wire it. Part-of: 2023-04-03 20:56:40 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkvideoutils.c: * gst-libs/gst/vulkan/gstvkvideoutils.h: * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/vulkan/vulkan.h: * gst-libs/gst/vulkan/vulkan_fwd.h: vkvideoutils: add gst_vulkan_video_profile_{to/from}_caps() Add this new source file with utils for video profile mapping with GstCaps. These method is used to pass this information along GStreamer. Part-of: 2023-04-03 20:17:56 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: use gst_vulkan_image_memory_alloc_with_image_info() As the pool will be only used for images with usage VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR only one layer has to be allocated. Part-of: 2023-04-01 11:25:07 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkbuffermemory.c: * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkmemory.c: * gst-libs/gst/vulkan/gstvkmemory.h: vulkan: find memory type index with requirements The specification says: VUID-vkAllocateMemory-pAllocateInfo-01713 must pAllocateInfo->allocationSize be less than or equal to VkPhysicalDeviceMemoryProperties::memoryHeaps[memindex].size where memindex = VkPhysicalDeviceMemoryProperties::memoryTypes[pAllocateInfo->memoryTypeIndex].heapIndex as returned by vkGetPhysicalDeviceMemoryProperties for the VkPhysicalDevice that device was created from. Though this can be catch by the validation layer, the requested frame size depends on the use case so it's better to check this restriction by our code. This patch also makes use of this new function to find memory type index, and removes the unused function to find memory type index, which, as GstVulkan is considered unstable, we can do it. Part-of: 2023-04-01 08:12:28 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: vkimagebufferpool: use gst_vulkan_format_from_video_info_2() To get the number of images and its Vulkan formats for the GStreamer format. Also it gets the basic image usage by default if it's not defined. It fails if the video format is not supported. Part-of: 2023-03-31 12:43:59 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkformat.h: vkformat: add gst_vulkan_format_from_video_info_2() The purpose of this function is to get more info about the mapped Vulkan format from the GStreamer format, since they can be multiple Vulkan formats for one GStreamer format. Also a Vulkan format may have certain usage and aspects that must be verified. Part-of: 2023-03-31 12:53:42 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkformat.c: * gst-libs/gst/vulkan/gstvkformat.h: * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkimagememory.h: vkformat: move gst_vulkan_format_from_video_info() Moved gst_vulkan_format_from_video_info() from gstvkimagememory to gstvkformat in order to centralize the video format operations in a single source file. Part-of: 2021-04-23 12:23:00 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkimagebufferpool.h: vkimagebufferpool: pass usage and memory properties Pass, in config structure, usage and memory properties, assigning proper defaults if they aren't set. This parameters are used in image memory allocation. Part-of: 2023-03-28 15:31:19 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkdevice.h: vkdevice: add gst_vulkan_device_queue_family_indices() This method will return a GArray with all the queue family indices created by the device when it's opened. This array will be used by VkImageCreateInfo to allocate a new Vulkan image. Part-of: 2023-03-28 15:27:18 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: add programming parameters verification To `gst_vulkan_device_foreach_queue()`. Part-of: 2023-01-17 15:07:14 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkbuffermemory.c: * gst-libs/gst/vulkan/gstvkbuffermemory.h: vkbuffermemory: add gst_vulkan_buffer_memory_alloc_with_buffer_info() Part-of: 2023-01-04 17:10:11 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkimagememory.h: vkimagememory: gst_vulkan_image_memory_alloc_with_image_info() This new method instead of passing a bunch of variables which will fill `VkImageCreateInfo`, the method accepts this whole structure, so the caller can customize it as much as they want. Part-of: 2023-03-27 19:19:51 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagememory.c: vkimagememory: look up for Vulkan format using a static table Replace the switch structure with explicit and extendable static table. Part-of: 2023-03-23 11:09:29 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: enable multiple queues per device Originally the opened device only created one queue of one family queue, to say graphics one. This approach felt short when other queue family is required not shared with the graphics queue family, for example video decoding. This new approach proposes to create those queues with supported families. For now, only video decoding and encoder are created, if they are available. In order to hold multiple queues opened, an array of VkDeviceQueueCreateInfo is held along the live the device object, because it's used to traverse or get the opened queues. The algorithm to choose which queues create (or open) is to look for the queue with more family bits, which also supports the one we are requesting, thus minimizing the number of global queues of a certain family to create. Nonetheless, the number of queues to open per family is set to be all of them, widening the possibility of parallelism. Also, this commit do a cosmetic refactor the assigning the physical device nearer where it's used. Part-of: 2023-03-21 21:25:52 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdevice.c: vkdevice: enable features from physical device Part-of: 2023-01-17 12:32:31 +0100 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_features() gst_vulkan_physical_device_get_features() is a private function to access to the available features in the device. Part-of: 2023-03-20 20:44:28 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: * gst-libs/gst/vulkan/gstvkphysicaldevice.h: vkphysicaldevice: fetch queue family video codec operations Part-of: 2023-01-04 13:28:20 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdebug.c: vkdebug: add video queue flags strings Part-of: 2023-01-04 13:23:45 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkconfig.h.meson: * gst-libs/gst/vulkan/meson.build: * meson_options.txt: vulkan: detect vulkan video extensions Also adds a meson option to enable them. The symbol GST_VULKAN_HAVE_VIDEO_EXTENSIONS is an alias of defined(VK_VERSION_1_4) || (defined(VK_VERSION_1_3) && VK_HEADER_VERSION >= 238 if the option is allowed. Part-of: 2023-05-15 14:37:10 +0800 Yinhang Liu * docs/plugins/gst_plugins_cache.json: docs: msdkenc: update supported image formats Part-of: 2023-03-30 11:05:04 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdkenc: Remove unsupported image formats for MSDK path For unsupported encoding formats, please use msdkvpp plugin to do conversion first. Part-of: 2023-03-30 09:39:31 +0800 Yinhang Liu * sys/msdk/gstmsdkav1enc.c: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkmjpegenc.c: * sys/msdk/gstmsdkvp9enc.c: msdkenc: Remove internal vpp function The internal vpp function and msdkvpp plugin are duplicated, so remove the internal vpp, please use msdkvpp plugin to do conversion if necessary. Part-of: 2023-05-15 15:42:04 +0800 Mengkejiergeli Ba * docs/plugins/gst_plugins_cache.json: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: bad:docs: Add new properties description for msdkh264enc and msdkh265enc Part-of: 2023-04-27 10:19:57 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh264enc.h: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkh265enc.h: msdkenc: Add properties max/min-qp for I/P/B frame separately in avc and hevc max-qp and min-qp will set the same quantizer scale for I/P/B frames, while max-qp-i/p/b and min-qp-i/p/b enable the max/min quantizer for I,P,B frame separately. When max/min-qp and max/min-qp-i/p/b are given simultaneously, the later set one will overide the previous one. Part-of: 2022-04-07 09:58:48 +0900 Sangchul Lee * tests/check/elements/webrtcbin.c: tests/webrtc: Validate peer connection stats Part-of: 2022-04-06 10:14:07 +0900 Sangchul Lee * ext/webrtc/gstwebrtcbin.c: webrtc: Add data-channels-opened/closed to get-stats signal documentation With contributions from: Matthew Waters Part-of: 2023-04-20 16:41:11 +0800 Haihua Hu * gst-libs/gst/play/gstplay.c: gstplay: fix critical log when enable playbin3 when play rtsp stream with playbin3 enabled, there are some critical logs: g_object_get_is_valid_property: object class 'GstPlayBin3' has no property named 'n-video' g_object_get_is_valid_property: object class 'GstPlayBin3' has no property named 'n-audio' g_object_get_is_valid_property: object class 'GstPlayBin3' has no property named 'n-text' self->collection could be NULL when READY->PAUSED if the pipeline is live, then it will fallback to query playbin2's property, we can call gst_play_streams_info_create_from_collection directly, it will check self->collection internal. Part-of: 2023-05-17 22:58:46 +0200 Ruben Gonzalez * README.md: README.md: fix current version Part-of: 2023-05-15 11:14:24 +0200 Martin Nordholts * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/gstwebrtcbin.h: * ext/webrtc/gstwebrtcstats.c: webrtc: Track stats for data channels opened and closed Track data channel stats for `dataChannelsOpened` and `dataChannelsClosed` in `RTCPeerConnectionStats` as specified by https://www.w3.org/TR/webrtc-stats/#dictionary-rtcpeerconnectionstats-members Part-of: 2023-05-14 20:05:25 +0900 Seungha Yang * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Add render-rectangle property ... and resize HWND on GstVideoOverlay::set_render_rectangle even when we are rendering without external HWND Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2563 Part-of: 2023-05-11 04:53:24 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth264parser.h: * gst-libs/gst/codecs/gsth264decoder.c: * gst/codectimestamper/gsth264timestamper.c: * gst/videoparsers/gsth264parse.c: h264parser: Define level enum values ... and stop duplicating it Part-of: 2023-03-02 18:09:54 +0800 Elliot Chen * gst-libs/gst/play/gstplay.c: gstplay: avoid getting property of playbin2 if subtitle_sid is null There is a probability of getting "current-text" property when play with playbin3, and this property is available only in playbin2. Part-of: 2023-05-17 03:54:43 +0900 Seungha Yang * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2device.c: * sys/wasapi2/gstwasapi2sink.c: * sys/wasapi2/gstwasapi2src.c: wasapi2: fix "device" property description Part-of: 2023-05-16 17:01:32 +0100 Tim-Philipp Müller * sys/wasapi/gstwasapisink.c: * sys/wasapi/gstwasapisrc.c: wasapi: fix "device" property description Fixes gstreamer/gst-plugins-bad#1620 Part-of: 2023-05-15 13:47:16 +0200 Carlos Rafael Giani * sys/bluez/gstavdtputil.c: avdtputil: Use int instead of int range for fixed bitpool values Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1698 Part-of: 2023-05-15 22:05:55 +0900 Seungha Yang * sys/nvcodec/gstcudaconverter.c: * sys/nvcodec/gstcudaconverter.h: * sys/nvcodec/gstcudaconvertscale.c: cudaconvertscale: Add support for flip/rotation Similar to the d3d11convert element, colorspace conversion, resizing and flip/rotation operations can be done in a single kernel function call Part-of: 2023-05-16 22:56:15 +0900 Seungha Yang * sys/d3d11/gstd3d11convert.cpp: d3d11convert: Fix for runtime property update Every setup happens in set_caps() method but basetransform will not call the set_caps() if in/out caps were not changed Part-of: 2023-05-16 15:32:56 +0800 He Junyan * sys/va/gstvadevice_linux.c: va: No need to sort the device after registered The va devices are already registered by the drm path order, so there is no need to sort them again after registered. Part-of: 2023-05-16 14:38:44 +0800 He Junyan * sys/va/gstvadevice_linux.c: va: Sort udev path name before register the va plugins The devices list returned by g_udev_client_query_by_subsystem() may contain udev devices in disorder path name. For example, on some platform it may contain renderD129 before renderD128 device. This will cause we register wrong va plugin name. In this case, the renderD129 will be registered as default plugins such as vah265dec, while the renderD128 will be registered as varenderD128h265dec. This conflicts with the non-udev version of gst_va_device_find_devices(). Part-of: 2023-05-15 17:31:58 +0200 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: fix warning text and debug data They were backwards or missing. Fix: #2567 Part-of: 2023-05-10 12:00:15 +0200 Johan Sternerup * ext/sctp/gstsctpenc.c: sctpenc: Fix potential shutdown deadlock When transitioning from state PAUSED to READY, the sctpenc element could previously be stuck in an endless loop trying to resend data in case the underlying sctp stream was in the process of resetting. usrsctp_sendv() would repeatedly return EAGAIN with the result that 0 bytes were sent and then sctpenc would retry forever. To bring sctpenc out of the resend loop we just need to inform the sink pad that it is flushing, which is already done for the associated data queue, but we also need to set the bools associated with the sinkpads that are used as the loop criterion. Part-of: 2023-04-25 16:03:08 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdkmjpegdec: Fix ColorFormat for BGRx format For msdkmjpegdec, the BGRx format is supported in src caps, set the ColorFormat to MFX_JPEG_COLORFORMAT_RGB. Part-of: 2023-05-11 12:30:11 +0800 Yinhang Liu * sys/msdk/msdk.c: msdk: Fix initialization of the msdk_session.impl_idx This fixes the issue of msdk_session.impl_idx not being initialized. Part-of: 2023-05-12 22:18:22 +0900 Seungha Yang * sys/d3d11/gstd3d11convert.cpp: * sys/d3d11/gstd3d11download.cpp: * sys/d3d11/gstd3d11ipcsink.cpp: * sys/d3d11/gstd3d11ipcsrc.cpp: * sys/d3d11/gstd3d11screencapturedevice.cpp: * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11testsrc.cpp: * sys/d3d11/gstd3d11upload.cpp: * sys/d3d11/gstd3d11videosink.cpp: d3d11: Update element meta Make them consistent, update outdated description and fix some typos Part-of: 2023-05-12 17:13:21 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/meson.build: * ext/vulkan/shaders/meson.build: vulkan: minor meson clean ups Part-of: 2023-03-12 12:59:11 +0000 Philippe Normand * ext/wpe/WPEThreadedView.cpp: * ext/wpe/meson.build: * ext/wpe/wpe-extension/gstwpeextension.c: * ext/wpe/wpe-extension/gstwpeextension.h: * ext/wpe/wpe-extension/meson.build: * meson_options.txt: wpe: Add support for the WPEWebKit 2.0 API version Most notably this disables console messages support when the 2.0 API is used, because there is no replacement for it. Part-of: 2023-05-11 17:28:52 +1000 Matthew Waters * ext/webrtc/gstwebrtcbin.c: * tests/check/elements/webrtcbin.c: webrtc: advertise end-of-candidate with an empty candidate string Just like what is done in the browsers. When this is sent to the peer, they will be able to know that no more candidates are coming and can complete ICE. Part-of: 2023-05-10 22:35:27 +0200 Piotr Brzeziński * gst-libs/gst/vulkan/cocoa/gstvkdisplay_cocoa.m: macos: Remove old NSApp workaround related code This is no longer needed since the introduction of `gst_macos_main()` in 1.22. Before that existed, we had a patch for GLib in Cerbero, which did work but made it impossible to update GLib at all. The code being removed was a fail-safe in case of running without said patch being applied. It's no longer needed, since for macOS we just wrap our GStreamer with an NSApplication using `gst_macos_main()`. Warnings will be displayed if no NSApp/NSRunLoop is found wherever needed, pointing the user towards using the new API. Part-of: 2023-05-10 19:14:58 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkshaderspv.c: vkshaderspv: fix example Use the correct element names. Part-of: 2023-05-10 00:51:31 +0900 Seungha Yang * sys/d3d11/gstd3d11videosink.cpp: d3d11videosink: Don't clear prepared buffer on unlock_stop() That can be called between prepare() and render() which results in unexpected error flow return Part-of: 2023-05-10 14:34:32 +0800 Tong Wu * sys/msdk/gstmsdkcaps.c: msdk: fix a not referenced build error Error Type: error C4189: ‘dma_caps’: local variable is initialized but not referenced Part-of: 2023-05-05 15:17:16 +1000 Matthew Waters * ext/closedcaption/ccutils.c: * ext/closedcaption/ccutils.h: * ext/closedcaption/gstcccombiner.c: * ext/closedcaption/gstccconverter.c: * ext/closedcaption/gstcea608mux.c: * tests/check/elements/cccombiner.c: * tests/check/elements/ccconverter.c: closedcaption: write 0x00 padding instead of 0x80 in cc_data/cdp Depending on the exact output format, 0x00 may be a better default for padding than 0x80. 0x00 is the recommended padding value when used in CDP (and cc_data) but is not when used in s334-1a. See CTA-708-E 4.3.5 amd SMPTE 334-1-2007 5.3.2. Part-of: 2023-05-06 04:14:49 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Drop nonexisting picture silently without error If end_picture() was not successful, we do drop corresponding GstVideoCodecFrame and therefore gst_video_decoder_get_frame() will return nullptr which is expected behavior. Part-of: 2023-04-18 17:08:54 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdk: Remove unreachable statement The execution cannot reach the statement: "gst_caps_unref(dma_caps);", so remove it. Part-of: 2023-03-12 14:55:22 +0000 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * ext/webrtc/webrtcdatachannel.c: * ext/webrtc/webrtcdatachannel.h: webrtcdatachannel: Bind to parent webrtcbin using a weak reference The previous approach of using a simple pointer could lead to a use-after-free in case a data-channel was created and its parent webrtcbin was disposed soon after. Fixes #2103 Part-of: 2023-05-04 16:30:09 +1000 Matthew Waters * gst-libs/gst/webrtc/nice/nice.c: webrtc/nice: support consent-freshness RFC7675 As is supported by libwebrtc already. This allows ICE components to transition to failed if consent to send from the peer is revoked or if multiple consent packets are lost. Part-of: 2023-04-30 20:42:56 +0900 Seungha Yang * sys/d3d11/gstd3d11ipc.cpp: * sys/d3d11/gstd3d11ipc.h: * sys/d3d11/gstd3d11ipcclient.cpp: * sys/d3d11/gstd3d11ipcclient.h: * sys/d3d11/gstd3d11ipcserver.cpp: * sys/d3d11/gstd3d11ipcserver.h: * sys/d3d11/gstd3d11ipcsink.cpp: * sys/d3d11/gstd3d11ipcsink.h: * sys/d3d11/gstd3d11ipcsrc.cpp: * sys/d3d11/gstd3d11ipcsrc.h: * sys/d3d11/meson.build: * sys/d3d11/plugin.cpp: d3d11: Add support for IPC Adding d3d11ipcsrc and d3d11ipcsink elements so that Direct3D11 textures can be shared between processes Part-of: 2023-05-05 21:53:44 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11memory: Don't clear wrapped texture memory The external texture may hold already rendered scene and therefore it should not be cleared in alloc method Part-of: 2023-05-05 13:12:24 +0200 Ruben Gonzalez * ext/onnx/gstonnxobjectdetector.cpp: onnx: Fix typo in documented pipeline Part-of: 2023-05-03 17:44:35 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkdebug.c: vkdebug: fix type compilation warning Since VkMemoryHeapFlagBits is an enum, while VkMemoryHeapFlags is the expected alias of VkFlags. This issue is spotted by warning of gcc 13.1.1 Part-of: 2023-05-04 04:44:31 +0900 Seungha Yang * sys/mediafoundation/gstmfvideoencoder.cpp: mfvideoenc: Allow only even resolution numbers Some H/W vendors support odd resolution if D3D11 texture is used or via IMF2DBuffer, but not all vendors support it. Also software MFT does not allow odd resolution. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1165 Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2537 Part-of: 2023-05-02 18:14:20 +0100 Philippe Normand * ext/webrtc/gstwebrtcbin.c: webrtcbin: Fix potential deadlock when closing before any data was sent A blocking pad probe is added on new sink pads, it's usually removed after the caps have been negotiated or the signaling state switched to stable, but if that never happens and the pad is released we kept the pad probe active, leaving the pad blocked, preventing clean disposal. Part-of: 2023-05-02 11:34:36 +0200 Guillaume Desmottes * ext/srt/gstsrtobject.c: srt: assert instead of segfault when passing no error to ERROR_TO_WARNING Part-of: 2023-05-02 11:41:41 +0200 Guillaume Desmottes * ext/srt/gstsrtobject.c: srt: fix segfault if send_headers() failed The error handling code was assuming that 'internal_error' was set, while we were passing the caller GError. The internal error is already propagated to the caller later on. Part-of: 2023-05-01 17:46:25 +0100 Philippe Normand * gst-libs/gst/webrtc/dtlstransport.c: dtlstransport: Keep strong ref of dtls encoder/decoder Otherwise get_property() calls for the client, certificate and/or remote-certificate properties might access moved objects, since the encoder and decoder are added to the transportsendbin. Part-of: 2023-05-01 10:24:54 +0000 Mihail Ivanchev * gst/codectimestamper/meson.build: gstcodectimestamper: remove PC file generation from plugin's own meson.build The file generated here is incomplete; it is generated for all plugins in a loop at an upper level. Part-of: 2023-04-28 22:25:11 +0800 He Junyan * sys/va/gstvah265enc.c: va: h265enc: map the mbbrc to correct enum value in get_property() Part-of: 2023-04-28 22:26:34 +0800 He Junyan * sys/va/gstvah264enc.c: va: h264enc: map the mbbrc to correct enum value in get_property() Part-of: 2023-04-20 18:57:50 -0400 Thibault Saunier * gst/rtp/gstrtpsrc.c: rtpsrc: Give better names to internal elements Same name was used for all instances of rtpsrc making debugging more complex Part-of: 2023-04-28 04:28:24 +0900 Seungha Yang * sys/wasapi2/gstwasapi2util.c: wasapi2: Allows process loopback capture on Windows 10 As per MS documentation[1], it requires Windows 10 Build 20348 but it seems to be supported by old versions too [1] https://learn.microsoft.com/en-us/windows/win32/api/audioclientactivationparams/ ns-audioclientactivationparams-audioclient_process_loopback_params Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2524 Part-of: 2023-04-14 16:11:55 +0530 Nirbheek Chauhan * gst-libs/gst/va/meson.build: * meson_options.txt: * sys/va/meson.build: meson: Add feature options for optional va deps libdrm and gudev Part-of: 2023-04-14 13:18:52 +0530 Nirbheek Chauhan * gst-libs/gst/va/meson.build: * sys/kms/meson.build: meson: Fix libdrm and vaapi configure checks We do not need fallback: for libdrm checks because the wrap file already has a [provide] section. Part-of: 2023-04-27 13:32:30 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkswapper.c: vkswapper: missing image barrier after vkCmdClearColorImage After clear color image command the swapper image needs to add a barrier before copying the buffer to display on it. Otherwise a potential synchronization problem might occur. Fixes #2403 Part-of: 2023-04-27 11:37:34 +0200 Víctor Manuel Jáquez Leal * ext/vulkan/vkcolorconvert.c: * ext/vulkan/vkdownload.c: * ext/vulkan/vkoverlaycompositor.c: * ext/vulkan/vkupload.c: * gst-libs/gst/vulkan/gstvkfullscreenquad.c: * gst-libs/gst/vulkan/gstvkswapper.c: vulkan: use VK_QUEUE_FAMILY_IGNORED in barriers Instead of using the valid queue family 0 (zero) if there aren't queue transfers there's no need to specify a not validated queue family, but just VK_QUEUE_FAMILY_IGNORED. Part-of: 2023-04-27 23:49:47 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Fix for semi planar YUV memory size decision UV plan of the semi planar format requires only half of Y plane size Part-of: 2023-04-18 11:21:05 +0200 Daniel Moberg * ext/webrtc/webrtcdatachannel.c: webrtc: do not tear down data channel before data is flushed Current implementation can in some cases detect that all data is sent but in reality it is not, leading to a push to an unlinked pad. This is a race between the probe used to track data sent and a call to close. This patch sends an EOS before starting the close procedure and then waits for the EOS event to come through to the src pad before commencing with tear down. This ensures that any queued data before EOS is flushed. Part-of: 2023-04-11 12:40:54 +1000 Matthew Waters * ext/closedcaption/ccutils.c: * tests/check/elements/ccconverter.c: ccutils: generate valid padding in field 1 when needing to generate field 2 Fixes CC in Field 2 but not in Field 1 errors. Part-of: 2023-04-25 04:59:33 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Fix for ignored initial render rectangle Application can set target render rect before internal HWND configuration Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2518 Part-of: 2023-04-25 10:14:47 +0200 Stéphane Cerveau * tests/check/meson.build: bad: disable dtls test if openssl is not present On MacOS with homebrew, the openssl library is not properly detected with pkg-config. So disable the test compilation if openssl is not properly detected along with libcrypto. libcrypto is detected but it uses the system one which leads to the error: your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64 See more details from Apple: https://developer.apple.com/forums/thread/124782 Part-of: 2023-04-21 13:52:50 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdk: Fix segfault for OneVPL dispatcher + legacy MSDK runtime path From the spec, the OneVPL dispatcher should be able to work with legacy MSDK runtime: https://www.intel.com/content/www/us/en/docs/onevpl/upgrade-from-msdk/2023-1/onevpl-hardware-support-details.html Currently supported capabilities: OneVPL dispatcher + OneVPL runtime: dynamic capability MSDK dispatcher + MSDK runtime: static capability MSDK dispatcher + OneVPL runtime: static capability OneVPL dispatcher + legacy MSDK runtime: static capability Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2506 Part-of: 2023-04-21 10:38:54 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdk: Add NumFilters check for VPP description When NumFilters is equal to 0, the function should return immediately. Part-of: 2023-04-21 10:19:32 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: msdk: Add return when creating caps fails for VPP When creating caps fails, the function should return immediately and should not continue to register the plugin. This patch fixes the issue of "gst_mini_object_ref: assertion 'mini_object != NULL' failed" in https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2506 Part-of: 2023-04-06 16:50:23 -0300 Eva Pace * ext/webrtc/gstwebrtcbin.c: webrtcbin: Fix trace log 'from' value `webrtc->signaling_state` (from) and `new_signaling_state` (to) had the same value when printed in a trace log. This commit adds a `old_signaling_state` variable to hold the previous value, so that the print statement works as intented. Spotted by: Mustafa Asım REYHAN Fixes #1802 Part-of: 2023-03-19 15:35:29 -0300 Thibault Saunier * docs/meson.build: doc: Avoid shelling out to hotdoc to generate plugins config files Part-of: 2023-04-23 10:05:17 -0400 Thibault Saunier * ext/srt/gstsrtsink.c: * gst-libs/gst/basecamerabinsrc/meson.build: * gst-libs/gst/va/meson.build: meson: Add CameraBin and Va girs Part-of: 2023-04-24 15:20:45 +0200 Stéphane Cerveau * sys/applemedia/helpers.c: applemedia: fix missing definition Fix missing kCVPixelFormatType_64RGBALE definition on Catalina for example Part-of: 2023-04-19 16:59:01 +0200 Martin Nordholts * gst-libs/gst/webrtc/nice/nice.c: webrtc: Plug leaks of resolved ICE addresses The addresses we get from `resolve_host_finish()` (via `resolve_host_async()`, `resolve_host_main_cb()`, `on_resolve_host()`, `g_resolver_lookup_by_name_finish()`) must be freed. Otherwise we leak memory. Leak found and confirmed fixed with GCC AddressSanitizer. Change-Id: If32d24452d626234f01b253b77a7d6d16eac1cee Part-of: 2022-08-31 14:15:16 -0400 Thibault Saunier * gst-libs/gst/audio/meson.build: * gst-libs/gst/basecamerabinsrc/meson.build: * gst-libs/gst/codecs/meson.build: * gst-libs/gst/cuda/meson.build: * gst-libs/gst/d3d11/meson.build: * gst-libs/gst/insertbin/meson.build: * gst-libs/gst/mpegts/meson.build: * gst-libs/gst/play/meson.build: * gst-libs/gst/player/meson.build: * gst-libs/gst/transcoder/meson.build: * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/webrtc/meson.build: gir: Checkout all .gir files and check that they are updated on the CI Part-of: 2023-04-20 02:18:21 +0900 Seungha Yang * sys/d3d11/gstd3d11overlay.cpp: d3d11overlay: Enhance documentation and fix typo Part-of: 2023-03-24 00:11:21 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11memory: Remove redundant bind flag validation It has been validated outside of each function already Part-of: 2023-04-20 06:30:52 +0300 Jordan Petridis * ext/sctp/usrsctp/usrsctplib/netinet/sctp_pcb.c: * ext/sctp/usrsctp/usrsctplib/netinet/sctp_sysctl.c: sctp: Avoid old-style function defintions Part-of: 2023-04-18 15:28:30 -0400 Nicolas Dufresne * sys/msdk/meson.build: * sys/uvch264/meson.build: * sys/v4l2codecs/meson.build: * sys/va/meson.build: meson: Add a wrap file for libgudev And allow fallback to it. Part-of: 2023-04-19 09:55:14 +0200 Edward Hervey * gst/pcapparse/gstpcapparse.c: * gst/pcapparse/gstpcapparse.h: pcapparse: Add support for Linux "cooked" capture encapsulation v2 See https://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL2.html Part-of: 2023-04-01 09:21:32 -0300 Thibault Saunier * sys/d3d11/gstd3d11deinterlace.cpp: d3d11: Fix typo in interlace mode name in enum Part-of: 2023-04-18 14:55:23 +0300 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: tsdemux: Set number of channels to 2 for dual mono Opus Instead of leaving it at 0, which will then cause caps creation to fail. Part-of: 2023-04-17 11:36:55 +0200 Guillaume Desmottes * ext/dash/gstmpdclient.c: dash: mpdclient: fix divide by 0 if segment has no duration Part-of: 2023-04-17 23:06:54 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Reconfigure resource only when output caps is changed GstD3D11Converter setup is heavy operation since it requires shader compile, GPU resource allocation, some math, mutex, etc. We can avoid it if negotiated caps is not changed. Part-of: 2023-04-14 02:10:35 +0900 Seungha Yang * sys/d3d11/gstd3d11overlay.cpp: * sys/d3d11/gstd3d11overlay.h: * sys/d3d11/meson.build: * sys/d3d11/plugin.cpp: * tests/examples/d3d11/d3d11overlay.cpp: * tests/examples/d3d11/meson.build: d3d11: Add d3d11overlay element Similar to cairooverlay element but this element emits "draw" signal with Direct3D11 render target view, so that an application can render/overlay/blend on the given render target view without any copy operation Part-of: 2023-04-17 21:42:35 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Add "ignore-inactive-pads" property Same as compositor element Part-of: 2023-04-17 21:34:19 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Skip zero alpha input Blending such input is a waste of resource since nothing will be rendered Part-of: 2023-03-20 20:42:41 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/gstmsdkvpp.h: msdkvpp: Enable dynamic capability support Enable dynamic capability support for msdkvpp. The gstmsdkvpp element can create the sink caps and src caps dynamically for different platforms. Part-of: 2023-03-20 20:41:29 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdkvpp: Add function to dynamically create sink caps and src caps We need to create the sink caps and src caps dynamically for different platforms. By default, the vpp init function create static pad template and the compatibility and flexibility of the platform are too poor. Part-of: 2023-03-10 19:03:47 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: * sys/msdk/gstmsdkav1dec.c: * sys/msdk/gstmsdkav1dec.h: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: * sys/msdk/gstmsdkh264dec.c: * sys/msdk/gstmsdkh264dec.h: * sys/msdk/gstmsdkh265dec.c: * sys/msdk/gstmsdkh265dec.h: * sys/msdk/gstmsdkmjpegdec.c: * sys/msdk/gstmsdkmjpegdec.h: * sys/msdk/gstmsdkmpeg2dec.c: * sys/msdk/gstmsdkmpeg2dec.h: * sys/msdk/gstmsdkvc1dec.c: * sys/msdk/gstmsdkvc1dec.h: * sys/msdk/gstmsdkvp8dec.c: * sys/msdk/gstmsdkvp8dec.h: * sys/msdk/gstmsdkvp9dec.c: * sys/msdk/gstmsdkvp9dec.h: msdkdec: Enable dynamic capability support Enable dynamic capability support for msdkav1dec, msdkh264dec, msdkh265dec, msdkmjpegdec, msdkmpeg2dec, msdkvc1dec, msdkvp8dec, msdkvp9dec. The gstmsdkdec elements can create the sink caps and src caps dynamically for different platforms. Part-of: 2023-03-10 16:32:03 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdkdec: Add function to dynamically create sink caps and src caps We need to create the sink caps and src caps dynamically for different platforms. By default, the dec init function create static pad template and the compatibility and flexibility of the platform are too poor. Part-of: 2023-03-06 19:45:06 +0800 Yinhang Liu * sys/msdk/gstmsdkav1enc.c: * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkmjpegenc.c: * sys/msdk/gstmsdkmpeg2enc.c: * sys/msdk/gstmsdkvp9enc.c: msdkenc: Add documented capabilities to expose "stable" caps Although msdkenc supports dynamic caps, it still needs to expose "stable" caps to users. Part-of: 2023-02-22 10:41:40 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: msdkenc: Support image formats in low power mode for sink caps There are some special image formats in low power mode, these image formats should be supported in sink caps. Part-of: 2023-02-23 13:20:28 +0800 Yinhang Liu * sys/msdk/gstmsdkav1enc.c: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkmpeg2enc.c: * sys/msdk/gstmsdkvp9enc.c: msdkenc: Remove static templates in format setting The elements have supported dynamic capability query, and it is not necessary to refer the static templates. Part-of: 2023-02-22 16:46:23 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: * sys/msdk/gstmsdkav1enc.c: * sys/msdk/gstmsdkav1enc.h: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: * sys/msdk/gstmsdkh264enc.c: * sys/msdk/gstmsdkh264enc.h: * sys/msdk/gstmsdkh265enc.c: * sys/msdk/gstmsdkh265enc.h: * sys/msdk/gstmsdkmjpegenc.c: * sys/msdk/gstmsdkmjpegenc.h: * sys/msdk/gstmsdkmpeg2enc.c: * sys/msdk/gstmsdkmpeg2enc.h: * sys/msdk/gstmsdkvp9enc.c: * sys/msdk/gstmsdkvp9enc.h: msdkenc: Enable dynamic capability support Enable dynamic capability support for msdkav1enc, msdkh264enc, msdkh265enc, msdkmjpegenc, msdkvp9enc, msdkmpeg2enc. The gstmsdkenc elements can create the sink caps and src caps dynamically for different platforms. Part-of: 2023-02-23 16:33:42 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdk: Add function to specify string array parameters Sometimes it is necessary to manually specify string parameters of multiple options, such as format, interlace-mode, etc. Add function to support this requirment. Part-of: 2023-02-22 10:30:57 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: msdkenc: Add function to dynamically create sink caps and src caps We need to create the sink caps and src caps dynamically for different platforms. By default, the enc init function create static pad template and the compatibility and flexibility of the platform are too poor. Part-of: 2022-11-15 18:08:12 +0800 Yinhang Liu * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: add function to get the format list This static format list will be used to check the formats supported by the platform. Part-of: 2023-02-22 10:24:12 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: msdk: Register elements based on the codecs supported by the platform By default, msdk plugin will register all encoders and decoders on any platform, even unsupported encoders and decoders will be registered. Dynamically register encoders and decoders besed on the supported codecs on different platforms. Part-of: 2023-02-22 10:23:00 +0800 Yinhang Liu * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: Add function to get the implementation description Through the implementation description, we can dynamically obtain the codec capabilities supported by the platform. Part-of: 2023-04-07 14:26:55 +0800 Yinhang Liu * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkcontext.h: msdk: Add functions to get data members from MsdkSession When getting mfxImplDescription, these data members need to be used. Part-of: 2023-04-07 14:09:40 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkcontext.h: * sys/msdk/gstmsdkcontextutil.c: * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: Create msdk context without job_type The job_type is not necessary when creating a normal msdk context. Make the APIs for creating context more flexible. Part-of: 2023-02-22 10:26:38 +0800 Yinhang Liu * sys/msdk/gstmsdkcaps.c: * sys/msdk/gstmsdkcaps.h: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: * sys/msdk/gstmsdkvpp.c: * sys/msdk/meson.build: msdk: Move all _gst_caps_has_feature to gstmsdkcaps.c _gst_caps_has_feature is used by all msdk elements, so move it to gstmsdkcaps.c Part-of: 2023-04-13 01:10:42 +0200 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: * ext/srt/gstsrtsink.c: * ext/srt/gstsrtsrc.c: docs: mark GstSRTSink and GstSRTSrc as plugin API Part-of: 2023-04-13 04:42:52 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Remove pointless GetDC call We don't use the Win32 device context handle at all. Removing code which was copied from GL code blindly in early d3d11 implementation stage a long time ago Part-of: 2018-07-19 17:21:22 +0200 Michael Olbrich * ext/srtp/gstsrtpdec.c: srtpdec: fix "srtp-key" check The original code was: if (!gst_structure_get (s, "srtp-key", GST_TYPE_BUFFER, &buf, NULL) || !buf) { goto error; } else { stream->key = buf; } So use "srtp-key" if it is set so a non NULL buffer. The condition was incorrectly inverted in ad7ffe64a66ab48d81671651031c449149db4973 to: if (gst_structure_get (s, "srtp-key", GST_TYPE_BUFFER, &buf, NULL) || !buf) { stream->key = buf; } ... Fix the condition so it works as originally intended and avoid accessing 'buf' uninitialised. Part-of: 2022-11-08 19:24:25 +0900 Seungha Yang * gst/sdp/gstsdpdemux.c: * gst/sdp/gstsdpdemux.h: * tests/check/elements/sdpdemux.c: * tests/check/meson.build: sdpdemux: Add support for RFC4570 SDP source filters Parse source-filter attributes and configure udpsrc accordingly Part-of: 2023-04-04 17:50:39 -0400 Thibault Saunier * gst/codectimestamper/gstcodectimestamper.c: * gst/codectimestamper/gstcodectimestamper.h: * tests/validate/codectimestamper/h264_propagate_caps.validatetest: * tests/validate/codectimestamper/h264_propagate_caps/flow-expectations/log-sink-sink-expected: * tests/validate/meson.build: codectimestamper: Implement QUERY_CAPS support This is required to ensure that downstream restrcitions are also propagated upstream. Part-of: 2023-04-04 17:54:51 -0400 Thibault Saunier * gst/codectimestamper/gstcodectimestamper.c: codectimestamper: Use accept-intersect and accept-template caps We should behave similarly to video parsers so we can use: - accept-template as we can also accept caps with missing fields. - accept-intersect to do quick check with the pad template caps as it is enough. Users should have figured the appropriate full caps on a previous caps query Part-of: 2023-04-12 02:17:14 +0900 Seungha Yang * ext/closedcaption/gstcea608mux.c: cea608mux: Add support for seeking The "start_time" should be cleared per flush in order to apply new offset time to each output buffer. Also, input running time must be compared with output running time, not output position. Part-of: 2023-04-12 02:46:15 +0900 Seungha Yang * ext/closedcaption/gstcea608mux.c: cea608mux: Implement GstAggregator::clip Drop buffers if it's outside of segment Part-of: 2022-12-01 15:25:59 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkcontext.h: msdkcontext: Remove unused codes in msdkcontext We don't maintain three list (i.e. avail, locked and used) surfaces as the old way did to achieve memory management, so remove the correcponding codes for old memory management. Part-of: 2022-12-01 15:15:27 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkav1dec.c: * sys/msdk/gstmsdkbufferpool.c: * sys/msdk/gstmsdkbufferpool.h: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkh265dec.c: * sys/msdk/gstmsdkmjpegdec.c: * sys/msdk/gstmsdksystemmemory.c: * sys/msdk/gstmsdksystemmemory.h: * sys/msdk/gstmsdkvideomemory.c: * sys/msdk/gstmsdkvideomemory.h: * sys/msdk/gstmsdkvp9dec.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/meson.build: * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: Remove unused gstmsdkbufferpool and memory GstMsdkBufferPool, GstMsdkVideoMemory and GstMsdkSystemMemory are no longer used in msdk plugins, instead we use va/d3d11 pool for memory allocation. So, remove the codes of unused stuffs. Part-of: 2022-12-01 14:53:21 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdk: Remove the func gst_msdk_is_msdk_buffer Since we use va/d3d11 pool to allocate memory, the old msdk bufferpool stuffs are not used anymore, so we don't need to check if an input buffer is msdk buffer using gst_msdk_is_msdk_buffer. Part-of: 2023-04-10 20:10:50 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth264picture.c: h264decoder: Enable low-latency bumping in case of pic_order_cnt_type 2 In case of POC type 2, output order is equal to decoding order (no frame reordering) Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2447 Part-of: 2023-04-06 20:48:17 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth264picture.c: * gst-libs/gst/codecs/gsth264picture.h: h264decoder: Fix for latency report The minimum latency answered by an element should be the maximum latency from the element's perspective. Also consider max_reorder_frames update as a sequence change Part-of: 2023-04-06 20:26:24 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Ignore invalid max_num_reorder_frames in VUI It's not fatal and can be ignored Part-of: 2023-04-06 19:40:12 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Fix for latency report when src caps is not configured Depending on subclass, negotiation might not happen on new_sequence() Fixing regression introduced by the commit 4a4823b9728fbb944e05d89e0fee681ab5b33e25 Part-of: 2023-04-06 19:36:03 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: Fix for latency report when src caps is not configured Depending on subclass, negotiation might not happen on new_sequence() Fixing regression introduced by the commit 4a4823b9728fbb944e05d89e0fee681ab5b33e25 Part-of: 2023-04-10 17:31:29 +0800 Wang Chuan * sys/d3d11/gstd3d11window_win32.cpp: gstd3d11window: fix memory leak GstStructure may leak when using external HWND Part-of: 2023-04-08 23:03:15 +0900 Seungha Yang * sys/amfcodec/gstamfav1enc.cpp: * sys/amfcodec/gstamfencoder.cpp: * sys/amfcodec/gstamfencoder.h: * sys/amfcodec/gstamfh264enc.cpp: * sys/amfcodec/gstamfh265enc.cpp: amfencoder: Set output DTS AMF runtime does not provide correct DTS. Although GetPts() seems to be returning DTS, it still needs to be adjusted to meet DTS <= PTS requirement. Do calculate DTS in baseclass instead Part-of: 2023-02-09 11:12:17 +0100 Evgeny Pavlov * sys/amfcodec/gstamfh264enc.cpp: amfcodec: Add options for B-frames for amfh264enc plugin Part-of: 2023-04-07 22:13:24 +0900 Seungha Yang * sys/decklink/gstdecklinkaudiosink.cpp: decklinkaudiosink: Fix playback when video caps is configured before audio Scheduled playback starts on videosink's state change or on caps but it's possible that audiosink is configure without caps yet. Try start scheduled playback on audiosink's caps event as well Part-of: 2023-01-18 14:42:38 +0000 Dario Marino Saccavino * sys/wasapi2/gstwasapi2client.cpp: * sys/wasapi2/gstwasapi2client.h: * sys/wasapi2/gstwasapi2ringbuffer.cpp: * sys/wasapi2/gstwasapi2ringbuffer.h: * sys/wasapi2/gstwasapi2src.c: * sys/wasapi2/gstwasapi2util.h: wasapi2: Add option to monitor loopback device's mute state When loopback recording from a render device, the wasapi2src element captures audio even if the device is muted. This change adds the 'loopback-silence-on-device-mute' property that, when set to `true`, causes wasapi2src to inject silence in the pipeline when the device is muted. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1306 Part-of: 2023-04-04 21:50:01 +1000 Jan Schmidt * gst/mpegdemux/gstmpegdemux.c: * gst/mpegdemux/gstmpegdemux.h: mpegpsdemux: Rework gap sending Take the gap logic from mpegtsdemux, and don't send gap events on a stream that's outputting buffers with no timestamps. Time isn't advancing, but the stream has buffers - so it's not sparse. Fixes #2374 Part-of: 2023-04-05 20:12:06 +0300 Sebastian Dröge * gst-libs/gst/vulkan/gstvkdevice.c: * gst-libs/gst/vulkan/gstvkimagememory.c: * gst-libs/gst/vulkan/gstvkinstance.c: vulkan: Use new GLib APIs as suggested by comments Part-of: 2023-03-23 20:04:49 -0400 Nicolas Dufresne * gst/videoparsers/gsth265parse.c: h265parse: Don't override upstream framerate The framerate should only be replaced (and corrected for alternating field) when it is parsed from the bitstream. Otherwise, the upstream framerate from caps should be trusted and assumed correct. Related to gst-plugins-bad!2020 Part-of: 2023-03-23 20:02:16 -0400 Nicolas Dufresne * gst/videoparsers/gsth265parse.c: * gst/videoparsers/gsth265parse.h: h265parse: Rename parsed_framerate to framerate_from_caps That meaning of parsed_framerate is ambigious, it is set whenever the framerate has been parsed from caps, which can be confused with being parsed from the bitstream. Rename this as framerate_from_caps. Part-of: 2023-04-04 16:41:39 +0200 Edward Hervey * gst/mpegtsdemux/tsdemux.c: tsdemux: Minor refactoring Part-of: 2023-04-04 11:51:43 +0200 Edward Hervey * gst-libs/gst/mpegts/mpegts.h: * gst/mpegtsdemux/tsdemux.c: * tests/examples/mpegts/ts-parser.c: mpegts: Fix include headers is the unique header to use Part-of: 2023-04-04 12:22:31 +0200 Wojciech Kapsa * docs/plugins/gst_plugins_cache.json: * sys/decklink/gstdecklink.cpp: * sys/decklink/gstdecklink.h: * sys/decklink/gstdecklinkvideosink.cpp: * sys/decklink/gstdecklinkvideosrc.cpp: decklink: fix 10 bit RGB (r210) format auto detection Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2391 Part-of: 2023-03-29 03:16:26 +0900 Seungha Yang * sys/d3d11/gstd3d11screencapturesrc.cpp: * sys/d3d11/gstd3d11winrtcapture.cpp: * sys/d3d11/gstd3d11winrtcapture.h: * sys/d3d11/meson.build: d3d11screencapturesrc: Add "window-capture-mode" property ... to support capturing only window's client area Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2425 Part-of: 2023-04-01 01:57:09 +0900 Seungha Yang * ext/closedcaption/gstcea608mux.c: * ext/closedcaption/gstcea608mux.h: cea608mux: Fix output buffer timestamping Don't assume that input stream starts from zero running time. Part-of: 2023-03-27 09:20:27 +0200 Aleksandr Slobodeniuk * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: fix race conditions in win32 window One race condition is the fact that the window object can be destroyed while running some routine in the UI thread (such as resizing). To avoid that situation we make UI thread hold a reference on the window object while it's running. Other probpematic case is when the window handle is reused: if we stop and start the pipeline very fast, so the sink creates a new window object that is going to use the same window handle as the previous one. And finally the case when the pipeline is stopped immediatelly right after starting, this one is also handled in this commit. NOTE: a unit test that reproduces this cases have been added in the previous commit. Part-of: 2023-03-21 18:17:12 +0100 Aleksandr Slobodeniuk * tests/check/elements/d3d11videosink.c: * tests/check/meson.build: d3d11videosink: add gstcheck test for win32 window Part-of: 2023-03-31 17:43:16 +1100 Matthew Waters * gst-libs/gst/vulkan/meson.build: * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c: * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland_private.h: * gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c: * gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.h: vulkan/wayland: use xdg_wm_base when available wl_shell is deprecated and has been removed from some compositors. Part-of: 2023-03-31 16:45:47 +1100 Matthew Waters * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c: vulkan/wayland: provide a dummy registry global_remove function Even if we don't care about any global objects being removed, wayland will still error if globals are removed without a corresponding listener set up for them. e.g. wl_output hotplugging Part-of: 2023-03-31 16:33:58 +1100 Matthew Waters * gst-libs/gst/vulkan/wayland/gstvkwindow_wayland.c: vulkan/wayland: rename debug category to mention wayland instead of XCB Part-of: 2023-04-02 00:29:24 +0900 Seungha Yang * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Enhancement for initial window size decision Use AdjustWindowRect() method to calculate window size so that video scene can be rendered on client area without black borders Part-of: 2023-03-30 10:11:11 +1100 Matthew Waters * ext/closedcaption/gstccconverter.c: ccconverter: reintroduce frame count reset on cycle completion Part-of: 2023-03-31 04:40:58 +0900 Seungha Yang * tools/gst-transcoder.c: tools: Count argc after parsing GOption on Windows Existing codes rely on modified argc value by g_option_context_parse() but g_option_context_parse_strv() is used in case of Windows. Count arguments after the option parsing manually. Fixing command "gst-inspect-1.0.exe -b" Part-of: 2023-03-31 03:57:10 +1100 Brad Hards * gst/mpegtsdemux/tsdemux.c: mpegts: remove stream-type from KLV meta Part-of: 2023-03-30 20:09:59 +1100 Brad Hards * gst/mpegtsdemux/tsdemux.c: mpegts: add support for KLV metadata in PES packets Co-authored-by: Andoni Morales Alastruey Part-of: 2023-03-30 20:06:33 +1100 Brad Hards * gst-libs/gst/mpegts/gst-metadata-descriptor.c: * gst-libs/gst/mpegts/gst-metadata-descriptor.h: * gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.c: * gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.h: * gst-libs/gst/mpegts/gstmpegtsdescriptor.h: * gst-libs/gst/mpegts/meson.build: * gst-libs/gst/mpegts/mpegts.h: * gst/mpegtsdemux/tsdemux.c: * tests/examples/mpegts/ts-parser.c: mpegts: implement metadata in PES packets Co-authored-by: Andoni Morales Alastruey Part-of: 2023-03-29 09:20:52 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/codecs/gsth264picture-private.h: * gst-libs/gst/codecs/gsth264picture.h: gsth254picture: move internal API to private header Part-of: 2023-03-27 13:53:34 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/codecs/gsth264decoder.c: * gst-libs/gst/codecs/gsth264picture-private.h: * gst-libs/gst/codecs/gsth264picture.c: h264decoder: use last_output_poc from DPB It seems that `last_output_poc` in `h264decoder` class is a left over of commit 5527cc4a2e7. This patch removes it but keeps the log message by fetching the `h264picture`'s `last_output_pic`. Part-of: 2023-03-29 12:58:14 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkmemory.c: vkmemory: flush whole size Running element_vkcolorconver test with Vulkan validation layer this error is raised: Code 0 : Validation Error: [ VUID-VkMappedMemoryRange-size-01390 ] Object 0: handle = 0x100000000010, type = VK_OBJECT_TYPE_DEVICE_MEMORY; | MessageID = 0xdd4e6d8b | vkFlushMappedMemoryRanges: Size in pMemRanges[0] is 0x4, which is not a multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize (0x40) and offset + size (0x0 + 0x4 = 0x4) not equal to the memory size (0xb). The Vulkan spec states: If size is not equal to VK_WHOLE_SIZE, size must either be a multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize, or offset plus size must equal the size of memory The reason of is that the image size used in the test doesn't comply hardware restrictions. In order to avoid juggling with image size and hardware restrictions, this patch proposes to use VK_WHOLE_SIZE macro. Part-of: 2023-03-29 12:44:00 +0200 Víctor Manuel Jáquez Leal * tests/check/libs/vkimage.c: tests: vkimage: add VK_IMAGE_USAGE_SAMPLED_BIT usage bit Running tests with Vulkan Validation enabled show an error on vkimage tests: Code 0 : Validation Error: [ VUID-VkImageViewCreateInfo-image-04441 ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0x50000000005, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0xb75da543 | Invalid usage flag for VkImage 0x50000000005[] used by vkCreateImageView(). In this case, VkImage should have VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR | VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM | VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM set during creation. The Vulkan spec states: image must have been created with a usage value containing at least one of the usages defined in the valid image usage list for image views This patch adds VK_IMAGE_USAGE_SAMPLED_BIT to the usage bits in test. Part-of: 2023-03-29 11:04:20 +0200 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkfullscreenquad.c: vkfullscreenquad: set enable_clear as TRUE by default While using the validation layer with this pipeline: gst-launch-1.0 videotestsrc num-buffers=10 ! vulkanupload ! vulkancolorconvert ! vulkansink The validation layer throws this message: Code 0 : Validation Error: [ VUID-VkAttachmentDescription-format-06699 ] Object 0: handle = 0x5555562e9610, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x52b3229e | vkCreateRenderPass: pCreateInfo->pAttachments[0] format is VK_FORMAT_B8G8R8A8_UNORM and loadOp is VK_ATTACHMENT_LOAD_OP_LOAD, but initialLayout is VK_IMAGE_LAYOUT_UNDEFINED. The Vulkan spec states: If format includes a color or depth aspect and loadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then initialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED When creating the render pass the loadOp can be either `VK_ATTACHMENT_LOAD_OP_CLEAR` or `VK_ATTACHMENT_LOAD_OP_LOAD` depending on `enable_clear`. While `enable_clear` is FALSE by default (which means `VK_ATTACHMENT_LOAD_OP_LOAD`). Nonetheless, its value is explicitly changed by `vkoverlaycompositor` to FALSE too! This behavior was introduced in merge request #2470 where `VK_ATTACHMENT_LOAD_OP_CLEAR` was a fixed value for loadOp. Thus, the bug consists in a missing initialization of `enable_clear` to TRUE from that merge request. Part-of: 2023-02-23 14:44:34 +0000 Erik Fröbrant * ext/curl/gstcurlbasesink.c: curlbasesink: error codes in transfer error details There is currently no easy way for an application to distinguish between different resource write errors being set in the curlbasesink. Add curl status codes as error details on transfer failure. Part-of: 2023-02-23 14:26:27 +0000 Erik Fröbrant * ext/curl/gstcurlhttpsink.c: curlhttpsink: HTTP code in transfer error details There is currently no easy way for an application to distinguish between different resource write errors being set in the curlhttpsink. Add HTTP status code as error details on transfer failure. Part-of: 2023-03-27 16:28:04 +1100 Matthew Waters * gst-libs/gst/vulkan/gstvkswapper.c: vulkanswapper: correctly handle force-aspect-ratio=false It was simply ignored so actually handle it. Part-of: 2023-03-26 16:49:32 +0100 Tim-Philipp Müller * ext/qroverlay/gstdebugqroverlay.c: debugqroverlay: fix string leak g_string_free(.., FALSE) gives us ownership of the string already, no need to duplicate that again with g_strdup(), and doing so will leak the string returned by g_string_free() here. Caught by compiler warnings in newer GLib versions. Part-of: 2023-03-26 16:40:28 +0100 Tim-Philipp Müller * ext/teletextdec/gstteletextdec.c: * sys/winks/gstksvideodevice.c: * sys/winks/kshelpers.c: * tools/gst-app-maker: taglist, plugins: fix compiler warnings with GLib >= 2.76 Fix compiler warnings about not using the return value when freeing the GString segment with g_string_free(.., FALSE): ignoring return value of ‘g_string_free_and_steal’ declared with attribute ‘warn_unused_result’ which we get with newer GLib versions. These were all harmless. Part-of: 2023-03-19 18:26:56 +0200 Sebastian Dröge * ext/aom/gstav1enc.c: * ext/aom/gstav1enc.h: * ext/aom/meson.build: av1enc: Use correct enum type with libaom >= 3 This fixes, among other things, a compiler warning with clang. Also add static assertions that our own enum values match with the ones from libaom. Part-of: 2023-02-13 12:05:27 +0100 Stéphane Cerveau * ext/openjpeg/gstopenjpegdec.c: openjpegdec: allow multithread decoding only in subframe mode To avoid mis-ordered frames, allow multithread decoding only in subframe mode. Fixes #1786 Part-of: 2023-03-24 20:39:42 +0100 Mathieu Duponchelle * ext/closedcaption/gstcea608mux.c: cea608mux: advance segment->position when outputting It is the responsibility of the subclass to advance segment->position if it wants to rely on gst_aggregator_simple_get_next_time() for timeouts in live mode. Part-of: 2023-03-24 12:46:55 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvaencoder.c: * sys/va/gstvaencoder.h: vaencoder: remove display reference in decode picture Since it's possible to grab the VA display from the GstBuffer and GstMemory, there's no need to keep a reference to it in GstVaEncodePicture. Part-of: 2022-09-22 18:53:30 +0200 Víctor Manuel Jáquez Leal * sys/va/gstvadecoder.c: * sys/va/gstvadecoder.h: vadecoder: remove display reference in decode picture Since it's possible to grab the VA display from the GstBuffer and GstMemory, there's no need to keep a reference to it in GstVaDecodePicture. Part-of: 2023-03-20 17:12:31 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkinstance.c: vkinstance: register GStreamer version as engine version Specification says: """ engineVersion is an unsigned integer variable containing the developer-supplied version number of the engine used to create the application. """ Assuming the engine is GStreamer, it would be expected to set its version as engine version. Part-of: 2023-03-24 00:23:42 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11bufferpool.cpp: d3d11bufferpool: Fix invalid access in debug print loop Add missing condition check in for loop Part-of: 2023-03-21 21:04:14 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkinstance.c: vkinstance: enable GPU assisted validation This allows to check for syncronization issues while using the validation layer. https://vulkan.lunarg.com/doc/sdk/1.3.239.0/linux/synchronization_usage.html Part-of: 2023-03-10 17:37:46 +1100 Matthew Waters * docs/plugins/gst_plugins_cache.json: * ext/vulkan/vkoverlaycompositor.c: vulkanoverlaycompositor: also support RGBA vulkan images Part-of: 2023-03-16 14:21:21 +0200 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: mpegtsdemux: Fix handling of explicit Opus channel mapping Part-of: 2023-03-16 14:05:43 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * gst/mpegtsmux/gstbasetsmux.c: * gst/mpegtsmux/gstmpegtsmux.c: * gst/mpegtsmux/tsmux/tsmuxstream.c: * gst/mpegtsmux/tsmux/tsmuxstream.h: mpegtsmux: Allow writing arbitrary Opus channel mapping families and up to 255 channels And fix writing of dual-mono special cases. Part-of: 2022-12-07 14:30:23 +0000 Stéphane Cerveau * gst-libs/gst/vulkan/win32/gstvkwindow_win32.c: vulkan: gl: change symbols to static Change window_proc and subclass_proc to static to avoid symbols duplication. Part-of: 2022-12-07 12:13:24 +0000 Stéphane Cerveau * sys/directshow/gstdshow.cpp: * sys/mediafoundation/gstmfcapturedshow.cpp: sys: avoid double definition of symbol MEDIASUBTYPE_I420 Namespace the symbol MEDIASUBTYPE_I420 to avoid double definition across dshow and mediafoundation plugins. Part-of: 2023-03-21 20:06:12 +0900 Seungha Yang * sys/nvcodec/gstnvh264encoder.cpp: nvh264encoder: Fix template caps It should include progressive as well Part-of: 2023-03-21 14:59:52 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkfence.c: * gst-libs/gst/vulkan/gstvkinstance.c: * gst-libs/gst/vulkan/gstvkqueue.c: * gst-libs/gst/vulkan/gstvkutils.c: vulkan: silence gobject-instrospection warnings According with gi annotations [1] the "optional" annotation must be only for (out) or (inout) parameters. 1. https://gi.readthedocs.io/en/latest/annotations/giannotations.html Part-of: 2022-11-24 11:12:14 +0800 Tong Wu * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: delete use_video_memory Since msdkdec uses video pool as the output buffer pool at all time. The use_video_memory variable is not useful anymore. Now delete it. Part-of: 2022-11-24 11:00:15 +0800 Tong Wu * sys/msdk/gstmsdkdec.c: msdkdec: expand retry times to 1s One-frame sleep time is not enough to wait until there is a surface unlocked from downstream. Now expand it to 1s and add a return when fail. Part-of: 2022-11-17 10:41:10 +0800 Tong Wu * sys/msdk/gstmsdkallocator_d3d.c: msdkallocator_d3d: add gst_msdk_frame_free callback function Part-of: 2022-11-17 10:37:05 +0800 Tong Wu * sys/msdk/gstmsdkdec.c: msdkdec: acquire buffer from video pool on Windows Video memory is available on Windows. This patch is to make the buffers acquired from d3d11 video pool. Part-of: 2022-11-17 10:29:55 +0800 Tong Wu * sys/msdk/gstmsdkdec.c: msdkdec: add thiz->ds_has_known_allocator for d3d11 Part-of: 2022-10-26 10:32:10 +0800 Tong Wu * sys/msdk/gstmsdkallocator_d3d.c: msdkallocator_d3d: add alloc callback function for d3d allocator Part-of: 2022-10-19 15:01:44 +0800 Tong Wu * sys/msdk/gstmsdkdec.c: msdkdec: add d3d11 pool during negotiation Enable use_video_memory for Windows and add d3d11 pool. Part-of: 2022-10-18 18:46:52 +0800 Tong Wu * sys/msdk/gstmsdkav1dec.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkh264dec.c: * sys/msdk/gstmsdkh265dec.c: * sys/msdk/gstmsdkmjpegdec.c: * sys/msdk/gstmsdkvp9dec.c: msdkdec: add d3d11 caps for srcpad Set decoder srcpad with D3D11Memory. Part-of: 2023-03-16 22:13:40 +0100 Aleksandr Slobodeniuk * gst-libs/gst/d3d11/gstd3d11converter.cpp: * gst-libs/gst/d3d11/gstd3d11converter.h: * sys/d3d11/gstd3d11convert.cpp: d3d11convert: add "method" property It allows to select the sampling method, same as "method" property of videoconvert. Part-of: 2023-03-17 20:44:30 +0100 Aleksandr Slobodeniuk * sys/d3d11/gstd3d11convert.cpp: d3d11convert: protect 'add-borders' with mutex Part-of: 2023-03-20 17:44:23 +0000 Colin Kinloch * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Fix crash when rendering after the window is closed Continuation of https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4197 Part-of: 2023-03-09 17:18:16 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkvpp.c: msdkvpp: Pass null formats when create va allocator for RGB565 Fix https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1780 Part-of: 2023-03-16 17:50:39 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/va/gstvadisplay.c: * sys/va/gstvapluginutils.c: va: add driver description in element metadata In the same spirit of libva-win32 elements this patch shows the driver of each element in gst-inspect, giving more information to the user. This driver description is parsed from vaQueryVendorString from mesa and intel drivers, while copied as is for others. Also appends the render node for multi gpu systems. Fixes #2349 Part-of: 2023-03-20 11:20:30 +0100 Edward Hervey * ext/openjpeg/gstopenjpegdec.c: * ext/openjpeg/gstopenjpegdec.h: * gst-libs/gst/adaptivedemux/gstadaptivedemux.c: plugins: Fix wrong enum usage gcc 13 now detects conflicting enum usages. Fix the various cases where it was wrong Part-of: 2023-03-19 21:21:31 +0100 Adrien De Coninck * sys/winks/ksdeviceprovider.c: ksdeviceprovider: Fix leak in gst_dshow_device_provider_start Part-of: 2023-03-19 20:57:18 +0100 Adrien De Coninck * sys/directshow/dshowdeviceprovider.cpp: dshowdeviceprovider: Fix leak in gst_dshow_device_provider_start Part-of: 2023-03-18 20:23:10 +0900 Seungha Yang * sys/va/gstvabasedec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: va: Return default device from device-path property getter Otherwise application would not be able to know matching element for wanted device. Typical use case of the read-only device path (DXGI Adapter LUID, CUDA device index, etc) property is that application enumerates physical devices and then selects matching GStreamer element (in null state) via device path property. Part-of: 2023-03-17 16:32:45 +0200 Sebastian Dröge * ext/bs2b/gstbs2b.c: * ext/bs2b/gstbs2b.h: * ext/openal/gstopenal.c: * gst/mxf/mxfmetadata.c: * sys/v4l2codecs/gstv4l2codech264dec.c: plugins: Fix various trivial clang compiler warnings Part-of: 2023-03-17 15:51:53 +0200 Sebastian Dröge * gst/mpegtsdemux/tsdemux.c: tsdemux: Fix reading of extended Opus channel configuration Argument evaluation order is implementation defined in C, and gcc is evaluating right-to-left (works) while clang is evaluating left-to-right (does not work). Part-of: 2023-03-17 23:28:58 +0900 Seungha Yang * gst-libs/gst/codecs/gsth264picture.c: h264decoder: Fix DPB bumping process As per spec C.4.5.3 "Bumping", if bumping is needed but DPB holds no "output needed" picture, then a picture that has the smallest POC should be considered first for output Part-of: 2023-03-15 15:55:02 -0400 Nicolas Dufresne * gst/videoparsers/gsth264parse.c: h264parse: Stop considering NO_NAL as an error The NO_NAL return value simply means that the buffer did not contain enough data to identity a NAL. This should lead to waiting for more data not considering the stream as invalid. Part-of: 2022-10-20 15:07:15 -0400 Nicolas Dufresne * tests/check/libs/h265parser.c: test: h265parser: Test for NAL missing header bytes H.265 NAL always have 2 bytes of headers. Unlike the H.264 parser, this parser will simply return that there is NO_NAL if some of these bytes are missing. This is then properly special cased by parsers and decoders. Add a test to ensure we don't break this in the future. Part-of: 2022-10-20 11:21:00 -0400 Nicolas Dufresne * gst-libs/gst/codecparsers/gsth264parser.c: * tests/check/libs/h264parser.c: h264parser: Fix return value parsing short header The appropriate return value for incomplete NAL header should be GST_H264_PARSER_NO_NAL_END. This tells the parser element to gather more data. Previously, it would assume the NAL is corrupted and would drop the data, potentially causing stream corruption. Part-of: 2023-03-18 01:33:20 +0900 Seungha Yang * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Fix CQP option setting ... and zero initialize LUID and CUDA device list to address coverity issue Part-of: 2023-03-16 13:33:46 +0100 Albert Sjölund * gst-libs/gst/webrtc/nice/nicestream.c: webrtc: Fix segfault traversing ice transports Previously, reassigning loop index l in nicestream.c could cause a segfault if l->data was null, as it could reassign l to a null variable, triggering the loop postassignment l->next, which then segfaults due to l now being null. It is instead moved into the loop. _delete_transport already performs the reassignment inline. Part-of: 2023-03-16 16:02:26 +0000 Colin Kinloch * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Destroy GstWlWindow when parent GtkWindow is destroyed Part-of: 2023-03-15 18:54:13 +0000 Tim-Philipp Müller * ext/avtp/gstavtpcrfutil.c: * ext/closedcaption/bit_slicer.c: * ext/closedcaption/io-sim.c: * ext/closedcaption/raw_decoder.c: * ext/closedcaption/sampling_par.c: * ext/dash/gstdashdemux.c: * ext/dtls/gstdtlsconnection.c: * ext/hls/gsthlsdemux.c: * ext/kate/gstkatespu.c: * ext/lv2/gstlv2.c: * ext/openal/gstopenalsink.c: * ext/resindvd/resindvdsrc.c: * ext/vulkan/vkviewconvert.c: * ext/x265/gstx265enc.c: * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gstmpegvideoparser.c: * gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c: * gst-libs/gst/wayland/gstwlcontext.c: * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwlwindow.c: * gst/dvbsubenc/libimagequant/libimagequant.c: * gst/dvbsubenc/libimagequant/mempool.c: * gst/dvbsubenc/libimagequant/pam.c: * gst/dvdspu/gstspu-pgs.c: * gst/fieldanalysis/gstfieldanalysis.c: * gst/id3tag/id3tag.c: * gst/interlace/gstinterlace.c: * gst/jp2kdecimator/jp2kcodestream.c: * gst/mpegtsdemux/mpegtsbase.c: * gst/mxf/mxfaes-bwf.c: * gst/mxf/mxfdemux.c: * gst/mxf/mxfmetadata.c: * gst/mxf/mxfup.c: * gst/removesilence/vad_private.c: * gst/rtmp2/rtmp/amf.c: * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gstmpegvideoparse.c: * gst/videoparsers/gstvc1parse.c: * sys/androidmedia/gst-android-graphics-imageformat.c: * sys/androidmedia/gst-android-hardware-camera.c: * sys/androidmedia/gst-android-hardware-sensor.c: * sys/androidmedia/gstamc.c: * sys/androidmedia/gstamcaudiodec.c: * sys/androidmedia/gstamcvideodec.c: * sys/androidmedia/gstamcvideoenc.c: * sys/applemedia/vtenc.c: * sys/d3dvideosink/d3dhelpers.c: * sys/msdk/gstmsdkvpp.c: * sys/v4l2codecs/gstv4l2decoder.c: * sys/wasapi/gstwasapiutil.c: * tests/check/elements/avtpcrfsync.c: * tests/check/elements/avwait.c: * tests/check/elements/kate.c: * tests/check/elements/pnm.c: * tests/check/libs/play.c: * tests/check/pipelines/ipcpipeline.c: * tests/examples/d3d11/d3d11videosink.c: gst-plugins-bad: re-indent with GNU indent 2.2.12 Part-of: 2023-03-16 23:09:53 +0900 Seungha Yang * sys/wasapi2/gstwasapi2client.cpp: wasapi2: Fix potential crash on device activation failure The activation object is live in COM thread already and therefore self refcount hack is pointless. Part-of: 2023-03-16 13:25:39 +0100 Albert Sjölund * ext/webrtc/webrtcdatachannel.c: webrtc: patch leak caused by early return In webrtc_data_channel_send functions, both data and string, an early return on a non-open datachannel caused it to leak the buffer used for pushing to appsrc, meaning any buffer sent after leaving the open state was leaked in full. Part-of: 2023-03-16 00:53:31 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11converter.cpp: d3d11converter: Fix conversion backend selection Intended behavior was selecting video processor only if pixel shader is disabled, since we prefer shader over video processor Part-of: 2023-03-15 22:05:33 +0900 Seungha Yang * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11window.h: d3d11videosink: Fix tearing in case of fullscreen mode DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING and DXGI_PRESENT_ALLOW_TEARING should be used only if required, when user wants Vsync off for example. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2376 Part-of: 2022-11-28 09:00:27 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: waylandsink: Add a comment about dmabuf without feature The code does not make it obvious that dmabuf is still supported without the feature. This documents that it is supported, but only for formats that are also support by SHM interface. Part-of: 2022-11-28 08:59:54 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: waylandsink: Remove unused instance member use_dmabuf is set but never used. Part-of: 2023-03-14 14:05:36 +0800 Teng, Jin Chung * sys/msdk/gstmsdkenc.c: msdkh264enc: Adding BGRx format DMABuf support Part-of: 2023-03-14 22:08:54 +0900 Seungha Yang * sys/d3d11/gstd3d11compositor.cpp: d3d11compositor: Fix composition error on release_pad() Composition might be still in progress while it's being released Part-of: 2023-03-11 01:58:01 +0900 Seungha Yang * gst-libs/gst/va/gstvadisplay_win32.cpp: vadisplay_win32: Query profiles and entry points on init Depending on driver, display can be initialized but fails on query calls. Part-of: 2023-03-10 00:24:46 +0900 Seungha Yang * sys/va/plugin.c: va: Don't error out on plugin registration Keep enumerate devices and don't return FALSE on plugin_init() Part-of: 2023-03-09 09:14:47 +0530 Nirbheek Chauhan * sys/applemedia/helpers.c: * sys/applemedia/helpers.h: * sys/applemedia/vtdec.c: * sys/applemedia/vtenc.c: * sys/applemedia/vtutil.h: applemedia: Consolidate GstVideoFormat <-> CVPixelFormat conversion In the process we have changed the color value range from video-range to full-range, which is probably what people want in the first place. Part-of: 2023-02-17 12:10:25 -0500 Nicolas Dufresne * docs/plugins/gst_plugins_cache.json: bad: Update doc cache for waylandsink changes A new drm-device property has been added. Part-of: 2023-02-16 16:21:33 -0500 Colin Kinloch * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: wayladnsink: Add DRM Dumb allocator support If the input is not a DMABuf, attempt to copy into a DRM Dumb buffer and import it has a DMABuf. This will offload the compositor from actually doing this copy (needed to handle SHM) and may allow the software decoded stream to be rendered to an HW layer, or even reach through some better accelerated GL import path. Part-of: 2023-02-16 15:40:21 -0500 Colin Kinloch * gst-libs/gst/wayland/gstwlvideobufferpool.c: * gst-libs/gst/wayland/gstwlvideobufferpool.h: wlvideobufferpool: Add DRM Dumb buffer support This allow the wayland buffer pool to use a GstDRMDumbAllocator if it has been configured to do so. Part-of: 2023-02-17 09:42:42 -0500 Nicolas Dufresne * gst-libs/gst/wayland/gstwldisplay.c: * gst-libs/gst/wayland/gstwllinuxdmabuf.c: * gst-libs/gst/wayland/gstwlvideoformat.c: * gst-libs/gst/wayland/gstwlvideoformat.h: wlvideoformat: Fix sign issue for DRM fourcc DRM fourcc ared defined as 32bit unsigned in, but the format helper was passing an int, while using a unsigned int internally. This is a API/ABI break, but the API is still unstable. Part-of: 2023-02-16 21:12:08 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * gst-libs/gst/wayland/gstwllinuxdmabuf.c: wllinuxdmabuf: Handle video meta inside the importer This allow simplifying the GstVideoInfo handling in the sinks. Instead of having to update a video info for the import, the sink can simply pass the video info associated with the caps and rely on the VideoMeta in the GstBuffer to obtain the appropriate offset and stride. Part-of: 2023-02-16 14:31:10 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Fix display/wl_window/pool leaks These were leaked in the GTK implementation of the sink. Part-of: 2023-02-16 13:54:42 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: * ext/wayland/gstwaylandsink.h: waylandsink: Refactor internal pool handling This is to make it easier to support more then one allocators including falling back from one to another. Part-of: 2023-02-15 13:11:36 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: waylandsink: Let the baseclass know when frames are dropped This is using the new GST_BASE_SINK_FLOW_DROPPED return value. With this change, fpsdisplaysink will properly report the render and dropped rate. Part-of: 2023-02-15 12:34:27 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Force a redraw on resolution change As we don't render into the widget directly, there is no "initial" draw happening. As a side effect, the internal aspect ratio adapted display width/height is never initialize leading to assertions when handling navigation events. gst_video_center_rect: assertion 'src->h != 0' failed Simply queue a redraw after setting the widget format in order to fix the issue. Part-of: 2023-02-15 12:13:16 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: * ext/wayland/gstwaylandsink.c: waylandsink: Stop modifying the display GstVideoInfo The video_info is supposed to match the display dimentions, but as soon as we get a padded video buffer, we modify it. This has side effect later on and maybe cause bad frames. Part-of: 2023-02-15 11:49:38 -0500 Nicolas Dufresne * ext/gtk/gstgtkwaylandsink.c: gtkwaylandsink: Remove redefine of GST_CAPS_FEATURE_MEMORY_DMABUF Instead just include the appropriate header file. There is no meson deps modification as gstallocators_dep is already part of gstwayland_dep. Part-of: 2023-02-10 15:05:17 -0500 Nicolas Dufresne * sys/kms/gstkmsallocator.c: * sys/kms/gstkmsallocator.h: kmsallocator: Port to the new DRM Dumb Allocator This ports the KMS allocator to use the DRM Dumb allocator from the allocators library. Part-of: 2023-03-11 14:59:58 +0200 Sebastian Dröge * sys/androidmedia/gstamc.c: * sys/androidmedia/gstamcvideodec.c: * sys/androidmedia/gstamcvideoenc.c: androidmedia: Add support for AV1 Part-of: 2023-03-10 22:21:42 +0100 Alicia Boya García * gst-libs/gst/cuda/gstcudaloader.cpp: cudaloader: Initialize logging category gstcudaloader.cpp defines GST_DEBUG_CATEGORY (gst_cudaloader_debug); but it wasn't initializing it anywhere. This caused the following error to be logged by gst-plugin-scanner when libcuda.so.1/nvcuda.dll couldn't be loaded, e.g. in systems without CUDA: (gst-plugin-scanner:39618): GStreamer-CRITICAL **: 14:40:22.346: gst_debug_log_full_valist: assertion 'category != NULL' failed This patch fixes the bug by initializing the category in gst_cuda_load_library_once_func() before any logging occurs. Part-of: 2023-03-09 05:55:28 +0530 Nirbheek Chauhan * sys/applemedia/avfvideosrc.m: avfvideosrc: GL texture cache also supports YUY2 on macOS BGRA gives black frames, and everything else fails to negotiate. Part-of: 2023-03-08 01:06:10 +0530 Nirbheek Chauhan * sys/applemedia/avfvideosrc.m: * sys/applemedia/helpers.c: * sys/applemedia/helpers.h: * sys/applemedia/meson.build: avfvideosrc: Use frame duration instead of frame rate These days you're can use minFrameDuration and maxFrameDuration which are CMTime with fractional values. That way we don't need to convert between double and fractions in a really weird way. This fixes really odd fractional values exposed in caps, like: 2000000/76923, 1000000/37037, 5000000/178571, 10000000/344827, 10000000/333333 Which are actually just 26/1, 27/1, 28/1, 29/1, 30/1 We can also delete a lot of outdated code for iOS versions older than 7.0 by using newer APIs. Part-of: 2023-03-08 22:54:35 +0900 Seungha Yang * sys/va/gstvabasedec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: * sys/va/gstvapluginutils.h: va: Update "device-path" property description for Windows DRM does not make sense on Windows Part-of: 2023-03-08 22:44:42 +0900 Seungha Yang * sys/va/gstvaav1dec.c: * sys/va/gstvabasedec.h: * sys/va/gstvacompositor.c: * sys/va/gstvadeinterlace.c: * sys/va/gstvah264dec.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265dec.c: * sys/va/gstvah265enc.c: * sys/va/gstvajpegdec.c: * sys/va/gstvampeg2dec.c: * sys/va/gstvapluginutils.c: * sys/va/gstvapluginutils.h: * sys/va/gstvavp8dec.c: * sys/va/gstvavp9dec.c: * sys/va/gstvavpp.c: * sys/va/meson.build: va: Add Windows specific element type/feature naming support Adapter LUID will be changed per boot. Use different naming rule on Windows Part-of: 2023-03-04 04:37:06 +0900 Seungha Yang * sys/va/gstvabasedec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvacompositor.c: * sys/va/gstvadeinterlace.c: * sys/va/gstvadevice_linux.c: * sys/va/gstvadevice_win32.cpp: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvapluginutils.h: * sys/va/gstvavpp.c: * sys/va/meson.build: * sys/va/plugin.c: va: Add support for Win32 backend Part-of: 2023-03-04 04:12:13 +0900 Seungha Yang * gst-libs/gst/va/gstva.h: * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvadisplay.h: * gst-libs/gst/va/gstvadisplay_drm.c: * gst-libs/gst/va/gstvadisplay_win32.cpp: * gst-libs/gst/va/gstvadisplay_win32.h: * gst-libs/gst/va/gstvautils.c: * gst-libs/gst/va/meson.build: va: Add Win32 backend GstVaDisplay implementation ... and disable derived image on Windows which does not seem to work Closes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1750 Part-of: 2023-03-07 01:16:26 +0900 Seungha Yang * sys/va/gstvadecoder.c: * sys/va/gstvaencoder.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: va: Drop all GSlice bits Part-of: 2023-03-10 12:46:34 +0000 Tim-Philipp Müller * ext/webrtc/gstwebrtcbin.c: * gst-libs/gst/webrtc/ice.c: webrtc: fix g-i annotations for allow-none 'allow none' doesn't exist, and 'allow-none' is now deprecated. Part-of: 2023-01-07 16:18:03 +0100 Antonio Rojas * ext/zxing/gstzxing.cpp: zxing: add support for zxing-c++ 2.0 format is a C++ string in 2.0 Part-of: 2023-03-10 16:47:17 +1100 Matthew Waters * ext/vulkan/vkoverlaycompositor.c: vulkanoverlaycompositor: don't do a potential use after free Removing a meta from a buffer means one doesn't have access to it anymore. Instead use the already reffed composition directly. Fixes a use-after-free in the following pipeline: ... ! vulkanupload ! timeoverlay ! vulkanoverlaycompositor ! ... Part-of: 2023-03-09 18:03:42 +1100 Matthew Waters * ext/closedcaption/gstcea708decoder.c: cea708overlay: support multiple service blocks in the same dtvcc packet Part-of: 2023-03-09 14:38:13 +1100 Matthew Waters * ext/closedcaption/gstcea708decoder.c: cea708overlay: fix HCR interpretation An unsigned counter with a for (i = end; i >= 0; i--), can be optimized to infinite loop as an unsigned value will always be >= 0. Part-of: 2023-03-07 23:46:50 +0900 Seungha Yang * gst/videoparsers/gsth264parse.c: * gst/videoparsers/gsth264parse.h: h264parse: Validate VUI framerate A few streams contain invalid/wrong framerate in VUI. Do validate it based on the spec and ignore invalid VUI framerate values. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1753 Part-of: 2023-03-07 17:44:58 +1100 Matthew Waters * ext/closedcaption/ccutils.c: * tests/check/elements/cccombiner.c: cccombiner: fix output-padding=false for a cea608 field 1 only stream If we have data that needs outputting but we have to output padding to meet the alternating field requirements of cea608, then output that padding anyway. Also includes a test Part-of: 2023-03-07 15:39:04 +0100 Mathieu Duponchelle * ext/closedcaption/gstccconverter.c: * tests/check/elements/ccconverter.c: ccconverter: implement field conversion of CEA 608 control codes As specified in EIA/CEA-608-B section 8.4: When closed captioning is used on line 21, field 2, it shall conform to all of the applicable specifications and recommended practices as defined for field 1 services with the following differences: a) The non-printing character of the miscellaneous control-character pairs that fall in the range of 14h, 20h to 14h, 2Fh in field 1, shall be replaced with 15h, 20h to 15h, 2Fh when used in field 2. b) The non-printing character of the miscellaneous control-character pairs that fall in the range of 1Ch, 20h to 1Ch, 2Fh in field 1, shall be replaced with 1Dh, 20h to 1Dh, 2Fh when used in field 2. This means simply switching the "field" field in the caps isn't enough for converting raw 608 from one field to another, some control codes also need to be amended. + Adds simple test Part-of: 2023-03-05 20:15:19 +0900 Seungha Yang * sys/va/gstvavp8dec.c: vavp8dec: Fix return type of decode_picture() Part-of: 2023-03-05 20:14:06 +0900 Seungha Yang * sys/va/gstjpegdecoder.h: vajpegdec: Hide gst_jpeg_decoder_get_type() symbol It's not a public symbol yet Part-of: 2023-03-05 20:01:44 +0900 Seungha Yang * sys/va/gstvabaseenc.h: vabaseenc: Fix return type of encode_frame vfunc Part-of: 2023-03-05 19:53:37 +0900 Seungha Yang * sys/va/gstvaav1dec.c: * sys/va/gstvafilter.c: * sys/va/gstvah264enc.c: * sys/va/gstvah265enc.c: * sys/va/gstvavp8dec.c: * sys/va/gstvavpp.c: va: Fix struct empty initialization syntax "struct Foo bar; bar = {};" is not a valid syntax. Also remove use of __typeof__ which is GCC specific Part-of: 2023-03-01 03:33:24 +0900 Seungha Yang * gst/codectimestamper/gsth265timestamper.c: h265timestamper: Use gst_h265_parser_parse_decoder_config_record() Part-of: 2022-07-15 01:53:36 +0900 Seungha Yang * sys/qsv/gstqsvh265dec.cpp: qsvh265dec: Use gst_h265_parser_parse_decoder_config_record() Stop duplicating code and use newly added parsing method instead Part-of: 2022-08-19 04:25:15 +0900 Seungha Yang * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: Use gst_h265_parser_parse_decoder_config_record() Stop duplicating code and use newly added parsing method instead Part-of: 2022-07-15 01:23:43 +0900 Seungha Yang * gst/videoparsers/gsth265parse.c: h265parse: Use gst_h265_parser_parse_decoder_config_record() Stop duplicating code and use newly added parsing method instead Part-of: 2022-07-15 00:13:45 +0900 Seungha Yang * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gsth265parser.h: * tests/check/libs/h265parser.c: h265parser: Add an API for HEVCDecoderConfigurationRecord parsing Add a method for HEVC configuration data parsing Part-of: 2023-03-06 11:22:45 +0800 Yinhang Liu * sys/msdk/gstmsdkenc.c: msdkenc: Fix scale ratio for frame duration For the calculation of frame duration, the numerator should be FrameRateExtD, and the denominator should be FrameRateExtN. Part-of: 2023-03-05 22:03:59 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11memory: Remove GstPoll from GstD3D11PoolAllocator GstBufferPool implementation was referenced for this GstD3D11PoolAllocator, for example GstAtomicQueue, various atomic operations, and GstPoll ones. However, such combination seems to be almost pointless since gst_poll_{read,write}_control() takes mutex and also GstPoll uses Win32 event handle internally. Use simple SRWLOCK and CONDITION_VARIABLE instead, and don't make things complicated/inefficient. Part-of: 2023-02-23 14:14:57 +0100 Piotr Brzeziński * sys/applemedia/meson.build: * sys/applemedia/vtdec.c: * sys/applemedia/vtdec.h: vtdec: Correctly retrieve reorder queue length from SPS Part-of: 2023-03-03 00:24:32 +0100 Mathieu Duponchelle * ext/closedcaption/gstcea608mux.c: cea608mux: don't consume input buffers too early CCBuffer has no notion of time, we need to push caption pairs in it when it is ready for consumption and no earlier. Also perform comparisons with our output running time, not the raw output PTS. Part-of: 2023-03-02 17:23:44 +0100 Mathieu Duponchelle * ext/closedcaption/gstcccombiner.c: cccombiner: fix s334-1a in place conversion The code wants to prepend one byte to every byte pair. It correctly did so by working backwards pair-wise, but then didn't work backwards instead of each individual pair / future triplet, overwriting information before attempting to read it. The code also failed to update the len pointer after prepending. This fixes both issues. Part-of: 2023-03-02 14:54:45 -0300 Thibault Saunier * ext/qroverlay/gstbaseqroverlay.c: * ext/qroverlay/gstqroverlayplugin.c: qroverlay: Fix documentation Part-of: 2023-03-01 16:46:19 -0500 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.c: * ext/srt/gstsrtobject.h: srt: Use g_cancellable_get_fd for poll cancellation Removing sockets from the epoll for cancellation is unreliable and might not be thread-safe. Rather, have SRT watch a FD from the cancellable if available. Keep the cancellable cancelled while we're not open. Use the regular single-socket `sock` and `poll_id` fields for the listening thread instead of duplicating them. Before polling we need to check the socket state. SRT closes broken sockets by itself and when the epoll contains our cancellation FD it can no longer be empty, which was an error before. Treat more failures in the read and write operations as an opportunity to try a reconnect. Part-of: 2023-03-01 16:00:39 -0500 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.c: * ext/srt/gstsrtobject.h: * ext/srt/gstsrtsink.c: * ext/srt/gstsrtsink.h: * ext/srt/gstsrtsrc.c: * ext/srt/gstsrtsrc.h: srt: Move cancellable into srtobject Should produce no difference in behavior. Part-of: 2023-02-28 18:55:25 -0500 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.h: srt: Set default poll-timeout to one second Removing a socket from the poll is not a guaranteed unlock. If we let the poll continue indefinitely, then e.g. an unfed srtsrc can deadlock when we try to shut it down. Part-of: 2023-02-28 18:54:27 -0500 Jan Alexander Steffens (heftig) * ext/srt/gstsrtobject.c: srt: Consider EPOLLEMPTY an error when not unlocking Seems that SRT can remove the socket from the poll by itself when the connection gets closed. Consider this an error condition and ensure we only "abort successfully" when we're actually trying to unlock. Needs more investigation but this is enough to prevent the element from getting stuck not reporting an error. Part-of: 2023-02-15 13:10:39 +0800 Mengkejiergeli Ba * gst/videoparsers/gsth265parse.c: h265parse: Fix to check returned value Part-of: 2023-02-20 10:17:53 +0800 Yinhang Liu * sys/msdk/gstmsdkvpp.c: msdkvpp: correct the fixated caps for src pad In src pad, fixate othercaps instead of the NULL result caps Part-of: 2023-02-27 14:09:12 +0100 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: * ext/closedcaption/gstcea608mux.c: * ext/closedcaption/gstcea608mux.h: * ext/closedcaption/gstclosedcaption.c: * ext/closedcaption/meson.build: closedcaption: implement cea608muxer element Wrapper aggregator around the CCBuffer internal utility, this version only supports aggregating CC1 and CC3 608 streams together into the s334-1a format. The element exposes CC1 and CC3 request pads. Part-of: 2023-03-01 06:36:15 +1100 Jan Schmidt * sys/applemedia/avfvideosrc.m: avfvideosrc: Fix description and trailing whitespace Minor fix to mention that the element is also useful on MacOS, and remove some trailing whitespace Part-of: 2023-03-01 06:32:19 +1100 Jan Schmidt * sys/applemedia/avfvideosrc.m: avfvideosrc: Don't wait on main thread for permissions request Recursively invoking the NSMainLoop can cause crashes in applications that don't expect it. Instead of waiting for permission to be granted, move the wait later - until we actually need device permissions when starting the capture session. That moves the wait into the streaming thread instead of the application thread that's setting the pipeline state to READY. Instead of a manual state change implementation to open and close the device, use the basesrc start/stop methods that are intended for the purpose. Part-of: 2023-03-02 02:51:21 +0900 Seungha Yang * sys/d3d11/gstd3d11dxgicapture.cpp: d3d11screencapturesrc: Use keyed mutex instead of fence D3D11 runtime might not support ID3D11Fence, and if so GstD3D11Fence abstraction will use ID3D11Query instead. However, since the ID3D11Query requires busy waiting, keyed mutex is better approach. Part-of: 2023-02-28 23:35:59 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: d3d11testsrc: Use keyed mutex for rendering patterns D2D operations would not flush D3D commands. Use keyed mutex to synchronize between them. Note that previous code was wrong (Flush should be called inside of BeginDraw/EndDraw calls) Part-of: 2023-02-28 23:50:41 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11memory.cpp: d3d11memory: Add support for keyed mutex Non-zero mutex key held by application is not considered for now. Part-of: 2023-02-28 18:48:24 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: demote and promote log messages level Before those levels where when implementing the plugin. Now these levels are for reporting issues from users. Part-of: 2023-02-12 22:37:01 +0800 He Junyan * gst/jpegformat/gstjpegparse.c: jpegparse: reset parse state when the SOI is not the first marker There may be garbage or some bits before a SOI comes in some problematic mjpeg streams. For example, some network error may cause the EOI marker of the previous frame lost, and when the new frame's SOI comes, we still use the state of the last frame, which will generate errors. For this kind of frames without EOI, if that frame already has some data (the SOS segment is detected), we still push it as a frame with CORRUPTED flag set. But if not, we just discard all the data before the new SOI. Co-Authored-By: Víctor Jáquez Part-of: 2023-02-15 17:16:47 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: msdkenc: Set pts at handle_frame Part-of: 2023-02-21 19:54:12 +0900 Seungha Yang * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh264dec.h: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvh265dec.h: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp8dec.h: * sys/nvcodec/gstnvvp9dec.cpp: * sys/nvcodec/gstnvvp9dec.h: * sys/nvcodec/plugin.c: nvcodec: Remove stateful decoders Use H.264, H.265, VP8, and VP9 stateless decoders unconditionally and don't register its stateful counterpart Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1768 Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1621 Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1432 Part-of: 2022-01-13 00:45:25 +0100 Mathieu Duponchelle * tests/check/elements/mpegtsmux.c: aggregator: improve parsing in create_new_pad The previous implementation was a bit primitive, assuming the subclass had registered a template name starting with sink_ . Instead make the effort of parsing the actual template name, and use that to generate the final pad name. Part-of: 2023-02-28 15:26:45 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Fix checking for certain CPU variants when running in VMs These checks were introduced to prevent exposing ARGB64/RGBA64 in the caps when running on M1 Pro/Max with macOS <13 because of a bug in VideoToolbox. Unfortunately, the initial buffer size of 15 is too short when running in a VM - the CPU brand string there looks like "Apple M1 Pro (Virtual)", which due to its length causes sysctlbyname to return -1, resulting in broken formats still showing up in the caps. Part-of: 2023-02-09 11:16:19 +0100 Evgeny Pavlov * sys/amfcodec/gstamfav1enc.cpp: * sys/amfcodec/gstamfencoder.cpp: * sys/amfcodec/gstamfencoder.h: * sys/amfcodec/gstamfh264enc.cpp: * sys/amfcodec/gstamfh265enc.cpp: amfcodec: Initial support of preanalysis and preencoding for AMF encoders Part-of: 2023-01-22 19:23:18 +0100 Jonas Danielsson * ext/wpe/WPEThreadedView.cpp: * ext/wpe/wpe-extension/gstwpeextension.c: wpe: Post console messages as element messages Fixes #1731 Part-of: 2023-02-21 22:26:37 +0900 Seungha Yang * sys/amfcodec/gstamfencoder.cpp: * sys/d3d11/gstd3d11screencapturedevice.cpp: * sys/mediafoundation/gstmfutils.cpp: * sys/wic/gstwicutils.cpp: bad: Update indent Part-of: 2023-02-25 22:40:19 +0000 amindfv * docs/plugins/gst_plugins_cache.json: * gst/codecalpha/gstalphacombine.c: alphacombine: add support for I420_10LE Part-of: 2022-09-24 17:03:22 +0100 Philippe Normand * ext/wpe/WPEThreadedView.cpp: * ext/wpe/WPEThreadedView.h: wpe: Add a basic WebProcess crash handler For now an error is emitted. Additional notification could be sent to the application as well, if needed. Part-of: 2022-09-24 16:59:47 +0100 Philippe Normand * ext/wpe/WPEThreadedView.cpp: wpe: Fix typo in estimate-load-progress signal callback name Part-of: 2022-08-23 14:20:35 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkdec.c: msdkdec: Check available surfaces when all pre-allocated surfaces are in use Part-of: 2022-08-23 11:47:02 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator.h: * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: Apply the modified memory allocation logic We did several things to enable the new memory logic in msdkdec: (1) We always use video memory for decoder in linux path; (2) We give negotiated pool to alloc_pool stored in GstMsdkContext which will be used in callback mfxFrameAllocator:Alloc to alloc surfaces as MediaSDK needs, and this pool is also available for decoder itself; (3) We modify decide_allocation process, that is we make pool negotiaion before gst_msdk_init_decoder to ensure the pool is decided and ready for use in mfxFrameAllocator:Alloc callback; then we will consider the case when we need to do the gpu to cpu copy. (4) In gst_msdkdec_finish_task, we modify the way for copy following the logic in (3). Part-of: 2022-08-23 11:25:15 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: Add a function to create va pool Add a pool creation function name as 2 for later use which will create va pool for video memory in linux and keep system pool for windows. This gst_msdkdec_create_buffer_pool2 will replace gst_msdkdec_create_buffer_pool when all the memory allocation modifications are ready in the commits after. Part-of: 2022-08-23 10:48:50 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator_libva.c: msdkallocator_libva: Rewrite gst_msdk_frame_alloc Rewrite gst_msdk_frame_alloc and name it as xxx_2 before applying it. It uses negotiated bufferpool stored in GstMsdkContext to allocate buffers in the callback MfxFrameAllocator:Alloc, then extract VASurface from buffer, wrap it as mfxMemIDs and pass these IDs to MediaSDK/oneVPL. Part-of: 2022-08-22 18:33:35 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator.c: * sys/msdk/gstmsdkallocator.h: * sys/msdk/gstmsdkallocator_libva.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkdec.h: msdkdec: Add a function to directly allocate output GstMsdkSurface Part-of: 2022-08-22 17:44:35 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkcontext.c: * sys/msdk/gstmsdkcontext.h: msdk: Add a bufferpool in GstMsdkContext structure This alloc_pool is the negotiated pool and will be used in mfxFrameAllocator:Alloc to create surfaces. Part-of: 2022-06-08 17:13:47 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkav1dec.c: * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkh264dec.c: * sys/msdk/gstmsdkh265dec.c: * sys/msdk/gstmsdkmjpegdec.c: * sys/msdk/gstmsdkmpeg2dec.c: * sys/msdk/gstmsdkvc1dec.c: * sys/msdk/gstmsdkvp9dec.c: msdkdec: Enable va caps at srcpad Set caps with VA memory at src pad with a higher priority, then comes dmabuf caps. Part-of: 2023-02-17 16:20:37 +0000 Philippe Normand * ext/webrtc/gstwebrtcbin.c: * gst-libs/gst/webrtc/ice.c: * gst-libs/gst/webrtc/ice.h: * gst-libs/gst/webrtc/nice/nice.c: webrtcbin: Relay add-ice-candidate errors from Ice implementation to Application The `add_candidate` vfunc of the GstWebRTCICE interface gained a GstPromise argument, which is an ABI break. We're not aware of any external user of this interface yet so we think it's OK. This change is useful in cases where the application needs to bubble up errors from the underlying ICE agent, for instance when the agent was given an invalid ICE candidate. Part-of: 2023-02-14 16:25:15 +0000 Philippe Normand * docs/plugins/gst_plugins_cache.json: * ext/webrtc/gstwebrtcbin.c: webrtcbin: Add add-ice-candidate-full signal The signal triggers an asynchronous task on the PC thread but in some cases it can be useful for apps to be notified when the task completed. This method of the PeerConnection spec also returns a Promise so the interface is now more coherent with the spec. Part-of: 2023-02-25 22:35:57 +0900 Seungha Yang * sys/d3d11/gstd3d11testsrc.cpp: * sys/d3d11/meson.build: d3d11testsrc: Add circular, blink and ball patterns Note that circular and ball patterns will be rendered via Direct2D (and Direct3D11 interop) Part-of: 2023-02-24 21:58:00 +0800 He Junyan * sys/va/gstjpegdecoder.c: jpegdecoder: fail early if no input caps have been provided The jpegdecoder class does not implement the ->parse() virtual function, and we always need to add the jpegparse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1829 Part-of: 2023-02-24 21:49:27 +0800 He Junyan * gst-libs/gst/codecs/gstav1decoder.c: av1decoder: fail early if no input caps have been provided The av1decoder class does not implement the ->parse() virtual function, and we always need to add the av1parse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-24 21:38:48 +0800 He Junyan * gst-libs/gst/codecs/gstvp9decoder.c: vp9decoder: fail early if no input caps have been provided The vp9decoder class does not implement the ->parse() virtual function, and we always need to add the vp9parse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-24 21:27:27 +0800 He Junyan * gst-libs/gst/codecs/gstvp8decoder.c: vp8decoder: fail early if no input caps have been provided The vp8decoder class does not implement the ->parse() virtual function, it can only accepts frame aligned data. If some element such as filesrc feed it with unaligned data, the behaviour is undecided. So we should set_needs_format of the decoder to TRUE, then it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-24 21:12:40 +0800 He Junyan * gst-libs/gst/codecs/gstmpeg2decoder.c: mpeg2decoder: fail early if no input caps have been provided The mpeg2decoder class does not implement the ->parse() virtual function, and we always need to add the mpegvideoparse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-24 21:09:31 +0800 He Junyan * gst-libs/gst/codecs/gsth264decoder.c: h264decoder: fail early if no input caps have been provided The h264decoder class does not implement the ->parse() virtual function, and we always need to add the h264parse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-24 20:15:20 +0800 He Junyan * gst-libs/gst/codecs/gsth265decoder.c: h265decoder: fail early if no input caps have been provided The h265decoder class does not implement the ->parse() virtual function, and we always need to add the h265parse element before it. So we should set_needs_format of the decoder to TRUE, then if no parse before it, it can fail with a "not-negotiated" error early, rather than go on and generate unexpected error. Part-of: 2023-02-21 19:47:42 +0100 Mathieu Duponchelle * docs/plugins/gst_plugins_cache.json: * ext/closedcaption/gstccconverter.c: * ext/closedcaption/gstccconverter.h: * tests/check/elements/ccconverter.c: ccconverter: add support for advertising / selecting field Raw 608 caps can now contain a "field" field. On the input side it signifies that the input raw 608 is attached to either field 0 or 1, on the output side it allows selecting whether to extract the raw 608 data for field 0 or 1 for field-aware formats. In addition, it is also allowed to use ccconverter to "convert" 608 field 0 to 608 field 1 (and conversely), this is passthrough as the change only needs to happen in the caps. Part-of: 2023-01-27 12:45:10 +0100 Robert Rosengren * ext/curl/gstcurlhttpsrc.c: curlhttpsrc: Add curl anyauth option Add curl anyauth option to support http request to endpoints not using only basic authentication (as default in curl). Also aligning with curlhttpsink that already uses this option. Part-of: 2023-02-22 00:47:09 +0900 Seungha Yang * gst/videoparsers/gsth265parse.c: * tests/check/elements/h265parse.c: h265parse: Always set profile on src caps h265parse should provide profile for autoplugging Part-of: 2023-02-22 15:18:12 +0100 Célestin Marot * sys/d3d11/gstd3d11overlaycompositor.cpp: d3d11overlaycompositor: fix texture width and height The dimension of the overlay texture directly corresponds to the size of the overlay **buffer** which is given by its video meta. The dimension at which the overlay should be displayed directly correspond to the overlay `render_width`and `render_height`. This match the behavior of glimagesink Part-of: 2023-02-22 11:52:38 +0000 Tim-Philipp Müller * po/fur.po: gst-plugins-bad: update translations Part-of: 2023-02-19 10:41:51 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: Warn only malformed data in APP data. It's only malformed data in APP when its length is less than 6 chars, because it should have at least an id string. Otherwise, if the id string is not handled, no warning is raised, only a debug message noticing it. Part-of: 2023-02-15 19:02:35 +0100 Víctor Manuel Jáquez Leal * gst/jpegformat/gstjpegparse.c: jpegparse: Parse AVI1 tag in app0. Part-of: 2023-02-12 16:11:34 +0800 He Junyan * sys/va/gstjpegdecoder.c: va: jpegdecoder: Do not check SOS state when parsing DRI marker. According to spec, the JPEG_MARKER_DRI(Restart interval definition) marker can come before the SOS marker. So we should not check the SOS state when parsing the DRI marker. Part-of: 2023-02-22 02:56:55 +0900 Seungha Yang * sys/nvcodec/gstcudaconverter.c: cudaconverter: Rename CUDA kernel function Changing its name (was too generic) to help GPU tracing via Nsight tool Part-of: 2023-02-21 19:29:18 +0900 Seungha Yang * sys/d3d11/plugin.cpp: d3d11mpeg2dec: Promote rank to PRIMARY + 1 Make its rank higher than avdec_mpeg2video Part-of: 2023-02-19 20:51:37 +0900 Seungha Yang * gst-libs/gst/cuda/meson.build: cuda: Link libatomic if needed Looks like C++ does not pull it automatically Part-of: 2022-12-22 10:17:42 +0000 Philippe Normand * ext/wpe/WPEThreadedView.cpp: * ext/wpe/wpe-extension/gstwpeextension.c: wpe: Logging fixes for the WebExtension Using logging macros without a `GST_CAT_DEFAULT` in scope leads to critical warnings. Part-of: 2023-02-21 15:19:35 +1100 Matthew Waters * ext/closedcaption/gstccconverter.c: ccconverter: don't debug a potentially freed filter caps Fixes a use-after-free Part-of: 2023-02-21 00:27:27 +0900 Seungha Yang * sys/d3d11/gstd3d11videosink.cpp: * sys/d3d11/gstd3d11window.cpp: * sys/d3d11/gstd3d11window.h: * sys/d3d11/gstd3d11window_win32.cpp: d3d11videosink: Fix rendering on external handle Partial revert of the commit 068a5c1053ae05b3c7747243948447e764d25aa6. That introduced size mismatch between internal and external HWND Part-of: 2023-02-20 21:42:19 +0900 Seungha Yang * sys/qsv/gstqsvav1enc.cpp: * sys/qsv/gstqsvh264enc.cpp: * sys/qsv/gstqsvh265enc.cpp: * sys/qsv/gstqsvjpegenc.cpp: * sys/qsv/gstqsvvp9enc.cpp: qsvenc: Simplify property update helpers Takes lock outside of helper methods, and protect property getter too Part-of: 2023-02-20 01:30:06 +0900 Seungha Yang * sys/qsv/gstqsvh264enc.cpp: qsvh264enc: Add more encoding options Adding trellis quantization, frame size, slice size and number of slices related encoding options Part-of: 2023-02-19 22:43:57 +0900 Seungha Yang * sys/qsv/gstqsvav1enc.cpp: * sys/qsv/gstqsvencoder.cpp: * sys/qsv/gstqsvh264enc.cpp: * sys/qsv/gstqsvh265enc.cpp: * sys/qsv/gstqsvutils.cpp: * sys/qsv/gstqsvutils.h: * sys/qsv/gstqsvvp9enc.cpp: qsv: Use std::once_flag GLib's once implementation will take mutex every time in case of non-GCC build Part-of: 2023-02-19 22:14:39 +0900 Seungha Yang * sys/qsv/gstqsvh264enc.cpp: qsvh264enc: Optimization for byte-stream to packetized format conversion Allocate single memory instead of per NAL Part-of: 2023-02-20 02:10:07 +0900 Seungha Yang * sys/nvcodec/gstnvencobject.cpp: * sys/nvcodec/gstnvencobject.h: nvencoder: Fix b-frame encoding on Linux On Windows, Win32 event handle is used to wait for encoded output, but it's not available on Linux. We should delay bitstream locking if encoder returns "need-more-input" Part-of: 2023-02-17 19:16:33 +0000 Colin Kinloch * gst/debugutils/fpsdisplaysink.c: fpsdisplaysink: Skip reporting on frame counter reset When the QoS stats are reset (e.g. changing the source) the counters for dropped + rendered frames are reset to zero which result in negative values for their difference. This results in max-fps getting pegged at an extremely high value. ``` fpsdisplaysink.c:373:display_current_fps: Updated max-fps to 36840705952231460864.000000 ``` Part-of: 2023-02-17 17:29:32 +0000 Colin Kinloch * gst/debugutils/fpsdisplaysink.c: fpsdisplaysink: Log final statistics on stop Add a final message to the debug log that lists the min, max and average framerates when state of fpsdisplaysink transisions to NULL. Part-of: 2023-02-19 12:01:59 +0100 Víctor Manuel Jáquez Leal * sys/va/gstvah265enc.c: vah265enc: Use helper to update properties. This is a continuation of the original patch by Mengkejiergeli Ba Part-of: 2023-02-20 10:56:27 -0500 Nicolas Dufresne * gst-libs/gst/codecparsers/gsth264bitwriter.c: h264bitwriter: Remove second_chroma_qp_index_offset cast That API pps->second_chroma_qp_index_offset has been fixed to reflect the sign of field in the spec. Part-of: 2023-02-16 11:18:39 +0800 Mengkejiergeli Ba * sys/nvcodec/gstnvh264dec.cpp: nvh264dec: Remove type casting Have fixed type of second_chroma_qp_index_offset as gint8, so remove the type casting here. Part-of: 2023-02-15 09:32:57 +0800 Mengkejiergeli Ba * gst-libs/gst/codecparsers/gsth264parser.h: h264parser: Fix the type of a parameter From spec, the value of second_chroma_qp_index_offset is in the range of -12 to +12 inclusive. Fix its type from guint8 to gint8. Part-of: 2023-02-16 15:03:25 +0800 Mengkejiergeli Ba * gst-libs/gst/va/gstvaallocator.c: vaallocator: Check return value from va_sync_surface Part-of: 2023-02-09 16:54:16 +0800 Mengkejiergeli Ba * sys/va/gstvaav1dec.c: * sys/va/gstvabaseenc.c: * sys/va/gstvabasetransform.c: * sys/va/gstvaencoder.c: * sys/va/gstvah264enc.c: va: Fix some code defects Part-of: 2023-02-09 15:08:43 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkdec.c: * sys/msdk/gstmsdkmjpegdec.c: msdkdec: Fix some lock issue Part-of: 2023-02-19 03:39:21 +0900 Seungha Yang * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Optimization for byte-stream to packetized format conversion Allocate single memory instead of per NAL Part-of: 2023-02-19 03:17:09 +0900 Seungha Yang * sys/nvcodec/gstnvencobject.cpp: * sys/nvcodec/gstnvencobject.h: * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: nvencoder: Add support for caption insert Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1406 Part-of: 2023-02-18 23:45:43 +0900 Seungha Yang * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Add support for HDR10 static metadata Insert HDR10 SEIs per IDR Part-of: 2023-02-18 02:50:31 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Add support for GL memory preparation to deprecate old NVENC elements Part-of: 2023-02-18 22:09:37 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: nvencoder: Fix critical warning in autogpu mode If upstream memory is not CUDA, CUDA context will be null. Part-of: 2023-02-18 00:36:29 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/meson.build: * sys/nvcodec/gstcudamemorycopy.c: * sys/nvcodec/gstnvbaseenc.c: * sys/nvcodec/gstnvdec.c: * sys/nvcodec/gstnvdec.h: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvenc.c: * sys/nvcodec/meson.build: cuda: Rename macro HAVE_NVCODEC_GST_GL -> HAVE_CUDA_GST_GL ... and always use #ifdef instead of #if Part-of: 2023-02-14 10:29:00 +0800 Mengkejiergeli Ba * gst-libs/gst/codecparsers/gstav1parser.c: * gst-libs/gst/codecparsers/gsth265parser.c: av1parser, h265parser: Fix some code defects Part-of: 2023-02-17 14:56:20 +0800 Yinhang Liu * sys/msdk/gstmsdk.c: msdkav1enc: fix the category for msdkav1enc debug The msdkav1enc debug initialized with gst_msdkav1dec_debug, fix this. Part-of: 2023-02-13 21:59:05 +0900 Seungha Yang * sys/nvcodec/gstcuvidloader.c: * sys/nvcodec/gstcuvidloader.h: * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecobject.cpp: * sys/nvcodec/gstnvdecobject.h: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: nvdecoder: Add support for reconfiguration Instead of creating new decoder instance per new sequence, re-use configured decoder instance via cuvidReconfigureDecoder() API. It will make output surface reusable without re-allocation. Also, in order for application to be able to reserve higher resolution output surface, "init-max-width" and "init-max-height" properties are added to each decoder. Part-of: 2023-02-05 23:12:47 +0900 Seungha Yang * sys/nvcodec/gstnvencobject.cpp: * sys/nvcodec/gstnvencobject.h: * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: * sys/nvcodec/meson.build: nvencoder: Reuse input resource Call input resource map functions (i.e., nvEncRegisterResource, nvEncUnregisterResource, nvEncMapInputResource, and nvEncUnmapInputResource) only once and reuse the mapped resources, instead of per input frame map/unmap Part-of: 2023-02-08 02:47:45 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/gstcudautils.h: * gst-libs/gst/d3d11/gstd3d11memory.cpp: * gst-libs/gst/d3d11/gstd3d11memory.h: * gst-libs/gst/d3d11/gstd3d11utils.cpp: * gst-libs/gst/d3d11/gstd3d11utils.h: cudamemory, d3d11memory: Add memory_{get,set}_token_data() methods Similar to GstMiniObject qdata but new methods will use int64 token value and per object lock, instead of GQuark with global mutex in qdata Part-of: 2023-02-08 02:25:35 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecobject.cpp: * sys/nvcodec/gstnvdecobject.h: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: * sys/nvcodec/meson.build: nvdecoder: Add support for CUDA zero-copy in stateless decoder Wrap mapped decoder output surface using GstCudaMemory and output without any copy operation. Also, for application to be able to control the number of zero-copyable output surfaces, "num-output-surfaces" property is added. Part-of: 2023-02-08 01:42:55 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.cpp: * sys/nvcodec/gstnvdecoder.cpp: * sys/nvcodec/gstnvh264dec.cpp: * sys/nvcodec/gstnvh265dec.cpp: * sys/nvcodec/gstnvvp8dec.cpp: * sys/nvcodec/gstnvvp9dec.cpp: * sys/nvcodec/meson.build: nvdecoder: Port to C++ Part-of: 2023-02-02 03:45:26 +0900 Seungha Yang * sys/nvcodec/gstnvav1dec.c: * sys/nvcodec/gstnvh264dec.c: * sys/nvcodec/gstnvh265dec.c: * sys/nvcodec/gstnvvp8dec.c: * sys/nvcodec/gstnvvp9dec.c: nvdecoder: Reduce render delay to 2 frames 4 frames delay seems to be too high Part-of: 2023-02-05 20:03:04 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Add gst_cuda_allocator_alloc_wrapped() method ... so that application can pass already allocated CUDA memory Part-of: 2023-02-05 20:00:04 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: cudamemory: Skip sync if no I/O operation happend on free() Synchronization for unused memory is not required Part-of: 2023-02-04 20:32:34 +0900 Seungha Yang * sys/nvcodec/gstcudaconverter.c: cudaconverter: Use cached texture ... instead of per conversion texture alloc/free Part-of: 2023-02-05 19:58:24 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Make CUtexObject object reusable Create and hold CUtexObject objects in GstCudaMemory so that it can be reusable Part-of: 2023-02-06 02:41:57 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudacontext.cpp: * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/meson.build: * sys/nvcodec/gstcudamemorycopy.c: * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh264encoder.h: * sys/nvcodec/gstnvh265encoder.cpp: * sys/nvcodec/gstnvh265encoder.h: * sys/nvcodec/meson.build: * sys/nvcodec/plugin.c: cuda, nvcodec: Make GstD3D11 dependency mandatory GstD3D11 build-time dependencies should be always available on Windows already and runtime dependencies as well, since required external (non-GStreamer) depends are all system DLLs Part-of: 2023-02-05 19:50:36 +0900 Seungha Yang * docs/meson.build: * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcudabufferpool.cpp: * gst-libs/gst/cuda/gstcudacontext.cpp: * gst-libs/gst/cuda/gstcudaloader.cpp: * gst-libs/gst/cuda/gstcudamemory.cpp: * gst-libs/gst/cuda/gstcudanvrtc.cpp: * gst-libs/gst/cuda/gstcudastream.cpp: * gst-libs/gst/cuda/gstcudautils.cpp: * gst-libs/gst/cuda/meson.build: cuda: Port to C++ Part-of: 2023-02-16 01:36:41 +0900 Seungha Yang * gst/codectimestamper/gstcodectimestamper.c: codectimestamper: Fix timestamping on sequence update ... and enhance debug logging. Keep internal timestamp offsets on drain, no reason to reset them Part-of: 2023-02-15 09:45:28 +0800 Mengkejiergeli Ba * gst-libs/gst/codecparsers/gsth264bitwriter.c: * gst-libs/gst/codecparsers/gsth265bitwriter.c: codecparsers: {h264,h265}bitwriter: Remove redundant condition checks Part-of: 2023-01-12 17:49:14 +0100 Evgeny Pavlov * sys/amfcodec/gstamfav1enc.cpp: * sys/amfcodec/gstamfh264enc.cpp: * sys/amfcodec/gstamfh265enc.cpp: amfcodec: Initial support of Smart Access Video Part-of: 2023-02-07 15:10:54 +0100 Evgeny Pavlov * sys/amfcodec/include/components/ColorSpace.h: * sys/amfcodec/include/components/Component.h: * sys/amfcodec/include/components/PreAnalysis.h: * sys/amfcodec/include/components/VideoDecoderUVD.h: * sys/amfcodec/include/components/VideoEncoderAV1.h: * sys/amfcodec/include/components/VideoEncoderHEVC.h: * sys/amfcodec/include/components/VideoEncoderVCE.h: * sys/amfcodec/include/core/D3D12AMF.h: * sys/amfcodec/include/core/Factory.h: * sys/amfcodec/include/core/Platform.h: * sys/amfcodec/include/core/Surface.h: * sys/amfcodec/include/core/Variant.h: * sys/amfcodec/include/core/Version.h: * sys/amfcodec/include/core/VulkanAMF.h: amfcodec: Update AMF headers to version 1.4.29 Part-of: 2023-02-14 13:00:40 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: svtav1enc: Drain and completely reallocate the encoder instance on caps changes The encoder does not support reconfiguration, and only deinitializing it and then initializing it again causes deadlocks. Also only reconfigure and drain the encoder if the video info has actually changed. Part-of: 2023-02-07 16:25:02 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: * sys/applemedia/vtenc.c: * sys/applemedia/vtutil.h: vtenc/vtdec: Fix typo in RGBA64_LE availability define Part-of: 2023-02-07 16:04:22 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Disable ARGB/RGBA64 caps on M1 Pro/Max with macOS <13 Fixes #1358. Passing ARGB64/RGBA64 to vtenc caused the encoding to fail when running on M1 Pro/Max variants with macOS 12.x, so let's remove these formats from caps when such scenario is detected. This issue appears to have been fixed OS-side in macOS 13.0. Part-of: 2023-02-10 19:03:13 +0100 Evgeny Pavlov * sys/amfcodec/gstamfav1enc.cpp: amfcodec: Add 10-bit & HDR support in AMF AV1 encoder Part-of: 2022-12-23 19:40:32 +0100 Evgeny Pavlov * sys/amfcodec/gstamfh265enc.cpp: amfcodec: Add 10-bit & HDR support in h265 encoder This commit adds 10 bit source file encoding and HDR metadata support in AMF HEVC encoding. Part-of: 2023-02-12 23:17:41 +0900 Seungha Yang * sys/amfcodec/gstamfav1enc.cpp: amfav1enc: Set stream-format on caps Part-of: 2023-02-12 23:12:21 +0900 Seungha Yang * docs/plugins/gst_plugins_cache.json: * sys/qsv/gstqsvav1enc.cpp: qsvav1enc: Set stream-format on caps Part-of: 2023-02-09 18:51:30 +0100 Piotr Brzeziński * sys/applemedia/vtdec.c: vtdec: Fix not waiting for async frames when flushing This was causing incorrect output when seeking, especially when used with a multithreaded source like `videotestsrc n-threads=2`. It should now correctly wait for frames still being processed by VT while vtdec is flushing. Part-of: 2023-02-10 12:52:17 +0100 Alessandro Bono * sys/win32ipc/protocol/win32ipcutils.cpp: win32ipcutils: Add missing include We are using std::isspace() with one parameter. That function is defined in the cctype header. ``` win32ipcutils.cpp(34): error C2672: 'std::isspace': no matching overloaded function found win32ipcutils.cpp(34): error C2780: 'bool std::isspace(_Elem,const std::locale &)': expects 2 arguments - 1 provided ``` Part-of: 2023-02-06 17:47:11 +0100 Edward Hervey * gst/mxf/gstmxfelement.c: * gst/mxf/meson.build: * gst/mxf/mxfffv1.c: * gst/mxf/mxfffv1.h: * gst/mxf/mxfquark.c: * gst/mxf/mxfquark.h: mxfdemux: Add support for FFV1 demuxing Part-of: 2023-02-10 07:12:25 +0100 Edward Hervey * gst/mxf/mxfaes-bwf.c: * gst/mxf/mxfalaw.c: * gst/mxf/mxfcustom.c: * gst/mxf/mxfd10.c: * gst/mxf/mxfdv-dif.c: * gst/mxf/mxfessence.c: * gst/mxf/mxfessence.h: * gst/mxf/mxfjpeg2000.c: * gst/mxf/mxfmpeg.c: * gst/mxf/mxfprores.c: * gst/mxf/mxfup.c: * gst/mxf/mxfvanc.c: * gst/mxf/mxfvc3.c: mxf: simplify essence track matching By directly providing a valid descriptor to match against Part-of: 2023-02-06 17:57:32 +0100 Edward Hervey * gst/mxf/mxfdemux.c: mxfdemux: Handle empty tracks This can happen when tracks aren't fully/properly detected due to new descriptors Part-of: 2023-02-06 15:59:56 +0100 Edward Hervey * gst/mxf/mxfdemux.c: * gst/mxf/mxfmetadata.c: * gst/mxf/mxfmetadata.h: * gst/mxf/mxful.c: * gst/mxf/mxful.h: mxfdemux: Handle sub-descriptor in generic descriptors Specificied in S377-1 (2019) B.2 Generic Descriptor This is one of the ways to store more "sub descriptors" for a single track Part-of: 2023-02-06 15:57:58 +0100 Edward Hervey * gst/mxf/mxfmpeg.c: * gst/mxf/mxftypes.c: * gst/mxf/mxftypes.h: mxf: Add convenience function for looking up primer tags Part-of: 2023-02-06 15:26:48 +0200 Sebastian Dröge * gst-libs/gst/codecparsers/gstav1parser.c: av1parser: Don't consider unknown metadata OBUs a bitstream error Just don't parse them. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1774 Part-of: 2023-02-07 08:49:24 +0100 Edward Hervey * ext/closedcaption/gstceaccoverlay.c: closedcaption: Don't leak caps event All events that we handle should be unreffed Part-of: 2023-02-07 04:58:04 +1100 Jan Schmidt * ext/webrtc/gstwebrtcstats.c: webrtc: Calculate the jitter for remote-inbound-rtp stats Populate the clock-rate in the internal stats structure, so it can be used by the _get_stats_from_remote_rtp_source_stats() method to calculate remote receivers' jitter. Part-of: 2023-02-01 10:44:26 +1100 Jan Schmidt * ext/webrtc/gstwebrtcstats.c: webrtcbin: Report full codec-stats for source pads Use the current caps for webrtcbin srcpads, as received_caps are only stored for sink pads based on incoming caps events. Makes it so that webrtcbin stats reports contain fuller codec information. Part-of: 2023-02-06 13:55:32 +0100 Adrian Fiergolski * ext/avtp/meson.build: avtp: specify the required version of libavtp Support of RVF requires libavtp in version 0.2.0 at least. Part-of: 2022-11-24 12:50:33 +0800 Ma, Mingyang * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkenc.h: msdkenc: Let runtime decide parameters Some parameters can be determined by runtime instead of default values. So unset the default and let runtime choose the best parameters Part-of: 2023-02-03 21:33:17 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/gstsvtav1enc.h: svtav1enc: Use G_DECLARE_FINAL_TYPE and GST_ELEMENT_REGISTER_DEFINE 2023-02-03 21:25:43 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: svtav1enc: Fix compilation with SVT-AV1 1.1 and drop GStreamer 1.16 compatibility 2023-02-03 21:20:56 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: svtav1enc: Fix indentation 2023-01-31 16:34:33 +0200 Sebastian Dröge * ext/meson.build: * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/meson.build: * meson_options.txt: svtav1: Integrate into the build system properly 2023-01-25 01:13:27 +0000 Tim-Philipp Müller * sys/kms/gstkmsallocator.c: kms: drop use of GSlice allocator and remove unnecessary check g_new0() will never return NULL but just abort if it can't allocate memory (same for g_slice_new). Part-of: 2023-01-25 01:11:14 +0000 Tim-Philipp Müller * sys/shm/gstshmsink.c: * sys/shm/gstshmsrc.c: * sys/shm/shmalloc.h: shm: drop use of GSlice allocator Part-of: 2023-01-25 00:39:54 +0000 Tim-Philipp Müller * gst/midi/midiparse.c: midiparse: drop use of GSlice allocator Part-of: 2023-01-25 00:33:33 +0000 Tim-Philipp Müller * ext/closedcaption/gstceaccoverlay.c: * ext/closedcaption/gstceaccoverlay.h: * ext/closedcaption/meson.build: cc708overlay: bump pango requirement and drop no longer required locking Gets rid of GSlice allocation that's never freed. Part-of: 2023-01-28 02:32:13 +0900 Seungha Yang * tools/gst-transcoder.c: tools: Make sure UTF-8 encoded command line arguments on Windows On Windows, arguments passed in main() are system codepage encoded and might not be valid UTF-8 string. Part-of: 2023-01-12 21:45:58 +0900 Seungha Yang * gst-libs/gst/cuda/meson.build: * tests/check/libs/cudamemory.c: * tests/check/meson.build: tests: Add CUDA memory allocator test Part-of: 2022-12-23 03:12:24 +0900 Seungha Yang * sys/nvcodec/gstnvbaseenc.c: nvenc: Use CUDA stream of memory if exists Part-of: 2022-12-22 02:27:36 +0900 Seungha Yang * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcudautils.c: * sys/nvcodec/gstcudamemorycopy.c: cudaupload, cudadownload: Update for shared CUDA stream Use CUDA stream of memory if exists Part-of: 2022-12-21 00:13:56 +0900 Seungha Yang * sys/nvcodec/gstnvdec.c: * sys/nvcodec/gstnvdecoder.c: nvdecoder: Skip synchronization if downstream buffer holds CUDA stream Part-of: 2022-12-20 23:04:12 +0900 Seungha Yang * sys/nvcodec/gstcudaconvertscale.c: cudaconvertscale: Add support for shared CUDA stream If CUDA stream is shared by upstream/downstream, don't sync at convert element Part-of: 2022-12-20 01:23:42 +0900 Seungha Yang * sys/nvcodec/gstcudaconverter.c: * sys/nvcodec/gstcudaconverter.h: * sys/nvcodec/gstcudaconvertscale.c: cudaconverter: Don't sync per conversion Caller should take care of synchronization Part-of: 2022-12-20 00:54:42 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: nvencoder: Add support for shared CUDA stream Sets CUDA stream on CUDA buffer pool so that CUDA stream object can be shared Part-of: 2022-12-23 00:37:36 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudabufferpool.c: * gst-libs/gst/cuda/gstcudabufferpool.h: cudabufferpool: Add support for CUDA stream use in memory * Use GstCudaPoolAllocator * Pass configured GstCudaStream object to allocator Part-of: 2022-12-19 21:56:37 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudabufferpool.c: * gst-libs/gst/cuda/gstcudamemory.c: * gst-libs/gst/cuda/gstcudamemory.h: cudamemory: Make GstCudaStream-aware This will be used for CUDA stream sharing. * Adding GstCudaPoolAllocator object. The pool allocator will control synchronization of allocated memory objects. * Modify gst_cuda_allocator_alloc() API so that caller can specify/set GstCudaStream object for the newly allocated memory. * GST_CUDA_MEMORY_TRANSFER_NEED_SYNC flag is added in addition to existing GST_CUDA_MEMORY_TRANSFER_NEED_{UPLOAD,DOWNLOAD}. The flag indicates that any GPU command queued in the CUDA stream may not be finished yet, and caller should take care of the synchronization. The flag is controlled by GstCudaMemory object if the memory holds GstCudaStream. (Otherwise, GstCudaMemory will do synchronization as before this commit). Specifically, GstCudaMemory object will set the new flag automatically when memory is mapped with (GST_MAP_CUDA | GST_MAP_WRITE) flags. Caller will need to unset the flag via GST_MEMORY_FLAG_UNSET() if it's already synchronized by client code. * gst_cuda_memory_sync() helper function is added to perform synchronization * Why not use CUevent object to keep track of synchronization status? CUDA provides fence-like interface already via CUevent object, but cuEventRecord/cuEventQuery APIs are not zero-cost operations. Instead, in this version, the status is tracked by using map and object flags. Part-of: 2022-12-19 22:16:01 +0900 Seungha Yang * gst-libs/gst/cuda/gstcudabufferpool.c: * gst-libs/gst/cuda/gstcudacontext.c: * gst-libs/gst/cuda/gstcudamemory.c: cudamemory: Allow nullptr allocator object The GstCudaAllocator object doesn't hold any device object. Part-of: 2022-12-21 23:59:19 +0900 Seungha Yang * sys/nvcodec/gstcudabasetransform.c: * sys/nvcodec/gstcudabasetransform.h: * sys/nvcodec/gstcudaconvertscale.c: * sys/nvcodec/gstcudamemorycopy.c: * sys/nvcodec/gstnvbaseenc.c: * sys/nvcodec/gstnvbaseenc.h: * sys/nvcodec/gstnvdec.c: * sys/nvcodec/gstnvdec.h: * sys/nvcodec/gstnvdecoder.c: * sys/nvcodec/gstnvencoder.cpp: nvcodec: Port to GstCudaStream Part-of: 2022-12-19 20:57:30 +0900 Seungha Yang * gst-libs/gst/cuda/gstcuda.h: * gst-libs/gst/cuda/gstcudastream.c: * gst-libs/gst/cuda/gstcudastream.h: * gst-libs/gst/cuda/meson.build: cuda: Add GstCudaStream object Wrap CUstream handle with GstCudaStream to make it ref-counted object. This GstCudaStream object will be used later for CUDA stream sharing Part-of: 2022-12-21 23:57:15 +0900 Seungha Yang * gst-libs/gst/cuda/cuda-gst.h: * gst-libs/gst/cuda/gstcuda-private.h: * gst-libs/gst/cuda/gstcuda.h: * gst-libs/gst/cuda/gstcudabufferpool.h: * gst-libs/gst/cuda/gstcudacontext.h: * gst-libs/gst/cuda/gstcudaloader.h: * gst-libs/gst/cuda/gstcudamemory.h: * gst-libs/gst/cuda/gstcudanvrtc.h: * gst-libs/gst/cuda/gstcudautils.h: * gst-libs/gst/cuda/meson.build: * sys/nvcodec/gstcudabasetransform.c: * sys/nvcodec/gstcudabasetransform.h: * sys/nvcodec/gstcudaconverter.c: * sys/nvcodec/gstcudaconverter.h: * sys/nvcodec/gstcudafilter.c: * sys/nvcodec/gstcudamemorycopy.c: * sys/nvcodec/gstcuvidloader.h: * sys/nvcodec/gstnvav1dec.c: * sys/nvcodec/gstnvbaseenc.c: * sys/nvcodec/gstnvbaseenc.h: * sys/nvcodec/gstnvdec.c: * sys/nvcodec/gstnvdec.h: * sys/nvcodec/gstnvdecoder.h: * sys/nvcodec/gstnvenc.h: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264dec.c: * sys/nvcodec/gstnvvp8dec.c: * sys/nvcodec/gstnvvp9dec.c: cuda: Provide single header include entry point Add "gstcuda.h" header file Part-of: 2023-02-03 22:10:12 +0900 Seungha Yang * sys/nvcodec/gstnvencoder.cpp: * sys/nvcodec/gstnvencoder.h: * sys/nvcodec/gstnvh264encoder.cpp: * sys/nvcodec/gstnvh265encoder.cpp: nvencoder: Fix min buffers parameter of allocation query in auto GPU mode At the time when propose_allocation() get called, encoder session would not be initialized yet. Part-of: 2023-02-02 10:34:40 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/gstsvtav1enc.h: gstreamer: Decide rate-control-mode based on the bitrate/cqp/crf settings And also keep the default encoder settings but simply override them with our own values that we care about. This mirrors the encoder configuration behaviour from ffmpeg. 2023-02-02 09:50:16 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Use GLib types instead of stdint.h types consistently 2023-02-01 17:26:01 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Fix double unref The ownership of the caps is passed to `gst_video_encoder_set_output_state()`. 2023-02-01 14:06:53 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/meson.build: gstreamer: Configure colorimetry and HDR metadata if present This raises the minimum GStreamer requirement to 1.16 as used by the CI and optionally makes use of 1.18 features, including HDR. 2023-02-01 13:03:14 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Set correct maximum width/height limits 2023-02-01 13:02:11 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Use correct 10-bit format on big endian systems 2023-02-01 12:57:01 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Set `force_key_frames=true` in CQP/CRF mode Other modes don't support that so keyframes can't be requested at arbitrary times. 2023-02-01 12:49:44 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/gstsvtav1enc.h: gstreamer: Add support for setting arbitrary parameters via `parameters-string` property 2023-01-31 19:04:24 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Fix naming of function name that was taken over from the SVT-HEVC encoder 2023-01-31 15:30:24 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Don't overwrite application configuration on initialization and initialize with the default configuration 2023-01-31 15:25:06 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Clean up property handling Use more correct types, defaults and clean up property names a bit. This now matches the configuration provided by ffmpeg. 2023-01-31 13:37:15 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Mark all internal functions as `static` 2023-01-31 13:06:16 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Fix encoder and buffer state life cycle Allocate/deallocate the encoder in `open()`/`close()` and its buffers in `start()` / `stop()`. Also fail correctly if configuring the encoder fails. 2023-01-31 13:03:49 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: * ext/svtav1/gstsvtav1enc.h: gstreamer: Remove unused `frame_count` and `dts_offset` 2023-01-31 12:59:50 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Fix debug category description 2023-02-02 18:48:41 +0100 Adrian Fiergolski * ext/avtp/gstavtprvfdepay.c: * ext/avtp/gstavtprvfpay.c: avtp: rvf: add missing since markers Add missing markers. Part-of: 2021-11-08 13:18:49 +0100 Adrian Fiergolski * docs/plugins/gst_plugins_cache.json: * ext/avtp/gstavtp.c: * ext/avtp/gstavtprvfdepay.c: * ext/avtp/gstavtprvfdepay.h: * ext/avtp/meson.build: avtp: rvf: add AVTP RVF de-payload support Add AVTP Raw Video Format de-payload support. The element supports only GRAY16_LE output format, so: - active pixels (no vertical blanking), - progressive mode, - 8 and 16-bit pixel depth, - mono pixel format, - grayscale colorspace. Part-of: 2021-11-09 13:20:01 +0100 Adrian Fiergolski * docs/plugins/gst_plugins_cache.json: * ext/avtp/gstavtpcvfdepay.c: * ext/avtp/gstavtpcvfdepay.h: * ext/avtp/gstavtpvfdepaybase.c: * ext/avtp/gstavtpvfdepaybase.h: * ext/avtp/meson.build: avtp: cvf: extract AVTP VF depayload base class Extract a part which could be common with the AVTP RVF depayload plugin to a separate class. Part-of: 2021-11-02 12:49:31 +0100 Adrian Fiergolski * docs/plugins/gst_plugins_cache.json: * ext/avtp/gstavtp.c: * ext/avtp/gstavtprvfpay.c: * ext/avtp/gstavtprvfpay.h: * ext/avtp/meson.build: avtp: rvf: add AVTP RVF payload support Add AVTP Raw Video Format payload support. The element supports only GRAY16_LE input format, so: - active pixels (no vertical blanking), - progressive mode, - 8 and 16-bit pixel depth, - mono pixel format, - grayscale colorspace. Part-of: 2021-11-04 12:59:21 +0100 Adrian Fiergolski * docs/plugins/gst_plugins_cache.json: * ext/avtp/gstavtpcvfpay.c: * ext/avtp/gstavtpcvfpay.h: * ext/avtp/gstavtpvfpaybase.c: * ext/avtp/gstavtpvfpaybase.h: * ext/avtp/meson.build: avtp: cvf: extract AVTP VF payload base class Extract a part which could be common with the AVTP RVF payload plugin to a separate class. Part-of: 2022-11-09 20:20:35 +0100 Piotr Brzeziński * sys/applemedia/vtenc.c: vtenc: Disable HW acceleration for interlaced ProRes Due to a bug in the VT API, attempting to encode interlaced content with ProRes results in an error, halting the pipeline instead of gracefully falling back to software encoding. Should be removed in the future if Apple ever fixes this issue. Part-of: 2023-01-19 11:03:09 +0800 He Junyan * sys/va/gstvah264dec.c: va: Avoid the array index overflow when filling 8x8 scaling list. The VA API has not defined the scaling list entries for U/V planes for the 4:4:4 stream. In fact, we do not meet the 4:4:4 format output for H264 so far, and scaling list is not used frequently, so we just print out some warning and ignore these scaling list values. Part-of: 2023-02-02 05:04:48 +0900 Seungha Yang * sys/nvcodec/gstnvvp9dec.c: nvvp9dec: Fix return value It should return GstFlowReturn value, not boolean Part-of: 2023-02-01 17:26:57 +0200 Sebastian Dröge * docs/plugins/gst_plugins_cache.json: * ext/aom/gstav1dec.c: * ext/aom/gstav1enc.c: aom: Include stream-format and alignment in the AV1 caps The decoder does not work with arbitrary alignment and annexb stream format and the encoder can give the information that it outputs obu-stream/tu to downstream. Part-of: 2023-01-27 15:40:21 -0500 Olivier Crête * gst-libs/gst/wayland/gstwlbuffer.h: * gst-libs/gst/wayland/gstwldisplay.h: * gst-libs/gst/wayland/gstwlshmallocator.h: * gst-libs/gst/wayland/gstwlvideobufferpool.h: * gst-libs/gst/wayland/gstwlwindow.h: wayland: Export the _get_type() functions Add the macro before the declaration so the types are properly exported, this makes it possible to do dynamic casting and checks. Part-of: 2022-12-21 16:32:10 +0800 Mengkejiergeli Ba * sys/msdk/gstmsdkallocator.c: * sys/msdk/gstmsdkallocator.h: * sys/msdk/gstmsdkenc.c: * sys/msdk/gstmsdkvpp.c: * sys/msdk/msdk.c: * sys/msdk/msdk.h: msdkallocator: Use const ptr of videoinfo in func param Part-of: 2023-01-11 15:20:21 +0100 Benjamin Gaignard * docs/plugins/gst_plugins_cache.json: * ext/codec2json/gstav12json.c: * ext/codec2json/gstav12json.h: * ext/codec2json/meson.build: * ext/codec2json/plugin.c: codec2json: Add av12json element This element convert AV1 frame header into human readable json data. Part-of: 2023-01-04 10:35:20 +0100 Benjamin Gaignard * docs/plugins/gst_plugins_cache.json: * ext/codec2json/gstvp82json.c: * ext/codec2json/gstvp82json.h: * ext/codec2json/meson.build: * ext/codec2json/plugin.c: * ext/meson.build: * meson_options.txt: codec2json: Add vp82json element This element convert vp8 frame header into human readable json data. Part-of: 2023-01-25 19:20:19 +0000 Tim-Philipp Müller * gst-libs/gst/codecparsers/gstvp9parser.c: * gst-libs/gst/codecparsers/gstvp9parser.h: codecparsers: vp9parser: use single allocation for parser structs Part-of: 2023-01-27 15:54:48 -0300 Thibault Saunier * gst/transcode/gsturitranscodebin.c: uritranscodebin: Fix unref of NULL Part-of: 2023-01-19 22:22:52 +0900 Seungha Yang * sys/win32ipc/gstwin32ipcbufferpool.cpp: * sys/win32ipc/gstwin32ipcbufferpool.h: * sys/win32ipc/gstwin32ipcmemory.cpp: * sys/win32ipc/gstwin32ipcmemory.h: * sys/win32ipc/gstwin32ipcvideosink.cpp: * sys/win32ipc/gstwin32ipcvideosrc.cpp: * sys/win32ipc/meson.build: * 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: win32ipc: Add support for zero-copy rendering * Extend protocol so that client can notify of releasing shared memory * Server will hold shared memory object until it's released by client * Add allocator/buffer pool to reuse shared memory objects and buffers Part-of: 2022-12-30 00:49:27 +0900 Seungha Yang * gst/mpegdemux/gstmpegdemux.c: mpegpsdemux: Ignore DTS if PTS < DTS It's possibly timestamp rollover case. But PTS < DTS is already invalid case anyway. Part-of: 2022-12-06 16:30:32 +0000 Tim-Philipp Müller * docs/plugins/gst_plugins_cache.json: * gst/sdp/gstsdpdemux.c: * gst/sdp/gstsdpdemux.h: sdpdemux: add "media" property to allow audio-only or video-only streaming Part-of: 2022-12-06 16:13:56 +0000 Tim-Philipp Müller * docs/plugins/gst_plugins_cache.json: * gst/sdp/gstsdpdemux.c: * gst/sdp/gstsdpdemux.h: sdpdemux: add "rtcp-mode" property to disable RTCP If we know there's only one stream we care about and we don't have to synchronise audio and video, or send RRs, we might just as well not hook up all the RTCP bits and use fewer threads and sockets and simplify the pipeline. Part-of: 2023-01-24 23:26:50 +0900 Seungha Yang * sys/wasapi2/gstwasapi2ringbuffer.cpp: wasapi2src: Fix loopback capture on Windows 10 Anniversary Update ... or older. Work around an OS bug that loopback capture device doesn't notify event. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1738 Part-of: 2023-01-12 17:15:12 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkimagebufferpool.c: * gst-libs/gst/vulkan/gstvkvideofilter.c: vulkan: imagebufferpool: Remove video meta handling. Remove video meta handling since it's not used at all, also removed its usage in vkvideofilter. Part-of: 2023-01-11 16:46:40 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkphysicaldevice.c: vulkan: physicaldevice: Dump 1.3 features and properties. Part-of: 2023-01-04 17:30:47 +0100 Víctor Manuel Jáquez Leal * gst-libs/gst/vulkan/gstvkmemory.c: vulkan: memory: Flush non coherent memory after write. Spec 7.1.3: If a memory object does not have the VK_MEMORY_PROPERTY_HOST_COHERENT_BIT property, then vkFlushMappedMemoryRanges must be called in order to guarantee that writes to the memory object from the host are made available to the host domain, where they can be further made available to the device domain via a domain operation. Similarly, vkInvalidateMappedMemoryRanges must be called to guarantee that writes which are available to the host domain are made visible to host operations. Part-of: 2023-01-24 20:43:35 +0200 Sebastian Dröge * ext/svtav1/gstsvtav1enc.c: gstreamer: Use stream-format=obu-stream alignment=tu in the caps There is no byte-stream/au format for AV1 but only for H264, and the encoder actually outputs obu-stream/tu instead of the annexb stream-format that is similar to H264 byte-stream format. Without this the encoder can't be used with elements that require a specific AV1 stream-format, e.g. the MP4 or Matroska/WebM muxer. 2023-01-25 09:10:57 -0500 U. Artie Eoff * gst-libs/gst/codecparsers/gstvp9parser.c: vp9parser: remove checks for g_new0 result The g_new0 aborts the process if it fails. Thus, there is no need to check if the g_new0 call succeeded. This should silence a resource leak warning by static scan. Part-of: 2023-01-14 12:29:03 +0530 Nirbheek Chauhan * ext/srtp/meson.build: meson: Add a wrap file for libsrt2p And allow fallback to it. Part-of: 2023-01-24 11:26:02 +0530 Nirbheek Chauhan * sys/nvcodec/plugin.c: nvcodec: Log readable errors when initializing CUDA It is really difficult for people to figure out why nvcodec has 0 features. Even the debug log is cryptic. Also make sure the errors go to the ERROR log level, which is more likely to be enabled by default. Part-of: 2023-01-24 11:16:38 +0530 Nirbheek Chauhan * sys/nvcodec/plugin.c: nvcodec: Fix reporting of CuDeviceGetCount error cuda_ret is was always going to be CUDA_SUCCESS in the error log. Part-of: 2022-12-29 02:25:52 +0900 Seungha Yang * gst-libs/gst/d3d11/gstd3d11device.cpp: * sys/d3d11/gstd3d11decoder.cpp: * sys/d3d11/gstd3d11screencapturedevice.cpp: d3d11: Don't use g_alloca() _alloca CRT function is deprecated. Moreover, stack allocation for string is not a good idea. We can use _malloca inline function instead, but all use of _alloca in d3d11 library/plugin are not performance critical path at all. Part-of: 2023-01-24 09:25:52 -0300 Thibault Saunier * docs/plugins/gst_plugins_cache.json: * gst/codectimestamper/gsth264timestamper.c: * gst/codectimestamper/gsth265timestamper.c: timestamper: Classify as Timestamper and make them RANK_MARGINAL This way those elements can be autoplugged when needed Part-of: 2023-01-08 18:48:15 +0000 Tim-Philipp Müller * gst/jpegformat/gstjifmux.c: jpegformat: drop use of GSlice Part-of: 2023-01-08 18:47:51 +0000 Tim-Philipp Müller * gst/rist/gstristrtxsend.c: * gst/rist/gstristsink.c: * gst/rist/gstristsrc.c: rist: drop use of GSlice Part-of: 2023-01-08 18:47:24 +0000 Tim-Philipp Müller * gst/netsim/gstnetsim.c: netsim: drop use of GSlice Part-of: 2023-01-08 18:46:53 +0000 Tim-Philipp Müller * gst/mpegpsmux/bits.h: * gst/mpegpsmux/psmux.c: * gst/mpegpsmux/psmuxstream.c: mpegpsmux: drop use of GSlice Part-of: 2023-01-08 18:46:03 +0000 Tim-Philipp Müller * gst/mpegtsdemux/mpegtspacketizer.c: * gst/mpegtsdemux/tsdemux.c: mpegtsdemux: drop use of GSlice Part-of: 2023-01-08 18:44:53 +0000 Tim-Philipp Müller * gst/mpegtsmux/tsmux/tsmux.c: * gst/mpegtsmux/tsmux/tsmuxstream.c: mpegtsmux: drop use of GSlice allocator Part-of: 2023-01-08 18:43:02 +0000 Tim-Philipp Müller * gst/jp2kdecimator/jp2kcodestream.c: jp2kdecimator: drop use of GSlice Part-of: 2023-01-08 18:39:59 +0000 Tim-Philipp Müller * gst/rtmp2/TODO: * gst/rtmp2/rtmp/amf.c: * gst/rtmp2/rtmp/rtmpchunkstream.c: * gst/rtmp2/rtmp/rtmpclient.c: * gst/rtmp2/rtmp/rtmpconnection.c: * gst/rtmp2/rtmp/rtmphandshake.c: * gst/rtmp2/rtmp/rtmputils.c: rtmp2: drop use of GSlice Part-of: 2023-01-08 18:35:48 +0000 Tim-Philipp Müller * gst/mxf/mxfaes-bwf.c: * gst/mxf/mxfmetadata.c: * gst/mxf/mxfmpeg.c: * gst/mxf/mxftypes.c: * gst/mxf/mxftypes.h: mxf: drop use of GSlice Part-of: 2023-01-08 18:15:46 +0000 Tim-Philipp Müller * gst/dvbsuboverlay/dvb-sub.c: dvbsuboverlay: drop use of GSlice Part-of: 2023-01-08 18:14:24 +0000 Tim-Philipp Müller * ext/svthevcenc/gstsvthevcenc.c: svthevcenc: drop use of GSlice Part-of: 2023-01-08 18:10:42 +0000 Tim-Philipp Müller * ext/x265/gstx265enc.c: x265: drop use of GSlice Part-of: 2023-01-08 18:10:12 +0000 Tim-Philipp Müller * ext/wpe/WPEThreadedView.cpp: wpe: drop use of GSlice Part-of: 2023-01-08 18:08:34 +0000 Tim-Philipp Müller * ext/ttml/gstttmlrender.c: * ext/ttml/subtitle.c: * ext/ttml/ttmlparse.c: ttml: drop use of GSlice Part-of: 2023-01-08 18:08:05 +0000 Tim-Philipp Müller * ext/srtp/gstsrtp.c: * ext/srtp/gstsrtpdec.c: srtp: drop use of GSlice Part-of: 2023-01-08 18:06:48 +0000 Tim-Philipp Müller * ext/resindvd/resindvdbin.c: * ext/resindvd/rsninputselector.c: resindvd: drop use of GSlice Part-of: 2023-01-08 18:06:24 +0000 Tim-Philipp Müller * ext/kate/gstkateutil.c: kate: drop use of GSlice Part-of: 2023-01-08 18:06:07 +0000 Tim-Philipp Müller * ext/openjpeg/gstopenjpegdec.c: * ext/openjpeg/gstopenjpegenc.c: openjpeg: drop use of GSlice Part-of: 2023-01-08 18:03:49 +0000 Tim-Philipp Müller * gst-libs/gst/va/gstvaallocator.c: * gst-libs/gst/va/gstvasurfacecopy.c: libs: va: drop use of GSlice Part-of: 2023-01-08 18:02:47 +0000 Tim-Philipp Müller * gst-libs/gst/codecparsers/gstav1parser.c: * gst-libs/gst/codecparsers/gsth264parser.c: * gst-libs/gst/codecparsers/gsth265parser.c: * gst-libs/gst/codecparsers/gstmpegvideometa.c: * gst-libs/gst/codecparsers/gstvc1parser.c: * gst-libs/gst/codecparsers/gstvp9parser.c: libs: codecparsers: drop use of GSlice Part-of: 2023-01-08 17:58:38 +0000 Tim-Philipp Müller * gst-libs/gst/insertbin/gstinsertbin.c: libs: insertbin: drop use of GSlice allocator Part-of: 2023-01-08 17:56:42 +0000 Tim-Philipp Müller * gst-libs/gst/mpegts/gst-atsc-section.c: * gst-libs/gst/mpegts/gst-dvb-descriptor.c: * gst-libs/gst/mpegts/gst-dvb-section.c: * gst-libs/gst/mpegts/gst-scte-section.c: * gst-libs/gst/mpegts/gstmpegtsdescriptor.c: * gst-libs/gst/mpegts/gstmpegtssection.c: libs: mpegts: drop use of GSlice allocator Part-of: 2023-01-23 23:04:53 +0000 Tim-Philipp Müller * meson.build: Back to development Part-of: === release 1.22.0 ===