Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 6
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Tue May 17 16:38:34 UTC 2022 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.20.2 + +------------------------------------------------------------------- Sat Mar 26 01:04:36 UTC 2022 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.20.1
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.20.0 Name: gstreamer-plugins-bad-codecs -Version: 1.20.1 +Version: 1.20.2 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.20.1.tar.xz/ChangeLog -> gst-plugins-bad-1.20.2.tar.xz/ChangeLog
Changed
@@ -1,7 +1,425 @@ +=== release 1.20.2 === + +2022-05-02 23:29:25 +0100 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.20.2 + +2022-05-02 23:29:19 +0100 Tim-Philipp Müller <tim@centricular.com> + + * ChangeLog: + Update ChangeLogs for 1.20.2 + +2022-04-23 04:00:21 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11window_win32.cpp: + d3d11videosink: Fix for unhandled mouse double click events + Only window created with CS_DBLCLKS style can receive those mouse + double click events, so we need to use the style for internal/external + windows can get double click events. + Also, passthrough mouse events to parent window in the same message pumping + threads instead of manually forwarding each mouse event. + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1172 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2286> + +2022-04-08 04:24:36 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11window_win32.cpp: + d3d11window: Use ANSI version WIN32 API explicitly + We were using ANSI version APIs implicitly because UNICODE is not + defined by ourselves. But potentially it can be broken if user + defines UNICODE. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2286> + +2022-04-29 19:08:46 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/interlace/gstinterlace.c: + interlace: Also handle a missing "interlace-mode" field as progressive + Otherwise caps negotiation will fail in situations that are supposed + to work, like: + "video/x-raw,framerate=(fraction)60/1" ! interlace field-pattern=0 ! "video/x-raw,framerate=(fraction)30/1" + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2337> + +2022-04-29 19:08:32 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/interlace/gstinterlace.c: + interlace: Add some more debug output to the getcaps function + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2337> + +2022-04-27 15:24:50 +0200 Edward Hervey <edward@centricular.com> + + * gst/mpegtsdemux/mpegtsbase.c: + mpegts: Handle "empty" PMT gracefully + Some streams have 2 PMT sections in a single TS packet. The first one is "valid" + but doesn't contain/define any streams. That causes an unrecoverable issue when + we try to activate the 2nd (valid) PMT. + Instead of doing that, pre-emptively refuse to process PMT without any streams + present within. We still do post that section on the bus to inform applications. + Fixes #1181 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2327> + +2022-04-28 00:31:49 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvvp9dec.c: + nvvp9sldec: Increase DPB size to cover render delay + This should've included in the previous MR + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/987 + already, but missed. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2324> + +2022-04-24 00:02:18 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvabasedec.c: + va: dec: Use gst_buffer_pool_config_set_va_alignment() to set alignment. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2301> + +2022-04-23 23:59:08 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvapool.h: + va: pool: Replace all tabs with spaces in header file. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2301> + +2022-04-23 23:52:34 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvapool.c: + va: pool: Delete the GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT. + The va pool is used for GPU side surface/image, its alignment should + not be changed arbitrarily by others. So we decide not to expose the + GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT flag anymore. + Instead, user can call gst_buffer_pool_config_set_va_alignment() to + set its surface/image alignment. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2301> + +2022-04-23 23:40:14 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvapool.c: + * sys/va/gstvapool.h: + va: pool: Add set_va_alignment() API. + We want to use gst_buffer_pool_config_set_va_alignment() to replace + gst_buffer_pool_config_get_video_alignment(). The later one is specific + for GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT option. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2301> + +2022-04-26 01:16:06 +0800 He Junyan <junyan.he@intel.com> + + * gst/videoparsers/gstav1parse.c: + av1parse: Fix a latent memory leak in colorimetry setting. + Also delete the useless "have_cinfo" judgement. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2297> + +2022-04-24 22:54:58 +0800 He Junyan <junyan.he@intel.com> + + * gst/videoparsers/gstav1parse.c: + av1parse: Correct the meaning of color_range flag. + According to spec: + color range equal to 0 shall be referred to as the studio swing + representation and color range equal to 1 shall be referred to as + the full swing representation. + The current status is just the opposite. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2297> + +2022-04-22 17:44:06 +0200 Stéphane Cerveau <scerveau@collabora.com> + + * ext/rsvg/gstrsvgdec.h: + rvsg: fix cairo include + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2280> + +2022-04-21 00:38:37 +0900 Sangchul Lee <sc11.lee@samsung.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Avoid access of freed memory + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2258> + +2022-04-20 08:09:58 +0900 Wonchul Lee <wonchul.dev@gmail.com> + + * ext/dash/gstdashsink.c: + dashsink: Unlock when failed to get content + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2246> + +2022-04-18 17:50:22 +0900 Camilo Celis Guzman <camilo@pexip.com> + + * gst/videoparsers/gstav1parse.c: + gstav1parse: fixup various possible logical errors + Found via an analyzed build for Clang. Specifically we had: + gstav1parse.c1850,11 in gst_av1_parse_detect_stream_format: Logic error: The left operand of '==' is a garbage value + gstav1parse.c1606,11 in gst_av1_parse_handle_to_small_and_equal_align: Logic error: The left operand of '==' is a garbage value + Also a couple of false-positives: + gstav1parse.c1398,24 in gst_av1_parse_handle_one_obu: Logic error: Branch condition evaluates to a garbage value + gstav1parse.c1440,37 in gst_av1_parse_handle_one_obu: Logic error: The left operand of '-' is a garbage value + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2240> + +2022-04-12 01:01:23 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11decoder.cpp: + * sys/d3d11/meson.build: + win32: Enable high-resolution timer for MinGW build + timeapi.h is missing in our MinGW toolchain. Include mmsystem.h + header instead, which defines struct and APIs in case of our MinGW + toolchain. Note that in case of native Windows10 SDK (MSVC build), + mmsystem.h will include timeapi.h + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2167> + +2022-04-14 08:23:51 +0200 Edward Hervey <edward@centricular.com> + + * gst/mpegtsdemux/gstmpegdefs.h: + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Fix AC-4 detection + This regression was introduced by + https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1102 + and has been present since 1.18 + * Stream Type 0x06 is defined in the base mpeg-ts specification as Private PES + Packets. Determining the content should be solely based on descriptors found + within the PMT. + * This was abused in that commit by defining a "bluray-only" stream type for AC4 + : `ST_BD_AUDIO_AC4` + * This should be entirely handled in the regular private pes handling further + down in the code + Fixes #1154 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2176> + +2022-04-11 10:32:40 +0200 Edward Hervey <edward@centricular.com> + + * gst/mxf/mxfdemux.c: + mxfdemux: Fix issue with re-syncing + In case of re-syncing (i.e. moving to another partition to avoid too much of an + interleave), there was previously no checks to figure out whether a given + partition was already fully handled (i.e. when coming across it again after a + previous resync). + In order to handle this at least for single-track partitions, check whether we + have reached the essence track duration, and if so skip the partition. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2162> + +2022-04-11 10:31:15 +0200 Edward Hervey <edward@centricular.com> + + * gst/mxf/mxfdemux.c: + mxfdemux: Don't double-increase track position + The essence track position should only be overriden if we sucesfully switched to + another position. In case of EOS we do not want to override it else we would + increase the track position *again* at the end of this function + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2162> + +2022-04-06 11:21:25 +0200 Edward Hervey <edward@centricular.com> + + * gst/mxf/mxfvanc.c: + mxfvanc: Handle empty VANC packets + Some XDCAM recorders store empty packets for VANC, and don't even include the + 2byte length. + Handle them in the same way as VANC packets with 0 packets. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2124> + +2022-04-01 15:00:01 +0200 Stéphane Cerveau <scerveau@collabora.com> + + * tests/examples/camerabin2/gst-camerabin2-test.c: + bad: examples: fix unused res warning + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2116> + +2022-04-01 15:35:17 +0800 Tong Wu <tong1.wu@intel.com> + + * sys/msdk/msdk.c: + msdk: use mfxU32 instead of uint32_t + Msdk should use mfx variables defined in mfxdefs.h. Replace uint32_t + with mfxU32. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2113> + +2022-03-24 15:19:27 +0800 Chun-wei Fan <fanchunwei@src.gnome.org> + + * ext/openexr/meson.build: + openexr: Specify modules when finding OpenEXR. + Specify modules to look for OpenEXR when CMake is used, as we may have + CMake config files instead of pkg-config files that result from building + OpenEXR, which may be built with CMake which is typically the case on Visual + Studio builds. + In this case, Meson does seem to find the 'OpenEXR' package with CMake + after trying pkg-config, but does not consider it enough without the + 'modules:' argument. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2035> + +2022-03-28 20:51:35 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/videotexturecache.m: + applemeida/texturecache: remove unused variable + Fixes: + ../sys/applemedia/videotexturecache.m:71:20: error: variable 'features' set but not used -Werror,-Wunused-but-set-variable + GstCapsFeatures *features; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 20:50:27 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/corevideobuffer.c: + applemedia/corevideobuffer: remove unused variable + Fixes: + ../sys/applemedia/corevideobuffer.c:209:19: error: variable 'video_meta' set but not used -Werror,-Wunused-but-set-variable + GstVideoMeta *video_meta; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 20:49:01 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/iosurfaceglmemory.c: + applemedia/iosgl: remove unused variable + Fixes: + ../sys/applemedia/iosurfaceglmemory.c:219:41: error: variable 'texfmt' set but not used -Werror,-Wunused-but-set-variable + GLuint tex_id, tex_target, texifmt, texfmt; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 20:37:54 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/vtdec.c: + vtdec: remove unused variable + Fixes: + ../sys/applemedia/vtdec.c:611:35: error: variable 'output_flags' set but not used -Werror,-Wunused-but-set-variable + VTDecodeFrameFlags input_flags, output_flags; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 20:24:59 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/avsamplevideosink.m: + avsamplevideosink: remove unused variable + Fixes + ../sys/applemedia/avsamplevideosink.m:80:20: error: variable 'gstelement_class' set but not used -Werror,-Wunused-but-set-variable + GstElementClass *gstelement_class; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 20:11:29 +1100 Matthew Waters <matthew@centricular.com> + + * sys/applemedia/avfassetsrc.m: + avfassetsrc: fix unused-but-set warning + ../sys/applemedia/avfassetsrc.m:1014:12: error: variable 'caps' set but not used -Werror,-Wunused-but-set-variable + GstCaps *caps; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 19:42:04 +1100 Matthew Waters <matthew@centricular.com> + + * gst/speed/gstspeed.c: + speed: fix unused-but-set warning + ../gst/speed/gstspeed.c:523:39: error: variable 'base' set but not used -Werror,-Wunused-but-set-variable + gint64 start_value, stop_value, base; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 18:38:23 +1100 Matthew Waters <matthew@centricular.com> + + * ext/resindvd/gstpesfilter.c: + resindvd: silence unused-but-set warning + ../ext/resindvd/gstpesfilter.c:117:11: error: variable 'STD_buffer_size_bound' set but not used -Werror,-Wunused-but-set-variable + guint16 STD_buffer_size_bound; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 18:23:20 +1100 Matthew Waters <matthew@centricular.com> + + * gst/mpegtsmux/gstbasetsmux.c: + mpegts: don't shadow res variable + Fixes unused-but-set warning: + ../gst/mpegtsmux/gstbasetsmux.c:2115:43: error: variable 'res' set but not used -Werror,-Wunused-but-set-variable + gboolean all_headers, done = FALSE, res = FALSE; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 18:12:43 +1100 Matthew Waters <matthew@centricular.com> + + * gst-libs/gst/mpegts/gst-dvb-section.c: + mpeg: fix unused-but-set warning + ../gst-libs/gst/mpegts/gst-dvb-section.c:206:9: error: variable 'i' set but not used -Werror,-Wunused-but-set-variable + guint i = 0, allocated_events = 12; + ^ + ../gst-libs/gst/mpegts/gst-dvb-section.c:365:9: error: variable 'i' set but not used -Werror,-Wunused-but-set-variable + guint i = 0, allocated_streams = 12; + ^ + ../gst-libs/gst/mpegts/gst-dvb-section.c:543:9: error: variable 'i' set but not used -Werror,-Wunused-but-set-variable + guint i = 0, allocated_streams = 12; + ^ + ../gst-libs/gst/mpegts/gst-dvb-section.c:885:9: error: variable 'i' set but not used -Werror,-Wunused-but-set-variable + guint i = 0, allocated_services = 8; + ^ + ../gst-libs/gst/mpegts/gst-dvb-section.c:1316:9: error: variable 'i' set but not used -Werror,-Wunused-but-set-variable + guint i = 0, allocated_services = 8; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2068> + +2022-03-28 15:56:22 +1100 Matthew Waters <matthew@centricular.com> + + * gst/mpegdemux/gstpesfilter.c: + mpegdemux: silence unused-but-set werror + ../gst/mpegdemux/gstpesfilter.c:117:11: error: variable 'STD_buffer_size_bound' set but not used -Werror,-Wunused-but-set-variable + guint16 STD_buffer_size_bound; + ^ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2067> + +2022-03-22 00:30:28 +0900 Sangchul Lee <sc11.lee@samsung.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Update documentation of 'get-stats' action signal + Some stats fields are updated according to the current implementation. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2034> + +2022-03-21 13:01:03 +0100 Benjamin Gaignard <benjamin.gaignard@collabora.com> + + * sys/v4l2codecs/gstv4l2decoder.c: + v4l2codecs: Fix memory leak + Free pending_requests array when releasing decoder to avoid memory leak + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2002> + +2022-03-15 17:01:59 +0530 Nirbheek Chauhan <nirbheek@centricular.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Warn when offer didn't intersect with transceiver caps + We were silently falling back to creating a recvonly offer if the caps + didn't intersect. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1995> + +2022-03-11 17:02:55 +0000 Philippe Normand <philn@igalia.com> + + * ext/wpe/WPEThreadedView.cpp: + wpe: Reintroduce persistent WebContext + A WebContext leak was introduced in MR + https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252. + If we wanted one WebContext per WebView we should also unref the + WebKitWebContext when destroying the WebView. + This patch reintroduces the persistent WebContext, initially part of + https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1484. + Fixes #1084 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1982> + +2022-03-10 19:22:52 +0900 Sangchul Lee <sc11.lee@samsung.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtcbin: Check data channel transport for notifying 'ice-gathering-state' + Previously, it did not care about data channel's. It is fixed by adding + some conditions. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1981> + +2022-03-10 02:28:11 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvdec.c: + * sys/nvcodec/gstnvdec.h: + nvh264dec,nvh265dec: Fix broken key-unit trick and reverse playback + On GstVideoDecoder::{drain,flush}, we send null packet with + CUVID_PKT_ENDOFSTREAM flag to drain out decoder. Which will + reset CUVID parser as well. + To continue decoding after the drain, the next input buffer + should include sequence headers otherwise CUVID parser will + not report any decodeable frame. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1923> + +2022-03-14 14:48:01 +0000 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development + === release 1.20.1 === 2022-03-14 11:33:33 +0000 Tim-Philipp Müller <tim@centricular.com> + * ChangeLog: * NEWS: * RELEASE: * gst-plugins-bad.doap:
View file
gst-plugins-bad-1.20.1.tar.xz/NEWS -> gst-plugins-bad-1.20.2.tar.xz/NEWS
Changed
@@ -2,13 +2,13 @@ GStreamer 1.20.0 was originally released on 3 February 2022. -The latest bug-fix release in the 1.20 series is 1.20.1 and was released -on 14 March 2022. +The latest bug-fix release in the 1.20 series is 1.20.2 and was released +on 2 May 2022. See https://gstreamer.freedesktop.org/releases/1.20/ for the latest version of this document. -Last updated: Monday 14 March 2022, 00:30 UTC (log) +Last updated: Monday 2 May 2022, 0:30 UTC (log) Introduction @@ -2076,6 +2076,221 @@ - List of Merge Requests applied in 1.20.1 - List of Issues fixed in 1.20.1 +1.20.2 + +The second 1.20 bug-fix release (1.20.2) was released on 2 May 2022. + +This release only contains bugfixes and it should be safe to update from +1.20.x. + +Highlighted bugfixes in 1.20.2 + +- avviddec: Remove vc1/wmv3 override and fix crashes on WMV files with + FFMPEG 5.0+ +- macOS: fix plugin discovery for GStreamer installed via brew and fix + loading of Rust plugins +- rtpbasepayload: various header extension handling fixes +- rtpopusdepay: fix regression in stereo input handling if + sprop-stereo is not advertised +- rtspclientsink: fix possible shutdown deadlock +- mpegts: gracefully handle “empty” program maps and fix AC-4 + detection +- mxfdemux: Handle empty VANC packets and fix EOS handling +- playbin3: various playbin3, uridecodebin3, and playsink fixes +- ptpclock: fix initial sync-up with certain devices +- gltransformation: let graphene alloc its structures memory aligned +- webrtcbin fixes and webrtc sendrecv example improvements +- video4linux2: various fixes including some fixes for Raspberry Pi + users +- videorate segment handling fixes and other fixes +- nvh264dec, nvh265dec: Fix broken key-unit trick modes and reverse + playback +- wpe: Reintroduce persistent WebContext +- cerbero: Make it easier to consume 1.20.1 macOS GStreamer .pkgs +- build fixes and gobject annotation fixes +- bug fixes, security fixes, memory leak fixes, and other stability + and reliability improvements + +gstreamer + +- devicemonitor: clean up signal handlers and hidden providers list +- Leaks tracer: fix pthread_atfork return value check leading to bogus + warning in log +- Rust plugins: Not picked up by the plugin loader on macOS +- Failed to use plugins of latest GStreamer version 1.20.x installed + by brew on macOS +- ptpclock: Allow at least 100ms delay between Sync/Follow_Up and + Delay_Req/Delay_Resp messages. Fixes problems acquiring initial sync + with certain devices +- meson: Add -Wl,-rpath,${libdir} on macOS +- registry: skip Rust dep builddirs when searching for plugins + recursively + +gst-plugins-base + +- appsrc: Clarify buffer ref semantics in signals documentation +- appsrc: fix annotations for bindings +- typefind: Skip extension parsing for data:// URIs, fixing regression + with mp4 files serialised to data uris +- playbin3: various fixes +- playbin3: fix missing lock when unknown stream type in pad-removed + cb +- decodebin3: fix collection leaks +- decodebin3: Don’t duplicate stream selections +- discoverer: chain up to parent finalize methods in all our types to + fix memory leaks +- glmixerbin: slightly better pad/element creation +- gltransformation: let graphene alloc its structures memory aligned +- ogg: fix possible buffer overrun +- rtpbasepayload: Don’t write header extensions if there’s no + corresponding… +- rtpbasepayload: always store input buffer meta before negotiation +- rtpbasepayload: fix transfer annotation for push and push_list +- subparse: don’t try to index string with -1 +- riff-media: fix memory leak after usage for g_strjoin() +- playbin/playbin3: Allow setting a NULL URI +- playsink: Complete reconfiguration on pad release. +- parsebin: Expose streams of unknown type +- pbutils: Fix wmv screen description detection +- subparse: don’t deref a potentially NULL variable +- rawvideoparse: set format from caps in + gst_raw_video_parse_set_config_from_caps +- videodecoder: release stream lock after handling gap events +- videorate: fix assertion when pushing last and only buffer without + duration +- videorate: Revert “don’t reset on segment update” to fix segment + handling regressions +- gst-play-1.0, gst-launch-1.0: Enable win32 high-resolution timer + also for MinGW build + +gst-plugins-good + +- deinterlace: silence unused-but-set werror from imported code +- qtdemux: fix leak of channel_mapping +- rtpopusdepay: missing sprop-stereo should not assume mono +- rtpjitterbuffer: Fix invalid memory access in + rtp_jitter_buffer_pop() +- rtpptdemux: fix leak of caps when ignoring a pt +- rtpredenc: quieten warning about ignoring header extensions +- soup: Fix pre-processor macros in souploader for libsoup-3.0 +- twcc: Note that twcc-stats packet loss counts reordering as loss + + add some logging +- video4linux2: Manual backports for RPi users +- wavparse: handle URI query in any parse state, fixing audio track + selection issue in GES +- wavparse: Unset DISCONT buffer flag for divided into multiple + buffers in push mode + +gst-plugins-bad + +- av1parse: Fix several issues about the colorimetry. +- av1parse: fix up various possible logic errors +- dashsink: fix missing mutex unlock in error code path when failing + to get content +- d3d11videosink: Fix for unhandled mouse double click events +- interlace: Also handle a missing “interlace-mode” field as + progressive +- msdk: fix build with MSVC +- mxfdemux: Fix issues at EOS +- mxfdemux: Handle empty VANC packets +- nvh264dec, nvh265dec: Fix broken key-unit trick and reverse playback +- nvvp9sldec: Increase DPB size to cover render delay +- rvsg: fix cairo include +- tsdemux: Fix AC-4 detection in MPEG-TS +- tsdemux: Handle “empty” PMT gracefully +- va: pool: don’t advertise the GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT + option any more +- v4l2codecs: Fix memory leak +- v4l2videodec: set frame duration according to framerate +- webrtcbin: Update documentation of ‘get-stats’ action signal +- webrtcbin: Check data channel transport for notifying + ‘ice-gathering-state’ +- webrtcbin: Avoid access of freed memory +- wpe: Reintroduce persistent WebContext +- Build: use CMake to find some openssl and exr deps +- Fix multiple “unused-but-set variable” compiler warnings + +gst-plugins-ugly + +- x264enc: Don’t try to fixate ANY allowed caps + +gst-libav + +- video decoders: fix frame leak on negotiation error +- Fix build on systems without C++ compiler +- avviddec: Remove vc1/wmv3 override (fixing crash with FFmpeg 5 +- Segfaults on ASF/WMV files with FFMPEG 5.0+ + +gst-rtsp-server + +- rtspclientsink: fix possible shutdown deadlock in collect_streams() +- Minor spelling fixes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- Fix build on systems without C++ compiler + +gst-editing-services + +- License clarification: GES is released under the LGPL2+ license + +gst-examples: + +- Fix build on macOS with gtk+-quartz-3.0 +- player android: add missing dummy.cpp +- player android: update for android changes +- webrtc_sendrecv.py: Link pads instead of elements +- webrtc_sendrecv.py: Implement all negotiation modes + bugfixes + +Development build environment + gst-full build + +- meson: provide gobject-cast-checks, glib-checks and glib-asserts + options at top level as well + +Cerbero build tool and packaging changes in 1.20.2 + +- macOS: Make it easier to consume 1.20.1 GStreamer .pkgs +- Android: fix text relocation regression on Android (x86/ x86_64 + platforms) + +Bindings + +- appsrc: fix annotations for bindings +- bindings: The out args for gst_rtp_buffer_get_extension_data*() are + optional +- rtpbasepayload: fix transfer annotation for push and push_list + +Contributors to 1.20.2 + +Bastian Krause, Benjamin Gaignard, Camilo Celis Guzman, Chun-wei Fan, +Corentin Damman, Daniel Stone, Dongil Park, Edward Hervey, Fabrice +Fontaine, Guillaume Desmottes, Havard Graff, He Junyan, Hoonhee Lee, Hou +Qi, Jan Schmidt, Marc Leeman, Mathieu Duponchelle, Matthew Waters, +Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand, Pierre Bourré, +Sangchul Lee, Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Thibault +Saunier, Tim-Philipp Müller, Tong Wu, Tristan Matthews, Tulio Beloqui, +Wonchul Lee, Zhao Zhili, + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.20.2 + +- List of Merge Requests applied in 1.20.2 +- List of Issues fixed in 1.20.2 + Schedule for 1.22 Our next major feature release will be 1.22, and 1.21 will be the
View file
gst-plugins-bad-1.20.1.tar.xz/RELEASE -> gst-plugins-bad-1.20.2.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.20.1. +This is GStreamer gst-plugins-bad 1.20.2. 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.20.1.tar.xz/ext/dash/gstdashsink.c -> gst-plugins-bad-1.20.2.tar.xz/ext/dash/gstdashsink.c
Changed
@@ -854,8 +854,10 @@ g_mutex_lock (&sink->mpd_lock); gst_dash_sink_generate_mpd_content (sink, current_stream); - if (!gst_mpd_client_get_xml_content (sink->mpd_client, &mpd_content, &size)) + if (!gst_mpd_client_get_xml_content (sink->mpd_client, &mpd_content, &size)) { + g_mutex_unlock (&sink->mpd_lock); return; + } g_mutex_unlock (&sink->mpd_lock); if (sink->mpd_root_path)
View file
gst-plugins-bad-1.20.1.tar.xz/ext/openexr/meson.build -> gst-plugins-bad-1.20.2.tar.xz/ext/openexr/meson.build
Changed
@@ -1,4 +1,5 @@ -openexr_dep = dependency('OpenEXR', required: get_option('openexr')) +openexr_dep = dependency('OpenEXR', modules: 'OpenEXR::IlmImf', required: get_option('openexr')) + if openexr_dep.found() openexr_override_options = # Older versions of openexr fail to build with -Werror when using GCC >= 9.2
View file
gst-plugins-bad-1.20.1.tar.xz/ext/resindvd/gstpesfilter.c -> gst-plugins-bad-1.20.2.tar.xz/ext/resindvd/gstpesfilter.c
Changed
@@ -114,7 +114,7 @@ guint32 start_code; gboolean STD_buffer_bound_scale G_GNUC_UNUSED; - guint16 STD_buffer_size_bound; + guint16 STD_buffer_size_bound G_GNUC_UNUSED; const guint8 *data; gint avail, datalen; gboolean have_size = FALSE;
View file
gst-plugins-bad-1.20.1.tar.xz/ext/rsvg/gstrsvgdec.h -> gst-plugins-bad-1.20.2.tar.xz/ext/rsvg/gstrsvgdec.h
Changed
@@ -24,7 +24,7 @@ #include <gst/base/gstadapter.h> #include <gst/video/video.h> -#include <cairo/cairo.h> +#include <cairo.h> #include <librsvg/rsvg.h>
View file
gst-plugins-bad-1.20.1.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.20.2.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
@@ -1102,7 +1102,11 @@ { #define STATE(val) GST_WEBRTC_ICE_GATHERING_STATE_ ## val GstWebRTCICEGatheringState any_state = 0; - gboolean all_completed = webrtc->priv->transceivers->len > 0; + GstWebRTCICEGatheringState ice_state; + GstWebRTCDTLSTransport *dtls_transport; + GstWebRTCICETransport *transport; + gboolean all_completed = webrtc->priv->transceivers->len > 0 || + webrtc->priv->data_channel_transport; int i; for (i = 0; i < webrtc->priv->transceivers->len; i++) { @@ -1110,9 +1114,6 @@ g_ptr_array_index (webrtc->priv->transceivers, i); WebRTCTransceiver *trans = WEBRTC_TRANSCEIVER (rtp_trans); TransportStream *stream = trans->stream; - GstWebRTCDTLSTransport *dtls_transport; - GstWebRTCICETransport *transport; - GstWebRTCICEGatheringState ice_state; if (rtp_trans->stopped || stream == NULL) { GST_TRACE_OBJECT (webrtc, "transceiver %p stopped or unassociated", @@ -1143,6 +1144,20 @@ all_completed = FALSE; } + /* check data channel transport gathering state */ + if (all_completed && webrtc->priv->data_channel_transport) { + if ((dtls_transport = webrtc->priv->data_channel_transport->transport)) { + transport = dtls_transport->transport; + g_object_get (transport, "gathering-state", &ice_state, NULL); + GST_TRACE_OBJECT (webrtc, + "data channel transport %p gathering state: 0x%x", dtls_transport, + ice_state); + any_state |= (1 << ice_state); + if (ice_state != STATE (COMPLETE)) + all_completed = FALSE; + } + } + GST_TRACE_OBJECT (webrtc, "ICE gathering state: 0x%x", any_state); /* Any of the RTCIceTransport s are in the gathering state. */ @@ -1813,7 +1828,6 @@ caps = _query_pad_caps (webrtc, rtp_trans, pad, filter, error); } - gst_object_unref (pad); if (*error) goto out; @@ -1867,6 +1881,8 @@ out: + if (pad) + gst_object_unref (pad); if (codec_preferences) gst_caps_unref (codec_preferences); @@ -4010,7 +4026,7 @@ goto rejected; } - GST_TRACE_OBJECT (webrtc, "trying to compare %" GST_PTR_FORMAT + GST_LOG_OBJECT (webrtc, "trying to compare %" GST_PTR_FORMAT " and %" GST_PTR_FORMAT, offer_caps, trans_caps); /* FIXME: technically this is a little overreaching as some fields we @@ -4041,6 +4057,8 @@ /* if no transceiver, then we only receive that stream and respond with * the intersection with the transceivers codec preferences caps */ answer_dir = GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY; + GST_WARNING_OBJECT (webrtc, "did not find compatible transceiver for " + "offer caps %" GST_PTR_FORMAT ", will only receive", offer_caps); } if (!rtp_trans) { @@ -7679,25 +7697,29 @@ * "ssrc" G_TYPE_STRING the rtp sequence src in use * "transport-id" G_TYPE_STRING identifier for the associated RTCTransportStats for this stream * "codec-id" G_TYPE_STRING identifier for the associated RTCCodecStats for this stream - * "fir-count" G_TYPE_UINT FIR requests received by the sender (only for local statistics) - * "pli-count" G_TYPE_UINT PLI requests received by the sender (only for local statistics) - * "nack-count" G_TYPE_UINT NACK requests received by the sender (only for local statistics) * * RTCReceivedStreamStats supported fields (https://w3c.github.io/webrtc-stats/#receivedrtpstats-dict*) * - * "packets-received" G_TYPE_UINT64 number of packets received (only for local inbound) - * "bytes-received" G_TYPE_UINT64 number of bytes received (only for local inbound) - * "packets-lost" G_TYPE_UINT number of packets lost - * "jitter" G_TYPE_DOUBLE packet jitter measured in secondss + * "packets-received" G_TYPE_UINT64 number of packets received (only for local inbound) + * "packets-lost" G_TYPE_UINT64 number of packets lost + * "packets-discarded" G_TYPE_UINT64 number of packets discarded + * "packets-repaired" G_TYPE_UINT64 number of packets repaired + * "jitter" G_TYPE_DOUBLE packet jitter measured in seconds * * RTCInboundRTPStreamStats supported fields (https://w3c.github.io/webrtc-stats/#inboundrtpstats-dict*) * * "remote-id" G_TYPE_STRING identifier for the associated RTCRemoteOutboundRTPStreamStats + * "bytes-received" G_TYPE_UINT64 number of bytes received (only for local inbound) + * "packets-duplicated" G_TYPE_UINT64 number of packets duplicated + * "fir-count" G_TYPE_UINT FIR packets sent by the receiver + * "pli-count" G_TYPE_UINT PLI packets sent by the receiver + * "nack-count" G_TYPE_UINT NACK packets sent by the receiver * * RTCRemoteInboundRTPStreamStats supported fields (https://w3c.github.io/webrtc-stats/#remoteinboundrtpstats-dict*) * * "local-id" G_TYPE_STRING identifier for the associated RTCOutboundRTPSTreamStats * "round-trip-time" G_TYPE_DOUBLE round trip time of packets measured in seconds + * "fraction-lost" G_TYPE_DOUBLE fraction packet loss * * RTCSentRTPStreamStats supported fields (https://w3c.github.io/webrtc-stats/#sentrtpstats-dict*) * @@ -7707,10 +7729,14 @@ * RTCOutboundRTPStreamStats supported fields (https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict*) * * "remote-id" G_TYPE_STRING identifier for the associated RTCRemoteInboundRTPSTreamStats + * "fir-count" G_TYPE_UINT FIR packets received by the sender + * "pli-count" G_TYPE_UINT PLI packets received by the sender + * "nack-count" G_TYPE_UINT NACK packets received by the sender * * RTCRemoteOutboundRTPStreamStats supported fields (https://w3c.github.io/webrtc-stats/#remoteoutboundrtpstats-dict*) * * "local-id" G_TYPE_STRING identifier for the associated RTCInboundRTPSTreamStats + * "remote-timestamp" G_TYPE_DOUBLE remote timestamp the statistics were sent by the remote * */ gst_webrtc_bin_signalsGET_STATS_SIGNAL =
View file
gst-plugins-bad-1.20.1.tar.xz/ext/wpe/WPEThreadedView.cpp -> gst-plugins-bad-1.20.2.tar.xz/ext/wpe/WPEThreadedView.cpp
Changed
@@ -346,11 +346,13 @@ WPEView* view = nullptr; dispatch(&() mutable { - auto* manager = webkit_website_data_manager_new_ephemeral(); - auto web_context = webkit_web_context_new_with_website_data_manager(manager); - g_object_unref(manager); - - view = new WPEView(web_context, src, context, display, width, height); + if (!glib.web_context) { + auto *manager = webkit_website_data_manager_new_ephemeral(); + glib.web_context = + webkit_web_context_new_with_website_data_manager(manager); + g_object_unref(manager); + } + view = new WPEView(glib.web_context, src, context, display, width, height); }); if (view && view->hasUri()) {
View file
gst-plugins-bad-1.20.1.tar.xz/gst-libs/gst/mpegts/gst-dvb-section.c -> gst-plugins-bad-1.20.2.tar.xz/gst-libs/gst/mpegts/gst-dvb-section.c
Changed
@@ -203,7 +203,7 @@ _parse_eit (GstMpegtsSection * section) { GstMpegtsEIT *eit = NULL; - guint i = 0, allocated_events = 12; + guint allocated_events = 12; guint8 *data, *end, *duration_ptr; guint16 descriptors_loop_length; @@ -267,8 +267,6 @@ if (event->descriptors == NULL) goto error; data += descriptors_loop_length; - - i += 1; } if (data != end - 4) { @@ -362,7 +360,7 @@ _parse_bat (GstMpegtsSection * section) { GstMpegtsBAT *bat = NULL; - guint i = 0, allocated_streams = 12; + guint allocated_streams = 12; guint8 *data, *end, *entry_begin; guint16 descriptors_loop_length, transport_stream_loop_length; @@ -444,7 +442,6 @@ data += descriptors_loop_length; - i += 1; transport_stream_loop_length -= data - entry_begin; } @@ -540,7 +537,7 @@ _parse_nit (GstMpegtsSection * section) { GstMpegtsNIT *nit = NULL; - guint i = 0, allocated_streams = 12; + guint allocated_streams = 12; guint8 *data, *end, *entry_begin; guint16 descriptors_loop_length, transport_stream_loop_length; @@ -625,7 +622,6 @@ data += descriptors_loop_length; - i += 1; transport_stream_loop_length -= data - entry_begin; } @@ -882,7 +878,7 @@ _parse_sdt (GstMpegtsSection * section) { GstMpegtsSDT *sdt = NULL; - guint i = 0, allocated_services = 8; + guint allocated_services = 8; guint8 *data, *end, *entry_begin; guint tmp; guint sdt_info_length; @@ -954,7 +950,6 @@ data += descriptors_loop_length; sdt_info_length -= data - entry_begin; - i += 1; } if (data != end - 4) { @@ -1313,7 +1308,7 @@ _parse_sit (GstMpegtsSection * section) { GstMpegtsSIT *sit = NULL; - guint i = 0, allocated_services = 8; + guint allocated_services = 8; guint8 *data, *end, *entry_begin; guint sit_info_length; guint descriptors_loop_length; @@ -1373,7 +1368,6 @@ data += descriptors_loop_length; sit_info_length -= data - entry_begin; - i += 1; } if (data != end - 4) {
View file
gst-plugins-bad-1.20.1.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.20.2.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.20.2</revision> + <branch>1.20</branch> + <name></name> + <created>2022-05-02</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.20.2.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.20.1</revision> <branch>1.20</branch> <name></name>
View file
gst-plugins-bad-1.20.1.tar.xz/gst/interlace/gstinterlace.c -> gst-plugins-bad-1.20.2.tar.xz/gst/interlace/gstinterlace.c
Changed
@@ -775,7 +775,8 @@ interlace_mode = gst_structure_get_string (s, "interlace-mode"); /* Do not double the framerate for interlaced - we will either passthrough * or fail to negotiate */ - if (skip_progressive && (g_strcmp0 (interlace_mode, "progressive") != 0)) + if (skip_progressive && (interlace_mode + && g_strcmp0 (interlace_mode, "progressive") != 0)) continue; if (G_VALUE_TYPE (val) == GST_TYPE_FRACTION) { @@ -891,6 +892,8 @@ top_field_first = interlace->top_field_first; GST_OBJECT_UNLOCK (interlace); + GST_DEBUG_OBJECT (pad, "Querying caps with filter %" GST_PTR_FORMAT, filter); + if (filter != NULL) { clean_filter = gst_caps_copy (filter); if (pattern == GST_INTERLACE_PATTERN_1_1) { @@ -928,9 +931,12 @@ } } + GST_DEBUG_OBJECT (pad, "Querying peer with filter %" GST_PTR_FORMAT, + clean_filter); tcaps = gst_pad_get_pad_template_caps (otherpad); othercaps = gst_pad_peer_query_caps (otherpad, clean_filter); othercaps = gst_caps_make_writable (othercaps); + GST_DEBUG_OBJECT (pad, "Other caps %" GST_PTR_FORMAT, othercaps); if (othercaps) { if (pattern == GST_INTERLACE_PATTERN_2_2) { for (i = 0; i < gst_caps_get_size (othercaps); ++i) {
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mpegdemux/gstpesfilter.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mpegdemux/gstpesfilter.c
Changed
@@ -114,7 +114,7 @@ guint32 start_code; gboolean STD_buffer_bound_scale G_GNUC_UNUSED; - guint16 STD_buffer_size_bound; + guint16 STD_buffer_size_bound G_GNUC_UNUSED; const guint8 *data; gint avail, datalen; gboolean have_size = FALSE;
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mpegtsdemux/gstmpegdefs.h -> gst-plugins-bad-1.20.2.tar.xz/gst/mpegtsdemux/gstmpegdefs.h
Changed
@@ -56,7 +56,6 @@ #define ST_PS_DVD_SUBPICTURE 0xff /* Blu-ray related (registration: 'HDMV'*/ -#define ST_BD_AUDIO_AC4 0x06 #define ST_BD_AUDIO_LPCM 0x80 #define ST_BD_AUDIO_AC3 0x81 #define ST_BD_AUDIO_DTS 0x82
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mpegtsdemux/mpegtsbase.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mpegtsdemux/mpegtsbase.c
Changed
@@ -1190,6 +1190,12 @@ return TRUE; } + /* Don't attempt to handle pmt without any streams */ + if (G_UNLIKELY (pmt->streams->len == 0)) { + GST_WARNING ("Skipping PMT without any entries"); + return TRUE; + } + program_number = section->subtable_extension; GST_DEBUG ("Applying PMT (program_number:%d, pid:0x%04x)", program_number, section->pid);
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mpegtsdemux/tsdemux.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mpegtsdemux/tsdemux.c
Changed
@@ -1382,14 +1382,6 @@ is_audio = TRUE; caps = gst_caps_new_empty_simple ("audio/x-eac3"); break; - case ST_BD_AUDIO_AC4: - /* Opus also uses 0x06, and there are bad streams that have HDMV registration ID, - * but contain an Opus registration id, so check for it */ - if (bstream->registration_id != DRF_ID_OPUS) { - is_audio = TRUE; - caps = gst_caps_new_empty_simple ("audio/x-ac4"); - } - break; case ST_BD_AUDIO_AC3_TRUE_HD: is_audio = TRUE; caps = gst_caps_new_empty_simple ("audio/x-true-hd");
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mpegtsmux/gstbasetsmux.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mpegtsmux/gstbasetsmux.c
Changed
@@ -2112,7 +2112,7 @@ GstIterator *iter; GValue sinkpad_value = G_VALUE_INIT; GstClockTime running_time; - gboolean all_headers, done = FALSE, res = FALSE; + gboolean all_headers, done = FALSE; guint count; if (!gst_video_event_is_force_key_unit (event))
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mxf/mxfdemux.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mxf/mxfdemux.c
Changed
@@ -3109,11 +3109,11 @@ ret = gst_mxf_demux_pad_set_component (demux, pad, pad->current_component_index + 1); - if (ret != GST_FLOW_OK && ret != GST_FLOW_EOS) { - GST_ERROR_OBJECT (demux, "Switching component failed"); - } else { + if (ret == GST_FLOW_OK) { pad->current_essence_track->position = pad->current_essence_track_position; + } else if (ret != GST_FLOW_EOS) { + GST_ERROR_OBJECT (demux, "Switching component failed"); } } else if (etrack->duration > 0 && pad->current_essence_track_position >= etrack->duration) { @@ -4136,6 +4136,7 @@ /* We entered a new partition */ if (ret == GST_FLOW_OK && mxf_is_partition_pack (&klv.key)) { GstMXFDemuxPartition *partition = demux->current_partition; + gboolean partition_done = FALSE; /* Grab footer metadata if needed */ if (demux->pull_footer_metadata @@ -4178,8 +4179,13 @@ "Track already at another position : %" G_GINT64_FORMAT, partition->single_track->position); if (find_edit_entry (demux, partition->single_track, - partition->single_track->position, FALSE, &entry)) + partition->single_track->position, FALSE, &entry)) { lowest_offset = entry.offset; + } else if (partition->single_track->position >= + partition->single_track->duration) { + GST_DEBUG_OBJECT (demux, "Track fully consumed, partition done"); + partition_done = TRUE; + } } } else { guint i; @@ -4207,14 +4213,15 @@ } } - if (lowest_offset != G_MAXUINT64) { + if (partition_done || lowest_offset != G_MAXUINT64) { GstMXFDemuxPartition *next_partition = NULL; GList *cur_part = g_list_find (demux->partitions, partition); if (cur_part && cur_part->next) next_partition = (GstMXFDemuxPartition *) cur_part->next->data; /* If we have completely processed this partition, skip to next partition */ - if (lowest_offset > next_partition->partition.this_partition) { + if (partition_done + || lowest_offset > next_partition->partition.this_partition) { GST_DEBUG_OBJECT (demux, "Partition entirely processed, skipping to next one"); demux->offset = next_partition->partition.this_partition;
View file
gst-plugins-bad-1.20.1.tar.xz/gst/mxf/mxfvanc.c -> gst-plugins-bad-1.20.2.tar.xz/gst/mxf/mxfvanc.c
Changed
@@ -116,7 +116,9 @@ return GST_FLOW_ERROR; } - if (gst_buffer_get_size (buffer) < 2) { + /* Either there is no data or there is at least room for the 16bit length, + * therefore the only invalid packet length is 1 */ + if (gst_buffer_get_size (buffer) == 1) { GST_ERROR ("Invalid VANC essence element size"); gst_buffer_unref (buffer); return GST_FLOW_ERROR; @@ -125,6 +127,11 @@ gst_buffer_map (buffer, &map, GST_MAP_READ); gst_byte_reader_init (&reader, map.data, map.size); + /* Some XDCAM recorders store empty vanc packets (without even the + * length). Treat them as gaps */ + if (map.size == 0) + goto no_data; + num_packets = gst_byte_reader_get_uint16_be_unchecked (&reader); if (num_packets == 0) { /* SMPTE 436-1:2013 5.5 The Number of VI Lines or ANC Packets Property
View file
gst-plugins-bad-1.20.1.tar.xz/gst/speed/gstspeed.c -> gst-plugins-bad-1.20.2.tar.xz/gst/speed/gstspeed.c
Changed
@@ -520,7 +520,7 @@ case GST_EVENT_SEGMENT:{ gdouble rate; GstFormat format; - gint64 start_value, stop_value, base; + gint64 start_value, stop_value; const GstSegment *segment; GstSegment seg; @@ -530,7 +530,6 @@ format = segment->format; start_value = segment->start; stop_value = segment->stop; - base = segment->base; gst_event_unref (event); @@ -545,7 +544,6 @@ start_value /= filter->speed; if (stop_value >= 0) stop_value /= filter->speed; - base /= filter->speed; /* this would only really be correct if we clipped incoming data */ filter->timestamp = start_value;
View file
gst-plugins-bad-1.20.1.tar.xz/gst/videoparsers/gstav1parse.c -> gst-plugins-bad-1.20.2.tar.xz/gst/videoparsers/gstav1parse.c
Changed
@@ -1177,29 +1177,30 @@ if (seq_header.color_config.color_description_present_flag) { GstVideoColorimetry cinfo; - gboolean have_cinfo = TRUE; gchar *colorimetry = NULL; - if (have_cinfo) { - if (seq_header.color_config.color_range) - cinfo.range = GST_VIDEO_COLOR_RANGE_16_235; - else - cinfo.range = GST_VIDEO_COLOR_RANGE_0_255; - - cinfo.matrix = gst_video_color_matrix_from_iso - (seq_header.color_config.matrix_coefficients); - cinfo.transfer = gst_video_transfer_function_from_iso - (seq_header.color_config.transfer_characteristics); - cinfo.primaries = gst_video_color_primaries_from_iso - (seq_header.color_config.color_primaries); - colorimetry = gst_video_colorimetry_to_string (&cinfo); - } + if (seq_header.color_config.color_range) + cinfo.range = GST_VIDEO_COLOR_RANGE_0_255; + else + cinfo.range = GST_VIDEO_COLOR_RANGE_16_235; + + cinfo.matrix = gst_video_color_matrix_from_iso + (seq_header.color_config.matrix_coefficients); + cinfo.transfer = gst_video_transfer_function_from_iso + (seq_header.color_config.transfer_characteristics); + cinfo.primaries = gst_video_color_primaries_from_iso + (seq_header.color_config.color_primaries); + + colorimetry = gst_video_colorimetry_to_string (&cinfo); - if (g_strcmp0 (colorimetry, self->colorimetry)) { - g_clear_pointer (&self->colorimetry, g_free); + if (g_strcmp0 (colorimetry, self->colorimetry) != 0) { + g_free (self->colorimetry); self->colorimetry = colorimetry; + colorimetry = NULL; self->update_caps = TRUE; } + + g_clear_pointer (&colorimetry, g_free); } if (self->subsampling_x != seq_header.color_config.subsampling_x) { @@ -1544,7 +1545,7 @@ GstMapInfo map_info; GstAV1OBU obu; GstFlowReturn ret = GST_FLOW_OK; - GstAV1ParserResult res; + GstAV1ParserResult res = GST_AV1_PARSER_INVALID_OPERATION; GstBuffer *buffer = gst_buffer_ref (frame->buffer); guint32 total_consumed, consumed; gboolean frame_complete; @@ -1773,7 +1774,7 @@ GstAV1Parse *self = GST_AV1_PARSE (parse); GstMapInfo map_info; GstAV1OBU obu; - GstAV1ParserResult res; + GstAV1ParserResult res = GST_AV1_PARSER_INVALID_OPERATION; GstBuffer *buffer = gst_buffer_ref (frame->buffer); gboolean got_seq, got_frame; gboolean frame_complete;
View file
gst-plugins-bad-1.20.1.tar.xz/meson.build -> gst-plugins-bad-1.20.2.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.20.1', + version : '1.20.2', meson_version : '>= 0.59', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
gst-plugins-bad-1.20.1.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.20.2.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-bad-1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-14 11:40+0000\n" +"POT-Creation-Date: 2022-05-02 23:30+0100\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" @@ -89,7 +89,7 @@ msgstr "" #: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:4102 -#: gst/mpegtsdemux/mpegtsbase.c:1751 +#: gst/mpegtsdemux/mpegtsbase.c:1757 msgid "Internal data stream error." msgstr ""
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/avfassetsrc.m -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/avfassetsrc.m
Changed
@@ -1011,18 +1011,15 @@ { CMSampleBufferRef cmbuf; AVAssetReaderTrackOutput *areader = NULL; - GstCaps *caps; GstBuffer *buf; CMTime dur, ts; GST_LOG ("Reading %s next buffer", MEDIA_TYPE_TO_STR (type)); if (type == GST_AVF_ASSET_READER_MEDIA_TYPE_AUDIO && audio_track != NULL) { areader = audio_track; - caps = audio_caps; } else if (type == GST_AVF_ASSET_READER_MEDIA_TYPE_VIDEO && video_track != NULL) { areader = video_track; - caps = video_caps; } if (areader == NULL) {
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/avsamplevideosink.m -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/avsamplevideosink.m
Changed
@@ -77,13 +77,11 @@ gst_av_sample_video_sink_class_init (GstAVSampleVideoSinkClass * klass) { GObjectClass *gobject_class; - GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstVideoSinkClass *gstvideosink_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gstvideosink_class = (GstVideoSinkClass *) klass; element_class = GST_ELEMENT_CLASS (klass);
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/corevideobuffer.c -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/corevideobuffer.c
Changed
@@ -206,10 +206,7 @@ gst_apple_core_video_pixel_buffer_unref (gpixbuf); if (info) { - GstVideoMeta *video_meta; - - video_meta = - gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE, + gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE, GST_VIDEO_INFO_FORMAT (info), info->width, info->height, n_planes, offset, stride); }
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/iosurfaceglmemory.c -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/iosurfaceglmemory.c
Changed
@@ -216,7 +216,7 @@ IOSurfaceDecrementUseCount (memory->surface); memory->surface = surface; if (surface) { - GLuint tex_id, tex_target, texifmt, texfmt; + GLuint tex_id, tex_target, texifmt; guint plane; CGLError cglError; @@ -224,9 +224,6 @@ tex_id = gl_mem->tex_id; tex_target = gst_gl_texture_target_to_gl (gl_mem->tex_target); texifmt = gst_gl_format_from_video_info (context, &gl_mem->info, plane); - texfmt = - gst_gl_sized_gl_format_from_gl_format_type (context, texifmt, - GL_UNSIGNED_BYTE); gl->BindTexture (tex_target, tex_id); cglError = CGLTexImageIOSurface2D ((CGLContextObj) gst_gl_context_get_gl_context (context), tex_target, texifmt,
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/videotexturecache.m -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/videotexturecache.m
Changed
@@ -68,18 +68,15 @@ GstVideoFormat in_format, GstCaps * out_caps) { GstCaps *in_caps; - GstCapsFeatures *features; g_return_if_fail (gst_caps_is_fixed (out_caps)); out_caps = gst_caps_copy (out_caps); - features = gst_caps_get_features (out_caps, 0); gst_video_info_from_caps (&cache->output_info, out_caps); in_caps = gst_caps_copy (out_caps); gst_caps_set_simple (in_caps, "format", G_TYPE_STRING, gst_video_format_to_string (in_format), NULL); - features = gst_caps_get_features (in_caps, 0); gst_video_info_from_caps (&cache->input_info, in_caps); gst_caps_take (&cache->in_caps, in_caps);
View file
gst-plugins-bad-1.20.1.tar.xz/sys/applemedia/vtdec.c -> gst-plugins-bad-1.20.2.tar.xz/sys/applemedia/vtdec.c
Changed
@@ -608,7 +608,7 @@ { OSStatus status; CMSampleBufferRef cm_sample_buffer = NULL; - VTDecodeFrameFlags input_flags, output_flags; + VTDecodeFrameFlags input_flags; GstVtdec *vtdec = GST_VTDEC (decoder); GstFlowReturn ret = GST_FLOW_OK; int decode_frame_number = frame->decode_frame_number; @@ -629,7 +629,6 @@ * reordering ourselves. */ input_flags = kVTDecodeFrame_EnableAsynchronousDecompression; - output_flags = 0; cm_sample_buffer = cm_sample_buffer_from_gst_buffer (vtdec, frame->input_buffer);
View file
gst-plugins-bad-1.20.1.tar.xz/sys/d3d11/gstd3d11decoder.cpp -> gst-plugins-bad-1.20.2.tar.xz/sys/d3d11/gstd3d11decoder.cpp
Changed
@@ -58,7 +58,7 @@ #include <string> #ifdef HAVE_WINMM -#include <timeapi.h> +#include <mmsystem.h> #endif GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_decoder_debug);
View file
gst-plugins-bad-1.20.1.tar.xz/sys/d3d11/gstd3d11window_win32.cpp -> gst-plugins-bad-1.20.2.tar.xz/sys/d3d11/gstd3d11window_win32.cpp
Changed
@@ -207,7 +207,7 @@ if (self->external_hwnd) { gst_d3d11_window_win32_release_external_handle (self->external_hwnd); - RemoveProp (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); + RemovePropA (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); if (self->internal_hwnd_thread == g_thread_self ()) { /* State changing thread is identical to internal window thread. @@ -223,7 +223,7 @@ * Instead, posts message so that it can be closed from window thread * asynchronously */ GST_INFO_OBJECT (self, "Posting custom destory message"); - PostMessage (self->internal_hwnd, WM_GST_D3D11_DESTROY_INTERNAL_WINDOW, + PostMessageA (self->internal_hwnd, WM_GST_D3D11_DESTROY_INTERNAL_WINDOW, 0, 0); } @@ -264,11 +264,11 @@ if (self->internal_hwnd_thread == g_thread_self ()) { /* We are on message pumping thread already, handle this synchroniously */ - SendMessage (self->internal_hwnd, WM_GST_D3D11_MOVE_WINDOW, 0, 0); + SendMessageA (self->internal_hwnd, WM_GST_D3D11_MOVE_WINDOW, 0, 0); } else { /* Post message to message pumping thread. Handling HWND specific message * on message pumping thread is not a worst idea in generall */ - PostMessage (self->internal_hwnd, WM_GST_D3D11_MOVE_WINDOW, 0, 0); + PostMessageA (self->internal_hwnd, WM_GST_D3D11_MOVE_WINDOW, 0, 0); } } else { /* XXX: Not sure what's expected behavior if we are drawing on internal @@ -363,7 +363,7 @@ g_main_loop_run (self->loop); - RemoveProp (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); + RemovePropA (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); gst_d3d11_window_win32_destroy_internal_window (self->internal_hwnd); self->internal_hwnd = NULL; self->internal_hwnd_thread = NULL; @@ -407,20 +407,20 @@ WNDPROC external_window_proc; external_window_proc = - (WNDPROC) GetWindowLongPtr (self->external_hwnd, GWLP_WNDPROC); + (WNDPROC) GetWindowLongPtrA (self->external_hwnd, GWLP_WNDPROC); GST_DEBUG_OBJECT (self, "set external window %" G_GUINTPTR_FORMAT ", original window procedure %p", (guintptr) self->external_hwnd, external_window_proc); - SetProp (self->external_hwnd, EXTERNAL_PROC_PROP_NAME, + SetPropA (self->external_hwnd, EXTERNAL_PROC_PROP_NAME, (HANDLE) external_window_proc); - SetProp (self->external_hwnd, D3D11_WINDOW_PROP_NAME, self); - SetWindowLongPtr (self->external_hwnd, GWLP_WNDPROC, + SetPropA (self->external_hwnd, D3D11_WINDOW_PROP_NAME, self); + SetWindowLongPtrA (self->external_hwnd, GWLP_WNDPROC, (LONG_PTR) sub_class_proc); /* Will create our internal window on parent window's thread */ - SendMessage (self->external_hwnd, WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW, + SendMessageA (self->external_hwnd, WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW, 0, 0); } @@ -432,7 +432,7 @@ if (!hwnd) return; - external_proc = (WNDPROC) GetProp (hwnd, EXTERNAL_PROC_PROP_NAME); + external_proc = (WNDPROC) GetPropA (hwnd, EXTERNAL_PROC_PROP_NAME); if (!external_proc) { GST_WARNING ("Failed to get original window procedure"); return; @@ -441,38 +441,38 @@ GST_DEBUG ("release external window %" G_GUINTPTR_FORMAT ", original window procedure %p", (guintptr) hwnd, external_proc); - RemoveProp (hwnd, EXTERNAL_PROC_PROP_NAME); - RemoveProp (hwnd, D3D11_WINDOW_PROP_NAME); + RemovePropA (hwnd, EXTERNAL_PROC_PROP_NAME); + RemovePropA (hwnd, D3D11_WINDOW_PROP_NAME); - if (!SetWindowLongPtr (hwnd, GWLP_WNDPROC, (LONG_PTR) external_proc)) + if (!SetWindowLongPtrA (hwnd, GWLP_WNDPROC, (LONG_PTR) external_proc)) GST_WARNING ("Couldn't restore original window procedure"); } static gboolean gst_d3d11_window_win32_create_internal_window (GstD3D11WindowWin32 * self) { - WNDCLASSEX wc; + WNDCLASSEXA wc; ATOM atom = 0; - HINSTANCE hinstance = GetModuleHandle (NULL); + HINSTANCE hinstance = GetModuleHandleA (NULL); GST_LOG_OBJECT (self, "Attempting to create a win32 window"); G_LOCK (create_lock); - atom = GetClassInfoEx (hinstance, "GSTD3D11", &wc); + atom = GetClassInfoExA (hinstance, "GSTD3D11", &wc); if (atom == 0) { GST_LOG_OBJECT (self, "Register internal window class"); - ZeroMemory (&wc, sizeof (WNDCLASSEX)); + ZeroMemory (&wc, sizeof (WNDCLASSEXA)); - wc.cbSize = sizeof (WNDCLASSEX); + wc.cbSize = sizeof (WNDCLASSEXA); wc.lpfnWndProc = window_proc; wc.hInstance = hinstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); - wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; + wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wc.lpszClassName = "GSTD3D11"; - atom = RegisterClassEx (&wc); + atom = RegisterClassExA (&wc); if (atom == 0) { G_UNLOCK (create_lock); @@ -488,7 +488,7 @@ self->internal_hwnd = 0; self->visible = FALSE; - self->internal_hwnd = CreateWindowEx (0, + self->internal_hwnd = CreateWindowExA (0, "GSTD3D11", "Direct3D11 renderer", WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, @@ -540,7 +540,7 @@ if (!window->fullscreen) { /* Restore the window's attributes and size */ - SetWindowLong (hwnd, GWL_STYLE, self->restore_style); + SetWindowLongA (hwnd, GWL_STYLE, self->restore_style); SetWindowPos (hwnd, HWND_NOTOPMOST, self->restore_rect.left, @@ -564,7 +564,7 @@ self->restore_style = GetWindowLong (hwnd, GWL_STYLE); /* Make the window borderless so that the client area can fill the screen */ - SetWindowLong (hwnd, GWL_STYLE, + SetWindowLongA (hwnd, GWL_STYLE, self->restore_style & ~(WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_THICKFRAME)); @@ -672,7 +672,7 @@ break; case WM_CLOSE: if (self->internal_hwnd) { - RemoveProp (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); + RemovePropA (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); ShowWindow (self->internal_hwnd, SW_HIDE); gst_d3d11_window_win32_destroy_internal_window (self->internal_hwnd); self->internal_hwnd = NULL; @@ -690,14 +690,7 @@ case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MOUSEMOVE: - /* To handle mouse event only once, do this only for internal window */ - if (self->internal_hwnd && self->internal_hwnd == hWnd) - gst_d3d11_window_win32_on_mouse_event (self, hWnd, uMsg, wParam, - lParam); - - /* DefWindowProc will not chain up mouse event to parent window */ - if (self->external_hwnd && self->external_hwnd != hWnd) - SendMessage (self->external_hwnd, uMsg, wParam, lParam); + gst_d3d11_window_win32_on_mouse_event (self, hWnd, uMsg, wParam, lParam); break; case WM_SYSKEYDOWN: if ((window->fullscreen_toggle_mode & @@ -765,13 +758,13 @@ */ ReleaseDC (hWnd, self->device_handle); - SetProp (hWnd, D3D11_WINDOW_PROP_NAME, self); - } else if (GetProp (hWnd, D3D11_WINDOW_PROP_NAME)) { - HANDLE handle = GetProp (hWnd, D3D11_WINDOW_PROP_NAME); + SetPropA (hWnd, D3D11_WINDOW_PROP_NAME, self); + } else if (GetPropA (hWnd, D3D11_WINDOW_PROP_NAME)) { + HANDLE handle = GetPropA (hWnd, D3D11_WINDOW_PROP_NAME); if (!GST_IS_D3D11_WINDOW_WIN32 (handle)) { GST_WARNING ("%p is not d3d11window object", handle); - goto done; + return DefWindowProcA (hWnd, uMsg, wParam, lParam); } self = GST_D3D11_WINDOW_WIN32 (handle); @@ -780,6 +773,22 @@ gst_d3d11_window_win32_handle_window_proc (self, hWnd, uMsg, wParam, lParam); + + switch (uMsg) { + case WM_SIZE: + /* We handled this event already */ + return 0; + case WM_NCHITTEST: + /* To passthrough mouse event if external window is used. + * Only hit-test succeeded window can receive/handle some mouse events + * and we want such events to be handled by parent (application) window + */ + if (self->external_hwnd) + return (LRESULT) HTTRANSPARENT; + break; + default: + break; + } } else if (uMsg == WM_GST_D3D11_DESTROY_INTERNAL_WINDOW) { GST_INFO ("Handle destroy window message"); gst_d3d11_window_win32_destroy_internal_window (hWnd); @@ -787,20 +796,16 @@ return 0; } - if (uMsg == WM_SIZE) - return 0; - -done: - return DefWindowProc (hWnd, uMsg, wParam, lParam); + return DefWindowProcA (hWnd, uMsg, wParam, lParam); } static LRESULT FAR PASCAL sub_class_proc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { WNDPROC external_window_proc = - (WNDPROC) GetProp (hWnd, EXTERNAL_PROC_PROP_NAME); + (WNDPROC) GetPropA (hWnd, EXTERNAL_PROC_PROP_NAME); GstD3D11WindowWin32 *self = - (GstD3D11WindowWin32 *) GetProp (hWnd, D3D11_WINDOW_PROP_NAME); + (GstD3D11WindowWin32 *) GetPropA (hWnd, D3D11_WINDOW_PROP_NAME); if (uMsg == WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW) { GstD3D11Window *window = GST_D3D11_WINDOW (self); @@ -810,7 +815,7 @@ window->initialized = gst_d3d11_window_win32_create_internal_window (self); - SetWindowLongPtr (self->internal_hwnd, GWL_STYLE, WS_CHILD | WS_MAXIMIZE); + SetWindowLongPtrA (self->internal_hwnd, GWL_STYLE, WS_CHILD | WS_MAXIMIZE); SetParent (self->internal_hwnd, self->external_hwnd); /* take changes into account: SWP_FRAMECHANGED */ @@ -835,7 +840,7 @@ gst_d3d11_window_win32_release_external_handle (self->external_hwnd); self->external_hwnd = NULL; - RemoveProp (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); + RemovePropA (self->internal_hwnd, D3D11_WINDOW_PROP_NAME); ShowWindow (self->internal_hwnd, SW_HIDE); gst_d3d11_window_win32_destroy_internal_window (self->internal_hwnd); self->internal_hwnd = NULL; @@ -849,7 +854,7 @@ } } - return CallWindowProc (external_window_proc, hWnd, uMsg, wParam, lParam); + return CallWindowProcA (external_window_proc, hWnd, uMsg, wParam, lParam); } static void @@ -1110,7 +1115,7 @@ GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window); if (self->internal_hwnd) - PostMessage (self->internal_hwnd, WM_SIZE, 0, 0); + PostMessageA (self->internal_hwnd, WM_SIZE, 0, 0); return; } @@ -1122,7 +1127,7 @@ if (self->internal_hwnd) { g_atomic_int_add (&self->pending_fullscreen_count, 1); - PostMessage (self->internal_hwnd, WM_GST_D3D11_FULLSCREEN, 0, 0); + PostMessageA (self->internal_hwnd, WM_GST_D3D11_FULLSCREEN, 0, 0); } }
View file
gst-plugins-bad-1.20.1.tar.xz/sys/d3d11/meson.build -> gst-plugins-bad-1.20.2.tar.xz/sys/d3d11/meson.build
Changed
@@ -90,7 +90,7 @@ message('Enable D3D11 Desktop Duplication API') endif # multimedia clock is desktop only API - if has_decoder and winmm_lib.found() and cc.has_header('timeapi.h') + if has_decoder and winmm_lib.found() and cc.has_header('mmsystem.h') extra_args += '-DHAVE_WINMM' extra_dep += winmm_lib endif
View file
gst-plugins-bad-1.20.1.tar.xz/sys/msdk/msdk.c -> gst-plugins-bad-1.20.2.tar.xz/sys/msdk/msdk.c
Changed
@@ -187,7 +187,7 @@ mfxStatus sts = MFX_ERR_NONE; mfxLoader loader = NULL; mfxSession session = NULL; - uint32_t impl_idx = 0; + mfxU32 impl_idx = 0; mfxConfig cfg; mfxVariant impl_value;
View file
gst-plugins-bad-1.20.1.tar.xz/sys/nvcodec/gstnvdec.c -> gst-plugins-bad-1.20.2.tar.xz/sys/nvcodec/gstnvdec.c
Changed
@@ -914,11 +914,17 @@ gst_nvdec_start (GstVideoDecoder * decoder) { GstNvDec *nvdec = GST_NVDEC (decoder); + GstNvDecClass *klass = GST_NVDEC_GET_CLASS (nvdec); nvdec->state = GST_NVDEC_STATE_INIT; nvdec->last_ret = GST_FLOW_OK; gst_video_info_init (&nvdec->out_info); + if (klass->codec_type == cudaVideoCodec_H264) + nvdec->h264_parser = gst_h264_nal_parser_new (); + else if (klass->codec_type == cudaVideoCodec_HEVC) + nvdec->h265_parser = gst_h265_parser_new (); + return TRUE; } @@ -957,6 +963,34 @@ return ret; } +static void +gst_nvdec_clear_codec_data (GstNvDec * self) +{ + GstNvDecClass *klass = GST_NVDEC_GET_CLASS (self); + guint i; + + if (klass->codec_type == cudaVideoCodec_HEVC) { + for (i = 0; i < G_N_ELEMENTS (self->vps_nals); i++) { + gst_clear_buffer (&self->vps_nalsi); + } + } + + if (klass->codec_type == cudaVideoCodec_HEVC || + klass->codec_type == cudaVideoCodec_H264) { + for (i = 0; i < G_N_ELEMENTS (self->sps_nals); i++) { + gst_clear_buffer (&self->sps_nalsi); + } + + for (i = 0; i < G_N_ELEMENTS (self->pps_nals); i++) { + gst_clear_buffer (&self->pps_nalsi); + } + } + + gst_clear_buffer (&self->codec_data); + + self->need_codec_data = TRUE; +} + static gboolean gst_nvdec_stop (GstVideoDecoder * decoder) { @@ -968,33 +1002,18 @@ return FALSE; #ifdef HAVE_NVCODEC_GST_GL - if (nvdec->gl_context) { - gst_object_unref (nvdec->gl_context); - nvdec->gl_context = NULL; - } - - if (nvdec->other_gl_context) { - gst_object_unref (nvdec->other_gl_context); - nvdec->other_gl_context = NULL; - } - - if (nvdec->gl_display) { - gst_object_unref (nvdec->gl_display); - nvdec->gl_display = NULL; - } + gst_clear_object (&nvdec->gl_context); + gst_clear_object (&nvdec->other_gl_context); + gst_clear_object (&nvdec->gl_display); #endif - if (nvdec->input_state) { - gst_video_codec_state_unref (nvdec->input_state); - nvdec->input_state = NULL; - } + g_clear_pointer (&nvdec->input_state, gst_video_codec_state_unref); + g_clear_pointer (&nvdec->output_state, gst_video_codec_state_unref); - if (nvdec->output_state) { - gst_video_codec_state_unref (nvdec->output_state); - nvdec->output_state = NULL; - } + g_clear_pointer (&nvdec->h264_parser, gst_h264_nal_parser_free); + g_clear_pointer (&nvdec->h265_parser, gst_h265_parser_free); - gst_clear_buffer (&nvdec->codec_data); + gst_nvdec_clear_codec_data (nvdec); return TRUE; } @@ -1069,15 +1088,20 @@ gst_cuda_context_pop (NULL); /* store codec data */ + gst_nvdec_clear_codec_data (nvdec); + if (ret && nvdec->input_state->caps) { - const GValue *codec_data_value; GstStructure *str; str = gst_caps_get_structure (nvdec->input_state->caps, 0); - codec_data_value = gst_structure_get_value (str, "codec_data"); - if (codec_data_value && GST_VALUE_HOLDS_BUFFER (codec_data_value)) { - GstBuffer *codec_data = gst_value_get_buffer (codec_data_value); - gst_buffer_replace (&nvdec->codec_data, codec_data); + + if (klass->codec_type == cudaVideoCodec_MPEG4) { + const GValue *codec_data_value; + codec_data_value = gst_structure_get_value (str, "codec_data"); + if (codec_data_value && GST_VALUE_HOLDS_BUFFER (codec_data_value)) { + GstBuffer *codec_data = gst_value_get_buffer (codec_data_value); + gst_buffer_replace (&nvdec->codec_data, codec_data); + } } /* For all CODEC we get complete picture ... */ @@ -1325,11 +1349,315 @@ return TRUE; } +static void +gst_nvdec_store_h264_nal (GstNvDec * self, guint id, + GstH264NalUnitType nal_type, GstH264NalUnit * nalu) +{ + GstBuffer *buf, **store; + guint size = nalu->size, store_size; + static const guint8 start_code = { 0, 0, 1 }; + + if (nal_type == GST_H264_NAL_SPS || nal_type == GST_H264_NAL_SUBSET_SPS) { + store_size = GST_H264_MAX_SPS_COUNT; + store = self->sps_nals; + GST_DEBUG_OBJECT (self, "storing sps %u", id); + } else if (nal_type == GST_H264_NAL_PPS) { + store_size = GST_H264_MAX_PPS_COUNT; + store = self->pps_nals; + GST_DEBUG_OBJECT (self, "storing pps %u", id); + } else { + return; + } + + if (id >= store_size) { + GST_DEBUG_OBJECT (self, "unable to store nal, id out-of-range %d", id); + return; + } + + buf = gst_buffer_new_allocate (NULL, size + sizeof (start_code), NULL); + gst_buffer_fill (buf, 0, start_code, sizeof (start_code)); + gst_buffer_fill (buf, sizeof (start_code), nalu->data + nalu->offset, size); + + if (storeid) + gst_buffer_unref (storeid); + + storeid = buf; +} + +static GstBuffer * +gst_nvdec_handle_h264_buffer (GstNvDec * self, GstBuffer * buffer) +{ + GstH264NalParser *parser = self->h264_parser; + GstH264NalUnit nalu; + GstH264ParserResult pres; + GstMapInfo map; + gboolean have_sps = FALSE; + gboolean have_pps = FALSE; + guint i; + GstBuffer *new_buf; + + if (!gst_buffer_map (buffer, &map, GST_MAP_READ)) { + GST_WARNING_OBJECT (self, "Failed to map input buffer"); + return gst_buffer_ref (buffer); + } + + memset (&nalu, 0, sizeof (GstH264NalUnit)); + + do { + pres = gst_h264_parser_identify_nalu (parser, + map.data, nalu.offset + nalu.size, map.size, &nalu); + + if (pres == GST_H264_PARSER_NO_NAL_END) + pres = GST_H264_PARSER_OK; + + switch (nalu.type) { + case GST_H264_NAL_SPS: + case GST_H264_NAL_SUBSET_SPS:{ + GstH264SPS sps; + + if (nalu.type == GST_H264_NAL_SPS) { + pres = gst_h264_parser_parse_sps (parser, &nalu, &sps); + } else { + pres = gst_h264_parser_parse_subset_sps (parser, &nalu, &sps); + } + + if (pres != GST_H264_PARSER_OK) + break; + + have_sps = TRUE; + gst_nvdec_store_h264_nal (self, sps.id, nalu.type, &nalu); + gst_h264_sps_clear (&sps); + break; + } + case GST_H264_NAL_PPS:{ + GstH264PPS pps; + + pres = gst_h264_parser_parse_pps (parser, &nalu, &pps); + if (pres != GST_H264_PARSER_OK) + break; + + have_pps = TRUE; + gst_nvdec_store_h264_nal (self, pps.id, nalu.type, &nalu); + gst_h264_pps_clear (&pps); + break; + } + default: + break; + } + } while (pres == GST_H264_PARSER_OK); + + gst_buffer_unmap (buffer, &map); + + if (!self->need_codec_data || (have_sps && have_pps)) { + self->need_codec_data = FALSE; + return gst_buffer_ref (buffer); + } + + new_buf = gst_buffer_new (); + if (!have_sps) { + for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) { + if (!self->sps_nalsi) + continue; + + have_sps = TRUE; + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (self->sps_nalsi)); + } + } + + if (!have_pps) { + for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) { + if (!self->pps_nalsi) + continue; + + have_pps = TRUE; + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (self->pps_nalsi)); + } + } + + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (buffer)); + + if (have_sps && have_pps) + self->need_codec_data = FALSE; + + return new_buf; +} + +static void +gst_nvdec_store_h265_nal (GstNvDec * self, guint id, + GstH265NalUnitType nal_type, GstH265NalUnit * nalu) +{ + GstBuffer *buf, **store; + guint size = nalu->size, store_size; + static const guint8 start_code = { 0, 0, 1 }; + + if (nal_type == GST_H265_NAL_VPS) { + store_size = GST_H265_MAX_VPS_COUNT; + store = self->vps_nals; + GST_DEBUG_OBJECT (self, "storing vps %u", id); + } else if (nal_type == GST_H265_NAL_SPS) { + store_size = GST_H265_MAX_SPS_COUNT; + store = self->sps_nals; + GST_DEBUG_OBJECT (self, "storing sps %u", id); + } else if (nal_type == GST_H265_NAL_PPS) { + store_size = GST_H265_MAX_PPS_COUNT; + store = self->pps_nals; + GST_DEBUG_OBJECT (self, "storing pps %u", id); + } else { + return; + } + + if (id >= store_size) { + GST_DEBUG_OBJECT (self, "unable to store nal, id out-of-range %d", id); + return; + } + + buf = gst_buffer_new_allocate (NULL, size + sizeof (start_code), NULL); + gst_buffer_fill (buf, 0, start_code, sizeof (start_code)); + gst_buffer_fill (buf, sizeof (start_code), nalu->data + nalu->offset, size); + + if (storeid) + gst_buffer_unref (storeid); + + storeid = buf; +} + +static GstBuffer * +gst_nvdec_handle_h265_buffer (GstNvDec * self, GstBuffer * buffer) +{ + GstH265Parser *parser = self->h265_parser; + GstH265NalUnit nalu; + GstH265ParserResult pres; + GstMapInfo map; + gboolean have_vps = FALSE; + gboolean have_sps = FALSE; + gboolean have_pps = FALSE; + GstBuffer *new_buf; + guint i; + + if (!gst_buffer_map (buffer, &map, GST_MAP_READ)) { + GST_WARNING_OBJECT (self, "Failed to map input buffer"); + return gst_buffer_ref (buffer); + } + + memset (&nalu, 0, sizeof (GstH265NalUnit)); + + do { + pres = gst_h265_parser_identify_nalu (parser, + map.data, nalu.offset + nalu.size, map.size, &nalu); + + if (pres == GST_H265_PARSER_NO_NAL_END) + pres = GST_H265_PARSER_OK; + + switch (nalu.type) { + case GST_H265_NAL_VPS:{ + GstH265VPS vps; + + pres = gst_h265_parser_parse_vps (parser, &nalu, &vps); + if (pres != GST_H265_PARSER_OK) + break; + + have_vps = TRUE; + gst_nvdec_store_h265_nal (self, vps.id, nalu.type, &nalu); + break; + } + case GST_H265_NAL_SPS:{ + GstH265SPS sps; + + pres = gst_h265_parser_parse_sps (parser, &nalu, &sps, FALSE); + if (pres != GST_H265_PARSER_OK) + break; + + have_sps = TRUE; + gst_nvdec_store_h265_nal (self, sps.id, nalu.type, &nalu); + break; + } + case GST_H265_NAL_PPS:{ + GstH265PPS pps; + + pres = gst_h265_parser_parse_pps (parser, &nalu, &pps); + if (pres != GST_H265_PARSER_OK) + break; + + have_pps = TRUE; + gst_nvdec_store_h265_nal (self, pps.id, nalu.type, &nalu); + break; + } + default: + break; + } + } while (pres == GST_H265_PARSER_OK); + + gst_buffer_unmap (buffer, &map); + + if (!self->need_codec_data || (have_sps && have_pps)) { + self->need_codec_data = FALSE; + return gst_buffer_ref (buffer); + } + + new_buf = gst_buffer_new (); + if (!have_vps) { + for (i = 0; i < GST_H265_MAX_VPS_COUNT; i++) { + if (!self->vps_nalsi) + continue; + + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (self->vps_nalsi)); + } + } + + if (!have_sps) { + for (i = 0; i < GST_H265_MAX_SPS_COUNT; i++) { + if (!self->sps_nalsi) + continue; + + have_sps = TRUE; + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (self->sps_nalsi)); + } + } + + if (!have_pps) { + for (i = 0; i < GST_H265_MAX_PPS_COUNT; i++) { + if (!self->pps_nalsi) + continue; + + have_pps = TRUE; + new_buf = gst_buffer_append (new_buf, gst_buffer_ref (self->pps_nalsi)); + } + } + + if (have_sps && have_pps) + self->need_codec_data = FALSE; + + return gst_buffer_append (new_buf, gst_buffer_ref (buffer)); +} + +static GstBuffer * +gst_nvdec_process_input (GstNvDec * self, GstBuffer * inbuf) +{ + GstNvDecClass *klass = GST_NVDEC_GET_CLASS (self); + gboolean parse_nal = FALSE; + + if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_DELTA_UNIT) || + self->need_codec_data) { + parse_nal = TRUE; + } + + if (klass->codec_type == cudaVideoCodec_MPEG4 && + self->codec_data && GST_BUFFER_IS_DISCONT (inbuf)) { + return gst_buffer_append (gst_buffer_ref (self->codec_data), + gst_buffer_ref (inbuf)); + } else if (klass->codec_type == cudaVideoCodec_H264 && parse_nal) { + return gst_nvdec_handle_h264_buffer (self, inbuf); + } else if (klass->codec_type == cudaVideoCodec_HEVC && parse_nal) { + return gst_nvdec_handle_h265_buffer (self, inbuf); + } + + return gst_buffer_ref (inbuf); +} + static GstFlowReturn gst_nvdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) { GstNvDec *nvdec = GST_NVDEC (decoder); - GstNvDecClass *klass = GST_NVDEC_GET_CLASS (nvdec); GstMapInfo map_info = GST_MAP_INFO_INIT; CUVIDSOURCEDATAPACKET packet = { 0, }; GstBuffer *in_buffer; @@ -1339,13 +1667,7 @@ /* initialize with zero to keep track of frames */ gst_video_codec_frame_set_user_data (frame, GUINT_TO_POINTER (0), NULL); - in_buffer = gst_buffer_ref (frame->input_buffer); - if (GST_BUFFER_IS_DISCONT (frame->input_buffer)) { - if (nvdec->codec_data && klass->codec_type == cudaVideoCodec_MPEG4) { - in_buffer = gst_buffer_append (gst_buffer_ref (nvdec->codec_data), - in_buffer); - } - } + in_buffer = gst_nvdec_process_input (nvdec, frame->input_buffer); if (!gst_buffer_map (in_buffer, &map_info, GST_MAP_READ)) { GST_ERROR_OBJECT (nvdec, "failed to map input buffer"); @@ -1394,6 +1716,8 @@ && !gst_cuda_result (CuvidParseVideoData (nvdec->parser, &packet))) GST_WARNING_OBJECT (nvdec, "parser failed"); + nvdec->need_codec_data = TRUE; + return TRUE; } @@ -1416,6 +1740,8 @@ && !gst_cuda_result (CuvidParseVideoData (nvdec->parser, &packet))) GST_WARNING_OBJECT (nvdec, "parser failed"); + nvdec->need_codec_data = TRUE; + return nvdec->last_ret; }
View file
gst-plugins-bad-1.20.1.tar.xz/sys/nvcodec/gstnvdec.h -> gst-plugins-bad-1.20.2.tar.xz/sys/nvcodec/gstnvdec.h
Changed
@@ -34,6 +34,8 @@ #endif #include <gst/video/video.h> +#include <gst/codecparsers/gsth264parser.h> +#include <gst/codecparsers/gsth265parser.h> #include "gstcuvidloader.h" #include "gstcudaloader.h" #include "gstcudacontext.h" @@ -95,6 +97,14 @@ GstBuffer *codec_data; gboolean recv_complete_picture; + + GstH264NalParser *h264_parser; + GstH265Parser *h265_parser; + GstBuffer *vps_nalsGST_H265_MAX_VPS_COUNT; + GstBuffer *sps_nalsGST_H264_MAX_SPS_COUNT; + GstBuffer *pps_nalsGST_H264_MAX_PPS_COUNT; + + gboolean need_codec_data; }; struct _GstNvDecClass
View file
gst-plugins-bad-1.20.1.tar.xz/sys/nvcodec/gstnvvp9dec.c -> gst-plugins-bad-1.20.2.tar.xz/sys/nvcodec/gstnvvp9dec.c
Changed
@@ -273,7 +273,7 @@ cudaVideoCodec_VP9, &info, self->width, self->height, frame_hdr->bit_depth, /* +4 for render delay */ - NUM_OUTPUT_VIEW)) { + NUM_OUTPUT_VIEW + 4)) { GST_ERROR_OBJECT (self, "Failed to configure decoder"); return GST_FLOW_NOT_NEGOTIATED; }
View file
gst-plugins-bad-1.20.1.tar.xz/sys/v4l2codecs/gstv4l2decoder.c -> gst-plugins-bad-1.20.2.tar.xz/sys/v4l2codecs/gstv4l2decoder.c
Changed
@@ -114,6 +114,7 @@ g_free (self->media_device); g_free (self->video_device); gst_queue_array_free (self->request_pool); + gst_queue_array_free (self->pending_requests); G_OBJECT_CLASS (gst_v4l2_decoder_parent_class)->finalize (obj); }
View file
gst-plugins-bad-1.20.1.tar.xz/sys/va/gstvabasedec.c -> gst-plugins-bad-1.20.2.tar.xz/sys/va/gstvabasedec.c
Changed
@@ -362,11 +362,8 @@ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META); - if (_need_video_crop (base)) { - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); - gst_buffer_pool_config_set_video_alignment (config, &base->valign); - } + if (_need_video_crop (base)) + gst_buffer_pool_config_set_va_alignment (config, &base->valign); gst_buffer_pool_config_set_va_allocation_params (config, VA_SURFACE_ATTRIB_USAGE_HINT_DECODER); @@ -537,11 +534,8 @@ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META); - if (base->need_valign) { - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); - gst_buffer_pool_config_set_video_alignment (config, &base->valign); - } + if (base->need_valign) + gst_buffer_pool_config_set_va_alignment (config, &base->valign); gst_buffer_pool_config_set_va_allocation_params (config, VA_SURFACE_ATTRIB_USAGE_HINT_DECODER);
View file
gst-plugins-bad-1.20.1.tar.xz/sys/va/gstvapool.c -> gst-plugins-bad-1.20.2.tar.xz/sys/va/gstvapool.c
Changed
@@ -52,9 +52,7 @@ static const gchar ** gst_va_pool_get_options (GstBufferPool * pool) { - static const gchar *options = { GST_BUFFER_POOL_OPTION_VIDEO_META, - GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, NULL - }; + static const gchar *options = { GST_BUFFER_POOL_OPTION_VIDEO_META, NULL }; return options; } @@ -68,6 +66,17 @@ return TRUE; } +static inline gboolean +gst_buffer_pool_config_get_va_alignment (GstStructure * config, + GstVideoAlignment * align) +{ + return gst_structure_get (config, + "va-padding-top", G_TYPE_UINT, &align->padding_top, + "va-padding-bottom", G_TYPE_UINT, &align->padding_bottom, + "va-padding-left", G_TYPE_UINT, &align->padding_left, + "va-padding-right", G_TYPE_UINT, &align->padding_right, NULL); +} + static gboolean gst_va_pool_set_config (GstBufferPool * pool, GstStructure * config) { @@ -111,12 +120,10 @@ GST_BUFFER_POOL_OPTION_VIDEO_META); /* parse extra alignment info */ - has_alignment = gst_buffer_pool_config_has_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); + has_alignment = gst_buffer_pool_config_get_va_alignment (config, + &video_align); if (has_alignment) { - gst_buffer_pool_config_get_video_alignment (config, &video_align); - width += video_align.padding_left + video_align.padding_right; height += video_align.padding_bottom + video_align.padding_top; @@ -338,6 +345,17 @@ gst_structure_set (config, "usage-hint", G_TYPE_UINT, usage_hint, NULL); } +void +gst_buffer_pool_config_set_va_alignment (GstStructure * config, + const GstVideoAlignment * align) +{ + gst_structure_set (config, + "va-padding-top", G_TYPE_UINT, align->padding_top, + "va-padding-bottom", G_TYPE_UINT, align->padding_bottom, + "va-padding-left", G_TYPE_UINT, align->padding_left, + "va-padding-right", G_TYPE_UINT, align->padding_right, NULL); +} + gboolean gst_va_pool_requires_video_meta (GstBufferPool * pool) {
View file
gst-plugins-bad-1.20.1.tar.xz/sys/va/gstvapool.h -> gst-plugins-bad-1.20.2.tar.xz/sys/va/gstvapool.h
Changed
@@ -21,6 +21,7 @@ #pragma once #include <gst/gst.h> +#include <gst/video/video.h> G_BEGIN_DECLS @@ -30,14 +31,17 @@ GstBufferPool * gst_va_pool_new (void); gboolean gst_va_pool_requires_video_meta (GstBufferPool * pool); void gst_buffer_pool_config_set_va_allocation_params (GstStructure * config, - guint usage_hint); + guint usage_hint); + +void gst_buffer_pool_config_set_va_alignment (GstStructure * config, + const GstVideoAlignment * align); GstBufferPool * gst_va_pool_new_with_config (GstCaps * caps, - guint size, - guint min_buffers, - guint max_buffers, - guint usage_hint, - GstAllocator * allocator, - GstAllocationParams * alloc_params); + guint size, + guint min_buffers, + guint max_buffers, + guint usage_hint, + GstAllocator * allocator, + GstAllocationParams * alloc_params); G_END_DECLS
View file
gst-plugins-bad-1.20.1.tar.xz/tests/examples/camerabin2/gst-camerabin2-test.c -> gst-plugins-bad-1.20.2.tar.xz/tests/examples/camerabin2/gst-camerabin2-test.c
Changed
@@ -809,7 +809,7 @@ change_mode_after = gst_util_get_timestamp (); } - return TRUE; + return res; error: cleanup_pipeline (); return FALSE;
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
.