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 17
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Sat Jul 1 15:54:57 UTC 2023 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.22.4 + +------------------------------------------------------------------- Thu May 25 17:06:42 UTC 2023 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.22.3
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.3 +Version: 1.22.4 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.22.3.tar.xz/ChangeLog -> gst-plugins-bad-1.22.4.tar.xz/ChangeLog
Changed
@@ -1,3 +1,255 @@ +=== release 1.22.4 === + +2023-06-20 17:42:25 +0100 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.22.4 + +2023-06-13 14:25:04 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/dvdspu/gstspu-pgs.c: + dvdspu: Avoid integer overflow when checking if enough data is available + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4899> + +2023-06-13 14:23:47 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/dvdspu/gstspu-pgs.c: + dvdspu: Make sure enough data is allocated for the available data + If the size read from the stream is smaller than the currently available + data then the size is bogus and the data should simply be discarded. + Fixes ZDI-CAN-20994 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2660 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4899> + +2023-04-18 09:59:36 +0200 Andoni Morales Alastruey <amorales@fluendo.com> + + * sys/applemedia/vtenc.c: + * sys/applemedia/vtenc.h: + vtenc: remove duplicated framerate and size variables + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4888> + +2023-03-30 15:38:22 +0200 Andoni Morales Alastruey <amorales@fluendo.com> + + * sys/applemedia/meson.build: + * sys/applemedia/vtdec.h: + * sys/applemedia/vtenc.c: + * sys/applemedia/vtenc.h: + * tests/validate/meson.build: + * tests/validate/vtenc/vtenc_h264.validatetest: + * tests/validate/vtenc/vtenc_h264/flow-expectations/log-enc-src-expected: + * tests/validate/vtenc/vtenc_h264_b_frames.validatetest: + * tests/validate/vtenc/vtenc_h264_b_frames/flow-expectations/log-enc-src-expected: + * tests/validate/vtenc/vtenc_h265.validatetest: + * tests/validate/vtenc/vtenc_h265/flow-expectations/log-enc-src-expected: + * tests/validate/vtenc/vtenc_h265_b_frames.validatetest: + * tests/validate/vtenc/vtenc_h265_b_frames/flow-expectations/log-enc-src-expected: + vtenc: apply DTS offset to ensure DTS <= PTS + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4888> + +2023-03-23 20:04:49 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gsth265parse.c: + h265parse: Don't override upstream framerate + The framerate should only be replaced (and corrected for alternating field) + when it is parsed from the bitstream. Otherwise, the upstream framerate + from caps should be trusted and assumed correct. + Related to gst-plugins-bad!2020 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4352> + +2023-03-23 20:02:16 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gsth265parse.c: + * gst/videoparsers/gsth265parse.h: + h265parse: Rename parsed_framerate to framerate_from_caps + That meaning of parsed_framerate is ambigious, it is set whenever the + framerate has been parsed from caps, which can be confused with being + parsed from the bitstream. Rename this as framerate_from_caps. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4352> + +2023-02-15 13:10:39 +0800 Mengkejiergeli Ba <mengkejiergeli.ba@intel.com> + + * gst/videoparsers/gsth265parse.c: + h265parse: Fix to check returned value + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4352> + +2023-05-11 15:28:35 +0200 Michael Olbrich <m.olbrich@pengutronix.de> + + * gst/sdp/gstsdpdemux.c: + sdpdemux: ensure that only one srcpad is created per stream + If two senders use the same multicast IP and port then new_session_pad() + may try to add a srcpad to the same stream twice. + stream->srcpad is updated but gst_element_add_pad() fails the second + time. As a result stream->srcpad points to a deleted object and + access in gst_sdp_demux_stream_free() fails with a segfault. + Just ignore the second pad. Nothing useful can be done with it anyway. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4873> + +2023-06-11 22:22:36 +0200 Marek Vasut <marex@denx.de> + + * sys/kms/gstkmssink.c: + kmssink: Add ST STM32 LTDC auto-detection + Add STM32 LTDC controller into list of auto-detected modules. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4872> + +2023-06-11 22:22:25 +0200 Marek Vasut <marex@denx.de> + + * sys/kms/gstkmssink.c: + kmssink: Add NXP i.MX8M Plus LCDIFv3 auto-detection + Add i.MX8M Plus LCDIFv3 controller into list of auto-detected modules. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4872> + +2023-04-28 22:25:11 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvah265enc.c: + va: h265enc: map the mbbrc to correct enum value in get_property() + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4870> + +2023-04-28 22:26:34 +0800 He Junyan <junyan.he@intel.com> + + * sys/va/gstvah264enc.c: + va: h264enc: map the mbbrc to correct enum value in get_property() + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4870> + +2023-06-14 10:08:51 +0200 François Laignel <francois@centricular.com> + + * ext/srtp/gstsrtpdec.c: + srtpdec: fix Got data flow before segment event + A race condition can occur in `srtpdec` during the READY -> NULL transition: + an RTCP buffer can make its way to `gst_srtp_dec_chain` while the element is + partially stopped, resulting in the following critical warning: + > Got data flow before segment event + The problematic sequence is the following: + 1. An RTCP buffer is being handled by the chain function for the + `rtcp_sinkpad`. Since, this is the first buffer, we try pushing the sticky + events to `rtcp_srcpad`. + 2. At the same moment, the element is being transitioned from PAUSED to READY. + 3. While checking and pushing the sticky events for `rtcp_srcpad`, we reach the + Segment event. For this, we try to get it from the "otherpad", in this case + `rtp_srcpad`. In the problematic case, `rtp_srcpad` has already been + deactivated so its sticky events have been cleared. We won't be pushing any + Segment event to `rtcp_srcpad`. + 4. We return to the chain function for `rtcp_sinkpad` and try pushing the + buffer to `rtcp_srcpad` for which deactivation hasn't started yet, hence the + "Got data flow before segment event". + This commit: + - Adds a boolean return value to `gst_srtp_dec_push_early_events`: in case the + Segment event can't be retrieved, `gst_srtp_dec_chain` can return an error + instead of calling `gst_pad_push`. + - Replaces the obsolete `gst_pad_set_caps` with `gst_pad_push_event`. The + additional preconditions checked by previous function are guaranteed here + since we push a fixed Caps which was built in the same function. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4860> + +2023-06-15 11:11:39 +0200 François Laignel <francois@centricular.com> + + * ext/srtp/gstsrtpdec.c: + srtpdec: backport for fix assertion 'parent->numsinkpads <= 1' failed + Commit 96450f4c uses the new function `gst_element_decorate_stream_id` which + was introduced by 39633967 in 1.23. + This commit backports 96450f4c with a simplified version of + `gst_element_decorate_stream_id_internal` as a private srtpdec function. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4860> + +2023-06-15 01:36:25 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: Fix navigation event leak + Fixing regression introduced in 6c2f6c3bd4dd525eb02c6d7000e84b76663d3daf + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4868> + +2023-06-13 01:29:14 +0100 Tim-Philipp Müller <tim@centricular.com> + + * gst/asfmux/gstasfobjects.c: + asfmux: fix potentially unaligned write on 32-bit ARM + Fixes #2665 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4855> + +2023-06-01 15:16:47 +0300 Sebastian Dröge <sebastian@centricular.com> + + * sys/decklink/gstdecklink.h: + decklink: Implement Windows string conversion with common API between MinGW and MSVC + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-06-01 15:17:26 +0300 Sebastian Dröge <sebastian@centricular.com> + + * sys/decklink/gstdecklink.h: + decklink: Add some newlines in long defines + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-05-31 23:44:42 +0300 Maksym Khomenko <maksym.khomenko@skelia.partners> + + * sys/decklink/gstdecklink.h: + decklink: Calculate string size before malloc + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-05-30 15:27:21 +0300 Sebastian Dröge <sebastian@centricular.com> + + * sys/decklink/gstdecklink.h: + decklink: Use the macOS version of the SDK on macOS and not the Linux one + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-05-30 13:23:28 +0300 Sebastian Dröge <sebastian@centricular.com> + + * sys/decklink/gstdecklink.h: + decklink: Free SDK strings after usage on Linux + While they're const char* they still need to be freed like on Windows + and macOS and would be leaked otherwise. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-05-30 13:22:44 +0300 Sebastian Dröge <sebastian@centricular.com> + + * sys/decklink/gstdecklink.h: + decklink: Correctly handle SDK strings on macOS + They're CFStringRef* and not plain NUL-terminated char* C strings. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786> + +2023-05-26 13:26:42 +0100 Colin Kinloch <colin.kinloch@collabora.com> + + * ext/gtk/gstgtkwaylandsink.c: + * gst-libs/gst/wayland/gstwlwindow.c: + waylandsink: Emit "map" signal boarder surface is ready + This allows gtkwaylandsink to queue a draw of its gtk widget at the + correct time, avoiding a race. + Signed-off-by: Colin Kinloch <colin.kinloch@collabora.com> + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4754> + +2023-05-25 17:02:24 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com> + + * ext/fdkaac/gstfdkaacdec.c: + fdkaacdec: Support up to 5 rear channels + The `switch (n_rear)` supports up to 5 rear channels, but our channel + set only had space for 3. Size the set properly to fix this. + This didn't actually cause any memory unsafety as `PUSH_CHAN` would stop + incrementing `n_rear` if the channel set is already full. + Thanks to @alatiera for noticing this. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4740> + +2023-05-24 22:12:51 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11videosink.cpp: + d3d11videosink: Fix error on pause and play + The show_frame() can be called without prepare() call on paused to + playing state change. Thus the prepared buffer should not be cleared + on show_frame() + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4714> + +2023-05-18 09:27:29 -0400 Thibault Saunier <tsaunier@igalia.com> + + * gst/debugutils/gsttestsrcbin.c: + testsrcbin: Remove spurious caps unref + Caps are cleared at the end of the function + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2575 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4685> + +2023-05-19 12:36:19 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4679> + === release 1.22.3 === 2023-05-19 09:23:19 +0100 Tim-Philipp Müller <tim@centricular.com>
View file
gst-plugins-bad-1.22.3.tar.xz/NEWS -> gst-plugins-bad-1.22.4.tar.xz/NEWS
Changed
@@ -2,13 +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.3 and was -released on 19 May 2023. +The latest bug-fix release in the stable 1.22 series is 1.22.4 and was +released on 20 June 2023. See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Friday 19 May 2023, 01:00 UTC (log) +Last updated: Tuesday 20 June 2023, 16:30 UTC (log) Introduction @@ -1831,6 +1831,183 @@ - List of Merge Requests applied in 1.22.3 - List of Issues fixed in 1.22.3 +1.22.4 + +The fourth 1.22 bug-fix release (1.22.4) was released on 20 June 2023. + +This release only contains bugfixes and security fixes and it should be +safe to update from 1.22.x. + +Highlighted bugfixes in 1.22.4 + +- Security fixes for flacparse, dvdspu, and subparse +- d3d11videosink: Fix error on pause and play +- decklink: Correctly handle SDK strings on macOS and free strings + after usage on Linux +- filesink: Fix buffered mode writing of buffer lists and buffers with + multiple memories +- gldownload: handle passthrough without a critical +- h265parse: Fix framerate handling regression +- oggdemux: vp8 fixes +- mp4mux, qtmux, qtdemux: Opus audio mapping fixes +- pngdec: Fix wrong colours output from 16bit RGB images +- ptp clock: Work around ptpd bug in default configuration +- srtpdec: fix critical warnings on shutdown +- v4l2src: fix support for bayer format +- v4l2videoenc: support force-keyframe event in v4l2 encoder +- vtenc: apply DTS offset to ensure DTS <= PTS +- gst-python: allow more functions to be called before gst_init() +- cerbero: fix vaapi variant; add qt6 build on windows; ensure errors + on unguarded use of new APIs, require macOS 10.13 +- packages: ship codecalpha, rtponvif, dvbsubenc, switchbin, + videosignal plugins; fix pango crash on 32-bit windows +- various bug fixes, memory leak fixes, and other stability and + reliability improvements + +gstreamer + +- filesink: Fix buffered mode writing of buffer lists and buffers with + multiple memories +- basesink: Clear EOS flag on STREAM-START event +- typefindhelper: downgrade bogus error level debug log message +- ptp: Correctly parse clock ID from the commandline parameters in the + helper +- ptp: Work around bug in ptpd in default configuration + +gst-plugins-base + +- alsasink: Fix stall for transition from PAUSED to READY with USB + speakerphone. +- appsink: unref buffer in prev sample early so buffers from v4l2 can + be released properly +- basetextoverlay: Fix typo in “text-y” property description +- gldownload: handle passthrough without a critical +- glfilter: add parent meta to output buffer for input buffer +- oggdemux: vp8: Push headers downstream and detect keyframe packets +- opus: Fix potential crash when getting unexpected channel position +- streamsynchronizer: reset eos on STREAM_START +- subparse: Look for the closing > of a tag after the opening < +- video: convertframe: Add D3D11 specific conversion path +- videometa: Only validate the alignment only when it contains some + info +- video-blend: Fix linking error with C++ + +gst-plugins-good + +- flacparse: Avoid integer overflow in available data check for image + tags +- flvmux: use the correct timestamp to calculate wait times +- isomp4: Fix (E)AC-3 channel count handling +- jpegdec: fixes related to interlaced jpeg +- pngdec: Fix wrong colours output from 16bit RGB images +- qtmux, qtdemux: fix byte order for opus extension +- rtspsrc: Do not try send dropped get/set parameter +- qt5, qt6: Add more meson options and eliminate all automagic +- qt: glrenderer: don’t attempt to use QWindow from non-Qt main thread +- qml6glsink: Support building on win32 +- v4l2src: fix support for bayer format +- v4l2: Change to query only up to + V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS +- v4l2videodec: treat MPEG-1 format as MPEG-2 +- v4l2videoenc: support force keyframe event in v4l2 encoder +- tests: rtpbin_buffer_list: fix possible unaligned write/read on + 32-bit ARM + +gst-plugins-bad + +- asfmux: fix possible unaligned write on 32-bit ARM +- d3d11videosink: Fix error on pause and play +- d3dvideosink: Fix navigation event leak +- decklink: Correctly handle SDK strings on macOS and free strings + after usage on Linux +- dvdspu: Make sure enough data is allocated for the available data +- fdkaacdec: Support up to 5 rear channels +- h265parse: Fix framerate handling +- kmssink: Add STM32 LTDC and NXP i.MX8M Plus LCDIFv3 auto-detection +- sdpdemux: ensure that only one srcpad is created per stream +- srtpdec: fix critical warnings on shutdown +- testsrcbin: Remove spurious caps unref +- va: map the mbbrc to correct enum value in get_property() +- vtenc: apply DTS offset to ensure DTS <= PTS +- vtdec: time glitches on h264 playback +- waylandsink: Emit “map” signal boarder surface is ready + +gst-plugins-ugly + +- No changes + +gst-libav + +- No changes + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- vaapidecodebin: don’t load vaapipostproc if not available + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- python: More functions can be called before gst_init() + +gst-editing-services + +- ges: launcher: Never put sinks in a GstPipeline + +gst-validate + gst-integration-testsuites + +- No changes + +gst-examples + +- No changes + +Development build environment + +- No changes + +Cerbero build tool and packaging changes in 1.22.4 + +- Ship codecalpha, rtponvif, dvbsubenc, switchbin, videosignal plugins +- pango: Fix crash on Windows 32bit build +- qml6: Add support for building the qml6 plugin on Windows and bump + meson to 1.1.1 +- vaapi: update vaapi variant/recipe for meson option changes +- packages: Put libass in the same category as assrender +- cerbero: Don’t extract if already extracted in fetch +- darwin: Ensure errors on unguarded use of new APIs, require macOS + 10.13 + +Contributors to 1.22.4 + +Andoni Morales Alastruey, Arun Raghavan, Colin Kinloch, Daniel Morin, +Edward Hervey, ekwange, Elliot Chen, François Laignel, Guillaume +Desmottes, Haihua Hu, He Junyan, Hou Qi, Jan Alexander Steffens +(heftig), Jochen Henneberg, Jordan Petridis, Kevin Song, Maksym +Khomenko, Marek Vasut, Mathieu Duponchelle, Matthew Waters, +Mengkejiergeli Ba, Michael Olbrich, Nicolas Beland, Nicolas Dufresne, +Nirbheek Chauhan, Philippe Normand, Piotr Brzeziński, Sebastian Dröge, +Seungha Yang, Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez +Leal, William Manley, Xavier Claessens, Yuri Fedoseev, + +… 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.22.4 + +- List of Merge Requests applied in 1.22.4 +- List of Issues fixed in 1.22.4 + Schedule for 1.24 Our next major feature release will be 1.24, and 1.23 will be the
View file
gst-plugins-bad-1.22.3.tar.xz/RELEASE -> gst-plugins-bad-1.22.4.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.22.3. +This is GStreamer gst-plugins-bad 1.22.4. 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.3.tar.xz/ext/fdkaac/gstfdkaacdec.c -> gst-plugins-bad-1.22.4.tar.xz/ext/fdkaac/gstfdkaacdec.c
Changed
@@ -237,7 +237,7 @@ DEF_CHANSET (front, 7); DEF_CHANSET (side, 2); - DEF_CHANSET (rear, 3); + DEF_CHANSET (rear, 5); DEF_CHANSET (lfe, 2); DEF_CHANSET (top_front, 3); DEF_CHANSET (top_center, 3);
View file
gst-plugins-bad-1.22.3.tar.xz/ext/gtk/gstgtkwaylandsink.c -> gst-plugins-bad-1.22.4.tar.xz/ext/gtk/gstgtkwaylandsink.c
Changed
@@ -432,6 +432,17 @@ } static void +wl_window_map_cb (GstWlWindow * wl_window, GstGtkWaylandSink * self) +{ + GstGtkWaylandSinkPrivate *priv = + gst_gtk_wayland_sink_get_instance_private (self); + + GST_DEBUG_OBJECT (self, "waylandsink surface is ready"); + + gtk_gst_base_widget_queue_draw (GTK_GST_BASE_WIDGET (priv->gtk_widget)); +} + +static void setup_wl_window (GstGtkWaylandSink * self) { GstGtkWaylandSinkPrivate *priv = @@ -457,6 +468,8 @@ wl_surface, &priv->render_lock); gst_wl_window_set_rotate_method (priv->wl_window, priv->current_rotate_method); + g_signal_connect_object (priv->wl_window, "map", + G_CALLBACK (wl_window_map_cb), self, 0); } /* In order to position the subsurface correctly within a scrollable widget,
View file
gst-plugins-bad-1.22.3.tar.xz/ext/srtp/gstsrtpdec.c -> gst-plugins-bad-1.22.4.tar.xz/ext/srtp/gstsrtpdec.c
Changed
@@ -1260,7 +1260,54 @@ return gst_srtp_dec_iterate_internal_links (pad, parent, TRUE); } -static void +/* Partial backport to 1.22 of `gst_element_decorate_stream_id_internal`, + * which was introduced in 1.23 */ +static gchar * +decorate_stream_id_private (GstElement * element, const gchar * stream_id) +{ + gchar *upstream_stream_id = NULL, *new_stream_id; + GstQuery *query; + gchar *uri = NULL; + + /* Try to generate a stream-id from the URI query and + * if it fails take a random number instead */ + query = gst_query_new_uri (); + if (gst_element_query (element, query)) { + gst_query_parse_uri (query, &uri); + } + + if (uri) { + GChecksum *cs; + + /* And then generate an SHA256 sum of the URI */ + cs = g_checksum_new (G_CHECKSUM_SHA256); + g_checksum_update (cs, (const guchar *) uri, strlen (uri)); + g_free (uri); + upstream_stream_id = g_strdup (g_checksum_get_string (cs)); + g_checksum_free (cs); + } else { + /* Just get some random number if the URI query fails */ + GST_FIXME_OBJECT (element, "Creating random stream-id, consider " + "implementing a deterministic way of creating a stream-id"); + upstream_stream_id = + g_strdup_printf ("%08x%08x%08x%08x", g_random_int (), g_random_int (), + g_random_int (), g_random_int ()); + } + + gst_query_unref (query); + + if (stream_id) { + new_stream_id = g_strconcat (upstream_stream_id, "/", stream_id, NULL); + } else { + new_stream_id = g_strdup (upstream_stream_id); + } + + g_free (upstream_stream_id); + + return new_stream_id; +} + +static gboolean gst_srtp_dec_push_early_events (GstSrtpDec * filter, GstPad * pad, GstPad * otherpad, gboolean is_rtcp) { @@ -1283,7 +1330,7 @@ is_rtcp ? "rtcp" : "rtp"); gst_event_unref (otherev); } else { - new_stream_id = gst_pad_create_stream_id (pad, GST_ELEMENT (filter), + new_stream_id = decorate_stream_id_private (GST_ELEMENT (filter), is_rtcp ? "rtcp" : "rtp"); } @@ -1304,7 +1351,8 @@ else caps = gst_caps_new_empty_simple ("application/x-rtp"); - gst_pad_set_caps (pad, caps); + ev = gst_event_new_caps (caps); + gst_pad_push_event (pad, ev); gst_caps_unref (caps); } @@ -1314,8 +1362,16 @@ } else { ev = gst_pad_get_sticky_event (otherpad, GST_EVENT_SEGMENT, 0); - if (ev) + if (ev) { gst_pad_push_event (pad, ev); + } else if (GST_PAD_IS_FLUSHING (otherpad)) { + /* We didn't get a Segment event from otherpad + * and otherpad is flushing => we are most likely shutting down */ + goto err; + } else { + GST_WARNING_OBJECT (filter, "No Segment event to push"); + goto err; + } } if (is_rtcp) @@ -1323,6 +1379,10 @@ else filter->rtp_has_segment = TRUE; + return TRUE; + +err: + return FALSE; } /* @@ -1500,15 +1560,24 @@ /* Push buffer to source pad */ if (is_rtcp) { otherpad = filter->rtcp_srcpad; - if (!filter->rtcp_has_segment) - gst_srtp_dec_push_early_events (filter, filter->rtcp_srcpad, - filter->rtp_srcpad, TRUE); + if (!filter->rtcp_has_segment) { + if (!gst_srtp_dec_push_early_events (filter, filter->rtcp_srcpad, + filter->rtp_srcpad, TRUE)) { + ret = GST_FLOW_FLUSHING; + goto drop_buffer; + } + } } else { otherpad = filter->rtp_srcpad; - if (!filter->rtp_has_segment) - gst_srtp_dec_push_early_events (filter, filter->rtp_srcpad, - filter->rtcp_srcpad, FALSE); + if (!filter->rtp_has_segment) { + if (!gst_srtp_dec_push_early_events (filter, filter->rtp_srcpad, + filter->rtcp_srcpad, FALSE)) { + ret = GST_FLOW_FLUSHING; + goto drop_buffer; + } + } } + ret = gst_pad_push (otherpad, buf); return ret;
View file
gst-plugins-bad-1.22.3.tar.xz/gst-libs/gst/wayland/gstwlwindow.c -> gst-plugins-bad-1.22.4.tar.xz/gst-libs/gst/wayland/gstwlwindow.c
Changed
@@ -79,6 +79,7 @@ enum { CLOSED, + MAP, LAST_SIGNAL }; @@ -155,6 +156,9 @@ signalsCLOSED = g_signal_new ("closed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); + signalsMAP = g_signal_new ("map", G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); + } static void @@ -509,6 +513,7 @@ gst_wl_window_update_borders (self); wl_surface_commit (priv->area_surface_wrapper); priv->is_area_surface_mapped = TRUE; + g_signal_emit (self, signalsMAP, 0); } } else { /* clear both video and parent surfaces */
View file
gst-plugins-bad-1.22.3.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.22.4.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.22.4</revision> + <branch>1.22</branch> + <name></name> + <created>2023-06-20</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.22.4.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.22.3</revision> <branch>1.22</branch> <name></name>
View file
gst-plugins-bad-1.22.3.tar.xz/gst/asfmux/gstasfobjects.c -> gst-plugins-bad-1.22.4.tar.xz/gst/asfmux/gstasfobjects.c
Changed
@@ -311,14 +311,10 @@ void gst_asf_put_guid (guint8 * buf, Guid guid) { - guint32 *aux32 = (guint32 *) buf; - guint16 *aux16 = (guint16 *) & (buf4); - guint64 *aux64 = (guint64 *) & (buf8); - *aux32 = GUINT32_TO_LE (guid.v1); - *aux16 = GUINT16_TO_LE (guid.v2); - aux16 = (guint16 *) & (buf6); - *aux16 = GUINT16_TO_LE (guid.v3); - *aux64 = GUINT64_TO_BE (guid.v4); + GST_WRITE_UINT32_LE (buf + 0, guid.v1); + GST_WRITE_UINT16_LE (buf + 4, guid.v2); + GST_WRITE_UINT16_LE (buf + 6, guid.v3); + GST_WRITE_UINT64_BE (buf + 8, guid.v4); } /**
View file
gst-plugins-bad-1.22.3.tar.xz/gst/debugutils/gsttestsrcbin.c -> gst-plugins-bad-1.22.4.tar.xz/gst/debugutils/gsttestsrcbin.c
Changed
@@ -343,7 +343,6 @@ capsfilter = gst_element_factory_make ("capsfilter", NULL); if (caps) { g_object_set (capsfilter, "caps", caps, NULL); - gst_caps_unref (caps); } src = gst_element_factory_make (srcfactory, NULL);
View file
gst-plugins-bad-1.22.3.tar.xz/gst/dvdspu/gstspu-pgs.c -> gst-plugins-bad-1.22.4.tar.xz/gst/dvdspu/gstspu-pgs.c
Changed
@@ -593,6 +593,9 @@ obj->rle_data_size = GST_READ_UINT24_BE (payload); payload += 3; + if (end - payload > obj->rle_data_size) + return 0; + PGS_DUMP ("%d bytes of RLE data, of %d bytes total.\n", (int) (end - payload), obj->rle_data_size); @@ -604,7 +607,8 @@ PGS_DUMP ("%d bytes of additional RLE data\n", (int) (end - payload)); /* Check that the data chunk is for this object version, and fits in the buffer */ if (obj->rle_data_ver == obj_ver && - obj->rle_data_used + end - payload <= obj->rle_data_size) { + end - payload <= obj->rle_data_size && + obj->rle_data_used <= obj->rle_data_size - (end - payload)) { memcpy (obj->rle_data + obj->rle_data_used, payload, end - payload); obj->rle_data_used += end - payload;
View file
gst-plugins-bad-1.22.3.tar.xz/gst/sdp/gstsdpdemux.c -> gst-plugins-bad-1.22.4.tar.xz/gst/sdp/gstsdpdemux.c
Changed
@@ -536,6 +536,9 @@ if (stream == NULL) goto unknown_stream; + if (stream->srcpad) + goto unexpected_pad; + stream->ssrc = ssrc; /* no need for a timeout anymore now */ @@ -576,6 +579,13 @@ return; /* ERRORS */ +unexpected_pad: + { + GST_DEBUG_OBJECT (demux, "ignoring unexpected session pad"); + GST_SDP_STREAM_UNLOCK (demux); + g_free (name); + return; + } unknown_stream: { GST_DEBUG_OBJECT (demux, "ignoring unknown stream");
View file
gst-plugins-bad-1.22.3.tar.xz/gst/videoparsers/gsth265parse.c -> gst-plugins-bad-1.22.4.tar.xz/gst/videoparsers/gsth265parse.c
Changed
@@ -2155,7 +2155,7 @@ } /* 0/1 is set as the default in the codec parser */ - if (vui->timing_info_present_flag) { + if (vui->timing_info_present_flag && !h265parse->framerate_from_caps) { gint fps_num = 0, fps_den = 1; if (!(sps->fps_num == 0 && sps->fps_den == 1)) { @@ -2166,15 +2166,19 @@ fps_num = sps->vui_params.time_scale; fps_den = sps->vui_params.num_units_in_tick; - if (gst_h265_parse_is_field_interlaced (h265parse) - && h265parse->parsed_framerate) { + if (gst_h265_parse_is_field_interlaced (h265parse)) { gint new_fps_num, new_fps_den; - gst_util_fraction_multiply (fps_num, fps_den, 1, 2, &new_fps_num, - &new_fps_den); - fps_num = new_fps_num; - fps_den = new_fps_den; - h265parse->parsed_framerate = FALSE; + if (!gst_util_fraction_multiply (fps_num, fps_den, 1, 2, &new_fps_num, + &new_fps_den)) { + GST_WARNING_OBJECT (h265parse, "Error calculating the new framerate" + " - integer overflow; setting it to 0/1"); + fps_num = 0; + fps_den = 1; + } else { + fps_num = new_fps_num; + fps_den = new_fps_den; + } } } @@ -2197,7 +2201,6 @@ h265parse->parsed_par_n, h265parse->parsed_par_d); modified = TRUE; } - } if (vui->video_signal_type_present_flag && @@ -2251,7 +2254,7 @@ gst_caps_set_simple (caps, "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL); - h265parse->parsed_framerate = FALSE; + h265parse->framerate_from_caps = FALSE; /* upstream overrides */ if (s && gst_structure_has_field (s, "framerate")) gst_structure_get_fraction (s, "framerate", &fps_num, &fps_den); @@ -2269,9 +2272,9 @@ &h265parse->parsed_fps_d); gst_base_parse_set_frame_rate (GST_BASE_PARSE (h265parse), fps_num, fps_den, 0, 0); - val = sps->profile_tier_level.interlaced_source_flag ? GST_SECOND / 2 : + val = gst_h265_parse_is_field_interlaced (h265parse) ? GST_SECOND / 2 : GST_SECOND; - h265parse->parsed_framerate = TRUE; + h265parse->framerate_from_caps = TRUE; /* If we know the frame duration, and if we are not in one of the zero * latency pattern, add one frame of latency */
View file
gst-plugins-bad-1.22.3.tar.xz/gst/videoparsers/gsth265parse.h -> gst-plugins-bad-1.22.4.tar.xz/gst/videoparsers/gsth265parse.h
Changed
@@ -110,7 +110,7 @@ gboolean predicted; gboolean bidirectional; gboolean header; - gboolean parsed_framerate; + gboolean framerate_from_caps; /* AU state */ gboolean picture_start;
View file
gst-plugins-bad-1.22.3.tar.xz/meson.build -> gst-plugins-bad-1.22.4.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.22.3', + version : '1.22.4', meson_version : '>= 0.62', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
gst-plugins-bad-1.22.3.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.22.4.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.3\n" +"Project-Id-Version: gst-plugins-bad-1.22.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-05-19 09:26+0100\n" +"POT-Creation-Date: 2023-06-20 17:48+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"
View file
gst-plugins-bad-1.22.3.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.22.4.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.22.3\n" +"Project-Id-Version: gst-plugins-bad-1.22.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-05-19 09:26+0100\n" +"POT-Creation-Date: 2023-06-20 17:48+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"
View file
gst-plugins-bad-1.22.3.tar.xz/sys/applemedia/meson.build -> gst-plugins-bad-1.22.4.tar.xz/sys/applemedia/meson.build
Changed
@@ -15,12 +15,14 @@ '-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type', '-Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer', '-Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new', - '-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type' + '-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type', + '-DGST_USE_UNSTABLE_API' applemedia_objc_args = applemedia_option = get_option('applemedia') if not 'darwin', 'ios'.contains(host_system) or applemedia_option.disabled() + applemedia_found_deps = false subdir_done() endif
View file
gst-plugins-bad-1.22.3.tar.xz/sys/applemedia/vtdec.h -> gst-plugins-bad-1.22.4.tar.xz/sys/applemedia/vtdec.h
Changed
@@ -30,7 +30,6 @@ #if defined(APPLEMEDIA_MOLTENVK) #include <gst/vulkan/vulkan.h> #endif -#define GST_USE_UNSTABLE_API #include <gst/codecparsers/gsth264parser.h> G_BEGIN_DECLS
View file
gst-plugins-bad-1.22.3.tar.xz/sys/applemedia/vtenc.c -> gst-plugins-bad-1.22.4.tar.xz/sys/applemedia/vtenc.c
Changed
@@ -86,6 +86,8 @@ #define GST_VTENC_CODEC_DETAILS_QDATA \ g_quark_from_static_string ("vtenc-codec-details") +#define CMTIME_TO_GST_CLOCK_TIME(time) time.value / (time.timescale / GST_SECOND) + /* define EnableHardwareAcceleratedVideoEncoder in < 10.9 */ #if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 1090 const CFStringRef @@ -240,7 +242,7 @@ 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 + /* 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); @@ -713,6 +715,9 @@ { GstVTEnc *self = GST_VTENC_CAST (enc); + /* DTS can be negative if b-frames are enabled */ + gst_video_encoder_set_min_pts (enc, GST_SECOND * 60 * 60 * 1000); + self->cur_outframes = g_async_queue_new (); return TRUE; @@ -739,8 +744,8 @@ gst_video_codec_state_unref (self->input_state); self->input_state = NULL; - self->negotiated_width = self->negotiated_height = 0; - self->negotiated_fps_n = self->negotiated_fps_d = 0; + self->video_info.width = self->video_info.height = 0; + self->video_info.fps_n = self->video_info.fps_d = 0; gst_vtenc_clear_cached_caps_downstream (self); @@ -750,13 +755,12 @@ return TRUE; } -static CFStringRef -gst_vtenc_h264_profile_level_key (GstVTEnc * self, const gchar * profile, +static gboolean +gst_vtenc_h264_parse_profile_level_key (GstVTEnc * self, const gchar * profile, const gchar * level_arg) { char level64; gchar *key = NULL; - CFStringRef ret = NULL; if (profile == NULL) profile = "main"; @@ -767,13 +771,16 @@ if (!strcmp (profile, "constrained-baseline") || !strcmp (profile, "baseline")) { profile = "Baseline"; + self->h264_profile = GST_H264_PROFILE_BASELINE; } else if (g_str_has_prefix (profile, "high")) { profile = "High"; + self->h264_profile = GST_H264_PROFILE_HIGH; } else if (!strcmp (profile, "main")) { profile = "Main"; + self->h264_profile = GST_H264_PROFILE_MAIN; } else { GST_ERROR_OBJECT (self, "invalid profile: %s", profile); - return ret; + return FALSE; } if (strlen (level) == 1) { @@ -784,22 +791,21 @@ } key = g_strdup_printf ("H264_%s_%s", profile, level); - ret = CFStringCreateWithBytes (NULL, (const guint8 *) key, strlen (key), + self->profile_level = + CFStringCreateWithBytes (NULL, (const guint8 *) key, strlen (key), kCFStringEncodingASCII, 0); - GST_INFO_OBJECT (self, "negotiated profile and level %s", key); g_free (key); - return ret; + return TRUE; } -static CFStringRef -gst_vtenc_hevc_profile_level_key (GstVTEnc * self, const gchar * profile, +static gboolean +gst_vtenc_hevc_parse_profile_level_key (GstVTEnc * self, const gchar * profile, const gchar * level_arg) { gchar *key = NULL; - CFStringRef ret = NULL; if (profile == NULL || !strcmp (profile, "main")) profile = "Main"; @@ -811,18 +817,18 @@ profile = "Main42210"; else { GST_ERROR_OBJECT (self, "invalid profile: %s", profile); - return ret; + return FALSE; } /* VT does not support specific levels for HEVC */ key = g_strdup_printf ("HEVC_%s_AutoLevel", profile); - ret = CFStringCreateWithBytes (NULL, (const guint8 *) key, strlen (key), + self->profile_level = + CFStringCreateWithBytes (NULL, (const guint8 *) key, strlen (key), kCFStringEncodingASCII, 0); - GST_INFO_OBJECT (self, "negotiated profile and level %s", key); g_free (key); - return ret; + return TRUE; } static gboolean @@ -834,20 +840,11 @@ if (self->profile_level) CFRelease (self->profile_level); - if (self->specific_format_id == kCMVideoCodecType_HEVC) - self->profile_level = - gst_vtenc_hevc_profile_level_key (self, profile, level); - else - self->profile_level = - gst_vtenc_h264_profile_level_key (self, profile, level); - - if (self->profile_level == NULL) { - GST_ERROR_OBJECT (self, "unsupported profile '%s' or level '%s'", - profile, level); - return FALSE; + if (self->specific_format_id == kCMVideoCodecType_HEVC) { + return gst_vtenc_hevc_parse_profile_level_key (self, profile, level); + } else { + return gst_vtenc_h264_parse_profile_level_key (self, profile, level); } - - return TRUE; } static gboolean @@ -931,10 +928,6 @@ gst_video_codec_state_unref (self->input_state); self->input_state = gst_video_codec_state_ref (state); - self->negotiated_width = state->info.width; - self->negotiated_height = state->info.height; - self->negotiated_fps_n = state->info.fps_n; - self->negotiated_fps_d = state->info.fps_d; self->video_info = state->info; GST_OBJECT_LOCK (self); @@ -954,7 +947,7 @@ static gboolean gst_vtenc_is_negotiated (GstVTEnc * self) { - return self->negotiated_width != 0; + return self->video_info.width != 0; } /* @@ -987,10 +980,10 @@ GstStructure *s; GstVideoCodecState *state; - if (self->caps_width == self->negotiated_width && - self->caps_height == self->negotiated_height && - self->caps_fps_n == self->negotiated_fps_n && - self->caps_fps_d == self->negotiated_fps_d) { + if (self->caps_width == self->video_info.width && + self->caps_height == self->video_info.height && + self->caps_fps_n == self->video_info.fps_n && + self->caps_fps_d == self->video_info.fps_d) { return TRUE; } @@ -998,10 +991,10 @@ caps = gst_caps_make_writable (caps); s = gst_caps_get_structure (caps, 0); gst_structure_set (s, - "width", G_TYPE_INT, self->negotiated_width, - "height", G_TYPE_INT, self->negotiated_height, + "width", G_TYPE_INT, self->video_info.width, + "height", G_TYPE_INT, self->video_info.height, "framerate", GST_TYPE_FRACTION, - self->negotiated_fps_n, self->negotiated_fps_d, NULL); + self->video_info.fps_n, self->video_info.fps_d, NULL); switch (self->details->format_id) { case kCMVideoCodecType_H264: @@ -1068,10 +1061,10 @@ gst_video_codec_state_unref (state); result = gst_video_encoder_negotiate (GST_VIDEO_ENCODER_CAST (self)); - self->caps_width = self->negotiated_width; - self->caps_height = self->negotiated_height; - self->caps_fps_n = self->negotiated_fps_n; - self->caps_fps_d = self->negotiated_fps_d; + self->caps_width = self->video_info.width; + self->caps_height = self->video_info.height; + self->caps_fps_n = self->video_info.fps_n; + self->caps_fps_d = self->video_info.fps_d; return result; } @@ -1225,6 +1218,43 @@ } } + +static gboolean +gst_vtenc_compute_dts_offset (GstVTEnc * self, gint fps_n, gint fps_d) +{ + gint num_offset_frames; + + // kVTCompressionPropertyKey_AllowFrameReordering enables B-Frames + if (!self->allow_frame_reordering || + (self->specific_format_id == kCMVideoCodecType_H264 + && self->h264_profile == GST_H264_PROFILE_BASELINE)) { + num_offset_frames = 0; + } else { + if (self->specific_format_id == kCMVideoCodecType_H264) { + // H264 encoder always sets 2 max_num_ref_frames + num_offset_frames = 1; + } else { + // HEVC encoder uses B-pyramid + num_offset_frames = 2; + } + } + + if (fps_d == 0 && num_offset_frames != 0) { + GST_ERROR_OBJECT (self, + "Variable framerate is not supported with B-Frames"); + return FALSE; + } + + self->dts_offset = + gst_util_uint64_scale (num_offset_frames * GST_SECOND, + self->video_info.fps_d, self->video_info.fps_n); + + GST_DEBUG_OBJECT (self, "DTS Offset:%" GST_TIME_FORMAT, + GST_TIME_ARGS (self->dts_offset)); + + return TRUE; +} + static VTCompressionSessionRef gst_vtenc_create_session (GstVTEnc * self) { @@ -1262,20 +1292,27 @@ pb_attrs = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); gst_vtutil_dict_set_i32 (pb_attrs, kCVPixelBufferWidthKey, - self->negotiated_width); + self->video_info.width); gst_vtutil_dict_set_i32 (pb_attrs, kCVPixelBufferHeightKey, - self->negotiated_height); + self->video_info.height); } /* This was set in gst_vtenc_negotiate_specific_format_details() */ g_assert_cmpint (self->specific_format_id, !=, 0); + if (self->profile_level) { + if (!gst_vtenc_compute_dts_offset (self, self->video_info.fps_d, + self->video_info.fps_n)) { + goto beach; + } + } + status = VTCompressionSessionCreate (NULL, - self->negotiated_width, self->negotiated_height, + self->video_info.width, self->video_info.height, self->specific_format_id, encoder_spec, pb_attrs, NULL, gst_vtenc_enqueue_buffer, self, &session); GST_INFO_OBJECT (self, "VTCompressionSessionCreate for %d x %d => %d", - self->negotiated_width, self->negotiated_height, (int) status); + self->video_info.width, self->video_info.height, (int) status); if (status != noErr) { GST_ERROR_OBJECT (self, "VTCompressionSessionCreate() returned: %d", (int) status); @@ -1284,7 +1321,7 @@ if (self->profile_level) { gst_vtenc_session_configure_expected_framerate (self, session, - (gdouble) self->negotiated_fps_n / (gdouble) self->negotiated_fps_d); + (gdouble) self->video_info.fps_n / (gdouble) self->video_info.fps_d); /* * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_profilelevel @@ -1586,6 +1623,18 @@ CFRelease (value); } +static void +gst_vtenc_update_timestamps (GstVTEnc * self, GstVideoCodecFrame * frame, + CMSampleBufferRef sample_buf) +{ + CMTime pts = CMSampleBufferGetOutputPresentationTimeStamp (sample_buf); + frame->pts = CMTIME_TO_GST_CLOCK_TIME (pts); + CMTime dts = CMSampleBufferGetOutputDecodeTimeStamp (sample_buf); + if (CMTIME_IS_VALID (dts)) { + frame->dts = CMTIME_TO_GST_CLOCK_TIME (dts) - self->dts_offset; + } +} + static GstFlowReturn gst_vtenc_encode_frame (GstVTEnc * self, GstVideoCodecFrame * frame) { @@ -1670,8 +1719,8 @@ } cv_ret = - CVPixelBufferCreate (NULL, self->negotiated_width, - self->negotiated_height, pixel_format_type, NULL, &pbuf); + CVPixelBufferCreate (NULL, self->video_info.width, + self->video_info.height, pixel_format_type, NULL, &pbuf); if (cv_ret != kCVReturnSuccess) { GST_ERROR_OBJECT (self, "CVPixelBufferCreate failed: %i", cv_ret); @@ -1765,7 +1814,7 @@ } cv_ret = CVPixelBufferCreateWithPlanarBytes (NULL, - self->negotiated_width, self->negotiated_height, + self->video_info.width, self->video_info.height, pixel_format_type, frame, GST_VIDEO_FRAME_SIZE (&vframe->videoframe), @@ -1886,6 +1935,8 @@ * to enable the use of the video meta API on the core media buffer */ frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE, NULL); + gst_vtenc_update_timestamps (self, frame, sampleBuffer); + beach: /* needed anyway so the frame will be released */ if (frame)
View file
gst-plugins-bad-1.22.3.tar.xz/sys/applemedia/vtenc.h -> gst-plugins-bad-1.22.4.tar.xz/sys/applemedia/vtenc.h
Changed
@@ -21,6 +21,7 @@ #define __GST_VTENC_H__ #include <gst/gst.h> +#include <gst/codecparsers/gsth264parser.h> #include <gst/video/video.h> #include <VideoToolbox/VideoToolbox.h> @@ -60,6 +61,7 @@ CMVideoCodecType specific_format_id; CFStringRef profile_level; + GstH264Profile h264_profile; guint bitrate; gboolean allow_frame_reordering; gboolean realtime; @@ -72,8 +74,6 @@ gboolean dump_properties; gboolean dump_attributes; - gint negotiated_width, negotiated_height; - gint negotiated_fps_n, negotiated_fps_d; gint caps_width, caps_height; gint caps_fps_n, caps_fps_d; gboolean have_field_order; @@ -81,6 +81,7 @@ GstVideoInfo video_info; VTCompressionSessionRef session; CFDictionaryRef keyframe_props; + GstClockTime dts_offset; GAsyncQueue * cur_outframes; };
View file
gst-plugins-bad-1.22.3.tar.xz/sys/d3d11/gstd3d11videosink.cpp -> gst-plugins-bad-1.22.4.tar.xz/sys/d3d11/gstd3d11videosink.cpp
Changed
@@ -1440,8 +1440,6 @@ ret = GST_FLOW_ERROR; } - gst_clear_buffer (&self->prepared_buffer); - return ret; }
View file
gst-plugins-bad-1.22.3.tar.xz/sys/d3dvideosink/d3dvideosink.c -> gst-plugins-bad-1.22.4.tar.xz/sys/d3dvideosink/d3dvideosink.c
Changed
@@ -634,6 +634,7 @@ gst_element_post_message (GST_ELEMENT_CAST (sink), gst_navigation_message_new_event (GST_OBJECT_CAST (sink), event)); } + gst_event_unref (event); gst_object_unref (pad); } }
View file
gst-plugins-bad-1.22.3.tar.xz/sys/decklink/gstdecklink.h -> gst-plugins-bad-1.22.4.tar.xz/sys/decklink/gstdecklink.h
Changed
@@ -28,33 +28,58 @@ #include <stdint.h> -#ifdef G_OS_UNIX -#include "linux/DeckLinkAPI.h" -#endif - #ifdef G_OS_WIN32 #include "win/DeckLinkAPI.h" #include <stdio.h> -#include <comutil.h> #define bool BOOL #define COMSTR_T BSTR -/* MinGW does not have comsuppw.lib, so no _com_util::ConvertBSTRToString */ -# ifdef __MINGW32__ -# define CONVERT_COM_STRING(s) G_STMT_START { BSTR _s = (BSTR)s; s = (char*) malloc(100); wcstombs(s, _s, 100); ::SysFreeString(_s); } G_STMT_END -# define FREE_COM_STRING(s) free(s); -# define CONVERT_TO_COM_STRING(s) G_STMT_START { char * _s = (char *)s; s = (BSTR) malloc(100); mbstowcs(s, _s, 100); g_free(_s); } G_STMT_END -# else -# define CONVERT_COM_STRING(s) G_STMT_START { BSTR _s = (BSTR)s; s = _com_util::ConvertBSTRToString(_s); ::SysFreeString(_s); } G_STMT_END -# define FREE_COM_STRING(s) G_STMT_START { delete s; } G_STMT_END -# define CONVERT_TO_COM_STRING(s) G_STMT_START { char * _s = (char *)s; s = _com_util::ConvertStringToBSTR(_s); g_free(_s); } G_STMT_END -# endif /* __MINGW32__ */ -#else +#define CONVERT_COM_STRING(s) G_STMT_START { \ + BSTR _s = (BSTR)s; \ + int _s_length = ::SysStringLen(_s); \ + int _length = ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, _s_length, NULL, 0, NULL, NULL); \ + s = (char *) malloc(_length); \ + ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, _s_length, s, _length, NULL, NULL); \ + ::SysFreeString(_s); \ +} G_STMT_END +#define FREE_COM_STRING(s) free(s); +#define CONVERT_TO_COM_STRING(s) G_STMT_START { \ + char * _s = (char *)s; \ + int _s_length = strlen((char*)_s); \ + int _length = ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, _s_length, NULL, 0); \ + s = ::SysAllocStringLen(NULL, _length); \ + ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, _s_length, s, _length); \ + g_free(_s); \ +} G_STMT_END +#elif defined(__APPLE__) +#include "osx/DeckLinkAPI.h" + +#define COMSTR_T CFStringRef +#define CONVERT_COM_STRING(s) G_STMT_START { \ + CFStringRef _s = (CFStringRef)s; \ + CFIndex _length; \ + CFStringGetBytes(_s, CFRangeMake(0, CFStringGetLength(_s)), kCFStringEncodingUTF8, 0, FALSE, NULL, 0, &_length); \ + _length += 1; \ + s = (char *) malloc(_length); \ + CFStringGetCString(_s, s, _length, kCFStringEncodingUTF8); \ + CFRelease(_s); \ +} G_STMT_END +#define FREE_COM_STRING(s) free(s); +#define CONVERT_TO_COM_STRING(s) G_STMT_START { \ + char * _s = (char *)s; \ + s = CFStringCreateWithCString(kCFAllocatorDefault, _s, kCFStringEncodingUTF8); \ + g_free(_s); \ +} G_STMT_END +#define WINAPI +#else /* Linux */ +#include "linux/DeckLinkAPI.h" + #define COMSTR_T const char* #define CONVERT_COM_STRING(s) #define CONVERT_TO_COM_STRING(s) -#define FREE_COM_STRING(s) +/* While this is a const char*, the string still has to be freed */ +#define FREE_COM_STRING(s) free(s); #define WINAPI #endif /* G_OS_WIN32 */
View file
gst-plugins-bad-1.22.3.tar.xz/sys/kms/gstkmssink.c -> gst-plugins-bad-1.22.4.tar.xz/sys/kms/gstkmssink.c
Changed
@@ -481,8 +481,8 @@ kms_open (gchar ** driver) { static const char *drivers = { "i915", "radeon", "nouveau", "vmwgfx", - "exynos", "amdgpu", "imx-drm", "rockchip", "atmel-hlcdc", "msm", - "xlnx", "vc4", "meson", "sun4i-drm", "mxsfb-drm", "tegra", + "exynos", "amdgpu", "imx-drm", "imx-lcdif", "rockchip", "atmel-hlcdc", + "msm", "xlnx", "vc4", "meson", "stm", "sun4i-drm", "mxsfb-drm", "tegra", "xilinx_drm", /* DEPRECATED. Replaced by xlnx */ }; int i, fd = -1;
View file
gst-plugins-bad-1.22.3.tar.xz/sys/va/gstvah264enc.c -> gst-plugins-bad-1.22.4.tar.xz/sys/va/gstvah264enc.c
Changed
@@ -3412,9 +3412,30 @@ case PROP_CC: g_value_set_boolean (value, self->prop.cc); break; - case PROP_MBBRC: - g_value_set_enum (value, self->prop.mbbrc); + case PROP_MBBRC:{ + GstVaFeature mbbrc = GST_VA_FEATURE_AUTO; + /* Macroblock-level rate control. + * 0: use default, + * 1: always enable, + * 2: always disable, + * other: reserved. */ + switch (self->prop.mbbrc) { + case 2: + mbbrc = GST_VA_FEATURE_DISABLED; + break; + case 1: + mbbrc = GST_VA_FEATURE_ENABLED; + break; + case 0: + mbbrc = GST_VA_FEATURE_AUTO; + break; + default: + g_assert_not_reached (); + } + + g_value_set_enum (value, mbbrc); break; + } case PROP_BITRATE: g_value_set_uint (value, self->prop.bitrate); break;
View file
gst-plugins-bad-1.22.3.tar.xz/sys/va/gstvah265enc.c -> gst-plugins-bad-1.22.4.tar.xz/sys/va/gstvah265enc.c
Changed
@@ -4874,9 +4874,30 @@ case PROP_AUD: g_value_set_boolean (value, self->prop.aud); break; - case PROP_MBBRC: - g_value_set_enum (value, self->prop.mbbrc); + case PROP_MBBRC:{ + GstVaFeature mbbrc = GST_VA_FEATURE_AUTO; + /* Macroblock-level rate control. + * 0: use default, + * 1: always enable, + * 2: always disable, + * other: reserved. */ + switch (self->prop.mbbrc) { + case 2: + mbbrc = GST_VA_FEATURE_DISABLED; + break; + case 1: + mbbrc = GST_VA_FEATURE_ENABLED; + break; + case 0: + mbbrc = GST_VA_FEATURE_AUTO; + break; + default: + g_assert_not_reached (); + } + + g_value_set_enum (value, mbbrc); break; + } case PROP_BITRATE: g_value_set_uint (value, self->prop.bitrate); break;
View file
gst-plugins-bad-1.22.3.tar.xz/tests/validate/meson.build -> gst-plugins-bad-1.22.4.tar.xz/tests/validate/meson.build
Changed
@@ -7,6 +7,10 @@ {'path': 'opencv/cvtracker'}, {'path': 'testsrcbin/caps_spec'}, {'path': 'wpe/load_bytes_first', 'skip': not building_wpe}, + {'path': 'vtenc/vtenc_h264', 'skip': not applemedia_found_deps}, + {'path': 'vtenc/vtenc_h264_b_frames', 'skip': not applemedia_found_deps}, + {'path': 'vtenc/vtenc_h265', 'skip': not applemedia_found_deps}, + {'path': 'vtenc/vtenc_h265_b_frames', 'skip': not applemedia_found_deps}, env = environment()
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264.validatetest
Added
@@ -0,0 +1,7 @@ +meta, + args = { + "videotestsrc num-buffers=5 ! video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc allow-frame-reordering=false ! fakesink", + }, + configs = { + "$(validateflow), pad=enc:src, record-buffers=true", + }
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264/flow-expectations
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264/flow-expectations/log-enc-src-expected
Added
@@ -0,0 +1,9 @@ +event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1; +event caps: video/x-h264, alignment=(string)au, chroma-site=(string)jpeg, codec_data=(buffer)014d000dffe1000d274d000dab40a0fd350601060201000428ee3c80, colorimetry=(string)bt601, framerate=(fraction)25/1, height=(int)240, interlace-mode=(string)progressive, level=(string)1.3, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, profile=(string)main, stream-format=(string)avc, width=(int)320; +event segment: format=TIME, start=1000:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=1000:00:00.000000000 +buffer: dts=1000:00:00.000000000, pts=1000:00:00.000000000, dur=0:00:00.040000000, flags=discont marker tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.040000000, pts=1000:00:00.040000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.080000000, pts=1000:00:00.080000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.120000000, pts=1000:00:00.120000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.160000000, pts=1000:00:00.160000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +event eos: (no structure)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames.validatetest
Added
@@ -0,0 +1,7 @@ +meta, + args = { + "videotestsrc num-buffers=5 ! video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc allow-frame-reordering=true ! fakesink", + }, + configs = { + "$(validateflow), pad=enc:src, record-buffers=true", + }
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames/flow-expectations
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h264_b_frames/flow-expectations/log-enc-src-expected
Added
@@ -0,0 +1,9 @@ +event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1; +event caps: video/x-h264, alignment=(string)au, chroma-site=(string)jpeg, codec_data=(buffer)014d000dffe1000d274d000dab60a0fd350601060201000428ee3c80, colorimetry=(string)bt601, framerate=(fraction)25/1, height=(int)240, interlace-mode=(string)progressive, level=(string)1.3, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, profile=(string)main, stream-format=(string)avc, width=(int)320; +event segment: format=TIME, start=1000:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=1000:00:00.000000000 +buffer: dts=999:59:59.960000000, pts=1000:00:00.000000000, dur=0:00:00.040000000, flags=discont marker tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.000000000, pts=1000:00:00.080000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.040000000, pts=1000:00:00.040000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.080000000, pts=1000:00:00.160000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.120000000, pts=1000:00:00.120000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +event eos: (no structure)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265.validatetest
Added
@@ -0,0 +1,7 @@ +meta, + args = { + "videotestsrc num-buffers=5 ! video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc allow-frame-reordering=false ! fakesink", + }, + configs = { + "$(validateflow), pad=enc:src, record-buffers=true", + }
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265/flow-expectations
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265/flow-expectations/log-enc-src-expected
Added
@@ -0,0 +1,9 @@ +event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1; +event caps: video/x-h264, alignment=(string)au, chroma-site=(string)jpeg, codec_data=(buffer)014d000dffe1000d274d000dab40a0fd350601060201000428ee3c80, colorimetry=(string)bt601, framerate=(fraction)25/1, height=(int)240, interlace-mode=(string)progressive, level=(string)1.3, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, profile=(string)main, stream-format=(string)avc, width=(int)320; +event segment: format=TIME, start=1000:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=1000:00:00.000000000 +buffer: dts=1000:00:00.000000000, pts=1000:00:00.000000000, dur=0:00:00.040000000, flags=discont marker tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.040000000, pts=1000:00:00.040000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.080000000, pts=1000:00:00.080000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.120000000, pts=1000:00:00.120000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.160000000, pts=1000:00:00.160000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +event eos: (no structure)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames.validatetest
Added
@@ -0,0 +1,7 @@ +meta, + args = { + "videotestsrc num-buffers=5 ! video/x-raw,framerate=25/1,width=320,height=240 ! vtenc_h264 name=enc allow-frame-reordering=true ! fakesink", + }, + configs = { + "$(validateflow), pad=enc:src, record-buffers=true", + }
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames/flow-expectations
Added
+(directory)
View file
gst-plugins-bad-1.22.4.tar.xz/tests/validate/vtenc/vtenc_h265_b_frames/flow-expectations/log-enc-src-expected
Added
@@ -0,0 +1,9 @@ +event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1; +event caps: video/x-h264, alignment=(string)au, chroma-site=(string)jpeg, codec_data=(buffer)014d000dffe1000d274d000dab60a0fd350601060201000428ee3c80, colorimetry=(string)bt601, framerate=(fraction)25/1, height=(int)240, interlace-mode=(string)progressive, level=(string)1.3, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, profile=(string)main, stream-format=(string)avc, width=(int)320; +event segment: format=TIME, start=1000:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=1000:00:00.000000000 +buffer: dts=999:59:59.960000000, pts=1000:00:00.000000000, dur=0:00:00.040000000, flags=discont marker tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.000000000, pts=1000:00:00.080000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.040000000, pts=1000:00:00.040000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.080000000, pts=1000:00:00.160000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +buffer: dts=1000:00:00.120000000, pts=1000:00:00.120000000, dur=0:00:00.040000000, flags=marker delta-unit tag-memory, meta=GstCoreMediaMeta +event eos: (no structure)
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
.