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 26
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Sat Sep 28 08:31:55 UTC 2024 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.24.8 + +------------------------------------------------------------------- Sat Aug 24 19:53:47 UTC 2024 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.24.7
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.24.0 Name: gstreamer-plugins-bad-codecs -Version: 1.24.7 +Version: 1.24.8 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.24.7.tar.xz/ChangeLog -> gst-plugins-bad-1.24.8.tar.xz/ChangeLog
Changed
@@ -1,3 +1,171 @@ +=== release 1.24.8 === + +2024-09-19 12:01:21 +0200 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.24.8 + +2024-09-17 14:48:03 +0200 Benjamin Gaignard <benjamin.gaignard@collabora.com> + + * sys/v4l2codecs/gstv4l2codech265dec.c: + v4l2codecs: h265: Minimize memory allocation + Be smarter when allocating sink and source memory pools to reduce the + memory footprint. Use gst_v4l2_decoder_get_render_delay() to know the + need number of buffers for downstream element. + Handle errors in case of memory allocation failures. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7546> + +2024-09-17 18:31:30 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/mpegtsmux/gstbasetsmux.c: + mpegtsmux: Fix refcounting issue when selecting the best pad + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7539> + +2024-09-11 08:40:42 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/mpegtsmux/gstbasetsmux.c: + mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out + This makes sure that if upstream has different latencies that we're still + outputting buffers with increasining timestamps across the different streams + unless buffers are arriving after the latency deadline. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7516> + +2024-09-05 22:07:24 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst-libs/gst/adaptivedemux/gstadaptivedemux.c: + video: Don't overshoot QoS earliest time by a factor of 2 + By setting the earliest time to timestamp + 2 * diff there would be a difference + of 1 * diff between the current clock time and the earliest time the element + would let through in the future. If e.g. a frame is arriving 30s late at the + sink, then not just all frames up to that point would be dropped but also 30s of + frames after the current clock time. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7518> + +2024-08-30 14:59:14 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst-libs/gst/wayland/gstwldisplay.c: + * gst-libs/gst/wayland/gstwlshmallocator.c: + * gst-libs/gst/wayland/gstwlshmallocator.h: + wayland: Set a debug category for the shm allocator + None was set, which meant the debug was associated with default. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7494> + +2024-09-09 16:27:43 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * ext/wayland/gstwaylandsink.c: + * gst-libs/gst/wayland/gstwlcontext.c: + * gst-libs/gst/wayland/gstwlcontext.h: + wayland: Fix ABI break in WL context type name + While transforming the internals of waylandsink into a library, the + context type name was accidentally changed, causing an ABI break. Change + it back to its original (as used by the libgstgl), and add support for + the misnamed version as a backward compatibility measure. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7494> + +2023-07-18 17:34:54 +0200 Michael Tretter <m.tretter@pengutronix.de> + + * sys/uvcgadget/gstuvcsink.c: + uvcsink: set cur_caps to upstream selected caps + If the UVC gadget announces multiple formats in the descriptors the uvcsink + doesn't select the actual format but let's the UVC hosts select the format. + If the GStreamer pipeline is started before a UVC host selected the format, + upstream decides on a format until the UVC host has decided. In this case, the + current format needs to be set based on the caps from the caps event to be able + to detect if the format selection by the UVC host requires a format change on + the GStreamer pipeline. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7484> + +2024-09-05 15:04:33 +0200 Michael Tretter <m.tretter@pengutronix.de> + + * sys/uvcgadget/gstuvcsink.c: + uvcsink: skip comparison with prev_caps if they are not set + The uvcsink may be put into the READY state to start listening for UVC requests. + Therefore, the UVC host may set a streaming format before the GStreamer pipeline + is started and the uvcsink received a caps event. In this case, prev_caps will + be NULL. + If the EVENT_CAPS has not been received, skip the check if the format needs to + be changed, since the sink will be started with the format selected by the UVC + host, anyway. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7484> + +2024-09-03 17:00:09 +0200 Piotr Brzeziński <piotr@centricular.com> + + * sys/applemedia/vtenc.c: + * sys/applemedia/vtenc.h: + vtenc: Restart encoding session when certain errors are detected + Sometimes under certain loads, VT can error out with kVTVideoEncoderMalfunctionErr or kVTVideoEncoderNotAvailableNowErr. + These have been reported to happen more often than usual if CopyProperty/SetProperty() is used close to the encode call. + Both can be worked around by restarting the encoding session. + These errors can be returned either directly from VTCompressionSessionEncodeFrame() or later in the encoding callback. + This patch handles both scenarios the same way - a session restart is be attempted on the next encode_frame() call. + If the error is returned immediately by the encode call, it's possible that some correct frames will still be given to + the output callback, but for simplicity (+ because I wasn't able to verify this scenario) let's just discard those. + In addition, this commit also simplifies the beach/drop logic in enqueue_buffer. + Related bug reports in other projects: + http://www.openradar.me/45889262 + https://github.com/aws/amazon-chime-sdk-ios/issues/170#issuecomment-741908622 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7449> + +2024-09-06 10:51:01 +0200 Edward Hervey <edward@centricular.com> + + * gst-libs/gst/play/gstplay.c: + gstplay: Name the different bus + Makes it clearer when reading logs which one is which + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7471> + +2024-09-02 18:25:56 +0900 Hou Qi <qi.hou@nxp.com> + + * gst-libs/gst/play/gstplay.c: + gstplay: check whether stream is seekable before seeking when state change + If state is changing from playing to paused, and rate is reset to 1 + which causes seek position is valid, current code will do seek for + streams that are not seekable. So need to check whether stream is + seekable before seeking. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7448> + +2024-08-29 12:01:30 +0100 Philippe Normand <philn@igalia.com> + + * ext/webrtc/gstwebrtcbin.c: + * tests/check/elements/webrtcbin.c: + webrtcbin: Prevent crash when attempting to set answer on invalid SDP + If the pending remote description has an invalid BUNDLE group _parse_bundle() + triggers early return from _create_answer_task(), before ret has been + initialized, so it needs to be checked before attempting to call + gst_sdp_message_copy(). + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7436> + +2024-08-21 13:23:36 +0100 Francis Quiers <fquiers@cisco.com> + + * docs/plugins/gst_plugins_cache.json: + * ext/voamrwbenc/gstvoamrwbenc.c: + voamrwbenc: fix list of bitrates + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7418> + +2024-08-20 22:09:13 +1000 Jan Schmidt <jan@centricular.com> + + * gst-libs/gst/player/gstplayer.c: + gstplayer: Check GstPlayerSignalDispatcher type + Before trying to retrieve a GMainContext from a provided + GstPlayerSignalDispatcher, check that it is actually + GstPlayerGMainContextSignalDispatcher. If not, use the + default GMainContext for dispatching signals via the adapter + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7398> + +2024-08-21 09:19:39 +0200 Guillaume Desmottes <guillaume.desmottes@onestream.live> + + * ext/wpe/gstwpesrcbin.cpp: + wpe: fix gst-launch example + wpesrc does not have num-buffers property but wpevideosrc does. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7397> + +2024-08-21 12:33:28 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development after 1.24.7 + === release 1.24.7 === 2024-08-21 12:25:15 +0100 Tim-Philipp Müller <tim@centricular.com>
View file
gst-plugins-bad-1.24.7.tar.xz/NEWS -> gst-plugins-bad-1.24.8.tar.xz/NEWS
Changed
@@ -2,11 +2,11 @@ GStreamer 1.24.0 was originally released on 4 March 2024. -The latest bug-fix release in the stable 1.24 series is 1.24.6 and was released on 21 August 2024. +The latest bug-fix release in the stable 1.24 series is 1.24.8 and was released on 19 September 2024. See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. -Last updated: Tuesday 20 August 2024, 20:30 UTC (log) +Last updated: Thursday 19 September 2024, 00:30 UTC (log) ## Introduction @@ -2416,6 +2416,137 @@ - List of Merge Requests applied in 1.24.7 - List of Issues fixed in 1.24.7 +1.24.8 + +The eigth 1.24 bug-fix release (1.24.8) was released on 19 September 2024. + +This release only contains bugfixes and it should be safe to update from 1.24.x. + +Highlighted bugfixes in 1.24.8 + +- decodebin3: collection handling fixes +- encodebin: Fix pad removal (and smart rendering in gst-editing-services) +- glimagesink: Fix cannot resize viewport when video size changed in caps +- matroskamux, webmmux: fix firefox compatibility issue with Opus audio streams +- mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out +- splitmuxsink: Override LATENCY query to pretend to downstream that we’re not live +- video: QoS event handling improvements +- voamrwbenc: fix list of bitrates +- vtenc: Restart encoding session when certain errors are detected +- wayland: Fix ABI break in WL context type name +- webrtcbin: Prevent crash when attempting to set answer on invalid SDP +- cerbero: ship vp8/vp9 software encoders again, which went missing in 1.24.7; ship transcode plugin +- Various bug fixes, memory leak fixes, and other stability and reliability improvements + +gstreamer + +- clock: Fix unchecked overflows in linear regression code +- meta: Add missing include of gststructure.h +- pad: Check data NULL-ness when probes are stopped +- aggregator: Immediately return NONE from simple_get_next_time() on non-TIME segments + +gst-plugins-base + +- decodebin3: Fix collection identity check +- encodebin: Fix pad removal +- glimagesink: Fix cannot resize viewport when video size changed in caps +- v4l2bufferpool: actually queue back the empty buffer flagged LAST +- v4l2videoenc: unref buffer pool after usage properly +- video: Don’t overshoot QoS earliest time by a factor of 2 +- meson: gst-play: link to libm + +gst-plugins-good + +- jackaudiosrc: actually use the queried ports from JACK +- matroskamux: Include end padding in the block duration for Opus streams, fixing firefox compatibility +- osxaudio: Avoid dangling pointer on shutdown +- splitmuxsink: Override LATENCY query to pretend to downstream that we’re not live +- v4l2: encoder: Add dynamic framerate support + +gst-plugins-bad + +- GstPlay: Name the different bus +- GstPlay: check whether stream is seekable before seeking when state change +- GstPlayer: Check GstPlayerSignalDispatcher type +- mpegtsmux: Wait for data on all pads before deciding on a best pad unless timing out +- mpegtsmux: Fix refcounting issue when selecting the best pad +- uvcsink: fix caps event handling +- v4l2codecs: h265: Minimize memory allocation +- voamrwbenc: fix list of bitrates +- vtenc: Restart encoding session when certain errors are detected +- wayland: Fix ABI break in WL context type name +- webrtcbin: Prevent crash when attempting to set answer on invalid SDP +- wpe: fix gst-launch example + +gst-plugins-ugly + +- No changes + +GStreamer Rust plugins + +- No changes + +gst-libav + +- No changes + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- discoverer-manager: Fix race leading to assertion when stopping +- structured-interface: Fix memory leak of invalid fields GList + +gst-devtools, gst-validate + gst-integration-testsuites + +- pad-monitor: Fix remaining pad function data handling +- pad-monitor: Fix pad function data properly + +gst-examples + +- No changes + +Development build environment + +- meson: Update openjpeg wrap to 2.5.2, fixes a warning + +Cerbero build tool and packaging changes in 1.24.8 + +- No vp8 / vp9 encoders packaged (regression) +- libvpx: Fix codec detection to fix vp8enc/vp9enc elements not being shipped +- gst-plugins-bad: Add missing transcode plugin + +Contributors to 1.24.8 + +Andoni Morales Alastruey, Arun Raghavan, Benjamin Gaignard, Carlos Bentzen, Chao Guo, Edward Hervey, Francis Quiers, Guillaume +Desmottes, Hou Qi, Jan Schmidt,, L. E. Segovia, Michael Tretter, Nicolas Dufresne, Nirbheek Chauhan, Peter Kjellerstedt, +Philippe Normand, Piotr Brzeziński, Randy Li (ayaka), Sebastian Dröge, Thibault Saunier, Tim-Philipp Müller, Wim Taymans, + +… 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.24.8 + +- List of Merge Requests applied in 1.24.8 +- List of Issues fixed in 1.24.8 + Schedule for 1.26 Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26
View file
gst-plugins-bad-1.24.7.tar.xz/RELEASE -> gst-plugins-bad-1.24.8.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.24.7. +This is GStreamer gst-plugins-bad 1.24.8. 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.24.7.tar.xz/docs/plugins/gst_plugins_cache.json -> gst-plugins-bad-1.24.8.tar.xz/docs/plugins/gst_plugins_cache.json
Changed
@@ -244388,37 +244388,37 @@ { "desc": "MR1425", "name": "MR1425", - "value": "2" + "value": "3" }, { "desc": "MR1585", "name": "MR1585", - "value": "3" + "value": "4" }, { "desc": "MR1825", "name": "MR1825", - "value": "4" + "value": "5" }, { "desc": "MR1985", "name": "MR1985", - "value": "5" + "value": "6" }, { "desc": "MR2305", "name": "MR2305", - "value": "6" + "value": "7" }, { "desc": "MR2385", "name": "MR2385", - "value": "7" + "value": "8" }, { "desc": "MRDTX", "name": "MRDTX", - "value": "8" + "value": "9" } }
View file
gst-plugins-bad-1.24.7.tar.xz/ext/voamrwbenc/gstvoamrwbenc.c -> gst-plugins-bad-1.24.8.tar.xz/ext/voamrwbenc/gstvoamrwbenc.c
Changed
@@ -45,13 +45,13 @@ #define MR660 0 #define MR885 1 #define MR1265 2 -#define MR1425 2 -#define MR1585 3 -#define MR1825 4 -#define MR1985 5 -#define MR2305 6 -#define MR2385 7 -#define MRDTX 8 +#define MR1425 3 +#define MR1585 4 +#define MR1825 5 +#define MR1985 6 +#define MR2305 7 +#define MR2385 8 +#define MRDTX 9 #define L_FRAME16k 320 /* Frame size at 16kHz */
View file
gst-plugins-bad-1.24.7.tar.xz/ext/wayland/gstwaylandsink.c -> gst-plugins-bad-1.24.8.tar.xz/ext/wayland/gstwaylandsink.c
Changed
@@ -365,35 +365,62 @@ } static gboolean -gst_wayland_sink_find_display (GstWaylandSink * self) +gst_wayland_sink_query_context (GstWaylandSink * self, const gchar * type) { GstQuery *query; + gboolean ret; + + query = gst_query_new_context (type); + ret = gst_pad_peer_query (GST_VIDEO_SINK_PAD (self), query); + + if (ret) { + GstContext *context = NULL; + gst_query_parse_context (query, &context); + gst_wayland_sink_set_display_from_context (self, context); + } + + gst_query_unref (query); + return ret; +} + +static gboolean +gst_wayland_sink_post_need_context (GstWaylandSink * self, const gchar * type) +{ GstMessage *msg; - GstContext *context = NULL; + + /* now ask the application to set the display handle */ + msg = gst_message_new_need_context (GST_OBJECT_CAST (self), type); + + g_mutex_unlock (&self->display_lock); + gst_element_post_message (GST_ELEMENT_CAST (self), msg); + /* at this point we expect gst_wayland_sink_set_context + * to get called and fill self->display */ + g_mutex_lock (&self->display_lock); + + return self->display != NULL; +} + +static gboolean +gst_wayland_sink_find_display (GstWaylandSink * self) +{ GError *error = NULL; gboolean ret = TRUE; g_mutex_lock (&self->display_lock); if (!self->display) { - /* first query upstream for the needed display handle */ - query = gst_query_new_context (GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE); - if (gst_pad_peer_query (GST_VIDEO_SINK_PAD (self), query)) { - gst_query_parse_context (query, &context); - gst_wayland_sink_set_display_from_context (self, context); + if (!gst_wayland_sink_query_context (self, + GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) { + gst_wayland_sink_query_context (self, + GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE); } - gst_query_unref (query); if (G_LIKELY (!self->display)) { - /* now ask the application to set the display handle */ - msg = gst_message_new_need_context (GST_OBJECT_CAST (self), - GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE); - - g_mutex_unlock (&self->display_lock); - gst_element_post_message (GST_ELEMENT_CAST (self), msg); - /* at this point we expect gst_wayland_sink_set_context - * to get called and fill self->display */ - g_mutex_lock (&self->display_lock); + if (!gst_wayland_sink_post_need_context (self, + GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) { + gst_wayland_sink_post_need_context (self, + GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE); + } if (!self->display) { /* if the application didn't set a display, let's create it ourselves */ @@ -480,7 +507,9 @@ GstWaylandSink *self = GST_WAYLAND_SINK (element); if (gst_context_has_context_type (context, - GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE)) { + GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE) || + gst_context_has_context_type (context, + GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE)) { g_mutex_lock (&self->display_lock); if (G_LIKELY (!self->display)) { gst_wayland_sink_set_display_from_context (self, context);
View file
gst-plugins-bad-1.24.7.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.24.8.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
@@ -4820,7 +4820,7 @@ webrtc->priv->last_generated_offer = NULL; if (webrtc->priv->last_generated_answer) gst_webrtc_session_description_free (webrtc->priv->last_generated_answer); - { + if (ret) { GstSDPMessage *copy; gst_sdp_message_copy (ret, ©); webrtc->priv->last_generated_answer =
View file
gst-plugins-bad-1.24.7.tar.xz/ext/wpe/gstwpesrcbin.cpp -> gst-plugins-bad-1.24.8.tar.xz/ext/wpe/gstwpesrcbin.cpp
Changed
@@ -41,7 +41,7 @@ * ### Save the first 50 video frames generated for the GStreamer website as PNG files in /tmp * * ``` - * LIBGL_ALWAYS_SOFTWARE=true gst-launch-1.0 -v wpesrc num-buffers=50 location="https://gstreamer.freedesktop.org" ! videoconvert ! pngenc ! multifilesink location=/tmp/snapshot-%05d.png + * LIBGL_ALWAYS_SOFTWARE=true gst-launch-1.0 -v wpevideosrc num-buffers=50 location="https://gstreamer.freedesktop.org" ! videoconvert ! pngenc ! multifilesink location=/tmp/snapshot-%05d.png * ``` * *
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/adaptivedemux/gstadaptivedemux.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
Changed
@@ -1917,7 +1917,7 @@ gst_event_parse_qos (event, NULL, NULL, &diff, ×tamp); /* Only take into account lateness if late */ if (diff > 0) - earliest_time = timestamp + 2 * diff; + earliest_time = timestamp + MIN (2 * diff, GST_SECOND); else earliest_time = timestamp;
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/play/gstplay.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/play/gstplay.c
Changed
@@ -314,6 +314,7 @@ self->context = g_main_context_new (); self->loop = g_main_loop_new (self->context, FALSE); self->api_bus = gst_bus_new (); + gst_object_set_name (GST_OBJECT (self->api_bus), "api_bus"); /* *INDENT-OFF* */ self->config = gst_structure_new_id (QUARK_CONFIG, @@ -1422,8 +1423,12 @@ } if (self->seek_position != GST_CLOCK_TIME_NONE) { - GST_DEBUG_OBJECT (self, "Seeking now that we reached PAUSED state"); - gst_play_seek_internal_locked (self); + if (!self->media_info->seekable) { + GST_DEBUG_OBJECT (self, "Media is not seekable"); + } else { + GST_DEBUG_OBJECT (self, "Seeking now that we reached PAUSED state"); + gst_play_seek_internal_locked (self); + } g_mutex_unlock (&self->lock); } else if (!self->seek_pending) { g_mutex_unlock (&self->lock); @@ -2627,6 +2632,7 @@ } self->bus = bus = gst_element_get_bus (self->playbin); + gst_object_set_name (GST_OBJECT (self->bus), "playbin_bus"); gst_bus_add_signal_watch (bus); g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/player/gstplayer.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/player/gstplayer.c
Changed
@@ -49,6 +49,7 @@ #include "gstplayer.h" #include "gstplayer-signal-dispatcher-private.h" +#include "gstplayer-g-main-context-signal-dispatcher.h" #include "gstplayer-video-renderer-private.h" #include "gstplayer-media-info-private.h" #include "gstplayer-wrapped-video-renderer-private.h" @@ -576,11 +577,16 @@ if (self->signal_dispatcher != NULL) { GMainContext *context = NULL; - g_object_get (self->signal_dispatcher, "application-context", &context, - NULL); - self->signal_adapter = - gst_play_signal_adapter_new_with_main_context (self->play, context); - g_main_context_unref (context); + if (GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER + (self->signal_dispatcher)) { + g_object_get (self->signal_dispatcher, "application-context", &context, + NULL); + self->signal_adapter = + gst_play_signal_adapter_new_with_main_context (self->play, context); + g_main_context_unref (context); + } else { + self->signal_adapter = gst_play_signal_adapter_new (self->play); + } } else { self->signal_adapter = gst_play_signal_adapter_new_sync_emit (self->play); }
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlcontext.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlcontext.c
Changed
@@ -33,7 +33,8 @@ if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_NEED_CONTEXT && gst_message_parse_context_type (msg, &type)) { - return !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE); + return !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE) || + !g_strcmp0 (type, GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE); } return FALSE; @@ -60,6 +61,7 @@ s = gst_context_get_structure (context); if (gst_structure_get (s, "display", G_TYPE_POINTER, &display, NULL)) return display; + /* backward compatibility */ if (gst_structure_get (s, "handle", G_TYPE_POINTER, &display, NULL)) return display; return NULL;
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlcontext.h -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlcontext.h
Changed
@@ -26,7 +26,10 @@ /* The type of GstContext used to pass the wl_display pointer * from the application to the sink */ -#define GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE "GstWlDisplayHandleContextType" +#define GST_WL_DISPLAY_HANDLE_CONTEXT_TYPE "GstWaylandDisplayHandleContextType" + +/* Accidental naming, used for implementing backward compatibility */ +#define GST_WL_DISPLAY_HANDLE_LEGACY_CONTEXT_TYPE "GstWlDisplayHandleContextType" GST_WL_API gboolean gst_is_wl_display_handle_need_context_message (GstMessage * msg);
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwldisplay.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwldisplay.c
Changed
@@ -98,6 +98,7 @@ g_rec_mutex_init (&priv->sync_mutex); gst_wl_linux_dmabuf_init_once (); + gst_wl_shm_init_once (); gst_shm_allocator_init_once (); gst_wl_videoformat_init_once (); }
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.c -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.c
Changed
@@ -26,6 +26,19 @@ #include "gstwlshmallocator.h" +GST_DEBUG_CATEGORY (gst_wl_shm_debug); +#define GST_CAT_DEFAULT gst_wl_shm_debug + +void +gst_wl_shm_init_once (void) +{ + static gsize _init = 0; + + if (g_once_init_enter (&_init)) { + GST_DEBUG_CATEGORY_INIT (gst_wl_shm_debug, "wl_shm", 0, "wl_shm library"); + g_once_init_leave (&_init, 1); + } +} static gboolean gst_wl_shm_validate_video_info (const GstVideoInfo * vinfo)
View file
gst-plugins-bad-1.24.7.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.h -> gst-plugins-bad-1.24.8.tar.xz/gst-libs/gst/wayland/gstwlshmallocator.h
Changed
@@ -30,6 +30,9 @@ G_BEGIN_DECLS GST_WL_API +void gst_wl_shm_init_once (void); + +GST_WL_API struct wl_buffer * gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display, const GstVideoInfo * info);
View file
gst-plugins-bad-1.24.7.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.24.8.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.24.8</revision> + <branch>1.24</branch> + <name></name> + <created>2024-09-19</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.24.8.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.24.7</revision> <branch>1.24</branch> <name></name>
View file
gst-plugins-bad-1.24.7.tar.xz/gst/mpegtsmux/gstbasetsmux.c -> gst-plugins-bad-1.24.8.tar.xz/gst/mpegtsmux/gstbasetsmux.c
Changed
@@ -2449,7 +2449,7 @@ } static GstBaseTsMuxPad * -gst_base_ts_mux_find_best_pad (GstAggregator * aggregator) +gst_base_ts_mux_find_best_pad (GstAggregator * aggregator, gboolean timeout) { GstBaseTsMuxPad *best = NULL; GstClockTime best_ts = GST_CLOCK_TIME_NONE; @@ -2463,8 +2463,14 @@ GstBuffer *buffer; buffer = gst_aggregator_pad_peek_buffer (apad); - if (!buffer) + if (!buffer) { + if (!timeout && !GST_PAD_IS_EOS (apad)) { + best = NULL; + best_ts = GST_CLOCK_TIME_NONE; + break; + } continue; + } if (best_ts == GST_CLOCK_TIME_NONE) { best = tpad; best_ts = GST_BUFFER_DTS_OR_PTS (buffer); @@ -2518,7 +2524,7 @@ { GstBaseTsMux *mux = GST_BASE_TS_MUX (agg); GstFlowReturn ret = GST_FLOW_OK; - GstBaseTsMuxPad *best = gst_base_ts_mux_find_best_pad (agg); + GstBaseTsMuxPad *best = gst_base_ts_mux_find_best_pad (agg, timeout); GstCaps *caps; /* set caps on the srcpad if no caps were set yet */
View file
gst-plugins-bad-1.24.7.tar.xz/meson.build -> gst-plugins-bad-1.24.8.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.24.7', + version : '1.24.8', meson_version : '>= 1.1', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
gst-plugins-bad-1.24.7.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.24.8.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.24.7\n" +"Project-Id-Version: gst-plugins-bad-1.24.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-21 12:27+0100\n" +"POT-Creation-Date: 2024-09-19 12:02+0200\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.24.7.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.24.8.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.24.7\n" +"Project-Id-Version: gst-plugins-bad-1.24.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-21 12:27+0100\n" +"POT-Creation-Date: 2024-09-19 12:02+0200\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.24.7.tar.xz/sys/applemedia/vtenc.c -> gst-plugins-bad-1.24.8.tar.xz/sys/applemedia/vtenc.c
Changed
@@ -151,7 +151,7 @@ static gboolean gst_vtenc_start (GstVideoEncoder * enc); static gboolean gst_vtenc_stop (GstVideoEncoder * enc); -static void gst_vtenc_loop (GstVTEnc * self); +static void gst_vtenc_output_loop (GstVTEnc * self); static gboolean gst_vtenc_set_format (GstVideoEncoder * enc, GstVideoCodecState * input_state); static GstFlowReturn gst_vtenc_handle_frame (GstVideoEncoder * enc, @@ -780,6 +780,7 @@ self->is_flushing = FALSE; self->downstream_ret = GST_FLOW_OK; + g_atomic_int_set (&self->require_restart, FALSE); self->output_queue = gst_queue_array_new (VTENC_OUTPUT_QUEUE_SIZE); /* Set clear_func to unref all remaining frames in gst_queue_array_free() */ @@ -789,7 +790,7 @@ /* Create the output task, but pause it immediately */ self->pause_task = TRUE; if (!gst_pad_start_task (GST_VIDEO_ENCODER_SRC_PAD (enc), - (GstTaskFunction) gst_vtenc_loop, self, NULL)) { + (GstTaskFunction) gst_vtenc_output_loop, self, NULL)) { GST_ERROR_OBJECT (self, "failed to start output thread"); return FALSE; } @@ -1545,6 +1546,7 @@ static void gst_vtenc_destroy_session (GstVTEnc * self, VTCompressionSessionRef * session) { + GST_DEBUG_OBJECT (self, "Destroying VT session"); VTCompressionSessionInvalidate (*session); if (*session != NULL) { CFRelease (*session); @@ -1753,6 +1755,49 @@ } } +static Boolean +gst_vtenc_is_recoverable_error (OSStatus status) +{ + return status == kVTVideoEncoderMalfunctionErr + || status == kVTVideoEncoderNotAvailableNowErr; +} + +static void +gst_vtenc_restart_session (GstVTEnc * self) +{ + OSStatus status; + VTCompressionSessionRef session; + + /* We need to push out all frames still inside the encoder, + * otherwise destroy_session() will wait for all callbacks to fire + * and very likely deadlock due to the object lock being taken */ + GST_VIDEO_ENCODER_STREAM_UNLOCK (self); + status = VTCompressionSessionCompleteFrames (self->session, + kCMTimePositiveInfinity); + if (status != noErr) { + GST_WARNING_OBJECT (self, + "Error when emptying encoder before restart: %d, will retry on next frame encode", + (int) status); + GST_VIDEO_ENCODER_STREAM_LOCK (self); + return; + } else { + GST_DEBUG_OBJECT (self, "All frames out, restarting encoder session"); + } + GST_VIDEO_ENCODER_STREAM_LOCK (self); + + GST_OBJECT_LOCK (self); + gst_vtenc_destroy_session (self, &self->session); + GST_OBJECT_UNLOCK (self); + + session = gst_vtenc_create_session (self); + + GST_OBJECT_LOCK (self); + self->session = session; + GST_OBJECT_UNLOCK (self); + + g_atomic_int_set (&self->require_restart, FALSE); +} + static GstFlowReturn gst_vtenc_encode_frame (GstVTEnc * self, GstVideoCodecFrame * frame) { @@ -1802,6 +1847,11 @@ } } + /* Flushes all remaining frames out of the encoder + * and recreates the encoding session. */ + if (g_atomic_int_get (&self->require_restart)) + gst_vtenc_restart_session (self); + if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) { GST_INFO_OBJECT (self, "received force-keyframe-event, will force intra"); frame_props = self->keyframe_props; @@ -1960,9 +2010,16 @@ GINT_TO_POINTER (frame->system_frame_number), NULL); GST_VIDEO_ENCODER_STREAM_LOCK (self); - if (vt_status != noErr) { - GST_WARNING_OBJECT (self, "VTCompressionSessionEncodeFrame returned %d", - (int) vt_status); + if (gst_vtenc_is_recoverable_error (vt_status)) { + GST_ELEMENT_WARNING (self, LIBRARY, ENCODE, (NULL), + ("Failed to encode frame %d: %d, restarting session on next frame encode", + frame->system_frame_number, (int) vt_status)); + + g_atomic_int_set (&self->require_restart, TRUE); + } else if (vt_status != noErr) { + GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL), + ("Failed to encode frame %d: %d", frame->system_frame_number, + (int) vt_status)); } gst_video_codec_frame_unref (frame); @@ -1991,14 +2048,23 @@ { GstVTEnc *self = outputCallbackRefCon; GstVideoCodecFrame *frame; - gboolean is_flushing; frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER_CAST (self), GPOINTER_TO_INT (sourceFrameRefCon)); + if (g_atomic_int_get (&self->require_restart)) { + GST_DEBUG_OBJECT (self, "Ignoring frame because of scheduled restart"); + goto drop; + } + if (status != noErr) { - if (frame) { + if (gst_vtenc_is_recoverable_error (status)) { + GST_ELEMENT_WARNING (self, LIBRARY, ENCODE, (NULL), + ("Failed to encode frame (%d), restarting session on next frame encode", + (int) status)); + g_atomic_int_set (&self->require_restart, TRUE); + } else if (frame) { GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL), ("Failed to encode frame %d: %d", frame->system_frame_number, (int) status)); @@ -2006,26 +2072,29 @@ GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL), ("Failed to encode (frame unknown): %d", (int) status)); } - goto beach; + + goto drop; } if (!frame) { GST_WARNING_OBJECT (self, "No corresponding frame found!"); - goto beach; + return; } g_mutex_lock (&self->queue_mutex); - is_flushing = self->is_flushing; - g_mutex_unlock (&self->queue_mutex); - if (is_flushing) { + if (self->is_flushing) { GST_DEBUG_OBJECT (self, "Ignoring frame %d because we're flushing", frame->system_frame_number); - goto beach; + + gst_video_codec_frame_unref (frame); + g_mutex_unlock (&self->queue_mutex); + return; } + g_mutex_unlock (&self->queue_mutex); /* This may happen if we don't have enough bitrate */ if (sampleBuffer == NULL) - goto beach; + goto drop; if (gst_vtenc_buffer_is_keyframe (self, sampleBuffer)) GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame); @@ -2043,28 +2112,18 @@ VTENC_OUTPUT_QUEUE_SIZE) { g_cond_wait (&self->queue_cond, &self->queue_mutex); } - g_mutex_unlock (&self->queue_mutex); - -beach: - if (!frame) - return; - - g_mutex_lock (&self->queue_mutex); - if (self->is_flushing) { - /* We can discard the frame here, no need to have the output loop do that */ - gst_video_codec_frame_unref (frame); - g_mutex_unlock (&self->queue_mutex); - return; - } - /* Buffer-less frames will be discarded in the output loop */ gst_queue_array_push_tail (self->output_queue, frame); g_cond_signal (&self->queue_cond); g_mutex_unlock (&self->queue_mutex); + return; + +drop: + gst_video_codec_frame_unref (frame); } static void -gst_vtenc_loop (GstVTEnc * self) +gst_vtenc_output_loop (GstVTEnc * self) { GstVideoCodecFrame *outframe; GstCoreMediaMeta *meta;
View file
gst-plugins-bad-1.24.7.tar.xz/sys/applemedia/vtenc.h -> gst-plugins-bad-1.24.8.tar.xz/sys/applemedia/vtenc.h
Changed
@@ -92,6 +92,10 @@ gboolean negotiate_downstream; gboolean is_flushing; gboolean pause_task; + + /* If we get an EncoderMalfunctionErr or similar, we restart the session + * before the next encode call */ + gboolean require_restart; }; void gst_vtenc_register_elements (GstPlugin * plugin);
View file
gst-plugins-bad-1.24.7.tar.xz/sys/uvcgadget/gstuvcsink.c -> gst-plugins-bad-1.24.8.tar.xz/sys/uvcgadget/gstuvcsink.c
Changed
@@ -248,6 +248,22 @@ case GST_EVENT_CAPS: GST_DEBUG_OBJECT (self, "Handling %" GST_PTR_FORMAT, event); + /* If the UVC host did not yet commit a format, the cur_caps may contain + * all probed caps. In this case, the element is not able to detect, if + * the caps have changed when the stream is enabled. Take the caps from + * upstream to be able to detect a change. + */ + if (!GST_CAPS_IS_SIMPLE (self->cur_caps)) { + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + gst_caps_replace (&self->cur_caps, caps); + + GST_DEBUG_OBJECT (self, + "UVC host didn't select a format, yet. Using upstream %" + GST_PTR_FORMAT, self->cur_caps); + } + /* EVENT CAPS signals that the buffers after the event will use new caps. * If the UVC host requested a new format, we now must start the stream. */ @@ -624,12 +640,14 @@ gst_caps_unref (configured_caps); prev_caps = gst_pad_get_current_caps (self->sinkpad); - if (!gst_caps_is_subset (prev_caps, self->cur_caps)) { - self->caps_changed = TRUE; - GST_DEBUG_OBJECT (self, - "caps changed from %" GST_PTR_FORMAT, prev_caps); + if (prev_caps) { + if (!gst_caps_is_subset (prev_caps, self->cur_caps)) { + self->caps_changed = TRUE; + GST_DEBUG_OBJECT (self, + "caps changed from %" GST_PTR_FORMAT, prev_caps); + } + gst_caps_unref (prev_caps); } - gst_caps_unref (prev_caps); } break; default:
View file
gst-plugins-bad-1.24.7.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c -> gst-plugins-bad-1.24.8.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c
Changed
@@ -461,7 +461,7 @@ { GstV4l2CodecH265Dec *self = GST_V4L2_CODEC_H265_DEC (decoder); GstCaps *caps = NULL; - guint min = 0; + guint min = 0, num_bitstream; if (self->streaming) goto no_internal_changes; @@ -489,10 +489,26 @@ min = MAX (2, min); + num_bitstream = 1 + + MAX (1, gst_v4l2_decoder_get_render_delay (self->decoder)); + self->sink_allocator = gst_v4l2_codec_allocator_new (self->decoder, - GST_PAD_SINK, self->min_pool_size + 2); + GST_PAD_SINK, num_bitstream); + if (!self->sink_allocator) { + GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT, + ("Not enough memory to allocate sink buffers."), (NULL)); + return FALSE; + } + self->src_allocator = gst_v4l2_codec_allocator_new (self->decoder, - GST_PAD_SRC, self->min_pool_size + min + 1); + GST_PAD_SRC, self->min_pool_size + min); + if (!self->src_allocator) { + GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT, + ("Not enough memory to allocate source buffers."), (NULL)); + g_clear_object (&self->sink_allocator); + return FALSE; + } + self->src_pool = gst_v4l2_codec_pool_new (self->src_allocator, &self->vinfo); no_internal_changes:
View file
gst-plugins-bad-1.24.7.tar.xz/tests/check/elements/webrtcbin.c -> gst-plugins-bad-1.24.8.tar.xz/tests/check/elements/webrtcbin.c
Changed
@@ -4538,6 +4538,58 @@ } } +GST_START_TEST (test_invalid_bundle_in_pending_remote_description) +{ + GstPromise *promise; + struct test_webrtc *t = test_webrtc_new (); + const gchar *invalid_bundle = "v=0\r\n\ +o=thisisadapterortc 2683876491 2 IN IP4 127.0.0.1\r\n\ +s=-\r\n\ +t=0 0\r\n\ +a=setup:actpass\r\n\ +a=fingerprint:sha-256 95:B3:DB:24:83:3B:9E:3F:B0:AD:93:2D:EF:73:C9:D2:1C:68:EA:19:C6:F8:73:BA:9A:FA:34:A9:64:69:C0:D8\r\n\ +a=ice-ufrag:ERn4TYI2HSbtKrzQNCdp9wD2EHt4wM2O\r\n\ +a=ice-pwd:QxEZFuCPRwIURJPMSYNNYFr2XFNgqNkG\r\n\ +a=group:BUNDLE \r\n\ +"; + GstSDPMessage *sdp; + const GstStructure *reply; + GError *error = NULL; + + t->on_negotiation_needed = NULL; + t->on_offer_created = NULL; + t->on_answer_created = NULL; + + gst_sdp_message_new_from_text (invalid_bundle, &sdp); + GstWebRTCSessionDescription *desc = + gst_webrtc_session_description_new (GST_WEBRTC_SDP_TYPE_OFFER, + sdp); + gst_element_set_state (t->webrtc1, GST_STATE_READY); + + promise = gst_promise_new (); + g_signal_emit_by_name (t->webrtc1, "set-remote-description", desc, promise); + gst_promise_wait (promise); + gst_promise_unref (promise); + gst_webrtc_session_description_free (desc); + + /* Creating an answer from SDP with invalid BUNDLE group should trigger no crash. */ + promise = gst_promise_new (); + g_signal_emit_by_name (t->webrtc1, "create-answer", NULL, promise); + gst_promise_wait (promise); + reply = gst_promise_get_reply (promise); + fail_unless (gst_structure_get (reply, "error", G_TYPE_ERROR, &error, NULL)); + fail_unless (g_error_matches (error, GST_WEBRTC_ERROR, + GST_WEBRTC_ERROR_SDP_SYNTAX_ERROR)); + fail_unless_equals_string (error->message, + "Invalid format for BUNDLE group, expected at least one mid (BUNDLE )"); + g_clear_error (&error); + gst_promise_unref (promise); + + test_webrtc_free (t); +} + +GST_END_TEST; + static void new_jitterbuffer_set_fast_start (GstElement * rtpbin, GstElement * rtpjitterbuffer, guint session_id, guint ssrc, @@ -5979,6 +6031,7 @@ tcase_add_test (tc, test_msid); tcase_add_test (tc, test_ice_end_of_candidates); tcase_add_test (tc, test_sdp_session_setup_attribute); + tcase_add_test (tc, test_invalid_bundle_in_pending_remote_description); if (sctpenc && sctpdec) { tcase_add_test (tc, test_data_channel_create); tcase_add_test (tc, test_data_channel_create_two_channels);
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
.