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 37
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Mon Jul 28 18:30:23 UTC 2025 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.26.4 + +------------------------------------------------------------------- Tue Jul 15 09:29:27 UTC 2025 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.26.3
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.26.0 Name: gstreamer-plugins-bad-codecs -Version: 1.26.3 +Version: 1.26.4 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="download_url"> <param name="host">gstreamer.freedesktop.org</param> <param name="protocol">https</param> - <param name="path">/src/gst-plugins-bad/gst-plugins-bad-1.26.3.tar.xz</param> + <param name="path">/src/gst-plugins-bad/gst-plugins-bad-1.26.4.tar.xz</param> </service> <service name="set_version" mode="buildtime"/> </services>
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ChangeLog -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ChangeLog
Changed
@@ -1,3 +1,279 @@ +=== release 1.26.4 === + +2025-07-16 15:26:21 +0200 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.26.4 + +2025-07-09 02:52:27 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/avtp/gstavtpcrfbase.c: + * ext/avtp/gstavtpcrfbase.h: + avtp: crf: Setup socket during state change to ensure we handle failure + Previously the socket would be created in the thread, which take some + time to start. As the tests were so short they would usually pass as + they don't actually use the socket. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9374> + +2025-07-09 02:51:11 -0400 Doug Nazar <nazard@nazar.ca> + + * tests/check/elements/avtpcrfcheck.c: + * tests/check/elements/avtpcrfsync.c: + avtp: crf: tests: Only run tests if packet socket is available + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9374> + +2025-07-09 00:47:58 +0200 Mathieu Duponchelle <mathieu@centricular.com> + + * gst/rtmp2/rtmp/rtmpclient.c: + rtmp2src: don't send window acknowledgement size commands twice + This causes servers such as AWS MediaLive to drop the connection, and + the message flow chart as documented in the "spec" always has the + server sending it first, and the client replying to it on reception of + the Set Peer Bandwidth, which we do since 286a3829b637. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9372> + +2025-07-09 00:44:36 +0200 Mathieu Duponchelle <mathieu@centricular.com> + + * gst/rtmp2/gstrtmp2locationhandler.c: + rtmp2src: fix playback of URIs without a playpath + ffmpeg manages to play RTMP URLs in the form: + ``` + protocol://servername:port/appname + ``` + and does not require a second component to the path, adapt our code to + allow using such URLs as `tcUrl`. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9372> + +2025-07-09 12:21:31 +0200 Piotr Brzeziński <piotr@centricular.com> + + * sys/applemedia/vtenc.c: + vtenc: Fix negotiation failure with profile=main-422-10 + Previous version passed just enough data to the parser to detect + main/main-10, but main-422-10 is one of the range extensions profiles. + Those need a few more bits to be accurately detected, and since those + were just uinitialized memory previously, we'd incorrectly end up with + main or main-10 when the encoder was in fact giving us 4:2:2 10bit + output. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9371> + +2025-07-07 11:59:18 +0200 Hanna Weiß <hweiss@igalia.com> + + * gst-libs/gst/vulkan/gstvkfullscreenquad.c: + vulkan: Fix drawing too many triangles in fullscreenquad + was using a index buffer for triangle list but drawn as strip + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9370> + +2025-06-17 06:38:59 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/openh264/gstopenh264enc.cpp: + openh264: Ensure src_pic is initialized before use + valgrind was showing reads of uninitialized memory and the + library examples all memset the structure before use. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9362> + +2025-07-07 10:12:52 +1000 Matthew Waters <matthew@centricular.com> + + * gst-libs/gst/vulkan/gstvkfullscreenquad.c: + vulkanfullscreenquad: add locks for synchronisation + Now all API can be accessed from any thread. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9357> + +2025-05-31 03:35:27 -0400 Doug Nazar <nazard@nazar.ca> + + * gst/transcode/gst-cpu-throttling-clock.c: + cpu-throttling-clock: fix race between async callback and unscheduling + It's possible that the callback is already scheduled to run on another + thread when we unschedule it during dispose and we would then access + a freed object. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-30 19:15:56 -0400 Doug Nazar <nazard@nazar.ca> + + * tests/check/elements/h266parse.c: + h266parse: test: Pass correct size argument to va_arg function + sizeof(int) != sizeof (gsize) + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-30 15:23:03 -0400 Doug Nazar <nazard@nazar.ca> + + * tests/check/libs/analyticsmeta.c: + analytics: tests: Copy correct size of array to buffer + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-30 15:20:41 -0400 Doug Nazar <nazard@nazar.ca> + + * sys/decklink/gstdecklink.cpp: + decklink: Fix a memory leak + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-30 15:21:58 -0400 Doug Nazar <nazard@nazar.ca> + + * tests/check/elements/webrtcbin.c: + webrtc: tests: Fix a few memory leaks + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-30 15:20:02 -0400 Doug Nazar <nazard@nazar.ca> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: Fix a memory leak + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9347> + +2025-05-28 08:45:40 -0400 Doug Nazar <nazard@nazar.ca> + + * gst/codecalpha/gstalphacombine.c: + alphacombine: fix memory leaks + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9343> + +2025-05-28 08:44:01 -0400 Doug Nazar <nazard@nazar.ca> + + * gst/transcode/gst-cpu-throttling-clock.c: + cpu-throttling-clock: free clock when finished + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9343> + +2025-07-05 03:10:51 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d12/gstd3d12screencapturedevice.cpp: + d3d12screencapture: Add support for monitor add/remove in device provider + Update device list on WM_DISPLAYCHANGE event + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4521 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9333> + +2025-07-04 10:56:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gstvp9parse.c: + Revert "vp9parse: Always default to super-frame" + This reverts commit fd1428d3ebf937d7656c3788df3ef3ff85fecc31. + As reported in #4524, this changes cause regressions. The problem is due to a + bug in how vp9parse interact with parsebin, presenting downstream negotiation of + alignment to work. This revert to being stuck using frame alignment always, + which fortunately works with libvpx, though less efficient. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9331> + +2025-05-07 14:02:05 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gstvp9parse.c: + vp9parse: Only show the last frame of a super frame + Only the last frame of a super frame should be displayed by default. When + converting from super frame to frame, mark all frames as decode only except the + last one. This fixes vp90-2-22-svc_1280x720_3.ivf conformance test with + stateless decoders such as VA. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9327> + +2025-05-07 13:48:04 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gstvp9parse.c: + vp9parse: Always default to super-frame + Sort the list of structure before truncating so that we don't prefer + "frame"" alignment over "super-frame" in some cases. + Fixes vp90-2-22-svc_1280x720_3.ivf conformance test when using libvpx based + decoder. + Fixes #4371 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9327> + +2025-05-07 10:29:10 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/videoparsers/gstvp9parse.c: + vp9parse: Fix typo Aligment vs Alignment + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9327> + +2025-07-02 22:38:41 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/tensordecoders/gstssdobjectdetector.c: + ssdobjectdetector: Use correct tensor data index for the scores + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9324> + +2025-06-27 10:06:34 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codech265dec.c: + v4l2codecs: h265dec: Fail when frame cropping is needed while using DMABuf + It is not possible to do frame cropping when DMABuf caps feature is negotiated. + The VideoInfo size is zero, resulting in empty destination buffers, and video + convert library may not understand what the format actually is. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9315> + +2025-06-27 10:00:37 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codech265dec.c:
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/NEWS -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/NEWS
Changed
@@ -2,11 +2,11 @@ GStreamer 1.26.0 was originally released on 11 March 2025. -The latest bug-fix release in the stable 1.26 series is 1.26.2 and was released on 29 May 2025. +The latest bug-fix release in the stable 1.26 series is 1.26.4 and was released on 16 July 2025. See https://gstreamer.freedesktop.org/releases/1.26/ for the latest version of this document. -Last updated: Thursday 29 May 2025, 20:00 UTC (log) +Last updated: Wednesday 16 July 2025, 15:00 UTC (log) ## Introduction @@ -2016,12 +2016,185 @@ - List of Merge Requests applied in 1.26.3 - List of Issues fixed in 1.26.3 +1.26.4 + +The fourth 1.26 bug-fix release (1.26.4) was released on 16 July 2025. + +This release only contains bugfixes including some important playback fixes, and it should be safe to update from 1.26.x. + +Highlighted bugfixes in 1.26.4 + +- adaptivedemux2: Fixed reverse playback +- d3d12screencapture: Add support for monitor add/remove in device provider +- rtmp2src: various fixes to make it play back AWS medialive streams +- rtph265pay: add profile-id, tier-flag, and level-id to output rtp caps +- vp9parse: Fix handling of spatial SVC decoding +- vtenc: Fix negotiation failure with profile=main-422-10 +- gtk4paintablesink: Add YCbCr memory texture formats and other improvements +- livekit: add room-timeout +- mp4mux: add TAI timestamp muxing support +- rtpbin2: fix various race conditions, plus other bug fixes and performance improvements +- threadshare: add a ts-rtpdtmfsrc element, implement run-time input switching in ts-intersrc +- webrtcsink: fix deadlock on error setting remote description and other fixes +- cerbero: WiX installer: fix missing props files in the MSI packages +- smaller macOS/iOS package sizes +- Various bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements + +gstreamer + +- tracers: Fix deadlock in latency tracer +- Fix various valgrind/test errors when GST_DEBUG is enabled +- More valgrind and test fixes +- Various ASAN fixes + +gst-plugins-base + +- Revert “streamsynchronizer: Consider streams having received stream-start as waiting” +- alsa: free conf cache under valgrind +- gst-device-monitor: Fix caps filter splitting +- Fix various valgrind/test errors when GST_DEBUG is enabled +- More valgrind and test fixes +- Various ASAN fixes + +gst-plugins-good + +- adaptivedemux2: Fixed reverse playback +- matroskademux: Send tags after seeking +- qtdemux: Fix incorrect FourCC used when iterating over sbgp atoms +- qtdemux: Incorrect sibling type used in sbgp iteration loop +- rtph265pay: add profile-id, tier-flag, and level-id to output rtp caps +- rtpjpeg: fix copying of quant data if it spans memory segments +- soup: Disable range requests when talking to Python’s http.server +- v4l2videodec: need replace acquired_caps on set_format success +- Fix various valgrind/test errors when GST_DEBUG is enabled +- More valgrind and test fixes +- Various ASAN fixes + +gst-plugins-bad + +- avtp: crf: Setup socket during state change to ensure we handle failure +- d3d12screencapture: Add support for monitor add/remove in device provider +- mpegtsmux: fix double free caused by shared PMT descriptor +- openh264: Ensure src_pic is initialized before use +- rtmp2src: various fixes to make it play back AWS medialive streams +- ssdobjectdetector: Use correct tensor data index for the scores +- v4l2codecs: h265dec: Fix zero-copy of cropped window located at position 0,0 +- vp9parse: Fix handling of spatial SVC decoding +- vp9parse: Revert “Always default to super-frame” +- vtenc: Fix negotiation failure with profile=main-422-10 +- vulkan: Fix drawing too many triangles in fullscreenquad +- vulkanfullscreenquad: add locks for synchronisation +- Fix various valgrind/test errors when GST_DEBUG is enabled +- More valgrind and test fixes +- Various ASAN fixes + +gst-plugins-ugly + +- No changes + +GStreamer Rust plugins + +- aws: s3hlssink: Write to S3 on OutputStream flush +- cea708mux: fix clipping function +- dav1ddec: Use video decoder base class latency reporting API +- elevenlabssynthesizer: fix running time checks +- gopbuffer: Push GOPs in order of time on EOS +- gtk4: Improve color-state fallbacks for unknown values +- gtk4: Add YCbCr memory texture formats +- gtk4: Promote set_caps debug log to info +- hlssink3: Fix a comment typo +- hlssink3: Use closed fragment location in playlist generation +- livekit: add room-timeout +- mccparse: Convert “U” to the correct byte representation +- mp4mux: add TAI timestamp element and muxing +- threadshare: add a ts-rtpdtmfsrc element +- rtp: Update to rtcp-types 0.2 +- rtpsend: Don’t configure a zero min RTCP interval for senders +- rtpbin2: Fix handling of unknown PTs and don’t warn about incomplete RTP caps to allow for bundling +- rtpbin2: Improve rtcp-mux support +- rtpbin2: fix race condition on serialized Queries +- rtpbin2: sync: fix race condition +- rtprecv optimize src pad scheduling +- rtprecv: fix SSRC collision event sent in wrong direction +- skia: Add harfbuzz, freetype and fontconfig as dependencies in the meson build +- tttocea{6,7}08: Disallow pango markup from input caps +- ts-intersrc: handle dynamic inter-ctx changes +- threadshare: src elements: don’t pause the task in downward state transitions +- webrtc: sink: avoid recursive locking of the session +- webrtcsink: fix deadlock on error setting remote description +- webrtcsink: add mitigation modes parameter and signal +- webrtc: fix Safari addIceCandidate crash +- webrtc-api: Set default bundle policy to max-bundle +- WHIP client: emit shutdown after DELETE request +- Fix various new clippy 1.88 warnings +- Update dependencies + +gst-libav + +- Various ASAN fixes + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- Fix various valgrind/test errors when GST_DEBUG is enabled + +gst-devtools, gst-validate + gst-integration-testsuites + +- Update various Rust dependencies + +gst-examples + +- Update various Rust dependencies + +gstreamer-docs + +- No changes + +Development build environment + +- No changes + +Cerbero build tool and packaging changes in 1.26.4 + +- WiX: fix missing props files in the MSI +- cmake: Do not rely on the CERBERO_PREFIX environment variable +- osx: Update pkgbuild compression algorithms resulting in much smaller packages + +Contributors to 1.26.4 + +Adrian Perez de Castro, Alicia Boya García, Arun Raghavan, Brad Hards, David Maseda Neira, David Monge, Doug Nazar, Enock Gomes +Neto, François Laignel, Haihua Hu, Hanna Weiß, Jerome Colle, Jochen Henneberg, L. E. Segovia, Mathieu Duponchelle, Matthew +Waters, Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand, Piotr Brzeziński, Robert Ayrapetyan, Robert Mader, Sebastian +Dröge, Seungha Yang, Taruntej Kanakamalla, Thibault Saunier, Tim-Philipp Müller, Vivia Nikolaidou, + +… 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.26.4 + +- List of Merge Requests applied in 1.26.4 +- List of Issues fixed in 1.26.4 + Schedule for 1.28 Our next major feature release will be 1.28, and 1.27 will be the unstable development version leading up to the stable 1.28 release. The development of 1.27/1.28 will happen in the git main branch of the GStreamer mono repository. -The schedule for 1.28 is yet to be decided. +The schedule for 1.28 is yet to be decided, but we’re aiming for a release towards the end of 2025. 1.28 will be backwards-compatible to the stable 1.26, 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/RELEASE -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.26.3. +This is GStreamer gst-plugins-bad 1.26.4. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ext/avtp/gstavtpcrfbase.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ext/avtp/gstavtpcrfbase.c
Changed
@@ -73,6 +73,7 @@ static GstStateChangeReturn gst_avtp_crf_base_change_state (GstElement * element, GstStateChange transition); static void crf_listener_thread_func (GstAvtpCrfBase * avtpcrfbase); +static int setup_socket (GstAvtpCrfBase * avtpcrfbase); #define gst_avtp_crf_base_parent_class parent_class G_DEFINE_TYPE (GstAvtpCrfBase, gst_avtp_crf_base, GST_TYPE_BASE_TRANSFORM); @@ -122,6 +123,7 @@ avtpcrfbase->streamid = DEFAULT_STREAMID; avtpcrfbase->ifname = g_strdup (DEFAULT_IFNAME); avtpcrfbase->address = g_strdup (DEFAULT_ADDRESS); + avtpcrfbase->thread_data.fd = -1; } static GstStateChangeReturn @@ -136,6 +138,13 @@ switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: + thread_data->fd = setup_socket (avtpcrfbase); + if (thread_data->fd < 0) { + GST_ELEMENT_ERROR (avtpcrfbase, RESOURCE, OPEN_READ, + ("Cannot open socket for CRF Listener"), (NULL)); + return GST_STATE_CHANGE_FAILURE; + } + thread_data->past_periods = g_malloc0 (sizeof (thread_data->past_periods0) * MAX_NUM_PERIODS_STORED); @@ -149,7 +158,9 @@ GST_ERROR_OBJECT (avtpcrfbase, "failed to start thread, %s", error->message); g_error_free (error); - g_free (thread_data->past_periods); + g_clear_pointer (&thread_data->past_periods, g_free); + close (thread_data->fd); + thread_data->fd = -1; return GST_STATE_CHANGE_FAILURE; } break; @@ -162,8 +173,12 @@ switch (transition) { case GST_STATE_CHANGE_READY_TO_NULL: thread_data->is_running = FALSE; - g_thread_join (thread_data->thread); - g_free (thread_data->past_periods); + g_clear_pointer (&thread_data->thread, g_thread_join); + g_clear_pointer (&thread_data->past_periods, g_free); + if (thread_data->fd > -1) { + close (thread_data->fd); + thread_data->fd = -1; + } break; default: break; @@ -480,17 +495,12 @@ GstAvtpCrfThreadData *data = &avtpcrfbase->thread_data; struct avtp_crf_pdu *crf_pdu = g_alloca (MAX_AVTPDU_SIZE); guint64 media_clk_reset; - int fd, n, res; + int n, res; - fd = setup_socket (avtpcrfbase); - if (fd < 0) { - GST_ELEMENT_ERROR (avtpcrfbase, RESOURCE, OPEN_READ, - ("Cannot open socket for CRF Listener"), (NULL)); - return; - } + g_assert (data->fd > -1); while (data->is_running) { - n = recv (fd, crf_pdu, MAX_AVTPDU_SIZE, 0); + n = recv (data->fd, crf_pdu, MAX_AVTPDU_SIZE, 0); if (n == -1) { if (errno == EAGAIN || errno == EINTR) @@ -522,8 +532,6 @@ calculate_average_period (avtpcrfbase, crf_pdu); } - - close (fd); } static void
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ext/avtp/gstavtpcrfbase.h -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ext/avtp/gstavtpcrfbase.h
Changed
@@ -43,6 +43,7 @@ { GThread *thread; gboolean is_running; + gint fd; guint64 num_pkt_tstamps; GstClockTime timestamp_interval;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ext/avtp/gstavtpvfdepaybase.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ext/avtp/gstavtpvfdepaybase.c
Changed
@@ -97,6 +97,7 @@ GST_DEBUG_OBJECT (avtpvfdepaybase, "Sending initial CAPS and SEGMENT, pipeline time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock))); + gst_object_unref (clock); } }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ext/openh264/gstopenh264enc.cpp -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ext/openh264/gstopenh264enc.cpp
Changed
@@ -922,7 +922,7 @@ GST_OBJECT_UNLOCK (openh264enc); if (frame) { - src_pic = new SSourcePicture; + src_pic = g_new0 (SSourcePicture, 1); if (src_pic == NULL) { if (frame) @@ -977,7 +977,7 @@ if (frame) { gst_video_frame_unmap (&video_frame); gst_video_codec_frame_unref (frame); - delete src_pic; + g_free (src_pic); GST_ELEMENT_ERROR (openh264enc, STREAM, ENCODE, ("Could not encode frame"), ("Openh264 returned %d", ret)); return GST_FLOW_ERROR; @@ -990,7 +990,7 @@ if (frame) { gst_video_frame_unmap (&video_frame); gst_video_encoder_finish_frame (encoder, frame); - delete src_pic; + g_free (src_pic); } return GST_FLOW_OK; @@ -999,7 +999,7 @@ if (frame) { gst_video_frame_unmap (&video_frame); gst_video_codec_frame_unref (frame); - delete src_pic; + g_free (src_pic); src_pic = NULL; frame = NULL; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/ext/srt/gstsrtsrc.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/ext/srt/gstsrtsrc.c
Changed
@@ -154,7 +154,7 @@ GstClockTime capture_time; GstClockTimeDiff delay; int64_t srt_time; - SRT_MSGCTRL mctrl; + SRT_MSGCTRL mctrl = { 0, }; retry: if (g_cancellable_is_cancelled (self->srtobject->cancellable)) { @@ -194,7 +194,7 @@ gst_buffer_unmap (outbuf, &info); GST_LOG_OBJECT (src, - "recv_len:%" G_GSIZE_FORMAT " pktseq:%d msgno:%d srctime:%" + "recv_len:%" G_GSSIZE_FORMAT " pktseq:%d msgno:%d srctime:%" G_GINT64_FORMAT, recv_len, mctrl.pktseq, mctrl.msgno, mctrl.srctime); if (g_cancellable_is_cancelled (self->srtobject->cancellable)) {
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst-libs/gst/codecparsers/gstvc1parser.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst-libs/gst/codecparsers/gstvc1parser.c
Changed
@@ -910,6 +910,8 @@ GST_DEBUG ("Parsing Frame header advanced %u", advhdr->interlace); + memset (framehdr, 0, sizeof (GstVC1FrameHdr)); + /* Set the conveninence fields */ framehdr->profile = seqhdr->profile; framehdr->dquant = entrypthdr->dquant;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst-libs/gst/vulkan/gstvkfullscreenquad.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst-libs/gst/vulkan/gstvkfullscreenquad.c
Changed
@@ -84,7 +84,7 @@ }; gushort indices = { - 0, 1, 2, 0, 2, 3, + 0, 1, 3, 2, }; static gboolean @@ -669,9 +669,15 @@ GstVulkanFence * gst_vulkan_full_screen_quad_get_last_fence (GstVulkanFullScreenQuad * self) { + GstVulkanFence *ret; + g_return_val_if_fail (GST_IS_VULKAN_FULL_SCREEN_QUAD (self), NULL); - return LAST_FENCE_OR_ALWAYS_SIGNALLED (self, self->queue->device); + GST_OBJECT_LOCK (self); + ret = LAST_FENCE_OR_ALWAYS_SIGNALLED (self, self->queue->device); + GST_OBJECT_UNLOCK (self); + + return ret; } #define clear_field(field,type,trash_free_func) \ @@ -906,6 +912,8 @@ gst_vulkan_full_screen_quad_set_info (GstVulkanFullScreenQuad * self, const GstVideoInfo * in_info, const GstVideoInfo * out_info) { + GST_OBJECT_LOCK (self); + self->out_info = *out_info; self->in_info = *in_info; @@ -915,6 +923,8 @@ clear_descriptor_cache (self); clear_uniform_data (self); + GST_OBJECT_UNLOCK (self); + return TRUE; } @@ -938,8 +948,11 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); gst_buffer_replace (&priv->inbuf, buffer); clear_descriptor_set (self); + GST_OBJECT_UNLOCK (self); + return TRUE; } @@ -963,8 +976,11 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); gst_buffer_replace (&priv->outbuf, buffer); clear_framebuffer (self); + GST_OBJECT_UNLOCK (self); + return TRUE; } @@ -992,12 +1008,15 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); clear_shaders (self); destroy_pipeline (self); priv->vert = gst_vulkan_handle_ref (vert); priv->frag = gst_vulkan_handle_ref (frag); + GST_OBJECT_UNLOCK (self); + return TRUE; } @@ -1023,11 +1042,13 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); clear_uniform_data (self); if (uniforms) { priv->uniforms = gst_memory_ref (uniforms); priv->uniform_size = gst_memory_get_sizes (uniforms, NULL, NULL); } + GST_OBJECT_UNLOCK (self); return TRUE; } @@ -1057,11 +1078,13 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); clear_index_data (self); if (indices) { priv->indices = gst_memory_ref (indices); priv->n_indices = n_indices; } + GST_OBJECT_UNLOCK (self); return TRUE; } @@ -1088,10 +1111,12 @@ priv = GET_PRIV (self); + GST_OBJECT_LOCK (self); clear_vertex_data (self); if (vertices) { priv->vertices = gst_memory_ref (vertices); } + GST_OBJECT_UNLOCK (self); return TRUE; } @@ -1158,85 +1183,6 @@ } /** - * gst_vulkan_full_screen_quad_draw: - * @self: the #GstVulkanFullScreenQuad - * @error: a #GError filled on error - * - * Helper function for creation and submission of a command buffer that draws - * a full screen quad. If you need to add other things to the command buffer, - * create the command buffer manually and call - * gst_vulkan_full_screen_quad_prepare_draw(), - * gst_vulkan_full_screen_quad_fill_command_buffer() and - * gst_vulkan_full_screen_quad_submit() instead. - * - * Returns: whether the draw was successful - * - * Since: 1.18 - */ -gboolean -gst_vulkan_full_screen_quad_draw (GstVulkanFullScreenQuad * self, - GError ** error) -{ - GstVulkanCommandBuffer *cmd = NULL; - GstVulkanFence *fence = NULL; - VkResult err; - - g_return_val_if_fail (GST_IS_VULKAN_FULL_SCREEN_QUAD (self), FALSE); - - fence = gst_vulkan_device_create_fence (self->queue->device, error); - if (!fence) - goto error; - - if (!gst_vulkan_full_screen_quad_prepare_draw (self, fence, error)) - goto error; - - if (!(cmd = gst_vulkan_command_pool_create (self->cmd_pool, error))) - goto error; - - { - VkCommandBufferBeginInfo cmd_buf_info = { 0, }; - - /* *INDENT-OFF* */ - cmd_buf_info = (VkCommandBufferBeginInfo) { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - .pNext = NULL, - .flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, - .pInheritanceInfo = NULL - }; - /* *INDENT-ON* */ - - gst_vulkan_command_buffer_lock (cmd); - err = vkBeginCommandBuffer (cmd->cmd, &cmd_buf_info); - if (gst_vulkan_error_to_g_error (err, error, "vkBeginCommandBuffer") < 0) - goto unlock_error; - } - - if (!gst_vulkan_full_screen_quad_fill_command_buffer (self, cmd, fence, - error)) - goto unlock_error; - - err = vkEndCommandBuffer (cmd->cmd); - gst_vulkan_command_buffer_unlock (cmd); - if (gst_vulkan_error_to_g_error (err, error, "vkEndCommandBuffer") < 0) - goto error; - - if (!gst_vulkan_full_screen_quad_submit (self, cmd, fence, error)) - goto error; - - gst_vulkan_fence_unref (fence); - - return TRUE; - -unlock_error: - gst_vulkan_command_buffer_unlock (cmd);
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst-plugins-bad.doap -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.26.4</revision> + <branch>1.26</branch> + <name></name> + <created>2025-07-16</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.26.4.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.26.3</revision> <branch>1.26</branch> <name></name>
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/camerabin2/gstcamerabin2.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/camerabin2/gstcamerabin2.c
Changed
@@ -1079,9 +1079,10 @@ g_mutex_lock (&camerabin->video_capture_mutex); GST_DEBUG_OBJECT (bin, "EOS from video branch"); if (camerabin->video_state == GST_CAMERA_BIN_VIDEO_FINISHING) { - if (!g_thread_try_new ("reset-element-thread", - gst_camera_bin_video_reset_elements, - gst_object_ref (camerabin), NULL)) { + GThread *thread = g_thread_try_new ("reset-element-thread", + gst_camera_bin_video_reset_elements, + gst_object_ref (camerabin), NULL); + if (!thread) { GST_WARNING_OBJECT (camerabin, "Failed to create thread to " "reset video elements' state, video recordings may not work " @@ -1089,6 +1090,7 @@ gst_object_unref (camerabin); camerabin->video_state = GST_CAMERA_BIN_VIDEO_IDLE; } + g_clear_pointer (&thread, g_thread_unref); } else if (camerabin->video_state == GST_CAMERA_BIN_VIDEO_IDLE) { GST_DEBUG_OBJECT (camerabin, "Received EOS from video branch but " "video recording is idle, ignoring");
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/codecalpha/gstalphacombine.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/codecalpha/gstalphacombine.c
Changed
@@ -386,8 +386,10 @@ guint alpha_plane_idx; ret = gst_alpha_combine_peek_alpha_buffer (self, &alpha_buffer); - if (ret != GST_FLOW_OK) + if (ret != GST_FLOW_OK) { + gst_buffer_unref (src_buffer); return ret; + } GST_DEBUG_OBJECT (self, "Combining buffer %p with alpha buffer %p", src_buffer, alpha_buffer); @@ -713,6 +715,9 @@ } g_clear_object (&self->blocked_pad); + gst_buffer_replace (&self->alpha_buffer, NULL); + gst_buffer_replace (&self->last_alpha_buffer, NULL); + G_OBJECT_CLASS (parent_class)->dispose (object); }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/mpegtsmux/tsmux/tsmuxstream.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/mpegtsmux/tsmux/tsmuxstream.c
Changed
@@ -1054,7 +1054,8 @@ descriptor = gst_mpegts_descriptor_from_registration ("AV1G", NULL, 0); g_ptr_array_add (pmt_stream->descriptors, descriptor); if (stream->pmt_descriptor) - g_ptr_array_add (pmt_stream->descriptors, stream->pmt_descriptor); + g_ptr_array_add (pmt_stream->descriptors, + gst_mpegts_descriptor_copy (stream->pmt_descriptor)); } if (stream->internal_stream_type == TSMUX_ST_PS_TELETEXT) { // FIXME empty descriptor for now;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/proxy/gstproxysrc.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/proxy/gstproxysrc.c
Changed
@@ -244,12 +244,12 @@ { GstProxySrc *self = GST_PROXY_SRC (object); - gst_object_unparent (GST_OBJECT (self->dummy_sinkpad)); - self->dummy_sinkpad = NULL; - gst_object_unparent (GST_OBJECT (self->internal_srcpad)); self->internal_srcpad = NULL; + gst_object_unparent (GST_OBJECT (self->dummy_sinkpad)); + self->dummy_sinkpad = NULL; + g_weak_ref_set (&self->proxysink, NULL); G_OBJECT_CLASS (gst_proxy_src_parent_class)->dispose (object);
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/rtmp2/gstrtmp2locationhandler.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/rtmp2/gstrtmp2locationhandler.c
Changed
@@ -173,11 +173,6 @@ } stream_sep = strrchr (path_sep + 1, '/'); - if (!stream_sep) { - g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_REFERENCE, - "URI lacks stream: %s", string); - return FALSE; - } { gchar *string_without_path = g_strndup (string, path_sep - string); @@ -213,8 +208,10 @@ } { - const gchar *path = path_sep + 1, *stream = stream_sep + 1; - gchar *application = g_strndup (path, stream_sep - path); + const gchar *path = path_sep + 1; + const gchar *stream = stream_sep ? stream_sep + 1 : ""; + gchar *application = + stream_sep ? g_strndup (path, stream_sep - path) : g_strdup (path); GST_DEBUG_OBJECT (self, "setting location to %s://%s:%u/%s stream %s", gst_rtmp_scheme_to_string (scheme), host, port, application, stream);
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/rtmp2/rtmp/rtmpclient.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/rtmp2/rtmp/rtmpclient.c
Changed
@@ -1438,9 +1438,6 @@ gst_rtmp_connection_send_command (connection, NULL, NULL, 0, "FCPublish", command_object, stream_name, NULL); } else { - /* Matches librtmp */ - gst_rtmp_connection_request_window_size (connection, - GST_RTMP_DEFAULT_WINDOW_ACK_SIZE); send_set_buffer_length (connection, 0, 300); }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/tensordecoders/gstssdobjectdetector.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/tensordecoders/gstssdobjectdetector.c
Changed
@@ -484,7 +484,7 @@ GQuark label = 0; GstAnalyticsODMtd odmtd; - if (!get_float_at_index (tmeta->tensorsnumdetect_index, &scores_map, + if (!get_float_at_index (tmeta->tensorsscores_index, &scores_map, i, &score)) continue;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/transcode/gst-cpu-throttling-clock.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/transcode/gst-cpu-throttling-clock.c
Changed
@@ -83,14 +83,32 @@ } } +typedef struct +{ + GWeakRef cpu_throttling_clock; +} WaitData; + +static void +_delete_wait_data (WaitData * wait_data) +{ + g_weak_ref_clear (&wait_data->cpu_throttling_clock); + g_free (wait_data); +} + static gboolean gst_transcoder_adjust_wait_time (GstClock * sync_clock, GstClockTime time, - GstClockID id, GstCpuThrottlingClock * self) + GstClockID id, WaitData * wait_data) { struct rusage ru; float delta_usage, usage, coef; + GstCpuThrottlingClockPrivate *priv; - GstCpuThrottlingClockPrivate *priv = self->priv; + GstCpuThrottlingClock *self = + g_weak_ref_get (&wait_data->cpu_throttling_clock); + if (!self) + return FALSE; + + priv = self->priv; getrusage (RUSAGE_SELF, &ru); delta_usage = GST_TIMEVAL_TO_TIME (ru.ru_utime) - @@ -113,6 +131,7 @@ "Avg is %f (wanted %d) => %" GST_TIME_FORMAT, usage, self->priv->wanted_cpu_usage, GST_TIME_ARGS (priv->current_wait_time)); + g_object_unref (self); return TRUE; } @@ -126,6 +145,9 @@ GST_ERROR_OBJECT (clock, "Could not find any system clock" " to start the wait time evaluation task"); } else { + WaitData *wait_data = g_new (WaitData, 1); + g_weak_ref_init (&wait_data->cpu_throttling_clock, self); + self->priv->evaluate_wait_time = gst_clock_new_periodic_id (self->priv->sclock, gst_clock_get_time (self->priv->sclock), @@ -133,7 +155,7 @@ gst_clock_id_wait_async (self->priv->evaluate_wait_time, (GstClockCallback) gst_transcoder_adjust_wait_time, - (gpointer) self, NULL); + (gpointer) wait_data, (GDestroyNotify) _delete_wait_data); } } @@ -169,6 +191,7 @@ gst_poll_free (self->priv->timer); self->priv->timer = NULL; } + g_clear_object (&self->priv->sclock); G_OBJECT_CLASS (parent_class)->dispose (object); }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/gst/videoparsers/gstvp9parse.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/gst/videoparsers/gstvp9parse.c
Changed
@@ -37,7 +37,7 @@ GST_VP9_PARSE_ALIGN_NONE = 0, GST_VP9_PARSE_ALIGN_SUPER_FRAME, GST_VP9_PARSE_ALIGN_FRAME, -} GstVp9ParseAligment; +} GstVp9ParseAlignment; struct _GstVp9Parse { @@ -56,8 +56,8 @@ GstVp9BitDepth bit_depth; gboolean codec_alpha; - GstVp9ParseAligment in_align; - GstVp9ParseAligment align; + GstVp9ParseAlignment in_align; + GstVp9ParseAlignment align; GstVp9Parser *parser; gboolean update_caps; @@ -223,7 +223,7 @@ } static const gchar * -gst_vp9_parse_alignment_to_string (GstVp9ParseAligment align) +gst_vp9_parse_alignment_to_string (GstVp9ParseAlignment align) { switch (align) { case GST_VP9_PARSE_ALIGN_SUPER_FRAME: @@ -237,7 +237,7 @@ return NULL; } -static GstVp9ParseAligment +static GstVp9ParseAlignment gst_vp9_parse_alignment_from_string (const gchar * align) { if (!align) @@ -252,7 +252,7 @@ } static void -gst_vp9_parse_alignment_from_caps (GstCaps * caps, GstVp9ParseAligment * align) +gst_vp9_parse_alignment_from_caps (GstCaps * caps, GstVp9ParseAlignment * align) { *align = GST_VP9_PARSE_ALIGN_NONE; @@ -282,11 +282,11 @@ /* check downstream caps to configure format and alignment */ static void -gst_vp9_parse_negotiate (GstVp9Parse * self, GstVp9ParseAligment in_align, +gst_vp9_parse_negotiate (GstVp9Parse * self, GstVp9ParseAlignment in_align, GstCaps * in_caps) { GstCaps *caps; - GstVp9ParseAligment align = self->align; + GstVp9ParseAlignment align = self->align; caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (self)); GST_DEBUG_OBJECT (self, "allowed caps: %" GST_PTR_FORMAT, caps); @@ -574,6 +574,10 @@ * a replacement output buffer is provided anyway. */ gst_vp9_parse_parse_frame (self, &subframe, &frame_hdr); + /* Only the last frame of the super-fame should be displayed */ + if (i != superframe_info.frames_in_superframe - 1) + GST_BUFFER_FLAG_SET (subframe.buffer, GST_BUFFER_FLAG_DECODE_ONLY); + ret = gst_base_parse_finish_frame (parse, &subframe, frame_size); } else { /* FIXME: need to parse all frames belong to this superframe? */ @@ -819,7 +823,7 @@ { GstVp9Parse *self = GST_VP9_PARSE (parse); GstStructure *str; - GstVp9ParseAligment align; + GstVp9ParseAlignment align; GstCaps *in_caps = NULL; const gchar *profile;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/meson.build -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.26.3', + version : '1.26.4', meson_version : '>= 1.4', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/po/gst-plugins-bad-1.0.pot -> _service:download_url:gst-plugins-bad-1.26.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.26.3\n" +"Project-Id-Version: gst-plugins-bad-1.26.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-26 21:26+0100\n" +"POT-Creation-Date: 2025-07-16 15:27+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" @@ -61,7 +61,7 @@ msgid "Generated file has a larger preroll time than its streams duration" msgstr "" -#: gst/camerabin2/camerabingeneral.c:167 gst/camerabin2/gstcamerabin2.c:1885 +#: gst/camerabin2/camerabingeneral.c:167 gst/camerabin2/gstcamerabin2.c:1887 #: gst/camerabin2/gstdigitalzoom.c:283 gst/camerabin2/gstviewfinderbin.c:275 #, c-format msgid "Missing element '%s' - check your GStreamer installation."
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/po/gst-plugins-bad.pot -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.26.3\n" +"Project-Id-Version: gst-plugins-bad-1.26.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-26 21:26+0100\n" +"POT-Creation-Date: 2025-07-16 15:27+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" @@ -61,7 +61,7 @@ msgid "Generated file has a larger preroll time than its streams duration" msgstr "" -#: gst/camerabin2/camerabingeneral.c:167 gst/camerabin2/gstcamerabin2.c:1885 +#: gst/camerabin2/camerabingeneral.c:167 gst/camerabin2/gstcamerabin2.c:1887 #: gst/camerabin2/gstdigitalzoom.c:283 gst/camerabin2/gstviewfinderbin.c:275 #, c-format msgid "Missing element '%s' - check your GStreamer installation."
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/applemedia/vtenc.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/applemedia/vtenc.c
Changed
@@ -1163,7 +1163,6 @@ guint8 *codec_data; gsize codec_data_size; GstBuffer *codec_data_buf; - guint8 sps12; fmt = CMSampleBufferGetFormatDescription (sbuf); atoms = CMFormatDescriptionGetExtension (fmt, @@ -1189,10 +1188,27 @@ if (self->details->format_id == kCMVideoCodecType_HEVC || self->details->format_id == kCMVideoCodecType_HEVCWithAlpha) { - sps0 = codec_data1; - sps11 = codec_data12; - gst_codec_utils_h265_caps_set_level_tier_and_profile (caps, sps, 12); + if (codec_data_size < 1 + 12) { + GST_ERROR_OBJECT (self, + "Codec data malformed, can't parse profile and level"); + gst_buffer_unref (codec_data_buf); + gst_caps_unref (caps); + return FALSE; + } + + gst_codec_utils_h265_caps_set_level_tier_and_profile (caps, + &codec_data1, 12); } else { + guint8 sps3; + + if (codec_data_size < 1 + 3) { + GST_ERROR_OBJECT (self, + "Codec data malformed, can't parse profile and level"); + gst_buffer_unref (codec_data_buf); + gst_caps_unref (caps); + return FALSE; + } + sps0 = codec_data1; sps1 = codec_data2 & ~0xDF; sps2 = codec_data3;
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/d3d12/gstd3d12screencapturedevice.cpp -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/d3d12/gstd3d12screencapturedevice.cpp
Changed
@@ -23,19 +23,35 @@ #include "gstd3d12screencapturedevice.h" #include "gstd3d12screencapture.h" +#include "gstd3d12pluginutils.h" #include <gst/video/video.h> #include <wrl.h> #include <string.h> #include <string> #include <locale> #include <codecvt> +#include <set> +#include <vector> /* *INDENT-OFF* */ using namespace Microsoft::WRL; /* *INDENT-ON* */ -GST_DEBUG_CATEGORY_EXTERN (gst_d3d12_screen_capture_debug); -#define GST_CAT_DEFAULT gst_d3d12_screen_capture_debug +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static GstDebugCategory *cat = nullptr; + + GST_D3D12_CALL_ONCE_BEGIN { + cat = _gst_debug_category_new ("d3d12screencapture", + 0, "d3d12screencapture"); + } GST_D3D12_CALL_ONCE_END; + + return cat; +} +#endif static GstStaticCaps template_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES @@ -136,6 +152,70 @@ return elem; } +static void gst_d3d12_screen_capture_device_provider_update (gpointer provider); +static gpointer +gst_d3d12_screen_capture_device_provider_monitor_thread (gpointer user_data); + +/* *INDENT-OFF* */ +class MonitorNotificationManager +{ +public: + MonitorNotificationManager (const MonitorNotificationManager &) = delete; + MonitorNotificationManager& operator= (const MonitorNotificationManager &) = delete; + static MonitorNotificationManager * Inst() + { + static MonitorNotificationManager *inst = nullptr; + GST_D3D12_CALL_ONCE_BEGIN { + inst = new MonitorNotificationManager (); + } GST_D3D12_CALL_ONCE_END; + + return inst; + } + + void + Register (GstD3D12ScreenCaptureDeviceProvider* client) + { + std::lock_guard<std::mutex> lk(lock_); + clients_.insert(client); + } + + void + Unregister (GstD3D12ScreenCaptureDeviceProvider* client) + { + std::lock_guard<std::mutex> lk(lock_); + clients_.erase(client); + } + + void OnDisplayChange () + { + std::vector<gpointer> clients; + { + std::lock_guard<std::mutex> lk (lock_); + for (auto it : clients_) + clients.push_back (gst_object_ref (it)); + } + + for (auto it : clients) { + gst_d3d12_screen_capture_device_provider_update (it); + gst_object_unref (it); + } + } + +private: + MonitorNotificationManager() + { + thread_ = g_thread_new ("GstD3D12ScreenCaptureMonitor", + (GThreadFunc) gst_d3d12_screen_capture_device_provider_monitor_thread, + nullptr); + } + +private: + std::mutex lock_; + std::set<GstD3D12ScreenCaptureDeviceProvider *> clients_; + GThread *thread_; +}; +/* *INDENT-ON* */ + struct _GstD3D12ScreenCaptureDeviceProvider { GstDeviceProvider parent; @@ -144,17 +224,29 @@ G_DEFINE_TYPE (GstD3D12ScreenCaptureDeviceProvider, gst_d3d12_screen_capture_device_provider, GST_TYPE_DEVICE_PROVIDER); +static void gst_d3d12_screen_capture_device_provider_dispose (GObject * object); static GList *gst_d3d12_screen_capture_device_provider_probe (GstDeviceProvider * provider); +static gboolean +gst_d3d12_screen_capture_device_provider_start (GstDeviceProvider * provider); +static void +gst_d3d12_screen_capture_device_provider_stop (GstDeviceProvider * provider); static void gst_d3d12_screen_capture_device_provider_class_init (GstD3D12ScreenCaptureDeviceProviderClass * klass) { + auto object_class = G_OBJECT_CLASS (klass); auto provider_class = GST_DEVICE_PROVIDER_CLASS (klass); + object_class->dispose = gst_d3d12_screen_capture_device_provider_dispose; + provider_class->probe = GST_DEBUG_FUNCPTR (gst_d3d12_screen_capture_device_provider_probe); + provider_class->start = + GST_DEBUG_FUNCPTR (gst_d3d12_screen_capture_device_provider_start); + provider_class->stop = + GST_DEBUG_FUNCPTR (gst_d3d12_screen_capture_device_provider_stop); gst_device_provider_class_set_static_metadata (provider_class, "Direct3D12 Screen Capture Device Provider", @@ -168,6 +260,17 @@ { } +static void +gst_d3d12_screen_capture_device_provider_dispose (GObject * object) +{ + auto self = GST_D3D12_SCREEN_CAPTURE_DEVICE_PROVIDER (object); + + MonitorNotificationManager::Inst ()->Unregister (self); + + G_OBJECT_CLASS + (gst_d3d12_screen_capture_device_provider_parent_class)->dispose (object); +} + static gboolean get_monitor_name (const MONITORINFOEXW * info, DISPLAYCONFIG_TARGET_DEVICE_NAME * target) @@ -454,3 +557,155 @@ return devices; } + +static gboolean +gst_d3d12_screen_capture_device_is_in_list (GList * list, GstDevice * device) +{ + GList *iter; + GstStructure *s; + gboolean found = FALSE; + + s = gst_device_get_properties (device); + g_assert (s); + + for (iter = list; iter; iter = g_list_next (iter)) { + GstStructure *other_s; + + other_s = gst_device_get_properties (GST_DEVICE (iter->data)); + g_assert (other_s); + + found = gst_structure_is_equal (s, other_s); + + gst_structure_free (other_s); + if (found) + break; + } + + gst_structure_free (s); + + return found; +} + +static void +gst_d3d12_screen_capture_device_provider_update (gpointer self) +{ + auto provider = GST_DEVICE_PROVIDER_CAST (self); + GList *prev_devices = nullptr; + GList *new_devices = nullptr; + GList *to_add = nullptr; + GList *to_remove = nullptr; + GList *iter; +
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/decklink/gstdecklink.cpp -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/decklink/gstdecklink.cpp
Changed
@@ -1041,6 +1041,7 @@ caps = gst_caps_merge_structure (caps, s); } } + gst_structure_free (generic); } else { caps = gst_caps_merge_structure (caps, generic); }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codecav1dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codecav1dec.c
Changed
@@ -103,7 +103,6 @@ GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; gint min_pool_size; - gboolean has_videometa; gboolean streaming; gboolean copy_frames; gboolean need_negotiation; @@ -413,12 +412,13 @@ GstV4l2CodecAV1Dec *self = GST_V4L2_CODEC_AV1_DEC (decoder); GstCaps *caps = NULL; guint min = 0, num_bitstream; + gboolean has_videometa; g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -427,12 +427,34 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { + if (gst_video_is_dma_drm_caps (caps) && !has_videometa) { GST_ERROR_OBJECT (self, "DMABuf caps negotiated without the mandatory support of VideoMeta"); return FALSE; } + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->render_width, + self->render_height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = FALSE; + } + if (gst_query_get_n_allocation_pools (query) > 0) gst_query_parse_nth_allocation_pool (query, 0, NULL, NULL, &min, NULL); @@ -1166,28 +1188,6 @@ GST_ERROR_OBJECT (self, "Failed to negotiate with downstream"); return GST_FLOW_ERROR; } - - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->render_width, - self->render_height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = FALSE; - } } /*
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codech264dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codech264dec.c
Changed
@@ -109,7 +109,6 @@ GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; gint min_pool_size; - gboolean has_videometa; gboolean streaming; gboolean interlaced; gboolean need_sequence; @@ -454,6 +453,7 @@ GstV4l2CodecH264Dec *self = GST_V4L2_CODEC_H264_DEC (decoder); GstCaps *caps = NULL; guint min = 0, num_bitstream; + gboolean has_videometa; /* If we are streaming here, then it means there is nothing allocation * related in the new state and allocation can be ignored */ @@ -464,7 +464,7 @@ g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -473,12 +473,34 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { + if (gst_video_is_dma_drm_caps (caps) && !has_videometa) { GST_ERROR_OBJECT (self, "DMABuf caps negotiated without the mandatory support of VideoMeta"); return FALSE; } + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->display_width, + self->display_height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = FALSE; + } + if (gst_query_get_n_allocation_pools (query) > 0) gst_query_parse_nth_allocation_pool (query, 0, NULL, NULL, &min, NULL); @@ -968,28 +990,6 @@ } } - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->display_width, - self->display_height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = FALSE; - } - return GST_FLOW_OK; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c
Changed
@@ -109,7 +109,6 @@ GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; gint min_pool_size; - gboolean has_videometa; gboolean streaming; gboolean copy_frames; gboolean need_sequence; @@ -484,6 +483,7 @@ GstV4l2CodecH265Dec *self = GST_V4L2_CODEC_H265_DEC (decoder); GstCaps *caps = NULL; guint min = 0, num_bitstream; + gboolean has_videometa; if (self->streaming) goto no_internal_changes; @@ -492,7 +492,7 @@ g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -501,10 +501,40 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { - GST_ERROR_OBJECT (self, - "DMABuf caps negotiated without the mandatory support of VideoMeta"); - return FALSE; + if (gst_video_is_dma_drm_caps (caps)) { + if (!has_videometa) { + GST_ERROR_OBJECT (self, + "DMABuf caps negotiated without the mandatory support of VideoMeta"); + return FALSE; + } + + if (self->need_crop) { + GST_ERROR_OBJECT (self, + "Frame cropping is not supported when DMABuf caps is negotiated."); + return FALSE; + } + } + + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->display_width, + self->display_height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = self->need_crop; } if (gst_query_get_n_allocation_pools (query) > 0) @@ -949,10 +979,12 @@ self->crop_rect_x = sps->crop_rect_x; self->crop_rect_y = sps->crop_rect_y; - /* conformance_window_flag could be set but with zeroed - * parameters so check if we really need to crop */ - self->need_crop |= self->crop_rect_width != sps->width; - self->need_crop |= self->crop_rect_height != sps->height; + /* + * Conformance_window_flag could be set but with zeroed + * parameters so check if we really need to crop. We only need + * to crop if the x/y are not zero, otherwise it can be handled by + * GstVideoMeta in a zero-copy fashion. + */ self->need_crop |= self->crop_rect_x != 0; self->need_crop |= self->crop_rect_y != 0; } @@ -993,28 +1025,6 @@ } } - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->display_width, - self->display_height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = self->need_crop; - } - return GST_FLOW_OK; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codecmpeg2dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codecmpeg2dec.c
Changed
@@ -119,7 +119,6 @@ GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; gint min_pool_size; - gboolean has_videometa; gboolean streaming; GstMemory *bitstream; @@ -376,6 +375,7 @@ GstV4l2CodecMpeg2Dec *self = GST_V4L2_CODEC_MPEG2_DEC (decoder); GstCaps *caps = NULL; guint min = 0, num_bitstream; + gboolean has_videometa; /* If we are streaming here, then it means there is nothing allocation * related in the new state and allocation can be ignored */ @@ -386,7 +386,7 @@ g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -395,12 +395,34 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { + if (gst_video_is_dma_drm_caps (caps) && !has_videometa) { GST_ERROR_OBJECT (self, "DMABuf caps negotiated without the mandatory support of VideoMeta"); return FALSE; } + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, + self->height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = FALSE; + } + if (gst_query_get_n_allocation_pools (query) > 0) gst_query_parse_nth_allocation_pool (query, 0, NULL, NULL, &min, NULL); @@ -529,28 +551,6 @@ self->need_quantiser = TRUE; } - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, - self->height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = FALSE; - } - return GST_FLOW_OK; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codecvp8dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codecvp8dec.c
Changed
@@ -123,7 +123,6 @@ GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; gint min_pool_size; - gboolean has_videometa; gboolean streaming; gboolean copy_frames; @@ -337,6 +336,7 @@ GstCaps *caps = NULL; guint min = 0; guint num_bitstream; + gboolean has_videometa; if (self->streaming) goto no_internal_changes; @@ -345,7 +345,7 @@ g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -354,12 +354,36 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { + if (gst_video_is_dma_drm_caps (caps) && !has_videometa) { GST_ERROR_OBJECT (self, "DMABuf caps negotiated without the mandatory support of VideoMeta"); return FALSE; } + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, + self->height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = FALSE; + } + + + if (gst_query_get_n_allocation_pools (query) > 0) gst_query_parse_nth_allocation_pool (query, 0, NULL, NULL, &min, NULL); @@ -563,28 +587,6 @@ } } - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, - self->height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = FALSE; - } - return GST_FLOW_OK; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/sys/v4l2codecs/gstv4l2codecvp9dec.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/sys/v4l2codecs/gstv4l2codecvp9dec.c
Changed
@@ -123,7 +123,6 @@ GstV4l2CodecAllocator *sink_allocator; GstV4l2CodecAllocator *src_allocator; GstV4l2CodecPool *src_pool; - gboolean has_videometa; gboolean streaming; gboolean copy_frames; gboolean need_negotiation; @@ -610,12 +609,13 @@ GstCaps *caps = NULL; guint min = 0; guint num_bitstream; + gboolean has_videometa; g_clear_object (&self->src_pool); g_clear_object (&self->src_allocator); g_clear_object (&self->sink_allocator); - self->has_videometa = gst_query_find_allocation_meta (query, + has_videometa = gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); gst_query_parse_allocation (query, &caps, NULL); @@ -624,12 +624,34 @@ return FALSE; } - if (gst_video_is_dma_drm_caps (caps) && !self->has_videometa) { + if (gst_video_is_dma_drm_caps (caps) && !has_videometa) { GST_ERROR_OBJECT (self, "DMABuf caps negotiated without the mandatory support of VideoMeta"); return FALSE; } + /* Check if we can zero-copy buffers */ + if (!has_videometa) { + GstVideoInfo ref_vinfo; + gint i; + + gst_video_info_set_format (&ref_vinfo, + GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, + self->height); + + for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { + if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || + self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { + GST_WARNING_OBJECT (self, + "GstVideoMeta support required, copying frames."); + self->copy_frames = TRUE; + break; + } + } + } else { + self->copy_frames = FALSE; + } + if (gst_query_get_n_allocation_pools (query) > 0) gst_query_parse_nth_allocation_pool (query, 0, NULL, NULL, &min, NULL); @@ -775,28 +797,6 @@ } } - /* Check if we can zero-copy buffers */ - if (!self->has_videometa) { - GstVideoInfo ref_vinfo; - gint i; - - gst_video_info_set_format (&ref_vinfo, - GST_VIDEO_INFO_FORMAT (&self->vinfo_drm.vinfo), self->width, - self->height); - - for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&self->vinfo_drm.vinfo); i++) { - if (self->vinfo_drm.vinfo.stridei != ref_vinfo.stridei || - self->vinfo_drm.vinfo.offseti != ref_vinfo.offseti) { - GST_WARNING_OBJECT (self, - "GstVideoMeta support required, copying frames."); - self->copy_frames = TRUE; - break; - } - } - } else { - self->copy_frames = FALSE; - } - return GST_FLOW_OK; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/elements/avtpcrfcheck.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/elements/avtpcrfcheck.c
Changed
@@ -27,6 +27,11 @@ #include <gst/check/gstharness.h> #include "../../../ext/avtp/gstavtpcrfutil.h" +#include <unistd.h> +#include <arpa/inet.h> +#include <netinet/ether.h> +#include <sys/socket.h> + #define STREAM_ID 0xDEADC0DEDEADC0DE static GstHarness * @@ -239,6 +244,19 @@ GST_END_TEST; +static gboolean +packet_socket_allowed (void) +{ + int fd; + + fd = socket (AF_PACKET, SOCK_DGRAM, htons (ETH_P_ALL)); + if (fd < 0) + return FALSE; + + close (fd); + return TRUE; +} + static Suite * avtpcrfcheck_suite (void) { @@ -247,9 +265,11 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_properties); - tcase_add_test (tc_chain, test_crf_cvf_data); - tcase_add_test (tc_chain, test_crf_aaf_data); - tcase_add_test (tc_chain, test_crf_period_zero); + if (packet_socket_allowed ()) { + tcase_add_test (tc_chain, test_crf_cvf_data); + tcase_add_test (tc_chain, test_crf_aaf_data); + tcase_add_test (tc_chain, test_crf_period_zero); + } return s; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/elements/avtpcrfsync.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/elements/avtpcrfsync.c
Changed
@@ -29,6 +29,11 @@ #include <gst/check/gstharness.h> #include "../../../ext/avtp/gstavtpcrfutil.h" +#include <unistd.h> +#include <arpa/inet.h> +#include <netinet/ether.h> +#include <sys/socket.h> + #define STREAM_ID 0xDEADC0DEDEADC0DE struct buffer_tstamps @@ -369,6 +374,19 @@ GST_END_TEST; +static gboolean +packet_socket_allowed (void) +{ + int fd; + + fd = socket (AF_PACKET, SOCK_DGRAM, htons (ETH_P_ALL)); + if (fd < 0) + return FALSE; + + close (fd); + return TRUE; +} + static Suite * avtpcrfsync_suite (void) { @@ -382,9 +400,11 @@ tcase_add_test (tc_chain, test_properties); tcase_add_test (tc_chain, test_set_avtp_tstamp); tcase_add_test (tc_chain, test_set_avtp_mr_bit); - tcase_add_test (tc_chain, test_crf_cvf_data); - tcase_add_test (tc_chain, test_crf_aaf_data); - tcase_add_test (tc_chain, test_crf_period_zero); + if (packet_socket_allowed ()) { + tcase_add_test (tc_chain, test_crf_cvf_data); + tcase_add_test (tc_chain, test_crf_aaf_data); + tcase_add_test (tc_chain, test_crf_period_zero); + } return s; }
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/elements/avtpcvfpay.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/elements/avtpcvfpay.c
Changed
@@ -316,7 +316,7 @@ gst_caps_unref (caps); /* Send a 'codec_data' too small */ - codec_data = gst_buffer_new_allocate (NULL, 6, NULL); + codec_data = gst_buffer_new_wrapped (g_malloc0 (6), 6); caps = gst_caps_new_simple ("video/x-h264", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au",
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/elements/h266parse.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/elements/h266parse.c
Changed
@@ -1190,7 +1190,7 @@ buf1 = composite_buffer (100, 0, 5, h266_vps, sizeof (h266_vps), h266_sps, sizeof (h266_sps), h266_pps, sizeof (h266_pps), - h266_prefix_aps, sizeof (h266_prefix_aps), h266_idr, 20); + h266_prefix_aps, sizeof (h266_prefix_aps), h266_idr, (gsize) 20); buf2 = composite_buffer (100, 0, 2, h266_idr + 20, sizeof (h266_idr) - 20, h266_suffix_sei, sizeof (h266_suffix_sei));
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/elements/webrtcbin.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/elements/webrtcbin.c
Changed
@@ -1531,6 +1531,9 @@ gst_registry_add_feature (registry, nicesrc); if (nicesink) gst_registry_add_feature (registry, nicesink); + + gst_clear_object (&nicesrc); + gst_clear_object (&nicesink); } GST_END_TEST; @@ -1563,6 +1566,9 @@ gst_registry_add_feature (registry, nicesrc); if (nicesink) gst_registry_add_feature (registry, nicesink); + + gst_clear_object (&nicesrc); + gst_clear_object (&nicesink); } GST_END_TEST; @@ -6654,18 +6660,13 @@ dtlssrtpdec); } - if (nicesrc) - gst_object_unref (nicesrc); - if (nicesink) - gst_object_unref (nicesink); - if (dtlssrtpdec) - gst_object_unref (dtlssrtpdec); - if (dtlssrtpenc) - gst_object_unref (dtlssrtpenc); - if (sctpenc) - gst_object_unref (sctpenc); - if (sctpdec) - gst_object_unref (sctpdec); + gst_clear_object (&nicesrc); + gst_clear_object (&nicesink); + gst_clear_object (&dtlssrtpdec); + gst_clear_object (&dtlssrtpenc); + gst_clear_object (&sctpenc); + gst_clear_object (&sctpdec); + gst_clear_object (&vp8enc); suite_add_tcase (s, tc);
View file
_service:download_url:gst-plugins-bad-1.26.3.tar.xz/tests/check/libs/analyticsmeta.c -> _service:download_url:gst-plugins-bad-1.26.4.tar.xz/tests/check/libs/analyticsmeta.c
Changed
@@ -1450,7 +1450,7 @@ fail_unless (gst_buffer_pool_acquire_buffer (mpool, &mbuf, NULL) == GST_FLOW_OK); - gst_buffer_fill (mbuf, 0, post_proc_segmasks, 32 * 24); + gst_buffer_fill (mbuf, 0, post_proc_segmasks, 16 * 12); /* Masks contain 5 region types 0,1,2,3,4. We intentionnally change the * order of region ids relative to their appearance in the output to
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
.