Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 12
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Mon Mar 13 09:59:44 UTC 2023 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.22.1 + +------------------------------------------------------------------- Tue Feb 7 15:38:26 UTC 2023 - Simon Vogl <simon.vogl@gmx.net> - Removed the openh264 gstreamer plugin as openSUSE now ships the
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.22.0 Name: gstreamer-plugins-bad-codecs -Version: 1.22.0 +Version: 1.22.1 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.22.0.tar.xz/ChangeLog -> gst-plugins-bad-1.22.1.tar.xz/ChangeLog
Changed
@@ -1,3 +1,462 @@ +=== release 1.22.1 === + +2023-03-04 13:42:32 +0000 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.22.1 + +2023-02-23 14:14:57 +0100 Piotr Brzeziński <piotr@centricular.com> + + * sys/applemedia/meson.build: + * sys/applemedia/vtdec.c: + * sys/applemedia/vtdec.h: + vtdec: Correctly retrieve reorder queue length from SPS + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4110> + +2023-03-01 06:36:15 +1100 Jan Schmidt <jan@centricular.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4096> + +2023-03-01 06:32:19 +1100 Jan Schmidt <jan@centricular.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4096> + +2023-02-28 15:26:45 +0100 Piotr Brzeziński <piotr@centricular.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4082> + +2023-01-28 02:32:13 +0900 Seungha Yang <seungha@centricular.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4072> + +2023-02-20 03:20:46 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvencoder.cpp: + 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4008> + +2023-02-22 00:47:09 +0900 Seungha Yang <seungha@centricular.com> + + * gst/videoparsers/gsth265parse.c: + * tests/check/elements/h265parse.c: + h265parse: Always set profile on src caps + h265parse should provide profile for autoplugging + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4068> + +2023-02-24 21:58:00 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 21:49:27 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 21:38:48 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 21:27:27 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 21:12:40 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 21:09:31 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-02-24 20:15:20 +0800 He Junyan <junyan.he@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4066> + +2023-01-27 12:45:10 +0100 Robert Rosengren <robertr@axis.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4065> + +2023-02-22 15:18:12 +0100 Célestin Marot <c.marot@intopix.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4053> + +2023-02-22 11:52:38 +0000 Tim-Philipp Müller <tim@centricular.com> + + * po/fur.po: + gst-plugins-bad: update translations + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4041> + +2023-02-16 15:03:25 +0800 Mengkejiergeli Ba <mengkejiergeli.ba@intel.com> + + * gst-libs/gst/va/gstvaallocator.c: + vaallocator: Check return value from va_sync_surface + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4007> + +2023-02-09 16:54:16 +0800 Mengkejiergeli Ba <mengkejiergeli.ba@intel.com> + + * 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4007> + +2022-12-22 10:17:42 +0000 Philippe Normand <philn@igalia.com>
View file
gst-plugins-bad-1.22.0.tar.xz/NEWS -> gst-plugins-bad-1.22.1.tar.xz/NEWS
Changed
@@ -2,10 +2,13 @@ GStreamer 1.22.0 was originally released on 23 January 2023. +The latest bug-fix release in the stable 1.22 series is 1.22.1 and was +released on 04 March 2023. + See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Monday 23 January 2023, 17:00 UTC (log) +Last updated: Monday 04 March 2023, 13:00 UTC (log) Introduction @@ -298,8 +301,8 @@ - This is enabled by setting the instant-uri property to true, setting the URI to switch to immediately, and then disabling the instant-uri property again afterwards. -- playbin3, decodebin3, uridecodebin3, parsebin, and urisrc are no - longer experimental +- playbin3, decodebin3, uridecodebin3, parsebin, and urisourcebin are + no longer experimental - They were originally marked as ‘technology preview’ but have since seen extensive usage in production settings, so are considered ready for general use now. @@ -819,9 +822,9 @@ New MP4 muxer + Fragmented MP4 muxer -- fmp4mux: New fragmented MP4/ISOBMFF/CMAF muxer for generating - e.g. DASH/HLS media fragments. -- isomp4mux: New non-fragmented, normal MP4 muxer. +- isofmp4mux, cmafmux, dashmp4mux, onviffmp4mux: New fragmented + MP4/ISOBMFF/CMAF muxer for generating e.g. DASH/HLS media fragments. +- isomp4mux, onvifmp4mux: New non-fragmented, normal MP4 muxer. Both plugins provides elements that replace the existing qtmux/mp4mux element from gst-plugins-good. While not feature-equivalent yet, the new @@ -1217,6 +1220,240 @@ 1.22.0 was originally released on 23 January 2023. +1.22.1 + +The first 1.22 bug-fix release (1.22.1) was released on 04 March 2023. + +This release only contains bugfixes and it should be safe to update from +1.22.0. + +Highlighted bugfixes in 1.22.1 + +- audio channel-mix: allow up to 64 channels (instead of up to 63 + channels) +- avfvideosrc: Don’t wait on main thread for permissions request +- avvidenc: avoid generating inaccurate output timestamps, especially + with variable framerate streams +- AV1 video codec caps signalling improvements in various elements +- codectimestamper: Fix timestamping on sequence update +- d3d11overlaycompositor: fix texture width and height +- d3d11videosink: Fix rendering on external handle +- dashdemux2: fix seek operation taking a log time to finish for some + streams +- nvencoder: Fix B-frame encoding on Linux and min buffers in auto GPU + mode +- playbin3: fixing buffering for live pipelines +- playbin: fix potential deadlock when stopping stream with subtitles + visible +- redenc: fix setting of extension ID for twcc +- rtspsrc: improved compatibility with more broken RTSP servers +- v4l2h264dec: Fix Raspberry Pi4 will not play video in application +- vtdec: fix jittery playback of H.264 Level 4.1 movies in macOS +- vtdec: Fix non-deterministic frame output after flushing seeks +- vtenc: fix handling of interlaced ProRes on Apple M1 hardware +- vtenc: don’t advertise ARGB/RGBA64 input caps on M1 Pro/Max with + macOS <13 +- wasapi2src: Fix loopback capture on Windows 10 Anniversary Update +- tools: better handling of non-ASCII command line arguments on + Windows +- gst-libav: fix build against newer ffmpeg versions +- gst-python: Use arch-specific install dir for gi overrides +- cerbero: Fix setuptools site.py breakage in Python 3.11 +- macOS packages: Fix broken binaries on macos < 11.0 +- various bug fixes, memory leak fixes, and other stability and + reliability improvements + +gstreamer + +- buffer: fix copy meta reference debug log formatting +- bin: Don’t unlock unlocked mutex in gst_bin_remove_func() +- pad: Don’t leak user_data in gst_pad_start_task() +- aggregator: Always lock aggpad around update_time_level +- inputselector: Avoid potential deadlock when shutting down, + e.g. playbin with subtitles +- multiqueue: Handle use-interleave latency live pipelines, fixing + buffering for live pipelines in playbin3 +- GstBaseSrc: fix transfer annotation for fixate() virtual method +- GstBaseSrc, GstPushSrc: add nullable annotations to virtual methods +- tools: Make sure UTF-8 encoded command line arguments on Windows + +gst-plugins-base + +- alsasink: Fix stall when going from PLAYING to NULL (stucked at + PAUSED) with uac1 gadget +- appsrc: Don’t chain up BaseSrc::negotiate() +- audio: channel-mix: Fix channel count limit to be able to equal 64 +- gldisplay: Mark gst_gl_display_create_context() other_context + parameter as nullable +- gldisplay: Remove unused code +- gstglwindow_x11.c: Fix colormap leak +- gl/cocoa: Return a strong ref to the parent GstGLContext +- rtspconnection: Annotate RTSP message and RTSP events parameters + correctly +- sdp, typefind: Fix some annotations +- sdp: gstmikey: gst_mikey_message_to_caps: extract ROC from first + crypto session +- subparse: Properly forward segment seqnum +- uridecodebin: Set source element to READY before querying it +- uritranscodebin: Fix unref of NULL +- gst-play-1.0: Don’t force accurate seeking + +gst-plugins-good + +- adaptivedemux2: Fix buffering threshold initialization +- dashdemux2: the seek operation takes a log time to finish for some + streams +- glvideomixer: Keep a reference to the underlying pad +- qtdemux: Don’t emit GstSegment correcting start time when in MSE + mode +- qtdemux: Handle moov atom length=0 case by reading until the end +- qtdemux, qtmux: Drop av1C version 0 parsing and implement version 1 + parsing/writing +- qtmux: Fix assertion on caps update +- redenc: fix setting of extension ID for twcc +- rtspsrc: Use the correct vfunc for the push-backchannel-sample + action signal +- rtpssrcdemux: set different stream-id on each src pad +- udpsrc: GstSocketTimestampMessage only for SCM_TIMESTAMPNS +- v4l2h264dec: Fix Raspberry Pi4 will not play video in application + +gst-plugins-bad + +- aom: Include stream-format and alignment in the AV1 caps +- av1parser, h265parser: Fix some code defects +- av1parser: Don’t consider unknown metadata OBUs a bitstream error +- avfvideosrc: Don’t wait on main thread for permissions request +- ccconverter: don’t debug a potentially freed filter caps +- codectimestamper: Fix timestamping on sequence update +- codecparsers: {h264, h265}bitwriter: Remove redundant condition + checks +- codecs: decoders: fail early if no input caps have been provided for + all new decoder base classes +- closedcaption: Don’t leak caps event +- curlhttpsrc: Add curl anyauth option +- d3d11overlaycompositor: fix texture width and height +- d3d11videosink: Fix rendering on external handle +- h265parse: Always set profile on src caps +- msdkav1enc: fix the category for msdkav1enc debug +- nvcodec: improve error reporting on plugin init +- nvencoder: Fix b-frame encoding on Linux +- nvencoder: Fix min buffers parameter of allocation query in auto GPU + mode +- nvvp9dec: Fix return value +- qsvav1enc, amfav1enc: Set stream-format on caps +- vtdec: Jittery playback of H.264 Level 4.1 movies in macOS (both + x86_64 and arm64) +- vtdec: Fix DPB size calculations not taking values from SPS into + account +- vtdec: Fix not waiting for async frames when flushing +- vtenc: Disable ARGB/RGBA64 caps on M1 Pro/Max with macOS <13 +- vtenc: Fix checking for certain CPU variants when running in VMs +- vtenc: Disable HW acceleration for interlaced ProRes +- va: Avoid the array index overflow when filling 8x8 scaling list. +- va: Fix some code defects +- vah265enc: Use helper to update properties. +- vulkan: memory: Flush non coherent memory after write. +- wasapi2src: Fix loopback capture on Windows 10 Anniversary Update +- webrtcbin: small stats improvements +- win32ipcutils: Add missing include +- wpe: Logging fixes for the WebExtension + +gst-plugins-ugly + +- mpegpsdemux: Ignore DTS if PTS < DTS + +gst-libav + +- avauddec, avviddec: Free packet side data after usage +- avviddec: change + AV_CODEC_CAP_AUTO_THREADS->AV_CODEC_CAP_OTHER_THREADS to fix build + against newer ffmpeg versions +- Memory leak in ’ av_packet_add_side_data’ in + /lib/x86_64-linux-gnu/libavcodec.so reading the file + clock_odd_size_RLE_g1597902.avi +- avvidenc: Don’t take ffmpeg timestamps verbatim but only use them to + calculate DTS + +gst-rtsp-server + +- No changes
View file
gst-plugins-bad-1.22.0.tar.xz/RELEASE -> gst-plugins-bad-1.22.1.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.22.0. +This is GStreamer gst-plugins-bad 1.22.1. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
gst-plugins-bad-1.22.0.tar.xz/docs/plugins/gst_plugins_cache.json -> gst-plugins-bad-1.22.1.tar.xz/docs/plugins/gst_plugins_cache.json
Changed
@@ -1113,7 +1113,7 @@ "long-name": "AV1 Decoder", "pad-templates": { "sink": { - "caps": "video/x-av1:\n", + "caps": "video/x-av1:\n stream-format: obu-stream\n alignment: tu\n", "direction": "sink", "presence": "always" }, @@ -1149,7 +1149,7 @@ "presence": "always" }, "src": { - "caps": "video/x-av1:\n alignment: tu\n", + "caps": "video/x-av1:\n stream-format: obu-stream\n alignment: tu\n", "direction": "src", "presence": "always" } @@ -225397,7 +225397,7 @@ "presence": "always" }, "src": { - "caps": "video/x-av1:\n width: 16, 8192 \n height: 16, 8192 \n alignment: tu\n", + "caps": "video/x-av1:\n width: 16, 8192 \n height: 16, 8192 \n stream-format: obu-stream\n alignment: tu\n", "direction": "src", "presence": "always" }
View file
gst-plugins-bad-1.22.0.tar.xz/ext/aom/gstav1dec.c -> gst-plugins-bad-1.22.1.tar.xz/ext/aom/gstav1dec.c
Changed
@@ -44,7 +44,8 @@ GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-av1") + GST_STATIC_CAPS ("video/x-av1, " + "stream-format = (string) obu-stream, " "alignment = (string) tu") ); static GstStaticPadTemplate gst_av1_dec_src_pad_template =
View file
gst-plugins-bad-1.22.0.tar.xz/ext/aom/gstav1enc.c -> gst-plugins-bad-1.22.1.tar.xz/ext/aom/gstav1enc.c
Changed
@@ -285,7 +285,8 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-av1, alignment = (string) tu") + GST_STATIC_CAPS ("video/x-av1, " + "stream-format = (string) obu-stream, " "alignment = (string) tu") ); static void
View file
gst-plugins-bad-1.22.0.tar.xz/ext/closedcaption/gstccconverter.c -> gst-plugins-bad-1.22.1.tar.xz/ext/closedcaption/gstccconverter.c
Changed
@@ -352,7 +352,6 @@ tmp = gst_caps_intersect_full (filter, res, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (res); - gst_caps_unref (filter); res = tmp; } @@ -363,6 +362,8 @@ GST_DEBUG_OBJECT (self, "filter %" GST_PTR_FORMAT, filter); GST_DEBUG_OBJECT (self, "to %" GST_PTR_FORMAT, res); + gst_clear_caps (&filter); + return res; }
View file
gst-plugins-bad-1.22.0.tar.xz/ext/closedcaption/gstceaccoverlay.c -> gst-plugins-bad-1.22.1.tar.xz/ext/closedcaption/gstceaccoverlay.c
Changed
@@ -1000,7 +1000,6 @@ ("received non-TIME newsegment event on text input")); } - gst_event_unref (event); ret = TRUE; /* wake up the video chain, it might be waiting for a text buffer or @@ -1027,7 +1026,6 @@ GST_CEA_CC_OVERLAY_BROADCAST (overlay); GST_CEA_CC_OVERLAY_UNLOCK (overlay); - gst_event_unref (event); ret = TRUE; break; } @@ -1039,7 +1037,6 @@ gst_cea_cc_overlay_pop_text (overlay); gst_segment_init (&overlay->cc_segment, GST_FORMAT_TIME); GST_CEA_CC_OVERLAY_UNLOCK (overlay); - gst_event_unref (event); ret = TRUE; break; case GST_EVENT_FLUSH_START: @@ -1048,7 +1045,6 @@ overlay->cc_flushing = TRUE; GST_CEA_CC_OVERLAY_BROADCAST (overlay); GST_CEA_CC_OVERLAY_UNLOCK (overlay); - gst_event_unref (event); ret = TRUE; break; case GST_EVENT_EOS: @@ -1059,14 +1055,18 @@ * a text segment update */ GST_CEA_CC_OVERLAY_BROADCAST (overlay); GST_CEA_CC_OVERLAY_UNLOCK (overlay); - gst_event_unref (event); ret = TRUE; break; default: - ret = gst_pad_event_default (pad, parent, event); break; } + if (ret) { + gst_event_unref (event); + } else { + ret = gst_pad_event_default (pad, parent, event); + } + return ret; }
View file
gst-plugins-bad-1.22.0.tar.xz/ext/curl/gstcurlhttpsrc.c -> gst-plugins-bad-1.22.1.tar.xz/ext/curl/gstcurlhttpsrc.c
Changed
@@ -1116,6 +1116,7 @@ gst_curl_setopt_str (s, handle, CURLOPT_NOPROXY, s->no_proxy_list); gst_curl_setopt_str (s, handle, CURLOPT_PROXYUSERNAME, s->proxy_user); gst_curl_setopt_str (s, handle, CURLOPT_PROXYPASSWORD, s->proxy_pass); + gst_curl_setopt_generic (s, handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); for (i = 0; i < s->number_cookies; i++) { gst_curl_setopt_str (s, handle, CURLOPT_COOKIELIST, s->cookiesi);
View file
gst-plugins-bad-1.22.0.tar.xz/ext/webrtc/gstwebrtcstats.c -> gst-plugins-bad-1.22.1.tar.xz/ext/webrtc/gstwebrtcstats.c
Changed
@@ -792,6 +792,9 @@ if (wpad->received_caps) caps = gst_caps_ref (wpad->received_caps); + else + caps = gst_pad_get_current_caps (pad); + GST_DEBUG_OBJECT (pad, "Pad caps are: %" GST_PTR_FORMAT, caps); if (caps && gst_caps_is_fixed (caps)) { GstStructure *caps_s = gst_caps_get_structure (caps, 0); @@ -974,6 +977,7 @@ ts_stats.source_stats->n_values, ts_stats.stream->transport); ts_stats.s = s; + ts_stats.clock_rate = clock_rate; transport_stream_find_ssrc_map_item (ts_stats.stream, &ts_stats, (FindSsrcMapFunc) webrtc_stats_get_from_transport);
View file
gst-plugins-bad-1.22.0.tar.xz/ext/wpe/WPEThreadedView.cpp -> gst-plugins-bad-1.22.1.tar.xz/ext/wpe/WPEThreadedView.cpp
Changed
@@ -296,6 +296,7 @@ GVariant *params = webkit_user_message_get_parameters (message); gboolean res = TRUE; + GST_TRACE_OBJECT(src, "Handling message %s", name); if (!g_strcmp0(name, "gstwpe.new_stream")) { guint32 id = g_variant_get_uint32 (g_variant_get_child_value (params, 0)); const gchar *capsstr = g_variant_get_string (g_variant_get_child_value (params, 1), NULL);
View file
gst-plugins-bad-1.22.0.tar.xz/ext/wpe/wpe-extension/gstwpeextension.c -> gst-plugins-bad-1.22.1.tar.xz/ext/wpe/wpe-extension/gstwpeextension.c
Changed
@@ -30,6 +30,9 @@ #include <gio/gunixfdlist.h> #include <wpe/webkit-web-extension.h> +GST_DEBUG_CATEGORY_STATIC (wpe_extension_debug); +#define GST_CAT_DEFAULT wpe_extension_debug + G_MODULE_EXPORT void webkit_web_extension_initialize (WebKitWebExtension * extension); @@ -42,13 +45,16 @@ gst_init (NULL, NULL); + GST_DEBUG_CATEGORY_INIT (wpe_extension_debug, "wpewebextension", 0, + "GstWPE WebExtension"); + /* Register our own audio sink to */ gst_element_register (NULL, "gstwpeaudiosink", GST_RANK_PRIMARY + 500, gst_wpe_audio_sink_get_type ()); gst_object_unref (g_object_new (gst_wpe_bus_msg_forwarder_get_type (), NULL)); global_extension = extension; - GST_INFO_OBJECT (global_extension, "Setting as global extension."); + GST_INFO ("Setting as global extension."); } void
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c
Changed
@@ -697,7 +697,7 @@ } if (!size) { - return ret = GST_AV1_PARSER_NO_MORE_DATA; + ret = GST_AV1_PARSER_NO_MORE_DATA; goto error; } @@ -1781,7 +1781,8 @@ &bit_reader, &(metadata->timecode)); break; default: - return GST_AV1_PARSER_BITSTREAM_ERROR; + GST_WARNING ("Unknown metadata type %u", metadata->metadata_type); + return GST_AV1_PARSER_OK; } if (retval != GST_AV1_PARSER_OK)
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecparsers/gsth264bitwriter.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecparsers/gsth264bitwriter.c
Changed
@@ -1492,8 +1492,7 @@ gboolean have_space = TRUE; GstBitWriter bw; - g_return_val_if_fail (primary_pic_type >= 0 - && primary_pic_type <= 7, GST_H264_BIT_WRITER_ERROR); + g_return_val_if_fail (primary_pic_type <= 7, GST_H264_BIT_WRITER_ERROR); g_return_val_if_fail (data != NULL, GST_H264_BIT_WRITER_ERROR); g_return_val_if_fail (size != NULL, GST_H264_BIT_WRITER_ERROR); g_return_val_if_fail (*size > 0, GST_H264_BIT_WRITER_ERROR);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecparsers/gsth265bitwriter.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecparsers/gsth265bitwriter.c
Changed
@@ -1792,8 +1792,8 @@ g_return_val_if_fail (data != NULL, GST_H265_BIT_WRITER_ERROR); g_return_val_if_fail (size != NULL, GST_H265_BIT_WRITER_ERROR); g_return_val_if_fail (*size > 0, GST_H265_BIT_WRITER_ERROR); - g_return_val_if_fail (nal_type >= GST_H265_NAL_SLICE_TRAIL_N && - nal_type <= GST_H265_NAL_SLICE_CRA_NUT, GST_H265_BIT_WRITER_ERROR); + g_return_val_if_fail (nal_type <= GST_H265_NAL_SLICE_CRA_NUT, + GST_H265_BIT_WRITER_ERROR); gst_bit_writer_init_with_data (&bw, data, *size, FALSE);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c
Changed
@@ -1889,7 +1889,8 @@ for (j = 0; j <= vps->max_layer_id; j++) { /* layer_id_included_flagij */ /* FIXME: need to parse this when we can support parsing multi-layer info. */ - nal_reader_skip (&nr, 1); + if (!nal_reader_skip (&nr, 1)) + goto error; } } @@ -2762,8 +2763,10 @@ } if (!slice->dependent_slice_segment_flag) { - for (i = 0; i < pps->num_extra_slice_header_bits; i++) - nal_reader_skip (&nr, 1); + for (i = 0; i < pps->num_extra_slice_header_bits; i++) { + if (!nal_reader_skip (&nr, 1)) + goto error; + } READ_UE_MAX (&nr, slice->type, 63); if (pps->output_flag_present_flag)
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gstav1decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gstav1decoder.c
Changed
@@ -119,6 +119,7 @@ GstAV1DecoderPrivate *priv; gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = priv = gst_av1_decoder_get_instance_private (self);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gsth264decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gsth264decoder.c
Changed
@@ -340,6 +340,7 @@ GstH264DecoderPrivate *priv; gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = priv = gst_h264_decoder_get_instance_private (self);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gsth265decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gsth265decoder.c
Changed
@@ -218,6 +218,7 @@ GstH265DecoderPrivate *priv; gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = priv = gst_h265_decoder_get_instance_private (self);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gstmpeg2decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gstmpeg2decoder.c
Changed
@@ -329,6 +329,7 @@ gst_mpeg2_decoder_init (GstMpeg2Decoder * self) { gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = gst_mpeg2_decoder_get_instance_private (self);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gstvp8decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gstvp8decoder.c
Changed
@@ -102,6 +102,7 @@ gst_vp8_decoder_init (GstVp8Decoder * self) { gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = gst_vp8_decoder_get_instance_private (self); }
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/codecs/gstvp9decoder.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/codecs/gstvp9decoder.c
Changed
@@ -140,6 +140,7 @@ gst_vp9_decoder_init (GstVp9Decoder * self) { gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); self->priv = gst_vp9_decoder_get_instance_private (self);
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/va/gstvaallocator.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/va/gstvaallocator.c
Changed
@@ -414,7 +414,8 @@ return NULL; } - va_sync_surface (self->display, surface); + if (!va_sync_surface (self->display, surface)) + return NULL; return self->parent_map (gmem, maxsize, flags); }
View file
gst-plugins-bad-1.22.0.tar.xz/gst-libs/gst/vulkan/gstvkmemory.c -> gst-plugins-bad-1.22.1.tar.xz/gst-libs/gst/vulkan/gstvkmemory.c
Changed
@@ -142,6 +142,27 @@ static void _vk_mem_unmap_full (GstVulkanMemory * mem, GstMapInfo * info) { + if ((info->flags & GST_MAP_WRITE) + && !(mem->properties & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) { + GError *error = NULL; + VkResult err; + VkMappedMemoryRange range = { + .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, + /* .pNext = */ + .memory = mem->mem_ptr, + .offset = mem->vk_offset, + .size = mem->mem.size, + }; + + err = vkFlushMappedMemoryRanges (mem->device->device, 1u, &range); + if (gst_vulkan_error_to_g_error (err, &error, + "vkFlushMappedMemoryRanges") < 0) { + GST_CAT_WARNING (GST_CAT_VULKAN_MEMORY, "Failed to flush memory: %s", + error->message); + g_clear_error (&error); + } + } + vkUnmapMemory (mem->device->device, mem->mem_ptr); }
View file
gst-plugins-bad-1.22.0.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.22.1.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.22.1</revision> + <branch>1.22</branch> + <name></name> + <created>2023-03-04</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.22.1.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.22.0</revision> <branch>main</branch> <name></name>
View file
gst-plugins-bad-1.22.0.tar.xz/gst/codectimestamper/gstcodectimestamper.c -> gst-plugins-bad-1.22.1.tar.xz/gst/codectimestamper/gstcodectimestamper.c
Changed
@@ -445,7 +445,7 @@ GST_BUFFER_PTS (frame->buffer) = frame->pts; GST_BUFFER_DTS (frame->buffer) = dts; - GST_TRACE_OBJECT (self, "Output %" GST_PTR_FORMAT, frame->buffer); + GST_LOG_OBJECT (self, "Output %" GST_PTR_FORMAT, frame->buffer); ret = gst_pad_push (self->srcpad, g_steal_pointer (&frame->buffer)); @@ -477,15 +477,15 @@ { GstCodecTimestamperPrivate *priv = self->priv; + GST_DEBUG_OBJECT (self, "Draining"); + while (gst_queue_array_get_length (priv->queue) > 0) { GstCodecTimestamperFrame *frame = (GstCodecTimestamperFrame *) gst_queue_array_pop_head_struct (priv->queue); gst_codec_timestamper_output_frame (self, frame); } - priv->time_adjustment = GST_CLOCK_TIME_NONE; - priv->last_dts = GST_CLOCK_TIME_NONE; - priv->last_pts = GST_CLOCK_TIME_NONE; + GST_DEBUG_OBJECT (self, "Drained"); } static gint @@ -509,7 +509,7 @@ gst_codec_timestamper_frame_init (&frame); - GST_TRACE_OBJECT (self, "Handle %" GST_PTR_FORMAT, buffer); + GST_LOG_OBJECT (self, "Handle %" GST_PTR_FORMAT, buffer); pts = GST_BUFFER_PTS (buffer); dts = GST_BUFFER_DTS (buffer); @@ -517,15 +517,24 @@ if (!GST_CLOCK_TIME_IS_VALID (priv->time_adjustment)) { GstClockTime start_time = GST_CLOCK_TIME_NONE; - if (GST_CLOCK_TIME_IS_VALID (pts)) + if (GST_CLOCK_TIME_IS_VALID (pts)) { + GST_DEBUG_OBJECT (self, "Got valid PTS: %" GST_TIME_FORMAT, + GST_TIME_ARGS (pts)); start_time = MAX (pts, priv->in_segment.start); - else if (GST_CLOCK_TIME_IS_VALID (dts)) + } else if (GST_CLOCK_TIME_IS_VALID (dts)) { + GST_DEBUG_OBJECT (self, "Got valid DTS: %" GST_TIME_FORMAT, + GST_TIME_ARGS (dts)); start_time = MAX (dts, priv->in_segment.start); - else + } else { + GST_WARNING_OBJECT (self, "Both PTS and DTS are invalid"); start_time = priv->in_segment.start; + } - if (start_time < min_pts) + if (start_time < min_pts) { priv->time_adjustment = min_pts - start_time; + GST_DEBUG_OBJECT (self, "Updating time-adjustment %" GST_TIME_FORMAT, + GST_TIME_ARGS (priv->time_adjustment)); + } } if (GST_CLOCK_TIME_IS_VALID (priv->time_adjustment)) { @@ -557,6 +566,10 @@ frame.events = priv->current_frame_events; priv->current_frame_events = NULL; + GST_LOG_OBJECT (self, "Enqueue frame, buffer pts %" GST_TIME_FORMAT + ", adjusted pts %" GST_TIME_FORMAT, + GST_TIME_ARGS (GST_BUFFER_PTS (buffer)), GST_TIME_ARGS (pts)); + gst_queue_array_push_tail_struct (priv->queue, &frame); if (GST_CLOCK_TIME_IS_VALID (frame.pts)) { g_array_append_val (priv->timestamp_queue, frame.pts);
View file
gst-plugins-bad-1.22.0.tar.xz/gst/mpegdemux/gstmpegdemux.c -> gst-plugins-bad-1.22.1.tar.xz/gst/mpegdemux/gstmpegdemux.c
Changed
@@ -712,6 +712,16 @@ gst_ps_demux_send_segment (demux, stream, pts); + /* Ignores DTS if PTS < DTS. Maybe additional sanity checking is possible + * by comparing 33bits timestap rollover case, but PTS < DTS is already + * invalid case */ + if (GST_CLOCK_TIME_IS_VALID (pts) && GST_CLOCK_TIME_IS_VALID (dts) && + dts > pts) { + GST_WARNING_OBJECT (demux, "PTS (%" GST_TIME_FORMAT ") < DTS (%" + GST_TIME_FORMAT ")", GST_TIME_ARGS (pts), GST_TIME_ARGS (dts)); + dts = GST_CLOCK_TIME_NONE; + } + /* OK, sent new segment now prepare the buffer for sending */ GST_BUFFER_PTS (buf) = pts; GST_BUFFER_DTS (buf) = dts;
View file
gst-plugins-bad-1.22.0.tar.xz/gst/transcode/gsturitranscodebin.c -> gst-plugins-bad-1.22.1.tar.xz/gst/transcode/gsturitranscodebin.c
Changed
@@ -603,13 +603,13 @@ break; case PROP_AUDIO_FILTER: GST_OBJECT_LOCK (self); - gst_object_unref (self->audio_filter); + gst_clear_object (&self->audio_filter); self->audio_filter = g_value_dup_object (value); GST_OBJECT_UNLOCK (self); break; case PROP_VIDEO_FILTER: GST_OBJECT_LOCK (self); - gst_object_unref (self->video_filter); + gst_clear_object (&self->video_filter); self->video_filter = g_value_dup_object (value); GST_OBJECT_UNLOCK (self); break;
View file
gst-plugins-bad-1.22.0.tar.xz/gst/videoparsers/gsth265parse.c -> gst-plugins-bad-1.22.1.tar.xz/gst/videoparsers/gsth265parse.c
Changed
@@ -2368,6 +2368,60 @@ GstH265Profile p; p = gst_h265_get_profile_from_sps (sps); + /* gst_h265_get_profile_from_sps() method will determine profile + * as defined in spec, with allowing slightly broken profile-tier-level + * bits, then it might not be able to cover all cases. + * If it's still unknown, do guess again */ + if (p == GST_H265_PROFILE_INVALID) { + GST_WARNING_OBJECT (h265parse, "Unknown profile, guessing"); + switch (sps->chroma_format_idc) { + case 0: + if (sps->bit_depth_luma_minus8 == 0) { + p = GST_H265_PROFILE_MONOCHROME; + } else if (sps->bit_depth_luma_minus8 <= 2) { + p = GST_H265_PROFILE_MONOCHROME_10; + } else if (sps->bit_depth_luma_minus8 <= 4) { + p = GST_H265_PROFILE_MONOCHROME_12; + } else { + p = GST_H265_PROFILE_MONOCHROME_16; + } + break; + case 1: + if (sps->bit_depth_luma_minus8 == 0) { + p = GST_H265_PROFILE_MAIN; + } else if (sps->bit_depth_luma_minus8 <= 2) { + p = GST_H265_PROFILE_MAIN_10; + } else if (sps->bit_depth_luma_minus8 <= 4) { + p = GST_H265_PROFILE_MAIN_12; + } else { + p = GST_H265_PROFILE_MAIN_444_16_INTRA; + } + break; + case 2: + if (sps->bit_depth_luma_minus8 <= 2) { + p = GST_H265_PROFILE_MAIN_422_10; + } else if (sps->bit_depth_luma_minus8 <= 4) { + p = GST_H265_PROFILE_MAIN_422_12; + } else { + p = GST_H265_PROFILE_MAIN_444_16_INTRA; + } + break; + case 3: + if (sps->bit_depth_luma_minus8 == 0) { + p = GST_H265_PROFILE_MAIN_444; + } else if (sps->bit_depth_luma_minus8 <= 2) { + p = GST_H265_PROFILE_MAIN_444_10; + } else if (sps->bit_depth_luma_minus8 <= 4) { + p = GST_H265_PROFILE_MAIN_444_12; + } else { + p = GST_H265_PROFILE_MAIN_444_16_INTRA; + } + break; + default: + break; + } + } + profile = gst_h265_profile_to_string (p); if (s && gst_structure_has_field (s, "profile")) {
View file
gst-plugins-bad-1.22.0.tar.xz/meson.build -> gst-plugins-bad-1.22.1.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.22.0', + version : '1.22.1', meson_version : '>= 0.62', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
gst-plugins-bad-1.22.0.tar.xz/po/fur.po -> gst-plugins-bad-1.22.1.tar.xz/po/fur.po
Changed
@@ -1,25 +1,26 @@ # Friulian translation for gst-plugins-bad package of GStreamer project # This file is put in the public domain. -# Fabio Tomat <f.t.public@gmail.com>, 2016. +# Fabio Tomat <f.t.public@gmail.com>, 2023. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad 1.10.0\n" +"Project-Id-Version: gst-plugins-bad 1.21.90\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-25 01:02+0100\n" -"PO-Revision-Date: 2016-12-30 13:28+0100\n" -"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n" +"POT-Creation-Date: 2023-02-22 11:52+0000\n" +"PO-Revision-Date: 2023-01-24 22:38+0000\n" +"Last-Translator: Fabio T. <f.t.public@gmail.com>\n" "Language-Team: Friulian <f.t.public@gmail.com>\n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Editor: HaiPO 1.4 beta\n" "X-Generator: Poedit 1.8.11\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "No URL set." -msgstr "" +msgstr "Nissun URL configurât." msgid "OpenCV failed to load template image" msgstr "OpenCV nol è rivât a cjariâ la imagjin model" @@ -152,13 +153,11 @@ #~ msgid "No file name specified for writing." #~ msgstr "Nissun non di file specificât pe scriture." -#, c-format #~ msgid "" #~ "Given file name \"%s\" can't be converted to local file name encoding." #~ msgstr "" #~ "Il non di file furnît \"%s\" nol pues jessi convertît te codifiche non " #~ "file locâl." -#, c-format #~ msgid "Could not open file \"%s\" for writing." #~ msgstr "Impussibil vierzi il file \"%s\" pe scriture."
View file
gst-plugins-bad-1.22.0.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.22.1.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.22.0\n" +"Project-Id-Version: gst-plugins-bad-1.22.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-23 19:35+0000\n" +"POT-Creation-Date: 2023-03-04 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/curl/gstcurlhttpsrc.c:1439 +#: ext/curl/gstcurlhttpsrc.c:1440 msgid "No URL set." msgstr ""
View file
gst-plugins-bad-1.22.0.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.22.1.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.22.0\n" +"Project-Id-Version: gst-plugins-bad-1.22.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-23 19:35+0000\n" +"POT-Creation-Date: 2023-03-04 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/curl/gstcurlhttpsrc.c:1439 +#: ext/curl/gstcurlhttpsrc.c:1440 msgid "No URL set." msgstr ""
View file
gst-plugins-bad-1.22.0.tar.xz/sys/amfcodec/gstamfav1enc.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/amfcodec/gstamfav1enc.cpp
Changed
@@ -283,7 +283,7 @@ #define DOC_SRC_CAPS \ "video/x-av1, width = (int) 128, 4096 , height = (int) 128, 4096 , " \ - "profile = (string) main, alignment= (string) tu" + "profile = (string) main, stream-format = (string) obu-stream, alignment= (string) tu" typedef struct _GstAmfAv1Enc { @@ -824,7 +824,7 @@ GstTagList *tags; caps = gst_caps_from_string ("video/x-av1, profile = (string) main, " - "alignment = (string) tu"); + "stream-format = (string) obu-stream, alignment = (string) tu"); output_state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (self), caps, state); @@ -1081,8 +1081,8 @@ + ", " + std::to_string (max_height) + " "; sink_caps_str = "video/x-raw, format = (string) NV12, " + resolution_str; - src_caps_str = "video/x-av1, " + resolution_str + ", profile = (string) main, " - "alignment = (string) tu"; + src_caps_str = "video/x-av1, " + resolution_str + ", profile = (string) main" + ", stream-format = (string) obu-stream, alignment = (string) tu"; system_caps = gst_caps_from_string (sink_caps_str.c_str ()); sink_caps = gst_caps_copy (system_caps);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/avfvideosrc.m -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/avfvideosrc.m
Changed
@@ -176,6 +176,10 @@ AVCaptureConnection *connection; CMClockRef inputClock; + NSCondition *permissionCond; + BOOL permissionRequestPending; + BOOL permissionStopRequest; + dispatch_queue_t mainQueue; dispatch_queue_t workerQueue; NSConditionLock *bufQueueLock; @@ -244,7 +248,6 @@ - (BOOL)unlockStop; - (BOOL)query:(GstQuery *)query; - (void)setContext:(GstContext *)context; -- (GstStateChangeReturn)changeState:(GstStateChange)transition; - (GstFlowReturn)create:(GstBuffer **)buf; - (GstCaps *)fixate:(GstCaps *)caps; - (BOOL)decideAllocation:(GstQuery *)query; @@ -332,6 +335,8 @@ workerQueue = dispatch_queue_create ("org.freedesktop.gstreamer.avfvideosrc.output", NULL); + permissionCond = NSCondition alloc init; + gst_base_src_set_live (baseSrc, TRUE); gst_base_src_set_format (baseSrc, GST_FORMAT_TIME); } @@ -343,6 +348,8 @@ { mainQueue = NULL; workerQueue = NULL; + + permissionCond = nil; } - (BOOL)openDeviceInput @@ -350,6 +357,52 @@ NSString *mediaType = AVMediaTypeVideo; NSError *err; + // Since Mojave, permissions are now supposed to be explicitly granted + // before capturing from the camera + if (@available(macOS 10.14, *)) { + // Check if permission has already been granted (or denied) + AVAuthorizationStatus authStatus = AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo; + switch (authStatus) { + case AVAuthorizationStatusDenied: + // The user has explicitly denied permission for media capture. + GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, + ("Device video access permission has been explicitly denied before"), ("Authorization status: %d", (int)authStatus)); + return NO; + case AVAuthorizationStatusRestricted: + // The user is not allowed to access media capture devices. + GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, + ("Device video access permission cannot be granted by the user"), ("Authorization status: %d", (int)authStatus)); + return NO; + case AVAuthorizationStatusAuthorized: + // The user has explicitly granted permission for media capture, + // or explicit user permission is not necessary for the media type in question. + GST_DEBUG_OBJECT (element, "Device video access permission has already been granted"); + break; + case AVAuthorizationStatusNotDetermined: + // Explicit user permission is required for media capture, + // but the user has not yet granted or denied such permission. + GST_DEBUG_OBJECT (element, "Requesting device video access permission"); + + permissionCond lock; + permissionRequestPending = YES; + permissionCond unlock; + + AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { + GST_DEBUG_OBJECT (element, "Device video access permission %s", granted ? "granted" : "not granted"); + // Check if permission has been granted + if (!granted) { + GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, + ("Device video access permission has been denied"), ("Authorization status: %d", (int)AVAuthorizationStatusDenied)); + } + permissionCond lock; + permissionRequestPending = NO; + permissionCond broadcast; + permissionCond unlock; + }; + break; + } + } + if (deviceIndex == DEFAULT_DEVICE_INDEX) { #ifdef HAVE_IOS if (deviceType != DEFAULT_DEVICE_TYPE && position != DEFAULT_POSITION) { @@ -453,60 +506,6 @@ GST_DEBUG_OBJECT (element, "Opening device"); - // Since Mojave, permissions are now supposed to be explicitly granted - // before performing anything on a device - if (@available(macOS 10.14, *)) { - if (captureScreen) - goto checked; - - // Check if permission has already been granted (or denied) - AVAuthorizationStatus authStatus = AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo; - switch (authStatus) { - case AVAuthorizationStatusDenied: - // The user has explicitly denied permission for media capture. - GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, - ("Device video access permission has been explicitly denied before"), ("Authorization status: %d", (int)authStatus)); - return success; - case AVAuthorizationStatusRestricted: - // The user is not allowed to access media capture devices. - GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, - ("Device video access permission cannot be granted by the user"), ("Authorization status: %d", (int)authStatus)); - return success; - case AVAuthorizationStatusAuthorized: - // The user has explicitly granted permission for media capture, - // or explicit user permission is not necessary for the media type in question. - GST_DEBUG_OBJECT (element, "Device video access permission has already been granted"); - break; - case AVAuthorizationStatusNotDetermined: - ; - // Explicit user permission is required for media capture, - // but the user has not yet granted or denied such permission. - dispatch_semaphore_t sema = dispatch_semaphore_create(0); - dispatch_sync (mainQueue, ^{ - AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { - GST_DEBUG_OBJECT (element, "Device video access permission %s", granted ? "granted" : "not granted"); - dispatch_semaphore_signal(sema); - }; - }); - // Block on dialog being answered - if (!NSThread isMainThread) { - dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); - } else { - while (dispatch_semaphore_wait(sema, DISPATCH_TIME_NOW)) { - NSRunLoop currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:NSDate dateWithTimeIntervalSinceNow:0; - } - } - // Check if permission has been granted - AVAuthorizationStatus videoAuthorizationStatus = AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo; - if (videoAuthorizationStatus != AVAuthorizationStatusAuthorized) { - GST_ELEMENT_ERROR (element, RESOURCE, NOT_AUTHORIZED, - ("Device video access permission has just been denied"), ("Authorization status: %d", (int)videoAuthorizationStatus)); - return success; - } - } - } - -checked: dispatch_sync (mainQueue, ^{ BOOL ret; @@ -535,11 +534,10 @@ connection.videoOrientation = GstAVFVideoSourceOrientation2AVCaptureVideoOrientation(orientation); #endif inputClock = ((AVCaptureInputPort *)connection.inputPorts0).clock; - *successPtr = YES; }); - GST_DEBUG_OBJECT (element, "Opening device %s", success ? "succeed" : "failed"); + GST_DEBUG_OBJECT (element, "Opening device %s", success ? "succeeded" : "failed"); return success; } @@ -915,8 +913,24 @@ gst_caps_replace (&caps, new_caps); GST_INFO_OBJECT (element, "configured caps %"GST_PTR_FORMAT, caps); - if (!session isRunning) - session startRunning; + if (!session isRunning) { + BOOL stopping = NO; + + /* If permissions are still pending, wait for a response before + * starting the capture running, or else we'll get black frames */ + permissionCond lock; + if (permissionRequestPending && !permissionStopRequest) { + GST_DEBUG_OBJECT (element, "Waiting for pending device access permission."); + do { + permissionCond wait; + } while (permissionRequestPending && !permissionStopRequest); + } + stopping = permissionStopRequest; + permissionCond unlock; + + if (!stopping) + session startRunning; + } /* Unlock device configuration only after session is started so the session * won't reset the capture formats */ @@ -928,6 +942,14 @@ - (BOOL)start { + permissionCond lock; + permissionRequestPending = NO; + permissionStopRequest = NO; + permissionCond unlock; +
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/meson.build -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/meson.build
Changed
@@ -115,7 +115,7 @@ objcpp_args : gst_plugins_bad_args + applemedia_args + applemedia_objc_args + applemedia_objcpp_args, link_args : noseh_link_args, include_directories : configinc, libsinc, - dependencies : gstvideo_dep, gstaudio_dep, gstpbutils_dep, gst_dep, gstbase_dep, gstgl_dep, gstglproto_dep + applemedia_frameworks, + dependencies : gstvideo_dep, gstaudio_dep, gstpbutils_dep, gst_dep, gstbase_dep, gstgl_dep, gstglproto_dep, gstcodecparsers_dep + applemedia_frameworks, override_options : 'cpp_std=c++11', install : true, install_dir : plugins_install_dir,
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/vtdec.c -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/vtdec.c
Changed
@@ -169,7 +169,7 @@ { GstCaps *caps = gst_caps_from_string (VIDEO_SRC_CAPS); /* RGBA64_LE is kCVPixelFormatType_64RGBALE, only available on macOS 11.3+ */ - if (GST_VTUTIL_HAVE_64ARGBALE) + if (GST_VTUTIL_HAVE_64RGBALE) caps = gst_vtutil_caps_append_video_format (caps, "RGBA64_LE"); gst_element_class_add_pad_template (element_class, gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps)); @@ -299,7 +299,7 @@ return vfmt; break; case GST_VIDEO_FORMAT_RGBA64_LE: - if (GST_VTUTIL_HAVE_64ARGBALE) { + if (GST_VTUTIL_HAVE_64RGBALE) { if (prores) return vfmt; } else { @@ -697,7 +697,7 @@ cv_format = kCVPixelFormatType_64ARGB; break; case GST_VIDEO_FORMAT_RGBA64_LE: - if (GST_VTUTIL_HAVE_64ARGBALE) + if (GST_VTUTIL_HAVE_64RGBALE) cv_format = kCVPixelFormatType_64RGBALE; else /* Codepath will never be hit on macOS older than Big Sur (11.3) */ @@ -1033,7 +1033,7 @@ } } - if (drain) + if (drain || flush) VTDecompressionSessionWaitForAsynchronousFrames (vtdec->session); /* push a buffer if there are enough frames to guarantee that we push in PTS @@ -1066,54 +1066,6 @@ return ret; } -static gboolean -parse_h264_profile_and_level_from_codec_data (GstVtdec * vtdec, - GstBuffer * codec_data, int *profile, int *level) -{ - GstMapInfo map; - guint8 *data; - gint size; - gboolean ret = TRUE; - - gst_buffer_map (codec_data, &map, GST_MAP_READ); - data = map.data; - size = map.size; - - /* parse the avcC data */ - if (size < 7) - goto avcc_too_small; - - /* parse the version, this must be 1 */ - if (data0 != 1) - goto wrong_version; - - /* AVCProfileIndication */ - /* profile_compat */ - /* AVCLevelIndication */ - if (profile) - *profile = data1; - - if (level) - *level = data3; - -out: - gst_buffer_unmap (codec_data, &map); - - return ret; - -avcc_too_small: - GST_ELEMENT_ERROR (vtdec, STREAM, DECODE, (NULL), - ("invalid codec_data buffer length")); - ret = FALSE; - goto out; - -wrong_version: - GST_ELEMENT_ERROR (vtdec, STREAM, DECODE, (NULL), - ("wrong avcC version in codec_data")); - ret = FALSE; - goto out; -} - static int get_dpb_max_mb_s_from_level (GstVtdec * vtdec, int level) { @@ -1170,47 +1122,126 @@ vtdec->reorder_queue_length = 0; } + GST_DEBUG_OBJECT (vtdec, "Reorder queue length: %d", + vtdec->reorder_queue_length); + return TRUE; +} + +static gboolean +parse_h264_decoder_config_record (GstVtdec * vtdec, GstBuffer * codec_data, + GstH264DecoderConfigRecord ** config) +{ + GstH264NalParser *parser = gst_h264_nal_parser_new (); + GstMapInfo map; + gboolean ret = TRUE; + + gst_buffer_map (codec_data, &map, GST_MAP_READ); + + if (gst_h264_parser_parse_decoder_config_record (parser, map.data, map.size, + config) != GST_H264_PARSER_OK) { + GST_WARNING_OBJECT (vtdec, "Failed to parse codec-data"); + ret = FALSE; + } + + gst_h264_nal_parser_free (parser); + gst_buffer_unmap (codec_data, &map); + return ret; +} + +static gboolean +get_h264_dpb_size_from_sps (GstVtdec * vtdec, GstH264NalUnit * nalu, + gint * dpb_size) +{ + GstH264ParserResult result; + GstH264SPS sps; + gint width_mb, height_mb; + gint max_dpb_frames, max_dpb_size, max_dpb_mbs; + + result = gst_h264_parse_sps (nalu, &sps); + if (result != GST_H264_PARSER_OK) { + GST_WARNING_OBJECT (vtdec, "Failed to parse SPS, result %d", result); + return FALSE; + } + + max_dpb_mbs = get_dpb_max_mb_s_from_level (vtdec, sps.level_idc); + if (max_dpb_mbs == -1) { + GST_ELEMENT_ERROR (vtdec, STREAM, DECODE, (NULL), + ("invalid level found in SPS, could not compute max_dpb_mbs")); + gst_h264_sps_clear (&sps); + return FALSE; + } + + /* This formula is specified in sections A.3.1.h and A.3.2.f of the 2009 + * edition of the standard */ + width_mb = sps.width / 16; + height_mb = sps.height / 16; + max_dpb_frames = MIN (max_dpb_mbs / (width_mb * height_mb), + GST_VTDEC_DPB_MAX_SIZE); + + if (sps.vui_parameters_present_flag + && sps.vui_parameters.bitstream_restriction_flag) + max_dpb_frames = MAX (1, sps.vui_parameters.max_dec_frame_buffering); + + /* Some non-conforming H264 streams may request a number of frames + * larger than the calculated limit. + * See https://chromium-review.googlesource.com/c/chromium/src/+/760276/ + */ + max_dpb_size = MAX (max_dpb_frames, sps.num_ref_frames); + if (max_dpb_size > GST_VTDEC_DPB_MAX_SIZE) { + GST_WARNING_OBJECT (vtdec, "Too large calculated DPB size %d", + max_dpb_size); + max_dpb_size = GST_VTDEC_DPB_MAX_SIZE; + } + + *dpb_size = max_dpb_size; + + gst_h264_sps_clear (&sps); return TRUE; } static gboolean compute_h264_decode_picture_buffer_length (GstVtdec * vtdec, - GstBuffer * codec_data, int *length) + GstBuffer * codec_data, gint * length) { - int profile, level; - int dpb_mb_size = 16; - int max_dpb_size_frames = 16; - int max_dpb_mb_s = -1; - int width_in_mb_s = GST_ROUND_UP_16 (vtdec->video_info.width) / dpb_mb_size; - int height_in_mb_s = GST_ROUND_UP_16 (vtdec->video_info.height) / dpb_mb_size; + GstH264DecoderConfigRecord *config = NULL; + GstH264NalUnit *nalu; + guint8 profile, level; + gboolean ret = TRUE; + gint new_length; + guint i; *length = 0; - if (!parse_h264_profile_and_level_from_codec_data (vtdec, codec_data, - &profile, &level)) + if (vtdec->video_info.width == 0 || vtdec->video_info.height == 0) return FALSE; - if (vtdec->video_info.width == 0 || vtdec->video_info.height == 0) + if (!parse_h264_decoder_config_record (vtdec, codec_data, &config)) return FALSE;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/vtdec.h -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/vtdec.h
Changed
@@ -30,6 +30,8 @@ #if defined(APPLEMEDIA_MOLTENVK) #include <gst/vulkan/vulkan.h> #endif +#define GST_USE_UNSTABLE_API +#include <gst/codecparsers/gsth264parser.h> G_BEGIN_DECLS @@ -42,6 +44,8 @@ typedef struct _GstVtdec GstVtdec; typedef struct _GstVtdecClass GstVtdecClass; +#define GST_VTDEC_DPB_MAX_SIZE 16 + struct _GstVtdec { GstVideoDecoder base_vtdec;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/vtenc.c -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/vtenc.c
Changed
@@ -70,6 +70,7 @@ #include "corevideobuffer.h" #include "vtutil.h" #include <gst/pbutils/codec-utils.h> +#include <sys/sysctl.h> #define VTENC_DEFAULT_BITRATE 0 #define VTENC_DEFAULT_FRAME_REORDERING TRUE @@ -201,8 +202,7 @@ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, I420 }")); #else static GstStaticCaps sink_caps = -GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE - ("{ AYUV64, UYVY, NV12, I420, ARGB64_BE }")); +GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV64, UYVY, NV12, I420 }")); #endif @@ -231,9 +231,37 @@ { GstCaps *caps = gst_static_caps_get (&sink_caps); - /* RGBA64_LE is kCVPixelFormatType_64RGBALE, only available on macOS 11.3+ */ - if (GST_VTUTIL_HAVE_64ARGBALE) - caps = gst_vtutil_caps_append_video_format (caps, "RGBA64_LE"); +#ifndef HAVE_IOS + gboolean enable_argb = TRUE; + int retval; + char cpu_name30; + size_t cpu_len = 30; + + if (__builtin_available (macOS 13.0, *)) { + /* Can't negate a __builtin_available check */ + } else { + /* Disable ARGB64/RGBA64 if we're on M1 Pro/Max and macOS < 13.0 + * due to a bug within VideoToolbox which causes encoding to fail. */ + retval = sysctlbyname ("machdep.cpu.brand_string", &cpu_name, &cpu_len, + NULL, 0); + + if (retval == 0 && + (strstr (cpu_name, "M1 Pro") != NULL || + strstr (cpu_name, "M1 Max") != NULL)) { + GST_WARNING + ("Disabling ARGB64/RGBA64 caps due to a bug in VideoToolbox " + "on M1 Pro/Max running macOS < 13.0."); + enable_argb = FALSE; + } + } + + if (enable_argb) { + caps = gst_vtutil_caps_append_video_format (caps, "ARGB64_BE"); + /* RGBA64_LE is kCVPixelFormatType_64RGBALE, only available on macOS 11.3+ */ + if (GST_VTUTIL_HAVE_64RGBALE) + caps = gst_vtutil_caps_append_video_format (caps, "RGBA64_LE"); + } +#endif gst_element_class_add_pad_template (element_class, gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps)); } @@ -1208,11 +1236,22 @@ const GstVTEncoderDetails *codec_details = GST_VTENC_CLASS_GET_CODEC_DETAILS (G_OBJECT_GET_CLASS (self)); + /* Apple's M1 hardware encoding fails when provided with an interlaced ProRes source. + * It's most likely a bug in VideoToolbox, as no such limitation has been officially mentioned anywhere. + * For now let's disable HW encoding entirely when such case occurs. */ + gboolean enable_hw = !(GST_VIDEO_INFO_IS_INTERLACED (&self->video_info) + && codec_details->format_id == GST_kCMVideoCodecType_Some_AppleProRes); + + if (!enable_hw) + GST_WARNING_OBJECT (self, + "Interlaced content detected, disabling HW-accelerated encoding due to https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1429"); + encoder_spec = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); gst_vtutil_dict_set_boolean (encoder_spec, - kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, true); + kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, + enable_hw); if (codec_details->require_hardware) gst_vtutil_dict_set_boolean (encoder_spec, kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder, @@ -1706,7 +1745,7 @@ pixel_format_type = kCVPixelFormatType_4444AYpCbCr16; break; case GST_VIDEO_FORMAT_RGBA64_LE: - if (GST_VTUTIL_HAVE_64ARGBALE) + if (GST_VTUTIL_HAVE_64RGBALE) pixel_format_type = kCVPixelFormatType_64RGBALE; else /* Codepath will never be hit on macOS older than Big Sur (11.3) */
View file
gst-plugins-bad-1.22.0.tar.xz/sys/applemedia/vtutil.h -> gst-plugins-bad-1.22.1.tar.xz/sys/applemedia/vtutil.h
Changed
@@ -35,7 +35,7 @@ #if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 110300 #define kCVPixelFormatType_64RGBALE 'l64r' #endif -#define GST_VTUTIL_HAVE_64ARGBALE __builtin_available(macOS 11.3, *) +#define GST_VTUTIL_HAVE_64RGBALE __builtin_available(macOS 11.3, *) G_BEGIN_DECLS
View file
gst-plugins-bad-1.22.0.tar.xz/sys/d3d11/gstd3d11overlaycompositor.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/d3d11/gstd3d11overlaycompositor.cpp
Changed
@@ -211,8 +211,8 @@ subresource_data.SysMemPitch = stride; subresource_data.SysMemSlicePitch = 0; - texture_desc.Width = width; - texture_desc.Height = height; + texture_desc.Width = vmeta->width; + texture_desc.Height = vmeta->height; texture_desc.MipLevels = 1; texture_desc.ArraySize = 1; texture_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/d3d11/gstd3d11videosink.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/d3d11/gstd3d11videosink.cpp
Changed
@@ -1430,6 +1430,7 @@ GST_LOG_OBJECT (self, "End drawing"); self->drawing = FALSE; } else { + gst_d3d11_window_show (self->window); ret = gst_d3d11_window_render (self->window, self->prepared_buffer); }
View file
gst-plugins-bad-1.22.0.tar.xz/sys/d3d11/gstd3d11window.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/d3d11/gstd3d11window.cpp
Changed
@@ -815,6 +815,19 @@ } void +gst_d3d11_window_show (GstD3D11Window * window) +{ + GstD3D11WindowClass *klass; + + g_return_if_fail (GST_IS_D3D11_WINDOW (window)); + + klass = GST_D3D11_WINDOW_GET_CLASS (window); + + if (klass->show) + klass->show (window); +} + +void gst_d3d11_window_set_render_rectangle (GstD3D11Window * window, const GstVideoRectangle * rect) {
View file
gst-plugins-bad-1.22.0.tar.xz/sys/d3d11/gstd3d11window.h -> gst-plugins-bad-1.22.1.tar.xz/sys/d3d11/gstd3d11window.h
Changed
@@ -121,6 +121,8 @@ { GstObjectClass object_class; + void (*show) (GstD3D11Window * window); + void (*update_swap_chain) (GstD3D11Window * window); void (*change_fullscreen_mode) (GstD3D11Window * window); @@ -168,6 +170,8 @@ GType gst_d3d11_window_get_type (void); +void gst_d3d11_window_show (GstD3D11Window * window); + void gst_d3d11_window_set_render_rectangle (GstD3D11Window * window, const GstVideoRectangle * rect);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/d3d11/gstd3d11window_win32.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/d3d11/gstd3d11window_win32.cpp
Changed
@@ -43,6 +43,7 @@ #define WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW (WM_USER + 2) #define WM_GST_D3D11_DESTROY_INTERNAL_WINDOW (WM_USER + 3) #define WM_GST_D3D11_MOVE_WINDOW (WM_USER + 4) +#define WM_GST_D3D11_SHOW_WINDOW (WM_USER + 5) static LRESULT CALLBACK window_proc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -66,6 +67,8 @@ GMainContext *main_context; GMainLoop *loop; + gboolean visible; + GSource *msg_source; GIOChannel *msg_io_channel; @@ -102,6 +105,7 @@ static void gst_d3d11_window_win32_constructed (GObject * object); static void gst_d3d11_window_win32_dispose (GObject * object); +static void gst_d3d11_window_win32_show (GstD3D11Window * window); static void gst_d3d11_window_win32_update_swap_chain (GstD3D11Window * window); static void gst_d3d11_window_win32_change_fullscreen_mode (GstD3D11Window * window); @@ -143,6 +147,7 @@ gobject_class->constructed = gst_d3d11_window_win32_constructed; gobject_class->dispose = gst_d3d11_window_win32_dispose; + window_class->show = GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_show); window_class->update_swap_chain = GST_DEBUG_FUNCPTR (gst_d3d11_window_win32_update_swap_chain); window_class->change_fullscreen_mode = @@ -211,32 +216,9 @@ GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window); HWND hwnd; GstFlowReturn ret; - gint width, height; - - switch (window->method) { - case GST_VIDEO_ORIENTATION_90R: - case GST_VIDEO_ORIENTATION_90L: - case GST_VIDEO_ORIENTATION_UL_LR: - case GST_VIDEO_ORIENTATION_UR_LL: - width = display_height; - height = display_width; - break; - default: - width = display_width; - height = display_height; - break; - } - if (!self->setup_external_hwnd) { - RECT rect; - GetClientRect (self->internal_hwnd, &rect); - width += 2 * GetSystemMetrics (SM_CXSIZEFRAME); - height += - 2 * GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION); - MoveWindow (self->internal_hwnd, rect.left, rect.top, width, height, FALSE); - ShowWindow (self->internal_hwnd, SW_SHOW); + if (!self->setup_external_hwnd) goto done; - } hwnd = (HWND) window->external_handle; if (!IsWindow (hwnd)) { @@ -592,6 +574,9 @@ } self->device_handle = 0; + self->internal_hwnd = 0; + self->visible = FALSE; + self->internal_hwnd = CreateWindowExA (0, "GSTD3D11", "Direct3D11 renderer", @@ -838,6 +823,9 @@ } } break; + case WM_GST_D3D11_SHOW_WINDOW: + ShowWindow (self->internal_hwnd, SW_SHOW); + break; default: break; } @@ -929,7 +917,6 @@ SWP_FRAMECHANGED | SWP_NOACTIVATE); MoveWindow (self->internal_hwnd, rect.left, rect.top, rect.right, rect.bottom, FALSE); - ShowWindow (self->internal_hwnd, SW_SHOW); GstD3D11SRWLockGuard lk (&self->lock); self->overlay_state = GST_D3D11_WINDOW_WIN32_OVERLAY_STATE_OPENED; @@ -1125,6 +1112,51 @@ return TRUE; } +static void +gst_d3d11_window_win32_show (GstD3D11Window * window) +{ + GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window); + gint width, height; + + switch (window->method) { + case GST_VIDEO_ORIENTATION_90R: + case GST_VIDEO_ORIENTATION_90L: + case GST_VIDEO_ORIENTATION_UL_LR: + case GST_VIDEO_ORIENTATION_UR_LL: + width = GST_VIDEO_INFO_HEIGHT (&window->render_info); + height = GST_VIDEO_INFO_WIDTH (&window->render_info); + break; + default: + width = GST_VIDEO_INFO_WIDTH (&window->render_info); + height = GST_VIDEO_INFO_HEIGHT (&window->render_info); + break; + } + + if (!self->visible) { + /* if no parent the real size has to be set now because this has not been done + * when at window creation */ + if (!self->external_hwnd) { + RECT rect; + GetClientRect (self->internal_hwnd, &rect); + width += 2 * GetSystemMetrics (SM_CXSIZEFRAME); + height += + 2 * GetSystemMetrics (SM_CYSIZEFRAME) + + GetSystemMetrics (SM_CYCAPTION); + MoveWindow (self->internal_hwnd, rect.left, rect.top, width, + height, FALSE); + ShowWindow (self->internal_hwnd, SW_SHOW); + } else if (self->internal_hwnd) { + /* ShowWindow will throw message to message pumping thread (app thread) + * synchroniously, which can be blocked at the moment. + * Post message to internal hwnd and do that from message pumping thread + */ + PostMessageA (self->internal_hwnd, WM_GST_D3D11_SHOW_WINDOW, 0, 0); + } + + self->visible = TRUE; + } +} + static GstFlowReturn gst_d3d11_window_win32_present (GstD3D11Window * window, guint present_flags) {
View file
gst-plugins-bad-1.22.0.tar.xz/sys/msdk/gstmsdk.c -> gst-plugins-bad-1.22.1.tar.xz/sys/msdk/gstmsdk.c
Changed
@@ -141,7 +141,7 @@ GST_DEBUG_CATEGORY_INIT (gst_msdkvp9dec_debug, "msdkvp9dec", 0, "msdkvp9dec"); GST_DEBUG_CATEGORY_INIT (gst_msdkvp9enc_debug, "msdkvp9enc", 0, "msdkvp9enc"); GST_DEBUG_CATEGORY_INIT (gst_msdkav1dec_debug, "msdkav1dec", 0, "msdkav1dec"); - GST_DEBUG_CATEGORY_INIT (gst_msdkav1dec_debug, "msdkav1enc", 0, "msdkav1enc"); + GST_DEBUG_CATEGORY_INIT (gst_msdkav1enc_debug, "msdkav1enc", 0, "msdkav1enc"); plugin_add_dependencies (plugin);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/gstnvencoder.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/gstnvencoder.cpp
Changed
@@ -73,6 +73,7 @@ NV_ENC_INITIALIZE_PARAMS init_params; NV_ENC_CONFIG config; gpointer session; + guint lookahead; GstVideoCodecState *input_state; @@ -84,6 +85,7 @@ GArray *task_pool; GQueue free_tasks; + GQueue pending_tasks; GQueue output_tasks; GMutex lock; @@ -171,6 +173,7 @@ (GDestroyNotify) gst_nv_encoder_task_clear); g_queue_init (&priv->free_tasks); + g_queue_init (&priv->pending_tasks); g_queue_init (&priv->output_tasks); g_mutex_init (&priv->lock); @@ -253,6 +256,7 @@ } g_queue_clear (&priv->free_tasks); + g_queue_clear (&priv->pending_tasks); g_queue_clear (&priv->output_tasks); priv->last_flow = GST_FLOW_OK; @@ -349,6 +353,7 @@ NV_ENC_PIC_PARAMS pic_params = { 0, }; NVENCSTATUS status; GstNvEncoderTask *task; + GstNvEncoderTask *pending_task; if (!priv->session || !priv->encoding_thread) return TRUE; @@ -380,6 +385,12 @@ gst_nv_encoder_device_unlock (self); GST_NV_ENCODER_LOCK (self); + while ((pending_task = + (GstNvEncoderTask *) g_queue_pop_head (&priv->pending_tasks)) != + nullptr) { + g_queue_push_tail (&priv->output_tasks, pending_task); + } + g_queue_push_tail (&priv->output_tasks, task); g_cond_broadcast (&priv->cond); GST_NV_ENCODER_UNLOCK (self); @@ -578,6 +589,11 @@ features = gst_caps_get_features (caps, 0); min_buffers = gst_nv_encoder_get_task_size (self); + if (min_buffers == 0) { + GstNvEncoderClass *klass = GST_NV_ENCODER_GET_CLASS (self); + + min_buffers = klass->calculate_min_buffers (self); + } switch (priv->subclass_device_mode) { case GST_NV_ENCODER_DEVICE_AUTO_SELECT: @@ -873,8 +889,38 @@ } gst_video_codec_frame_set_user_data (frame, task, NULL); - g_queue_push_tail (&priv->output_tasks, task); - g_cond_broadcast (&priv->cond); + + /* On Windows and if async encoding is enabled, output thread will wait + * for completion event. But on Linux, async encoding is not supported. + * So, we should wait for NV_ENC_SUCCESS in case of sync mode + * (it would introduce latency though). + * Otherwise nvEncLockBitstream() will return error */ + if (task->event_handle) { + /* Windows only path */ + g_queue_push_tail (&priv->output_tasks, task); + g_cond_broadcast (&priv->cond); + } else { + g_queue_push_tail (&priv->pending_tasks, task); + if (status == NV_ENC_SUCCESS) { + bool notify = false; + + /* XXX: nvEncLockBitstream() will return NV_ENC_ERR_INVALID_PARAM + * if lookahead is enabled. See also + * https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/494 + */ + while (g_queue_get_length (&priv->pending_tasks) > priv->lookahead) { + GstNvEncoderTask *pending_task = + (GstNvEncoderTask *) g_queue_pop_head (&priv->pending_tasks); + + g_queue_push_tail (&priv->output_tasks, pending_task); + notify = true; + } + + if (notify) + g_cond_broadcast (&priv->cond); + } + } + GST_NV_ENCODER_UNLOCK (self); return GST_FLOW_OK; @@ -1283,6 +1329,7 @@ } } + priv->lookahead = priv->config.rcParams.lookaheadDepth; task_pool_size = gst_nv_encoder_calculate_task_pool_size (self, &priv->config); g_array_set_size (priv->task_pool, task_pool_size);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/gstnvencoder.h -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/gstnvencoder.h
Changed
@@ -222,6 +222,8 @@ const GstVideoInfo * info, GstBuffer * buffer, GstNvEncoderDeviceData * data); + + guint (*calculate_min_buffers) (GstNvEncoder * encoder); }; GType gst_nv_encoder_get_type (void);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/gstnvh264encoder.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/gstnvh264encoder.cpp
Changed
@@ -227,6 +227,7 @@ static gboolean gst_nv_h264_encoder_select_device (GstNvEncoder * encoder, const GstVideoInfo * info, GstBuffer * buffer, GstNvEncoderDeviceData * data); +static guint gst_nv_h264_encoder_calculate_min_buffers (GstNvEncoder * encoder); static void gst_nv_h264_encoder_class_init (GstNvH264EncoderClass * klass, gpointer data) @@ -467,6 +468,8 @@ GST_DEBUG_FUNCPTR (gst_nv_h264_encoder_check_reconfigure); nvenc_class->select_device = GST_DEBUG_FUNCPTR (gst_nv_h264_encoder_select_device); + nvenc_class->calculate_min_buffers = + GST_DEBUG_FUNCPTR (gst_nv_h264_encoder_calculate_min_buffers); klass->device_caps = cdata->device_caps; klass->cuda_device_id = cdata->cuda_device_id; @@ -1738,6 +1741,24 @@ return TRUE; } +static guint +gst_nv_h264_encoder_calculate_min_buffers (GstNvEncoder * encoder) +{ + GstNvH264Encoder *self = GST_NV_H264_ENCODER (encoder); + guint num_buffers; + + /* At least 4 surfaces are required as documented by Nvidia Encoder guide */ + num_buffers = 4; + + /* lookahead depth */ + num_buffers += self->rc_lookahead; + + /* B frames + 1 */ + num_buffers += self->bframes + 1; + + return num_buffers; +} + static GstNvEncoderClassData * gst_nv_h264_encoder_create_class_data (GstObject * device, gpointer session, GstNvEncoderDeviceMode device_mode)
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/gstnvh265encoder.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/gstnvh265encoder.cpp
Changed
@@ -232,6 +232,7 @@ static gboolean gst_nv_h265_encoder_select_device (GstNvEncoder * encoder, const GstVideoInfo * info, GstBuffer * buffer, GstNvEncoderDeviceData * data); +static guint gst_nv_h265_encoder_calculate_min_buffers (GstNvEncoder * encoder); static void gst_nv_h265_encoder_class_init (GstNvH265EncoderClass * klass, gpointer data) @@ -468,6 +469,8 @@ GST_DEBUG_FUNCPTR (gst_nv_h265_encoder_check_reconfigure); nvenc_class->select_device = GST_DEBUG_FUNCPTR (gst_nv_h265_encoder_select_device); + nvenc_class->calculate_min_buffers = + GST_DEBUG_FUNCPTR (gst_nv_h265_encoder_calculate_min_buffers); klass->device_caps = cdata->device_caps; klass->cuda_device_id = cdata->cuda_device_id; @@ -1750,6 +1753,24 @@ return TRUE; } +static guint +gst_nv_h265_encoder_calculate_min_buffers (GstNvEncoder * encoder) +{ + GstNvH265Encoder *self = GST_NV_H265_ENCODER (encoder); + guint num_buffers; + + /* At least 4 surfaces are required as documented by Nvidia Encoder guide */ + num_buffers = 4; + + /* lookahead depth */ + num_buffers += self->rc_lookahead; + + /* B frames + 1 */ + num_buffers += self->bframes + 1; + + return num_buffers; +} + static GstNvEncoderClassData * gst_nv_h265_encoder_create_class_data (GstObject * device, gpointer session, GstNvEncoderDeviceMode device_mode)
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/gstnvvp9dec.c -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/gstnvvp9dec.c
Changed
@@ -480,7 +480,7 @@ dpb->pic_listi); if (!other_frame) { GST_ERROR_OBJECT (self, "Couldn't get decoder frame from picture"); - return FALSE; + return GST_FLOW_ERROR; } ref_frame_mapi = other_frame->index;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/nvcodec/plugin.c -> gst-plugins-bad-1.22.1.tar.xz/sys/nvcodec/plugin.c
Changed
@@ -65,6 +65,7 @@ plugin_init (GstPlugin * plugin) { CUresult cuda_ret; + const char *err_name = NULL, *err_desc = NULL; gint dev_count = 0; guint i; gboolean nvdec_available = TRUE; @@ -102,7 +103,8 @@ } if (!gst_cuvid_load_library (api_major_ver, api_minor_ver)) { - GST_WARNING ("Failed to load nvdec library"); + GST_WARNING ("Failed to load nvdec library version %u.%u", api_major_ver, + api_minor_ver); nvdec_available = FALSE; } @@ -111,12 +113,19 @@ cuda_ret = CuInit (0); if (cuda_ret != CUDA_SUCCESS) { - GST_WARNING ("Failed to init cuda, ret: 0x%x", (gint) cuda_ret); + CuGetErrorName (cuda_ret, &err_name); + CuGetErrorString (cuda_ret, &err_desc); + GST_ERROR ("Failed to init cuda, cuInit ret: 0x%x: %s: %s", + (int) cuda_ret, err_name, err_desc); return TRUE; } - if (CuDeviceGetCount (&dev_count) != CUDA_SUCCESS || !dev_count) { - GST_WARNING ("No available device, ret: 0x%x", (gint) cuda_ret); + cuda_ret = CuDeviceGetCount (&dev_count); + if (cuda_ret != CUDA_SUCCESS || !dev_count) { + CuGetErrorName (cuda_ret, &err_name); + CuGetErrorString (cuda_ret, &err_desc); + GST_ERROR ("No available device, cuDeviceGetCount ret: 0x%x: %s %s", + (int) cuda_ret, err_name, err_desc); return TRUE; } @@ -152,7 +161,7 @@ CUcontext cuda_ctx; if (!context) { - GST_WARNING ("Failed to create context for deevice %d", i); + GST_WARNING ("Failed to create context for device %d", i); continue; }
View file
gst-plugins-bad-1.22.0.tar.xz/sys/qsv/gstqsvav1enc.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/qsv/gstqsvav1enc.cpp
Changed
@@ -122,7 +122,7 @@ #define DOC_SRC_CAPS \ "video/x-av1, width = (int) 16, 8192 , height = (int) 16, 8192 , " \ - "alignment = (string) tu" + "stream-format = (string) obu-stream, alignment = (string) tu" typedef struct _GstQsvAV1EncClassData { @@ -561,7 +561,7 @@ } caps = gst_caps_from_string ("video/x-av1, profile = (string) main, " - "alignment= (string) tu"); + "stream-format = (string) obu-stream, alignment= (string) tu"); out_state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder), caps, state); gst_video_codec_state_unref (out_state); @@ -778,7 +778,7 @@ #endif std::string src_caps_str = "video/x-av1, profile = (string) main, " - "alignment = (string) tu"; + "stream-format = (string) obu-stream, alignment = (string) tu"; src_caps_str += ", width=(int) 16, " + std::to_string (resolution) + " "; src_caps_str += ", height=(int) 16, " + std::to_string (resolution) + " ";
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstjpegdecoder.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstjpegdecoder.c
Changed
@@ -90,6 +90,8 @@ gst_jpeg_decoder_init (GstJpegDecoder * self) { gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (self), TRUE); + self->priv = gst_jpeg_decoder_get_instance_private (self); }
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvaav1dec.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvaav1dec.c
Changed
@@ -300,7 +300,11 @@ return NULL; } - gst_buffer_pool_set_active (pool, TRUE); + if (!gst_buffer_pool_set_active (pool, TRUE)) { + GST_WARNING_OBJECT (self, "Failed to activate internal pool"); + gst_object_unref (pool); + return NULL; + } return pool; }
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvabaseenc.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvabaseenc.c
Changed
@@ -229,7 +229,10 @@ gst_object_unref (allocator); - gst_buffer_pool_set_active (base->priv->raw_pool, TRUE); + if (!gst_buffer_pool_set_active (base->priv->raw_pool, TRUE)) { + GST_WARNING_OBJECT (base, "Failed to activate sinkpad pool"); + return NULL; + } return base->priv->raw_pool; } @@ -690,8 +693,10 @@ { GST_ELEMENT_ERROR (venc, STREAM, ENCODE, ("Failed to reorder the input frame."), (NULL)); - gst_clear_buffer (&frame->output_buffer); - gst_video_encoder_finish_frame (venc, frame); + if (frame) { + gst_clear_buffer (&frame->output_buffer); + gst_video_encoder_finish_frame (venc, frame); + } return GST_FLOW_ERROR; } error_encode:
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvabasetransform.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvabasetransform.c
Changed
@@ -768,7 +768,10 @@ if (self->priv->sinkpad_caps) { caps = self->priv->sinkpad_caps; - gst_video_info_from_caps (&in_info, caps); + if (!gst_video_info_from_caps (&in_info, caps)) { + GST_ERROR_OBJECT (self, "Cannot parse caps %" GST_PTR_FORMAT, caps); + return NULL; + } } else { caps = self->in_caps; in_info = self->in_info;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvaencoder.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvaencoder.c
Changed
@@ -397,7 +397,11 @@ GST_ERROR_OBJECT (self, "Failed to create reconstruct pool"); goto error; } - gst_buffer_pool_set_active (recon_pool, TRUE); + + if (!gst_buffer_pool_set_active (recon_pool, TRUE)) { + GST_ERROR_OBJECT (self, "Failed to activate reconstruct pool"); + goto error; + } status = vaCreateContext (dpy, config, coded_width, coded_height, VA_PROGRESSIVE, NULL, 0, &context);
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvah264dec.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvah264dec.c
Changed
@@ -363,7 +363,7 @@ GstVaDecodePicture *va_pic; VAIQMatrixBufferH264 iq_matrix = { 0, }; VAPictureParameterBufferH264 pic_param; - guint i, n; + guint i; GArray *ref_list = self->ref_list; va_pic = gst_h264_picture_get_user_data (picture); @@ -454,9 +454,15 @@ /* We need the first 2 entries (Y intra and Y inter for YCbCr 4:2:2 and * less, and the full 6 entries for 4:4:4, see Table 7-2 of the spec for - * more details */ - n = (pps->sequence->chroma_format_idc == 3) ? 6 : 2; - for (i = 0; i < n; i++) { + * more details. + * But VA API only define the first 2 entries, so we may lose scaling + * list info for 4:4:4 stream. */ + if (pps->sequence->chroma_format_idc == 3) + GST_WARNING_OBJECT (self, "We do not have scaling list entries " + "for U/V planes in 4:4:4 stream. It may have artifact if " + "those scaling lists are not default value."); + + for (i = 0; i < 2; i++) { gst_h264_quant_matrix_8x8_get_raster_from_zigzag (iq_matrix.ScalingList8x8 i, pps->scaling_lists_8x8i); }
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvah264enc.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvah264enc.c
Changed
@@ -1200,11 +1200,13 @@ BitDepthC = 10; MbWidthC = 8; MbHeightC = 8; + break; case VA_RT_FORMAT_YUV422_10: BitDepthY = 10; BitDepthC = 10; MbWidthC = 8; MbHeightC = 16; + break; case VA_RT_FORMAT_YUV444_10: BitDepthY = 10; BitDepthC = 10;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/va/gstvah265enc.c -> gst-plugins-bad-1.22.1.tar.xz/sys/va/gstvah265enc.c
Changed
@@ -3382,8 +3382,7 @@ GST_INFO_OBJECT (self, "target bitrate computed to %u kbps", bitrate); - self->prop.bitrate = bitrate; - g_object_notify_by_pspec (G_OBJECT (self), propertiesPROP_BITRATE); + update_property_uint (base, &self->prop.bitrate, bitrate, PROP_BITRATE); } /* Adjust the setting based on RC mode. */ @@ -4284,10 +4283,8 @@ self->features.use_trellis = FALSE; } - if (self->prop.use_trellis != self->features.use_trellis) { - self->prop.use_trellis = self->features.use_trellis; - g_object_notify_by_pspec (G_OBJECT (self), propertiesPROP_TRELLIS); - } + update_property_bool (base, &self->prop.use_trellis, + self->features.use_trellis, PROP_TRELLIS); } /* We need to decide the profile and entrypoint before call this.
View file
gst-plugins-bad-1.22.0.tar.xz/sys/wasapi2/gstwasapi2ringbuffer.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/wasapi2/gstwasapi2ringbuffer.cpp
Changed
@@ -713,7 +713,10 @@ } if (self->running) { - if (gst_wasapi2_result (hr)) { + if (gst_wasapi2_result (hr) && + /* In case of normal loopback capture, this method is called from + * silence feeding thread. Don't schedule again in that case */ + self->device_class != GST_WASAPI2_CLIENT_DEVICE_CLASS_LOOPBACK_CAPTURE) { hr = MFPutWaitingWorkItem (self->event_handle, 0, self->callback_result, &self->callback_key); @@ -761,17 +764,16 @@ if (!gst_wasapi2_result (hr)) return hr; - if (padding_frames >= self->buffer_size) { + if (padding_frames >= self->loopback_buffer_size) { GST_INFO_OBJECT (self, "Padding size %d is larger than or equal to buffer size %d", - padding_frames, self->buffer_size); + padding_frames, self->loopback_buffer_size); return S_OK; } - can_write = self->buffer_size - padding_frames; + can_write = self->loopback_buffer_size - padding_frames; - GST_TRACE_OBJECT (self, - "Writing %d silent frames offset at %" G_GUINT64_FORMAT, can_write); + GST_TRACE_OBJECT (self, "Writing %d silent frames", can_write); hr = render_client->GetBuffer (can_write, &data); if (!gst_wasapi2_result (hr)) @@ -797,6 +799,12 @@ hr = gst_wasapi2_ring_buffer_fill_loopback_silence (self); + /* On Windows versions prior to Windows 10, a pull-mode capture client will + * not receive any events when a stream is initialized with event-driven + * buffering */ + if (gst_wasapi2_result (hr)) + hr = gst_wasapi2_ring_buffer_io_callback (self); + if (self->running) { if (gst_wasapi2_result (hr)) { hr = MFPutWaitingWorkItem (self->loopback_event_handle, 0, @@ -1229,13 +1237,15 @@ goto error; } - hr = MFPutWaitingWorkItem (self->event_handle, 0, self->callback_result, - &self->callback_key); - if (!gst_wasapi2_result (hr)) { - GST_ERROR_OBJECT (self, "Failed to put waiting item"); - client_handle->Stop (); - self->running = FALSE; - goto error; + if (self->device_class != GST_WASAPI2_CLIENT_DEVICE_CLASS_LOOPBACK_CAPTURE) { + hr = MFPutWaitingWorkItem (self->event_handle, 0, self->callback_result, + &self->callback_key); + if (!gst_wasapi2_result (hr)) { + GST_ERROR_OBJECT (self, "Failed to put waiting item"); + client_handle->Stop (); + self->running = FALSE; + goto error; + } } return TRUE;
View file
gst-plugins-bad-1.22.0.tar.xz/sys/win32ipc/protocol/win32ipcutils.cpp -> gst-plugins-bad-1.22.1.tar.xz/sys/win32ipc/protocol/win32ipcutils.cpp
Changed
@@ -23,6 +23,7 @@ */ #include "win32ipcutils.h" +#include <cctype> #include <string> #include <locale> #include <codecvt>
View file
gst-plugins-bad-1.22.0.tar.xz/tests/check/elements/h265parse.c -> gst-plugins-bad-1.22.1.tar.xz/tests/check/elements/h265parse.c
Changed
@@ -332,6 +332,70 @@ GST_END_TEST; +/* 8bits 4:4:4 encoded stream, and profile-level-tier is not spec compliant. + * extracted from the file reported at + * https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1009 + */ +static const guint8 broken_profile_codec_data = { + 0x01, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0xf0, 0x00, 0xfc, 0xff, 0xf8, 0xf8, 0x00, 0x00, 0x0f, 0x03, 0x20, + 0x00, 0x01, 0x00, 0x18, 0x40, 0x01, 0x0c, 0x01, 0xff, 0xff, 0x24, 0x08, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x99, 0xac, 0x09, 0x21, 0x00, 0x01, 0x00, 0x2c, 0x42, 0x01, 0x01, + 0x24, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x00, 0x99, 0x90, 0x00, 0x3c, 0x04, 0x00, 0x44, 0x0f, 0x84, + 0x72, 0xd6, 0x94, 0x84, 0xb2, 0x5c, 0x40, 0x20, 0x00, 0x00, 0x03, 0x00, + 0x20, 0x00, 0x00, 0x07, 0x81, 0x22, 0x00, 0x01, 0x00, 0x08, 0x44, 0x01, + 0xc0, 0xf7, 0x18, 0x30, 0x0c, 0xc9 +}; + +GST_START_TEST (test_parse_fallback_profile) +{ + GstHarness *h = gst_harness_new ("h265parse"); + GstCaps *caps; + GstBuffer *codec_data; + GstEvent *event; + + codec_data = gst_buffer_new_memdup (broken_profile_codec_data, + sizeof (broken_profile_codec_data)); + + caps = gst_caps_from_string ("video/x-h265, stream-format=(string)hvc1, " + "alignment=(string)au"); + gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data, NULL); + gst_buffer_unref (codec_data); + + gst_harness_set_src_caps (h, caps); + while ((event = gst_harness_pull_event (h)) != NULL) { + GstStructure *s; + const gchar *profile; + + if (GST_EVENT_TYPE (event) != GST_EVENT_CAPS) { + gst_event_unref (event); + continue; + } + + gst_event_parse_caps (event, &caps); + s = gst_caps_get_structure (caps, 0); + profile = gst_structure_get_string (s, "profile"); + + /* h265parse must provide profile */ + fail_unless (profile); + + /* must not be main profile at least. + * main-444 is expected but we might update the profile parsing + * logic later. At least it should not be main profile + */ + fail_if (g_strcmp0 (profile, "main") == 0); + + gst_event_unref (event); + break; + } + + gst_harness_teardown (h); +} + +GST_END_TEST; + static Suite * h265parse_suite (void) { @@ -344,6 +408,7 @@ tcase_add_test (tc_chain, test_parse_split); tcase_add_test (tc_chain, test_parse_detect_stream); tcase_add_test (tc_chain, test_parse_detect_stream_with_hdr_sei); + tcase_add_test (tc_chain, test_parse_fallback_profile); return s; }
View file
gst-plugins-bad-1.22.0.tar.xz/tools/gst-transcoder.c -> gst-plugins-bad-1.22.1.tar.xz/tools/gst-transcoder.c
Changed
@@ -362,7 +362,12 @@ g_option_context_add_main_entries (ctx, options, NULL); g_option_context_add_group (ctx, gst_init_get_option_group ()); - if (!g_option_context_parse (ctx, &argc, &argv, &err)) { +#ifdef G_OS_WIN32 + if (!g_option_context_parse_strv (ctx, &argv, &err)) +#else + if (!g_option_context_parse (ctx, &argc, &argv, &err)) +#endif + { g_print ("Error initializing: %s\n", GST_STR_NULL (err->message)); g_clear_error (&err); g_option_context_free (ctx); @@ -468,9 +473,21 @@ int main (int argc, char *argv) { + int ret; + +#ifdef G_OS_WIN32 + argv = g_win32_get_command_line (); +#endif + #if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE - return gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); + ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); #else - return real_main (argc, argv); + ret = real_main (argc, argv); +#endif + +#ifdef G_OS_WIN32 + g_strfreev (argv); #endif + + return ret; }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.