Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 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: + v4l2codecs: h265dec: Avoid cropping for zero top/left alignments + If the conformance window does not requires cropping the top or left of the + window, we can use GstVideoMeta to crop in a zero-copy fashion. If a copy + is needed, the frame copy can also handle it, and is a lot faster. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9315> + +2025-06-27 09:49:00 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codecav1dec.c: + * sys/v4l2codecs/gstv4l2codech264dec.c: + * sys/v4l2codecs/gstv4l2codech265dec.c: + * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: + * sys/v4l2codecs/gstv4l2codecvp8dec.c: + * sys/v4l2codecs/gstv4l2codecvp9dec.c: + v4l2codecs: dec: Remove has_videometa member + Now that the code is properly located, this member is not needed + anymore. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9315> + +2025-06-27 09:37:06 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codecav1dec.c: + * sys/v4l2codecs/gstv4l2codech264dec.c: + * sys/v4l2codecs/gstv4l2codech265dec.c: + * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: + * sys/v4l2codecs/gstv4l2codecvp8dec.c: + * sys/v4l2codecs/gstv4l2codecvp9dec.c: + v4l2codecs: dec: Move copy_frames logic inside decide_allocation + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9315> + +2025-06-22 03:23:59 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/avtp/gstavtpvfdepaybase.c: + avtp: Fix memory leak + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9314> + +2025-06-22 03:22:27 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/srt/gstsrtsrc.c: + srt: Fix warning about uninitialized memory + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9314> + +2025-06-22 03:20:35 -0400 Doug Nazar <nazard@nazar.ca> + + * gst-libs/gst/codecparsers/gstvc1parser.c: + vc1parser: Fix warning about printing uninitialized variables + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9314> + +2025-06-22 03:16:55 -0400 Doug Nazar <nazard@nazar.ca> + + * gst/proxy/gstproxysrc.c: + proxysrc: Fix order freeing pads + Free pads from bottom of parent tree first else with GST_DEBUG + enabled it would access freed memory printing object info. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9314> + +2025-06-22 03:14:39 -0400 Doug Nazar <nazard@nazar.ca> + + * tests/check/elements/avtpcvfpay.c: + avtpcvfpay: tests: Initialize codec memory + If GST_DEBUG was enabled we would print unintialized memory + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9314> + +2025-06-25 09:30:15 -0600 David Monge <david.monge@ridgerun.com> + + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: fix double free caused by shared PMT descriptor + The PMT descriptor was owned by the stream object but also added to + the descriptors array without copying, leading to a double free and + core dump during cleanup + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9303> + +2025-06-26 21:29:34 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development after 1.26.3 + === release 1.26.3 === 2025-06-26 21:25:24 +0100 Tim-Philipp Müller <tim@centricular.com>
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 release series.
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); - -error: - gst_clear_mini_object ((GstMiniObject **) & cmd); - gst_clear_mini_object ((GstMiniObject **) & fence); - return FALSE; -} - -/** * gst_vulkan_full_screen_quad_enable_blend: * @self: the #GstVulkanFullScreenQuad * @enable_blend: whether to enable blending @@ -1364,19 +1310,8 @@ clear_render_pass (self); } -/** - * gst_vulkan_full_screen_quad_prepare_draw: - * @self: the #GstVulkanFullScreenQuad - * @fence: a #GstVulkanFence that will be signalled after submission - * @error: a #GError filled on error - * - * Returns: whether the necessary information could be generated for drawing a - * frame. - * - * Since: 1.18 - */ -gboolean -gst_vulkan_full_screen_quad_prepare_draw (GstVulkanFullScreenQuad * self, +static gboolean +prepare_draw_internal (GstVulkanFullScreenQuad * self, GstVulkanFence * fence, GError ** error) { GstVulkanFullScreenQuadPrivate *priv; @@ -1394,7 +1329,7 @@ return FALSE; if (!ensure_vertex_data (self, error)) - goto error; + return FALSE; if (!self->descriptor_cache) if (!create_descriptor_pool (self, error)) @@ -1455,17 +1390,31 @@ } /** - * gst_vulkan_full_screen_quad_fill_command_buffer: - * @self: a #GstVulkanFullScreenQuad - * @cmd: the #GstVulkanCommandBuffer to fill with commands - * @error: a #GError to fill on error + * gst_vulkan_full_screen_quad_prepare_draw: + * @self: the #GstVulkanFullScreenQuad + * @fence: a #GstVulkanFence that will be signalled after submission + * @error: a #GError filled on error * - * Returns: whether @cmd could be filled with the necessary commands + * Returns: whether the necessary information could be generated for drawing a + * frame. * * Since: 1.18 */ gboolean -gst_vulkan_full_screen_quad_fill_command_buffer (GstVulkanFullScreenQuad * self, +gst_vulkan_full_screen_quad_prepare_draw (GstVulkanFullScreenQuad * self, + GstVulkanFence * fence, GError ** error) +{ + gboolean ret; + + GST_OBJECT_LOCK (self); + ret = prepare_draw_internal (self, fence, error); + GST_OBJECT_UNLOCK (self); + + return ret; +} + +static gboolean +fill_command_buffer_internal (GstVulkanFullScreenQuad * self, GstVulkanCommandBuffer * cmd, GstVulkanFence * fence, GError ** error) { GstVulkanFullScreenQuadPrivate *priv; @@ -1619,20 +1568,34 @@ } /** - * gst_vulkan_full_screen_quad_submit: + * gst_vulkan_full_screen_quad_fill_command_buffer: * @self: a #GstVulkanFullScreenQuad - * @cmd: (transfer full): a #GstVulkanCommandBuffer to submit - * @fence: a #GstVulkanFence to signal on completion + * @cmd: the #GstVulkanCommandBuffer to fill with commands * @error: a #GError to fill on error * - * Returns: whether @cmd could be submitted to the queue + * @cmd must be locked with gst_vulkan_command_buffer_lock(). + * + * Returns: whether @cmd could be filled with the necessary commands * * Since: 1.18 */ gboolean -gst_vulkan_full_screen_quad_submit (GstVulkanFullScreenQuad * self, +gst_vulkan_full_screen_quad_fill_command_buffer (GstVulkanFullScreenQuad * self, GstVulkanCommandBuffer * cmd, GstVulkanFence * fence, GError ** error) { + gboolean ret; + + GST_OBJECT_LOCK (self); + ret = fill_command_buffer_internal (self, cmd, fence, error); + GST_OBJECT_UNLOCK (self); + + return ret; +} + +static gboolean +submit_internal (GstVulkanFullScreenQuad * self, GstVulkanCommandBuffer * cmd, + GstVulkanFence * fence, GError ** error) +{ VkResult err; g_return_val_if_fail (GST_IS_VULKAN_FULL_SCREEN_QUAD (self), FALSE); @@ -1663,6 +1626,17 @@ goto error; } + return TRUE; + +error: + return FALSE; +} + + +static void +submit_final_unlocked (GstVulkanFullScreenQuad * self, + GstVulkanCommandBuffer * cmd, GstVulkanFence * fence) +{ gst_vulkan_trash_list_add (self->trash_list, gst_vulkan_trash_list_acquire (self->trash_list, fence, gst_vulkan_trash_mini_object_unref, GST_MINI_OBJECT_CAST (cmd))); @@ -1672,10 +1646,124 @@ if (self->last_fence) gst_vulkan_fence_unref (self->last_fence); self->last_fence = gst_vulkan_fence_ref (fence); +} + +/** + * gst_vulkan_full_screen_quad_submit: + * @self: a #GstVulkanFullScreenQuad + * @cmd: (transfer full): a #GstVulkanCommandBuffer to submit + * @fence: a #GstVulkanFence to signal on completion + * @error: a #GError to fill on error + * + * Returns: whether @cmd could be submitted to the queue + * + * Since: 1.18 + */ +gboolean +gst_vulkan_full_screen_quad_submit (GstVulkanFullScreenQuad * self, + GstVulkanCommandBuffer * cmd, GstVulkanFence * fence, GError ** error) +{ + if (!submit_internal (self, cmd, fence, error)) + return FALSE; + + GST_OBJECT_LOCK (self); + submit_final_unlocked (self, cmd, fence); + GST_OBJECT_UNLOCK (self); + + return TRUE; +} + +/** + * 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; + + GST_OBJECT_LOCK (self); + if (!prepare_draw_internal (self, fence, error)) { + GST_OBJECT_UNLOCK (self); + goto error; + } + + if (!(cmd = gst_vulkan_command_pool_create (self->cmd_pool, error))) { + GST_OBJECT_UNLOCK (self); + 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) { + GST_OBJECT_UNLOCK (self); + goto unlock_error; + } + } + + if (!fill_command_buffer_internal (self, cmd, fence, error)) { + GST_OBJECT_UNLOCK (self); + goto unlock_error; + } + + err = vkEndCommandBuffer (cmd->cmd); + gst_vulkan_command_buffer_unlock (cmd); + if (gst_vulkan_error_to_g_error (err, error, "vkEndCommandBuffer") < 0) { + GST_OBJECT_UNLOCK (self); + goto error; + } + + if (!submit_internal (self, cmd, fence, error)) { + GST_OBJECT_UNLOCK (self); + goto error; + } + + submit_final_unlocked (self, cmd, fence); + GST_OBJECT_UNLOCK (self); + + gst_vulkan_fence_unref (fence); return TRUE; +unlock_error: + gst_vulkan_command_buffer_unlock (cmd); + error: + gst_clear_mini_object ((GstMiniObject **) & cmd); + gst_clear_mini_object ((GstMiniObject **) & fence); return FALSE; }
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; + + GST_DEBUG_OBJECT (self, "Device updated"); + + GST_OBJECT_LOCK (provider); + prev_devices = g_list_copy_deep (provider->devices, + (GCopyFunc) gst_object_ref, nullptr); + GST_OBJECT_UNLOCK (provider); + + new_devices = gst_d3d12_screen_capture_device_provider_probe (provider); + + /* Ownership of GstDevice for gst_device_provider_device_add() + * and gst_device_provider_device_remove() is a bit complicated. + * Remove floating reference here for things to be clear */ + for (iter = new_devices; iter; iter = g_list_next (iter)) + gst_object_ref_sink (iter->data); + + /* Check newly added devices */ + for (iter = new_devices; iter; iter = g_list_next (iter)) { + if (!gst_d3d12_screen_capture_device_is_in_list (prev_devices, + GST_DEVICE (iter->data))) { + to_add = g_list_prepend (to_add, gst_object_ref (iter->data)); + } + } + + /* Check removed device */ + for (iter = prev_devices; iter; iter = g_list_next (iter)) { + if (!gst_d3d12_screen_capture_device_is_in_list (new_devices, + GST_DEVICE (iter->data))) { + to_remove = g_list_prepend (to_remove, gst_object_ref (iter->data)); + } + } + + for (iter = to_remove; iter; iter = g_list_next (iter)) + gst_device_provider_device_remove (provider, GST_DEVICE (iter->data)); + + for (iter = to_add; iter; iter = g_list_next (iter)) + gst_device_provider_device_add (provider, GST_DEVICE (iter->data)); + + if (prev_devices) + g_list_free_full (prev_devices, (GDestroyNotify) gst_object_unref); + + if (to_add) + g_list_free_full (to_add, (GDestroyNotify) gst_object_unref); + + if (to_remove) + g_list_free_full (to_remove, (GDestroyNotify) gst_object_unref); +} + +static gboolean +gst_d3d12_screen_capture_device_provider_start (GstDeviceProvider * provider) +{ + auto self = GST_D3D12_SCREEN_CAPTURE_DEVICE_PROVIDER (provider); + + auto devices = gst_d3d12_screen_capture_device_provider_probe (provider); + if (devices) { + GList *iter; + for (iter = devices; iter; iter = g_list_next (iter)) + gst_device_provider_device_add (provider, GST_DEVICE (iter->data)); + + g_list_free (devices); + } + + MonitorNotificationManager::Inst ()->Register (self); + + return TRUE; +} + +static void +gst_d3d12_screen_capture_device_provider_stop (GstDeviceProvider * provider) +{ + auto self = GST_D3D12_SCREEN_CAPTURE_DEVICE_PROVIDER (provider); + + MonitorNotificationManager::Inst ()->Unregister (self); +} + +static LRESULT CALLBACK +gst_d3d12_screen_capture_device_provider_wnd_proc (HWND hwnd, + UINT msg, WPARAM wparam, LPARAM lparam) +{ + if (msg == WM_DISPLAYCHANGE) { + MonitorNotificationManager::Inst ()->OnDisplayChange (); + return 0; + } + + return DefWindowProcW (hwnd, msg, wparam, lparam); +} + +static gpointer +gst_d3d12_screen_capture_device_provider_monitor_thread (gpointer user_data) +{ + static const wchar_t HWND_CLASS_NAME = + L"GstD3D12ScreenCaptureDeviceProvider"; + + GST_D3D12_CALL_ONCE_BEGIN { + WNDCLASSW wc = { }; + wc.lpfnWndProc = gst_d3d12_screen_capture_device_provider_wnd_proc; + wc.hInstance = GetModuleHandle (nullptr); + wc.lpszClassName = HWND_CLASS_NAME; + RegisterClassW (&wc); + } GST_D3D12_CALL_ONCE_END; + + auto hwnd = CreateWindowExW (0, HWND_CLASS_NAME, L"", 0, + 0, 0, 0, 0, nullptr, nullptr, GetModuleHandle (nullptr), nullptr); + + MSG msg; + while (GetMessage (&msg, nullptr, 0, 0)) { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + + CloseWindow (hwnd); + + return nullptr; +}
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
.