Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 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);
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
.