Projects
home:zaitor:branches: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 2
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Tue Dec 30 09:51:15 UTC 2025 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.26.10 + +------------------------------------------------------------------- Fri Dec 12 16:56:12 UTC 2025 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.26.9
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.9 +Version: 1.26.10 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ChangeLog -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ChangeLog
Changed
@@ -1,3 +1,298 @@ +=== release 1.26.10 === + +2025-12-25 15:44:26 +0100 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.26.10 + +2025-12-18 18:23:56 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst-libs/gst/codecs/gsth265decoder.c: + * gst-libs/gst/codecs/gsth266decoder.c: + codecs: h265/h266dec: Do not try to output failed frames + "end_picture()" virtual function may fail due to various reason, one of them + being that a flush is happening. Since the picture failed, the subclass may have + flushed any picture data from it, and will likely throw an error or crash when + trying to output. + These two decoder simply didn't care unlike all the other. Use similar technique + as used in h264dec, which is to mark the frame as not for output. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10431> + +2025-12-18 15:38:55 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codecav1dec.c: + * sys/v4l2codecs/gstv4l2codecvp9dec.c: + v4l2codecs: av1/vp9: Properly propagate flow ret such as FLUSHING + Some of the decoder would simply turn any flow return into an ERROR, which + can be noisy when the original flow return is FLUSHING due to a normal flush + condition. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10431> + +2025-12-18 15:37:38 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codecav1dec.c: + * sys/v4l2codecs/gstv4l2codecvp8dec.c: + v4l2codecs: av1/vp9: Fix request leak on error + The request was not being freed property if there was an error. Typically a + flush / seek operation could cause this. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10431> + +2025-12-18 15:35:07 -0500 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2codecs/gstv4l2codech264dec.c: + * sys/v4l2codecs/gstv4l2codech265dec.c: + * sys/v4l2codecs/gstv4l2codecmpeg2dec.c: + * sys/v4l2codecs/gstv4l2codecvp8dec.c: + v4l2codecs: Assert and return on missing request + The base class isn't supposed to output a picture that has never been + requested or for which the request has been removed by the flush operation. + Make sure to crash this kind of programming error with an assert, while + protecting against crash in this case. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10431> + +2025-12-17 14:24:31 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/mxf/mxfdemux.c: + * gst/mxf/mxfdemux.h: + mxfdemux: Simplify timestamp tracking + Apart from keeping less state around this also calculates more accurate + timestamps because of tracking everything in terms of edit units instead of + nanoseconds. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10406> + +2025-12-17 11:57:01 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/mxf/mxfdemux.h: + mxfdemux: Switch edit unit position tracking to unsigned integers + These can never become negative and the only negative number in use is + -1 for "unset", which maps equally well to G_MAXUINT64. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10406> + +2025-12-11 21:53:04 -0500 Aaron Boxer <aaron.boxer@collabora.com> + + * gst-libs/gst/play/gstplay.c: + play: do not call gst_pb_utils_get_codec_description if caps are not fixed + this avoids throwing a (harmless) exception when stream selection is + called before pipeline is linked + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10394> + +2025-12-17 18:58:14 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/aiff/aiffparse.c: + * gst/aiff/aiffparse.h: + aiffparse: Remove segment closing on non-flushing seeks + That's a 0.10 leftover and not necessary anymore, and can confuse downstream + elements unnecessarily. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10400> + +2025-12-17 18:53:26 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/mxf/mxfdemux.c: + * gst/mxf/mxfdemux.h: + mxfdemux: Remove segment closing on non-flushing seeks + That's a 0.10 leftover and not necessary anymore, and can confuse downstream + elements unnecessarily. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4803 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10400> + +2025-12-17 10:23:25 +0900 jeongmin kwak <jeongmin.kwak@lge.com> + + * ext/aes/gstaesdec.c: + aesdec: use gsize for buffer sizes and fix log format + Replace casts with gsize in gst_aes_dec_prepare_output_buffer() and use + G_GSIZE_FORMAT for logging to avoid truncation and warnings. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10398> + +2025-11-28 14:40:49 +0900 jeongmin kwak <jeongmin.kwak@lge.com> + + * ext/aes/gstaesenc.c: + aesenc: use gsize for buffer sizes and fix log format + Replace casts with gsize in gst_aes_enc_prepare_output_buffer() and use + G_GSIZE_FORMAT for logging to avoid truncation and warnings. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10398> + +2025-12-17 11:07:18 +0900 jeongmin kwak <jeongmin.kwak@lge.com> + + * ext/hls/gsthlssink.c: + hlssink: Guard NULL structure and use gst_structure_has_name() + Prevent NULL dereference by checking gst_message_get_structure() + result before accessing fields. Replace strcmp() with + gst_structure_has_name() for safe structure name comparison. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10395> + +2025-12-16 13:05:19 +0100 François Laignel <francois@centricular.com> + + * gst/mxf/mxfdemux.c: + mxfdemux: send event SegmentDone for segment seeks + ... instead of sending an EOS event in that case. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10391> + +2025-12-13 11:29:03 +0200 Sebastian Dröge <sebastian@centricular.com> + + * ext/fdkaac/gstfdkaacdec.c: + fdkaacdec: Invalidate channel_types/indices when setting a known config + Otherwise switching from an unknown config (which is then mapped one by one) to + a known config and then back to the same unknown config makes it use invalid + cached channel positions. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4791 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10373> + +2025-11-26 20:09:20 +0100 Jakub Adam <jakub.adam@collabora.com> + + * ext/dtls/gstdtlsdec.c: + dtlsdec: mark generated cert agent with GST_OBJECT_FLAG_MAY_BE_LEAKED + So that it is ignored by the leaks tracer. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10371> + +2025-12-09 11:12:12 +0100 Hyunjun Ko <zzoon@igalia.com> + + * gst-libs/gst/vulkan/gstvkformat.c: + vkformat: Add VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 format + Add support for VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, + which is the Vulkan equivalent of P010. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10360> + +2025-12-04 16:40:25 -0600 Brad Reitmeyer <brad.reitmeyer@resi.io> + + * sys/decklink/gstdecklinkvideosink.cpp: + decklinkvideosink: Fix frame completion callbacks for firmware 14.3+ + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10322> + +2025-12-06 10:25:21 +0000 Philippe Normand <philn@igalia.com> + + * ext/webrtc/transportstream.c: + * gst-libs/gst/webrtc/nice/nice.c: + webrtc: Keep a ref of the ICEStream in the TransportStream + By doing so we avoid potential race conditions. The libnice ICE implementation + was then adapted to comply with the transfer-full return value of the + `gst_webrtc_ice_add_stream()` vfunc. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10318> + +2025-12-05 09:19:34 +0200 Sebastian Dröge <sebastian@centricular.com> + + * sys/va/gstvabasedec.c: + vabasedec: Don't assert when negotiating based on a gap event before the first buffer + Instead fall back to the video decoder base class `decide_allocation()` until + the minimum number of required buffers is known, which is usually the case after + the codec parameters (sequence header) are read. + While the minimum number of buffers is known ahead of time for some codecs like AV1, + we still only set it once the codec parameters are parsed as otherwise an unused + VA buffer pool will already be created together with surface allocations for the + gap event. This pool will be deallocated again shortly afterwards, just to + create a new pool with the correct configuration. + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4779 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10302> + +2025-12-04 12:57:26 +0800 Yun Liu <yun.m.liu@intel.com> + + * gst-libs/gst/analytics/meson.build: + analytics: Fix build on MSVC by using libm dependency + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10288> + +2025-10-08 02:31:50 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlbasesink.c: + * ext/curl/gstcurldefaults.h: + * ext/curl/gstcurlhttpsink.c: + * ext/curl/gstcurlhttpsrc.c: + curl: Ensure set_opt() is called with a long value + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2025-03-16 20:23:48 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlhttpsrc.c: + curl: Fix pushing incorrect buffers after seek + We must stop any existing transfer when seeking or we may push buffers + from the old request that downstream isn't expecting, causing decode errors. + Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/579 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2025-03-16 20:17:58 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlhttpsrc.c: + curl: Cleanup logging of received headers + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2021-05-11 23:54:49 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlhttpsrc.c: + curl: Fix content size reported + During a range request, the Content-Length header only reports the + length transfered. The Content-Range header should report the total + length if known. The current code would inconsistently use either + or race and use the wrong length. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2025-06-12 11:45:33 -0300 L. E. Segovia <amy@amyspark.me> + + * ext/curl/gstcurlhttpsrc.c: + curl: Recover missing comment + See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8974#note_2955585 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2025-05-13 12:22:08 +0000 L. E. Segovia <amy@centricular.com> + + * ext/curl/gstcurlhttpsrc.c: + curl: Fix wrong format specifier for macOS + > ../ext/curl/gstcurlhttpsrc.c:1331:11: error: format specifies type + > unsigned long long' but the argument has type 'curl_off_t' (aka 'long') -Werror,-Wformat + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2021-05-11 23:58:54 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlhttpsrc.c: + * ext/curl/gstcurlhttpsrc.h: + curl: remove unused content_type field + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2021-05-08 21:23:46 -0400 Doug Nazar <nazard@nazar.ca> + + * ext/curl/gstcurlhttpsrc.c: + * tests/check/elements/curlhttpsrc.c: + curl: Reset request status on uri change + We need to stop the current transfer and start a new one if the uri + was changed. Also fix the 'test_range_get' to do 20 requests, instead + of one request and 19 seeks past EOS. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10274> + +2025-12-02 17:52:34 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/midi/midiparse.c: + midiparse: Fix a couple of potential out-of-bounds reads + Also use an unsigned integer for parsing variable length integers as shifting + bits out of the sign bit is undefined behaviour. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10280> + +2025-11-28 15:12:37 +0200 Vivia Nikolaidou <vivia@ahiru.eu> + + * gst/mxf/mxfmpeg.c: + mxfmpeg: Add custom Sony picture essence coding UL + Sony seems to use 06.0e.2b.34.04.01.01.03.0e.06.41.02 as prefix for + their custom picture essence codings, and specifically the MPEG one + potentially uses the same semantics. + This comes from a file with: + picture essence coding 06.0e.2b.34.04.01.01.03.0e.06.41.02.01.04.03.01 + codec 00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00 + essence container 06.0e.2b.34.04.01.01.02.0d.01.03.01.02.04.60.01 + which seemed to be XDCAM, aka decodable as MPEG-2. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10271> + +2022-04-01 05:54:29 +1100 Jan Schmidt <jan@centricular.com> + + * gst/mpegtsmux/gstbasetsmux.c: + mpegtsmux: Fix potential deadlock changing pmt-interval + The object lock is the innermost lock. Don't take + the mux->lock while holding it. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10272> + +2025-12-01 17:32:18 +0000 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development after 1.26.9 + === release 1.26.9 === 2025-12-01 17:27:07 +0000 Tim-Philipp Müller <tim@centricular.com>
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/NEWS -> _service:download_files:gst-plugins-bad-1.26.10.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.9 and was released on 01 December 2025. +The latest bug-fix release in the stable 1.26 series is 1.26.10 and was released on 25 December 2025 See https://gstreamer.freedesktop.org/releases/1.26/ for the latest version of this document. -Last updated: Monday 01 December 2025, 17:00 UTC (log) +Last updated: Thursday 25 December 2025, 15:00 UTC (log) ## Introduction @@ -3120,6 +3120,191 @@ - List of Merge Requests applied in 1.26.9 - List of Issues fixed in 1.26.9 +1.26.10 + +The tenth 1.26 bug-fix release (1.26.10) was released on 25 December 2025. + +This release only contains bugfixes and it should be safe to update from 1.26.x. + +Highlighted bugfixes in 1.26.10 + +- curlhttpsrc fixes and improvements +- decklinkvideosink: Fix frame completion callbacks for firmware 14.3+ +- flac: Fix 6.1 and 7.1 channel layouts and support encoding and decoding of 32-bit audio +- glimagesink: Fix handling of odd height buffers +- matroskademux: make maximum allowed block size large enough to support 4k uncompressed video +- mxf: Add support for custom Sony XDCAM video variant +- opusenc: multichannel and surround sound handling improvements +- playbin3: HLS/DASH stream selection handling improvements to fix disabling and re-enabling of audio/video streams with + adaptivedemux2 +- qtmux: robust recording mode space left estimation fixes for streams that start with a timestamp offset +- splitmuxsrc seeking improvements +- Support FLAC audio in DASH manifests +- Python bindings: fix regression where buffers were no longer writable in pad probe callbacks +- cerbero: add python bindings for GstApp; Windows installer improvements +- Various bug fixes,build fixes,memory leak fixes,and other stability and reliability improvements + +gstreamer + +- pipeline: Improve resource cleanup logic for clock objects +- filesink: fix the build with recent mingw-w64 +- basetransform, basesrc: Fix handling of buffer pool configuration failures + +gst-plugins-base + +- basetextoverlay: Don’t negotiate if caps haven’t changed +- codec-utils: Update mime codec strings +- fdmemory: Fix size calculation when sharing +- gl elements add a yellow bar on JPEGs with non-even heights +- glimagesink: Fix handling of odd height buffers +- glwindow_cocoa: fix window not closing (w/o user window handle) +- opusenc: Simplify Vorbis channel layout mapping code and fix 7.1 layout & use surround multistream encoder +- parsebin: Improve debug logging +- playbin3: ensure GST_EVENT_SELECT_STREAMS event is sent to collection source +- tagdemux: propagate seek event seqnum to upstream +- videodecoder: Don’t assume the ALLOCATION query contains a pool +- videodecoder, videoaggregator: Fix handling of buffer pool configuration failures + +gst-plugins-good + +- adaptivedemux2: Initialize start bitrate for dashdemux2 and hlsdemux2 +- dashdemux2: Unknown codec ‘flac’ when streaming a DASH MPD manifest with a mp4 FLAC file +- deinterlace: Improve pool configuration +- flac: Fix 6.1 / 7.1 channel layouts +- flacdec: Don’t forbid S32 sample size (0x07) unnecessarily +- flacenc: Support S32 samples +- flacdec: Decode 32-bit FLAC files +- level: fix crash if no caps have been sent +- level: Floating point exception (core dumped) when sending buffers without caps +- matroskademux: Bump maximum block size from 15MB to 32MB to allow 4k raw video +- matroskamux: Fix some more thread-safety issues +- matroskamux: Fix thread-safety issues when requesting new pads +- matroskamux: pad->track handling results in segmentation fault +- mxfdemux / aiffparse / matroskaparse: Remove segment closing on non-flushing seeks +- qtdemux: Use gst_util_uint64_scale to scale guint64 +- qtmux: Fix robust recording estimates +- splitmuxsrc - fix for seeking / flushing deadlock +- v4l2object: Add support for colorimetry 1:4:16:3 +- wavenc: Fix downstream negotiation +- wavparse: prevent setting empty strings as title tag + +gst-plugins-bad + +- aesenc / aesdec: use correct format specifier for buffer size in debug log +- analytics: Fix build on MSVC by using libm dependency +- curlhttpsrc: Various fixes +- decklinkvideosink: Fix frame completion callbacks for firmware 14.3+ +- dtlsdec: mark generated cert agent with GST_OBJECT_FLAG_MAY_BE_LEAKED +- fdkaacdec: Assertion on handling unsupported channel layouts +- fdkaacdec: Invalidate channel_types/indices when setting a known config +- hlssink: Guard NULL structure and use gst_structure_has_name() +- midiparse: Fix a couple of potential out-of-bounds reads +- mpegtsmux: Fix potential deadlock changing pmt-interval +- mxfdemux: reconsider “closing running segment” for non flushing seeks +- mxfdemux / aiffparse / matroskaparse: Remove segment closing on non-flushing seeks +- mxfdemux: Simplify timestamp tracking +- mxfdemux: send event SegmentDone for segment seeks +- mxfmpeg: Add custom Sony picture essence coding UL +- playbin3: ensure GST_EVENT_SELECT_STREAMS event is sent to collection source +- vabasedec: Don’t assert when negotiating based on a gap event before the first buffer +- vkformat: Add VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 format +- webrtc: Keep a ref of the ICEStream in the TransportStream +- GstPlay: set_audio_track_enabled / set_video_track_enabled not functioning for adaptivedemux2 sources +- video: decoders: Fix possible crash when flushing H265/H266 decoder + +gst-plugins-ugly + +- No changes + +GStreamer Rust plugins + +- cctost2038anc: Fix typo with c_not_y_channel property documentation +- dav1d: Stop iteration after finding first working pool +- dav1d: Various fixes to allocation query handling +- gtk4paintablesink: Propose a udmabuf pool / allocator if upstream asks for sysmem +- gtk4: Fix typo in odd-size subsample workaround +- rtp: Update to rtcp-types 0.3 +- st2038combiner: Some fixes +- st2038extractor: Add always-add-st2038-pad property +- threadshare: allow disabling the IPv4 or IPv6 socket in ts-udpsink +- threadshare: Update to flume 0.12 +- tracers: add function and signal for writing logs to PadPushTimings +- version-helper: Update to toml_edit 0.24 +- webrtc: mark static caps with GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED +- webrtcsink: don’t upscale when mitigating low bitrate +- Fix new clippy 1.92 warnings +- Update dependencies + +gst-libav + +- avviddec: Various fixes to allocation query handling +- avviddec: Aggregate GstVideoAlignment on top of the meta api params, instead of overriding them +- avviddec: Set video alignment to internal pool + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-python + +- Override GstPadProbeInfo to get writable objects +- Misc improvements +- More typing fixes +- 1.26.2 breaks Python bindings: No longer able to modify Gst.Buffer metadata in pad probe callbacks + +gst-editing-services + +- python: More typing fixes + +gst-devtools,gst-validate + gst-integration-testsuites + +- dotsviewer: Update Rust dependencies + +gst-examples + +- webrtc: Update Rust dependencies + +gstreamer-docs + +- No changes + +Development build environment + +- No changes + +Cerbero build tool and packaging changes in 1.26.10 + +- pkg-config: Ship it in the devel package +- recipe: Update License enums to SPDX expressions +- recipes: Fix GPL categorization of some plugins +- recipes: Fix stray devel files making it into runtime +- recipes: add GstApp python binding +- Modernize MSI license.rtf formatting +- Use ninja for all cmake recipes by default instead of GNU make +- ci: Mark a racy xcode toolchain bug for retrying + +Contributors to 1.26.10 + +Aaron Boxer, Brad Reitmeyer, Christoph Reiter, Doug Nazar, F. Duncanh, François Laignel, Haejung Hwang, Hou Qi, Hyunjun Ko, +Jakub Adam, Jan Schmidt, Jeongmin Kwak, Jerome Colle, L. E. Segovia, Mathieu Duponchelle, Nicolas Dufresne, Nirbheek Chauhan, +Philippe Normand, Piotr Brzeziński, Pratik Pachange, Robert Mader, Sanchayan Maity, Sebastian Dröge, Stéphane Cerveau, Thibault +Saunier, Tim-Philipp Müller, Tobias Schlager, Vivia Nikolaidou, Wilhelm Bartel, Xavier Claessens, Yun Liu, + +… 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.10 + +- List of Merge Requests applied in 1.26.10 +- List of Issues fixed in 1.26.10 + 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
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/RELEASE -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.26.9. +This is GStreamer gst-plugins-bad 1.26.10. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/aes/gstaesdec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/aes/gstaesdec.c
Changed
@@ -533,27 +533,27 @@ { GstAesDec *filter = GST_AES_DEC (base); GstBaseTransformClass *bclass = GST_BASE_TRANSFORM_GET_CLASS (base); - guint out_size; + gsize in_size = gst_buffer_get_size (inbuf); + gsize out_size = in_size; g_mutex_lock (&filter->decoder_lock); filter->locked_properties = TRUE; /* we need extra space at end of output buffer * when we let OpenSSL handle PKCS7 padding */ - out_size = (gint) gst_buffer_get_size (inbuf) + - (!filter->per_buffer_padding ? GST_AES_BLOCK_SIZE : 0); + out_size += (!filter->per_buffer_padding ? GST_AES_BLOCK_SIZE : 0); /* Since serialized IV is stripped from first buffer, * reduce output buffer size by GST_AES_BLOCK_SIZE in this case */ if (filter->serialize_iv && filter->awaiting_first_buffer) { - g_assert (gst_buffer_get_size (inbuf) > GST_AES_BLOCK_SIZE); + g_assert (in_size > GST_AES_BLOCK_SIZE); out_size -= GST_AES_BLOCK_SIZE; } g_mutex_unlock (&filter->decoder_lock); *outbuf = gst_buffer_new_allocate (NULL, out_size, NULL); GST_LOG_OBJECT (filter, - "Input buffer size %d,\nAllocating output buffer size: %d", - (gint) gst_buffer_get_size (inbuf), out_size); + "Input buffer size %" G_GSIZE_FORMAT + ", allocating output buffer size: %" G_GSIZE_FORMAT, in_size, out_size); bclass->copy_metadata (base, inbuf, *outbuf); return GST_FLOW_OK;
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/aes/gstaesenc.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/aes/gstaesenc.c
Changed
@@ -519,7 +519,8 @@ { GstAesEnc *filter = GST_AES_ENC (base); GstBaseTransformClass *bclass = GST_BASE_TRANSFORM_GET_CLASS (base); - guint out_size = (guint) gst_buffer_get_size (inbuf); + gsize in_size = gst_buffer_get_size (inbuf); + gsize out_size = in_size; g_mutex_lock (&filter->encoder_lock); filter->locked_properties = TRUE; @@ -540,8 +541,9 @@ g_mutex_unlock (&filter->encoder_lock); GST_LOG_OBJECT (filter, - "Input buffer size %d, output buffer size: %d. padding : %d", - (guint) gst_buffer_get_size (inbuf), out_size, filter->padding); + "Input buffer size %" G_GSIZE_FORMAT + ", output buffer size: %" G_GSIZE_FORMAT ", padding: %u", + in_size, out_size, filter->padding); *outbuf = gst_buffer_new_allocate (NULL, out_size, NULL); bclass->copy_metadata (base, inbuf, *outbuf);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/curl/gstcurlbasesink.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/curl/gstcurlbasesink.c
Changed
@@ -621,7 +621,7 @@ CURLcode res; #ifndef GST_DISABLE_GST_DEBUG - res = curl_easy_setopt (sink->curl, CURLOPT_VERBOSE, 1); + res = curl_easy_setopt (sink->curl, CURLOPT_VERBOSE, 1L); if (res != CURLE_OK) { sink->error = g_strdup_printf ("failed to set verbose: %s", curl_easy_strerror (res)); @@ -649,7 +649,9 @@ return FALSE; } - res = curl_easy_setopt (sink->curl, CURLOPT_CONNECTTIMEOUT, sink->timeout); + res = + curl_easy_setopt (sink->curl, CURLOPT_CONNECTTIMEOUT, + (long) sink->timeout); if (res != CURLE_OK) { sink->error = g_strdup_printf ("failed to set connection timeout: %s", curl_easy_strerror (res)); @@ -657,7 +659,7 @@ } /* using signals in a multi-threaded application is dangerous */ - res = curl_easy_setopt (sink->curl, CURLOPT_NOSIGNAL, 1); + res = curl_easy_setopt (sink->curl, CURLOPT_NOSIGNAL, 1L); if (res != CURLE_OK) { sink->error = g_strdup_printf ("failed to set no signalling: %s", curl_easy_strerror (res));
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/curl/gstcurldefaults.h -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/curl/gstcurldefaults.h
Changed
@@ -63,10 +63,10 @@ #define GSTCURL_HANDLE_DEFAULT_CURLOPT_USERAGENT "GStreamer curlhttpsrc libcurl" #define GSTCURL_HANDLE_DEFAULT_CURLOPT_ACCEPT_ENCODING FALSE #define GSTCURL_HANDLE_DEFAULT_CURLOPT_FOLLOWLOCATION 1L -#define GSTCURL_HANDLE_DEFAULT_CURLOPT_MAXREDIRS -1 +#define GSTCURL_HANDLE_DEFAULT_CURLOPT_MAXREDIRS -1L #define GSTCURL_HANDLE_DEFAULT_CURLOPT_TCP_KEEPALIVE 1L -#define GSTCURL_HANDLE_DEFAULT_CURLOPT_TIMEOUT 0 -#define GSTCURL_HANDLE_DEFAULT_CURLOPT_SSL_VERIFYPEER 1 +#define GSTCURL_HANDLE_DEFAULT_CURLOPT_TIMEOUT 0L +#define GSTCURL_HANDLE_DEFAULT_CURLOPT_SSL_VERIFYPEER 1L #define GSTCURL_HANDLE_DEFAULT_CURLOPT_CAINFO ((void *)0) @@ -89,14 +89,14 @@ */ #define GSTCURL_HANDLE_MIN_CURLOPT_FOLLOWLOCATION 0L #define GSTCURL_HANDLE_MAX_CURLOPT_FOLLOWLOCATION 1L -#define GSTCURL_HANDLE_MIN_CURLOPT_MAXREDIRS -1 -#define GSTCURL_HANDLE_MAX_CURLOPT_MAXREDIRS 255 +#define GSTCURL_HANDLE_MIN_CURLOPT_MAXREDIRS -1L +#define GSTCURL_HANDLE_MAX_CURLOPT_MAXREDIRS 255L #define GSTCURL_HANDLE_MIN_CURLOPT_TCP_KEEPALIVE 0L #define GSTCURL_HANDLE_MAX_CURLOPT_TCP_KEEPALIVE 1L -#define GSTCURL_HANDLE_MIN_CURLOPT_TIMEOUT 0 -#define GSTCURL_HANDLE_MAX_CURLOPT_TIMEOUT 3600 -#define GSTCURL_HANDLE_MIN_CURLOPT_SSL_VERIFYPEER 0 -#define GSTCURL_HANDLE_MAX_CURLOPT_SSL_VERIFYPEER 1 +#define GSTCURL_HANDLE_MIN_CURLOPT_TIMEOUT 0L +#define GSTCURL_HANDLE_MAX_CURLOPT_TIMEOUT 3600L +#define GSTCURL_HANDLE_MIN_CURLOPT_SSL_VERIFYPEER 0L +#define GSTCURL_HANDLE_MAX_CURLOPT_SSL_VERIFYPEER 1L #define GSTCURL_HANDLE_MIN_CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_1_0 #ifdef CURL_VERSION_HTTP2 #define GSTCURL_HANDLE_MAX_CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_2_0 @@ -115,8 +115,8 @@ #define GSTCURL_HANDLE_MIN_CURLMOPT_MAX_TOTAL_CONNECTIONS 32L #define GSTCURL_HANDLE_MAX_CURLMOPT_MAX_TOTAL_CONNECTIONS 255L -#define GSTCURL_HANDLE_MIN_RETRIES -1 -#define GSTCURL_HANDLE_MAX_RETRIES 9999 +#define GSTCURL_HANDLE_MIN_RETRIES -1L +#define GSTCURL_HANDLE_MAX_RETRIES 9999L /* Because g_param_spec_int requires min/max bounding... */ #define GSTCURL_MIN_REDIRECTIONS -1
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/curl/gstcurlhttpsink.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/curl/gstcurlhttpsink.c
Changed
@@ -581,7 +581,9 @@ return FALSE; } - res = curl_easy_setopt (bcsink->curl, CURLOPT_PROXYPORT, sink->proxy_port); + res = + curl_easy_setopt (bcsink->curl, CURLOPT_PROXYPORT, + (long) sink->proxy_port); if (res != CURLE_OK) { bcsink->error = g_strdup_printf ("failed to set proxy port: %s", curl_easy_strerror (res));
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/curl/gstcurlhttpsrc.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/curl/gstcurlhttpsrc.c
Changed
@@ -192,13 +192,13 @@ element, GstStateChange transition); static void gst_curl_http_src_cleanup_instance (GstCurlHttpSrc * src); static gboolean gst_curl_http_src_query (GstBaseSrc * bsrc, GstQuery * query); -static gboolean gst_curl_http_src_get_content_length (GstBaseSrc * bsrc, - guint64 * size); +static gboolean gst_curl_http_src_get_size (GstBaseSrc * bsrc, guint64 * size); static gboolean gst_curl_http_src_is_seekable (GstBaseSrc * bsrc); static gboolean gst_curl_http_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment); static gboolean gst_curl_http_src_unlock (GstBaseSrc * bsrc); static gboolean gst_curl_http_src_unlock_stop (GstBaseSrc * bsrc); +static guint64 gst_curl_http_src_get_length_from_headers (GstCurlHttpSrc * src); /* URI Handler functions */ static void gst_curl_http_src_uri_handler_init (gpointer g_iface, @@ -280,8 +280,7 @@ GST_DEBUG_FUNCPTR (gst_curl_http_src_change_state); gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_curl_http_src_create); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_curl_http_src_query); - gstbasesrc_class->get_size = - GST_DEBUG_FUNCPTR (gst_curl_http_src_get_content_length); + gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_curl_http_src_get_size); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_curl_http_src_is_seekable); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_curl_http_src_do_seek); @@ -495,6 +494,60 @@ } static void +gst_curl_http_src_reset (GstCurlHttpSrc * source) +{ + g_mutex_lock (&source->buffer_mutex); + + source->transfer_begun = FALSE; + source->data_received = FALSE; + source->retries_remaining = source->total_retries; + source->content_size = 0; + source->request_position = 0; + source->stop_position = -1; + if (source->http_headers != NULL) { + gst_structure_free (source->http_headers); + source->http_headers = NULL; + } + if (source->curl_handle) { + gst_curl_http_src_destroy_easy_handle (source); + source->curl_handle = NULL; + } + + g_mutex_unlock (&source->buffer_mutex); +} + +static gboolean +gst_curl_http_src_update_uri (GstCurlHttpSrc * source, const gchar * uri) +{ + gboolean changed = FALSE; + gboolean rc = TRUE; + GSTCURL_FUNCTION_ENTRY (source); + + g_mutex_lock (&source->uri_mutex); + if (g_strcmp0 (source->uri, uri) != 0) { + if (source->uri) { + GST_DEBUG_OBJECT (source, + "URI already present as %s, updating to new URI %s", source->uri, + uri); + g_free (source->uri); + } + source->uri = g_strdup (uri); + if (source->uri == NULL) + rc = FALSE; + changed = TRUE; + } + g_mutex_unlock (&source->uri_mutex); + + if (changed) { + gst_curl_http_src_wait_until_removed (source); + gst_curl_http_src_reset (source); + } + + GSTCURL_FUNCTION_EXIT (source); + return rc; +} + +static void gst_curl_http_src_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { @@ -503,10 +556,7 @@ switch (prop_id) { case PROP_URI: - g_mutex_lock (&source->uri_mutex); - g_free (source->uri); - source->uri = g_value_dup_string (value); - g_mutex_unlock (&source->uri_mutex); + gst_curl_http_src_update_uri (source, g_value_get_string (value)); break; case PROP_USERNAME: g_free (source->username); @@ -735,7 +785,6 @@ source->connection_status = GSTCURL_NOT_CONNECTED; source->http_headers = NULL; - source->content_type = NULL; source->status_code = 0; source->reason_phrase = NULL; source->hdrs_updated = FALSE; @@ -771,10 +820,10 @@ klass->multi_task_context.multi_handle = curl_multi_init (); curl_multi_setopt (klass->multi_task_context.multi_handle, - CURLMOPT_PIPELINING, 1); + CURLMOPT_PIPELINING, 1L); #ifdef CURLMOPT_MAX_HOST_CONNECTIONS curl_multi_setopt (klass->multi_task_context.multi_handle, - CURLMOPT_MAX_HOST_CONNECTIONS, 1); + CURLMOPT_MAX_HOST_CONNECTIONS, 1L); #endif /* Start the thread */ @@ -1099,7 +1148,7 @@ GST_INFO_OBJECT (s, "Creating a new handle for URI %s", s->uri); #ifndef GST_DISABLE_GST_DEBUG - if (curl_easy_setopt (handle, CURLOPT_VERBOSE, 1) != CURLE_OK) { + if (curl_easy_setopt (handle, CURLOPT_VERBOSE, 1L) != CURLE_OK) { GST_WARNING_OBJECT (s, "Failed to set verbose!"); } if (curl_easy_setopt (handle, CURLOPT_DEBUGDATA, s) != CURLE_OK) { @@ -1151,7 +1200,7 @@ gst_curl_setopt_int_default (s, handle, CURLOPT_MAXREDIRS, s->max_3xx_redirects); gst_curl_setopt_bool (s, handle, CURLOPT_TCP_KEEPALIVE, s->keep_alive); - gst_curl_setopt_int (s, handle, CURLOPT_TIMEOUT, s->timeout_secs); + gst_curl_setopt_int (s, handle, CURLOPT_TIMEOUT, (long) s->timeout_secs); gst_curl_setopt_bool (s, handle, CURLOPT_SSL_VERIFYPEER, s->strict_ssl); gst_curl_setopt_str (s, handle, CURLOPT_CAINFO, s->custom_ca_file); @@ -1225,9 +1274,7 @@ { glong curl_info_long; gdouble curl_info_dbl; - curl_off_t curl_info_offt; gchar *redirect_url; - GstBaseSrc *basesrc; const GValue *response_headers; GstFlowReturn ret = GST_FLOW_OK; @@ -1318,28 +1365,22 @@ /* * Push the content length */ - if (curl_easy_getinfo (src->curl_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, - &curl_info_offt) == CURLE_OK) { - if (curl_info_offt == -1) { - GST_WARNING_OBJECT (src, - "No Content-Length was specified in the response."); - src->seekable = GSTCURL_SEEKABLE_FALSE; - } else { - /* Note that in the case of a range get, Content-Length is the number - of bytes requested, not the total size of the resource */ - GST_INFO_OBJECT (src, "Content-Length was given as %" G_GUINT64_FORMAT, - curl_info_offt); - if (src->content_size == 0) { - src->content_size = src->request_position + curl_info_offt; - } - basesrc = GST_BASE_SRC_CAST (src); - basesrc->segment.duration = src->request_position + curl_info_offt; - if (src->seekable == GSTCURL_SEEKABLE_UNKNOWN) { - src->seekable = GSTCURL_SEEKABLE_TRUE; - } + src->content_size = gst_curl_http_src_get_length_from_headers (src); + if (src->content_size) { + GstBaseSrc *basesrc = GST_BASE_SRC_CAST (src); + + if (src->seekable == GSTCURL_SEEKABLE_UNKNOWN) { + src->seekable = GSTCURL_SEEKABLE_TRUE; + } + if (basesrc->segment.duration != src->content_size) { + basesrc->segment.duration = src->content_size; gst_element_post_message (GST_ELEMENT (src), gst_message_new_duration_changed (GST_OBJECT (src))); } + } else { + GST_WARNING_OBJECT (src, + "No Content-Length was specified in the response."); + src->seekable = GSTCURL_SEEKABLE_FALSE; } /* @@ -1552,30 +1593,59 @@ return ret; } -static gboolean -gst_curl_http_src_get_content_length (GstBaseSrc * bsrc, guint64 * size) +static guint64 +gst_curl_http_src_get_length_from_headers (GstCurlHttpSrc * src) { - GstCurlHttpSrc *src = GST_CURLHTTPSRC (bsrc); const GValue *response_headers; - gboolean ret = FALSE; - if (src->http_headers == NULL) { - return FALSE; - } + if (src->http_headers == NULL) + return 0; response_headers = gst_structure_get_value (src->http_headers, RESPONSE_HEADERS_NAME); + + /* In the case of a Range GET, the Content-Length header will contain + * the size of range requested, and the Content-Range header should + * have the start, stop and total size of the resource */ + if (gst_structure_has_field_typed (gst_value_get_structure (response_headers), + "content-range", G_TYPE_STRING)) { + const gchar *content_range = + gst_structure_get_string (gst_value_get_structure (response_headers), + "content-range"); + const gchar *slash = strchr (content_range, '/'); + if (slash && slash1 != '*') { + return g_ascii_strtoull (slash + 1, NULL, 10); + } + } if (gst_structure_has_field_typed (gst_value_get_structure (response_headers), "content-length", G_TYPE_STRING)) { const gchar *content_length = gst_structure_get_string (gst_value_get_structure (response_headers), "content-length"); - *size = (guint64) g_ascii_strtoull (content_length, NULL, 10); + /* Adjust by request_position since the length is of just the range. Should + * have been taken care of content-range above */ + return src->request_position + g_ascii_strtoull (content_length, NULL, 10); + } + return 0; +} + +static gboolean +gst_curl_http_src_get_size (GstBaseSrc * bsrc, guint64 * size) +{ + GstCurlHttpSrc *src = GST_CURLHTTPSRC (bsrc); + gboolean ret = FALSE; + + if (src->content_size == 0 && src->http_headers == NULL) { + return FALSE; + } + if (src->content_size == 0) { + src->content_size = gst_curl_http_src_get_length_from_headers (src); + } + if (src->content_size > 0) { + *size = src->content_size; ret = TRUE; - } else { - GST_DEBUG_OBJECT (src, - "No content length has yet been set, or there was an error!"); } + return ret; } @@ -1627,6 +1697,20 @@ src->request_position = segment->start; src->stop_position = segment->stop; + + if (src->transfer_begun) { + GST_DEBUG_OBJECT (src, "stopping existing transfer"); + g_mutex_unlock (&src->buffer_mutex); + gst_curl_http_src_wait_until_removed (src); + g_mutex_lock (&src->buffer_mutex); + src->transfer_begun = FALSE; + if (src->buffer_len > 0) { + g_free (src->buffer); + src->buffer = NULL; + src->buffer_len = 0; + } + } + done: g_mutex_unlock (&src->buffer_mutex); return ret; @@ -1681,30 +1765,16 @@ const gchar * uri, GError ** error) { GstCurlHttpSrc *source = GST_CURLHTTPSRC (handler); + gboolean rc; GSTCURL_FUNCTION_ENTRY (source); g_return_val_if_fail (GST_IS_URI_HANDLER (handler), FALSE); g_return_val_if_fail (uri != NULL, FALSE); - g_mutex_lock (&source->uri_mutex); - - if (source->uri != NULL) { - GST_DEBUG_OBJECT (source, - "URI already present as %s, updating to new URI %s", source->uri, uri); - g_free (source->uri); - } - - source->uri = g_strdup (uri); - if (source->uri == NULL) { - g_mutex_unlock (&source->uri_mutex); - return FALSE; - } - source->retries_remaining = source->total_retries; - - g_mutex_unlock (&source->uri_mutex); + rc = gst_curl_http_src_update_uri (source, uri); GSTCURL_FUNCTION_EXIT (source); - return TRUE; + return rc; } /* @@ -1917,7 +1987,13 @@ GstCurlHttpSrc *s = src; char *substr; - GST_DEBUG_OBJECT (s, "Received header: %s", (char *) header); + if (nmemb == 2) { + /* blank header, skip */ + return size * nmemb; + } + + GST_DEBUG_OBJECT (s, "Received header: %.*s", (int) nmemb - 2, + (char *) header); g_mutex_lock (&s->buffer_mutex); @@ -1959,6 +2035,7 @@ (guint) g_ascii_strtoll (status_line_fields1, NULL, 10); g_free (s->reason_phrase); s->reason_phrase = g_strdup (status_line_fields2); + g_strchomp (s->reason_phrase); GST_INFO_OBJECT (s, "Received status %u for request for URI %s: %s", s->status_code, s->uri, s->reason_phrase); gst_structure_set (s->http_headers, HTTP_STATUS_CODE, @@ -2001,14 +2078,6 @@ } else if (g_strcmp0 (header_key, "accept-ranges") == 0 && g_ascii_strcasecmp (header_value, "none") == 0) { s->seekable = GSTCURL_SEEKABLE_FALSE; - } else if (g_strcmp0 (header_key, "content-range") == 0) { - /* In the case of a Range GET, the Content-Length header will contain - the size of range requested, and the Content-Range header will - have the start, stop and total size of the resource */ - gchar *size = strchr (header_value, '/'); - if (size) { - s->content_size = atoi (size); - } } g_free (header_key);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/curl/gstcurlhttpsrc.h -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/curl/gstcurlhttpsrc.h
Changed
@@ -218,7 +218,6 @@ * Response Headers */ GstStructure *http_headers; - gchar *content_type; guint status_code; gchar *reason_phrase; gboolean hdrs_updated;
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/dtls/gstdtlsdec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/dtls/gstdtlsdec.c
Changed
@@ -673,6 +673,8 @@ certificate, NULL); g_object_unref (certificate); + GST_OBJECT_FLAG_SET (new_agent, GST_OBJECT_FLAG_MAY_BE_LEAKED); + GST_DEBUG_OBJECT (generated_cert_agent, "no agent with generated cert found, creating new"); g_once_init_leave (&generated_cert_agent, new_agent);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/fdkaac/gstfdkaacdec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/fdkaac/gstfdkaacdec.c
Changed
@@ -520,6 +520,8 @@ GST_INFO_OBJECT (self, "Known channelConfig %d (%d channels)", config, channels); + memset (self->channel_types, 0, sizeof (self->channel_types)); + memset (self->channel_indices, 0, sizeof (self->channel_indices)); memcpy (self->positions, layout->positions, channels * sizeof *self->positions);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/hls/gsthlssink.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/hls/gsthlssink.c
Changed
@@ -289,7 +289,8 @@ const GstStructure *structure; structure = gst_message_get_structure (message); - if (strcmp (gst_structure_get_name (structure), "GstMultiFileSink")) + if (structure == NULL || + !gst_structure_has_name (structure, "GstMultiFileSink")) break; filename = gst_structure_get_string (structure, "filename");
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/ext/webrtc/transportstream.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/ext/webrtc/transportstream.c
Changed
@@ -197,6 +197,7 @@ gst_clear_object (&stream->rtxsend); gst_clear_object (&stream->rtxreceive); gst_clear_object (&stream->reddec); + gst_clear_object (&stream->stream); g_list_free_full (stream->fecdecs, (GDestroyNotify) gst_object_unref); stream->fecdecs = NULL; @@ -243,9 +244,10 @@ stream->stream = gst_webrtc_ice_add_stream (webrtc->priv->ice, stream->session_id); _add_ice_stream_item (webrtc, stream->session_id, stream->stream); + } else { + stream->stream = gst_object_ref (stream->stream); } - ice_trans = - gst_webrtc_ice_find_transport (webrtc->priv->ice, stream->stream, + ice_trans = gst_webrtc_ice_find_transport (webrtc->priv->ice, stream->stream, GST_WEBRTC_ICE_COMPONENT_RTP); gst_webrtc_dtls_transport_set_transport (stream->transport, ice_trans); gst_object_unref (ice_trans);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/analytics/meson.build -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/analytics/meson.build
Changed
@@ -35,11 +35,10 @@ soversion : soversion, darwin_versions : osxversion, install : true, - dependencies : gstbase_dep, gstvideo_dep, - link_args : '-lm') + dependencies : gstbase_dep, gstvideo_dep, libm) pkgconfig.generate(gstanalytics, - libraries : gst_dep, gstbase_dep, gstvideo_dep, '-lm', + libraries : gst_dep, gstbase_dep, gstvideo_dep, libm, variables : pkgconfig_variables, subdirs : pkgconfig_subdirs, name : pkg_name,
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/codecs/gsth265decoder.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/codecs/gsth265decoder.c
Changed
@@ -2060,10 +2060,14 @@ if (klass->end_picture) { flow_ret = klass->end_picture (self, priv->current_picture); if (flow_ret != GST_FLOW_OK) { - GST_WARNING_OBJECT (self, "End picture failed"); + if (flow_ret == GST_FLOW_FLUSHING) + GST_DEBUG_OBJECT (self, "Picture decode aborted."); + else + GST_WARNING_OBJECT (self, "End picture failed"); /* continue to empty dpb */ UPDATE_FLOW_RETURN (ret, flow_ret); + priv->current_picture->output_flag = FALSE; } }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/codecs/gsth266decoder.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/codecs/gsth266decoder.c
Changed
@@ -1471,10 +1471,14 @@ if (klass->end_picture) { flow_ret = klass->end_picture (self, priv->current_picture); if (flow_ret != GST_FLOW_OK) { - GST_WARNING_OBJECT (self, "End picture failed"); + if (flow_ret == GST_FLOW_FLUSHING) + GST_DEBUG_OBJECT (self, "Picture decode aborted."); + else + GST_WARNING_OBJECT (self, "End picture failed"); /* continue to empty dpb */ UPDATE_FLOW_RETURN (ret, flow_ret); + priv->current_picture->output_flag = FALSE; } }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/play/gstplay.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/play/gstplay.c
Changed
@@ -2334,7 +2334,7 @@ if (!codec) { GstCaps *caps; caps = gst_play_stream_info_get_caps (s); - if (caps) { + if (caps && gst_caps_is_fixed (caps)) { codec = gst_pb_utils_get_codec_description (caps); } }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/vulkan/gstvkformat.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/vulkan/gstvkformat.c
Changed
@@ -33,6 +33,8 @@ #define FORMAT(name, scaling) \ G_PASTE(G_PASTE(VK_FORMAT_,name),G_PASTE(_,scaling)), G_STRINGIFY(G_PASTE(G_PASTE(name,_),scaling)), G_PASTE(GST_VULKAN_FORMAT_SCALING_, scaling) +#define FORMAT_PACK(name, scaling, pack) \ + G_PASTE(G_PASTE(G_PASTE(G_PASTE(VK_FORMAT_,name),_),scaling),G_PASTE(_,pack)), G_STRINGIFY(G_PASTE(G_PASTE(G_PASTE(G_PASTE(name,_),scaling),_),pack)), G_PASTE(GST_VULKAN_FORMAT_SCALING_, scaling) #define FLAG(v) \ G_PASTE(GST_VULKAN_FORMAT_FLAG_,v) #if G_BYTE_ORDER == G_LITTLE_ENDIAN @@ -173,6 +175,7 @@ {FORMAT (R8, SINT), FLAG (RGB) | NE, DPTH8, PSTR4, PLANE0, OFFS0, SUB4, VK_IMAGE_ASPECT_COLOR_BIT}, {FORMAT (R8, SRGB), FLAG (RGB) | NE, DPTH8, PSTR4, PLANE0, OFFS0, SUB4, VK_IMAGE_ASPECT_COLOR_BIT}, {FORMAT (G8_B8R8_2PLANE_420, UNORM), FLAG (YUV), DPTH888, PSTR122, PLANE011, OFFS001, SUB420, ASPECT_2PLANE}, + {FORMAT_PACK (G10X6_B10X6R10X6_2PLANE_420, UNORM, 3PACK16), FLAG (YUV), DPTH10_10_10_HI, PSTR244, PLANE011, OFFS001, SUB420, ASPECT_2PLANE}, #if 0 FIXME: implement: {VK_FORMAT_R4G4_UNORM_PACK8, {0, 1, -1, -1}},
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-libs/gst/webrtc/nice/nice.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-libs/gst/webrtc/nice/nice.c
Changed
@@ -547,6 +547,7 @@ g_hash_table_foreach (nice->priv->turn_servers, (GHFunc) _add_turn_server_func, &add_data); + gst_object_ref (item->stream); return item->stream; }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst-plugins-bad.doap -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.26.10</revision> + <branch>1.26</branch> + <name></name> + <created>2025-12-25</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.26.10.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.26.9</revision> <branch>1.26</branch> <name></name>
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/aiff/aiffparse.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/aiff/aiffparse.c
Changed
@@ -1361,11 +1361,7 @@ goto pull_error; } - /* If we have a pending close/start segment, send it now. */ - if (G_UNLIKELY (aiff->close_segment != NULL)) { - gst_pad_push_event (aiff->srcpad, aiff->close_segment); - aiff->close_segment = NULL; - } + /* If we have a pending start segment, send it now. */ if (G_UNLIKELY (aiff->start_segment != NULL)) { gst_pad_push_event (aiff->srcpad, aiff->start_segment); aiff->start_segment = NULL;
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/aiff/aiffparse.h -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/aiff/aiffparse.h
Changed
@@ -59,7 +59,6 @@ GstPad *sinkpad; GstPad *srcpad; - GstEvent *close_segment; GstEvent *start_segment; /* AIFF decoding state */
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/midi/midiparse.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/midi/midiparse.c
Changed
@@ -472,6 +472,9 @@ guint16 format, ntracks, division; gboolean multitrack; + if (size < 6) + goto short_file; + format = GST_READ_UINT16_BE (data); switch (format) { case 0: @@ -516,18 +519,23 @@ GST_ERROR_OBJECT (midiparse, "unsupported division"); return FALSE; } +short_file: + { + GST_DEBUG_OBJECT (midiparse, "not enough data"); + return FALSE; + } } static guint parse_varlen (GstMidiParse * midiparse, guint8 * data, guint size, - gint32 * result) + guint32 * result) { - gint32 res; + guint32 res; gint i; res = 0; for (i = 0; i < 4; i++) { - if (size == 0) + if (size <= i) return 0; res = (res << 7) | ((datai) & 0x7f); @@ -700,10 +708,13 @@ guint8 *data; gchar *bytes; guint size, consumed; - gint32 length; + guint32 length; track->offset += 1; + if (track->offset >= track->size) + goto short_file; + data = track->data + track->offset; size = track->size - track->offset; @@ -760,6 +771,11 @@ break; case 0x51: { + if (length < 3) { + g_free (bytes); + goto short_file; + } + guint32 tempo = (data0 << 16) | (data1 << 8) | data2; save_tempo (midiparse, track, tempo); break; @@ -802,10 +818,13 @@ GstFlowReturn ret; guint8 *data; guint size, consumed; - gint32 length; + guint32 length; track->offset += 1; + if (track->offset >= track->size) + goto short_file; + data = track->data + track->offset; size = track->size - track->offset; @@ -857,7 +876,7 @@ static gboolean update_track_position (GstMidiParse * midiparse, GstMidiTrack * track) { - gint32 delta_time; + guint32 delta_time; guint8 *data; guint size, consumed; @@ -871,7 +890,7 @@ if (consumed == 0) goto eot; - track->pulse += delta_time; + track->pulse += (gint32) delta_time; track->offset += consumed; GST_LOG_OBJECT (midiparse, "updated track to pulse %" G_GUINT64_FORMAT, @@ -896,8 +915,16 @@ guint8 status, event; guint length; guint8 *data; + guint size; - data = &track->datatrack->offset; + if (track->offset >= track->size) + goto short_file; + + data = track->data + track->offset; + size = track->size - track->offset; + + if (size < 1) + goto short_file; status = data0; event = event_from_status (midiparse, track, status); @@ -936,6 +963,9 @@ goto undefined_status; } if (length > 0) { + if (length > size - 1) + goto short_file; + if (status & 0x80) { if (pushfunc) ret = pushfunc (midiparse, track, event, data + 1, length, user_data); @@ -967,6 +997,11 @@ GST_ERROR_OBJECT (midiparse, "unhandled event 0x%08x", event); return GST_FLOW_ERROR; } +short_file: + { + GST_ERROR_OBJECT (midiparse, "not enough data"); + return GST_FLOW_ERROR; + } } static void
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/mpegtsmux/gstbasetsmux.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/mpegtsmux/gstbasetsmux.c
Changed
@@ -2895,15 +2895,15 @@ break; case PROP_PMT_INTERVAL: mux->pmt_interval = g_value_get_uint (value); + g_mutex_lock (&mux->lock); GST_OBJECT_LOCK (mux); for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) { GstBaseTsMuxPad *ts_pad = GST_BASE_TS_MUX_PAD (l->data); - g_mutex_lock (&mux->lock); tsmux_set_pmt_interval (ts_pad->prog, mux->pmt_interval); - g_mutex_unlock (&mux->lock); } GST_OBJECT_UNLOCK (mux); + g_mutex_unlock (&mux->lock); break; case PROP_ALIGNMENT: mux->alignment = g_value_get_int (value);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/mxf/mxfdemux.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/mxf/mxfdemux.c
Changed
@@ -92,6 +92,9 @@ GstMXFDemuxEssenceTrack * etrack, guint64 offset, GstMXFDemuxIndex * retentry); +static GstClockTime gst_mxf_demux_pad_get_current_time (GstMXFDemux * demux, + GstMXFDemuxPad * p); + GType gst_mxf_demux_pad_get_type (void); G_DEFINE_TYPE (GstMXFDemuxPad, gst_mxf_demux_pad, GST_TYPE_PAD); @@ -119,7 +122,6 @@ static void gst_mxf_demux_pad_init (GstMXFDemuxPad * pad) { - pad->position = 0; pad->current_material_track_position = 0; } @@ -272,11 +274,6 @@ gst_segment_init (&demux->segment, GST_FORMAT_TIME); - if (demux->close_seg_event) { - gst_event_unref (demux->close_seg_event); - demux->close_seg_event = NULL; - } - gst_adapter_clear (demux->adapter); gst_mxf_demux_remove_pads (demux); @@ -349,6 +346,29 @@ } static gboolean +gst_mxf_demux_eos_single_stream (GstMXFDemux * demux, GstMXFDemuxPad * pad) +{ + gboolean ret; + GstEvent *e; + + pad->eos = TRUE; + + if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) { + GstClockTime time = gst_mxf_demux_pad_get_current_time (demux, pad); + GST_DEBUG_OBJECT (pad, "Segment Done for track"); + e = gst_event_new_segment_done (GST_FORMAT_TIME, time); + } else { + GST_DEBUG_OBJECT (pad, "EOS for track"); + e = gst_event_new_eos (); + } + + gst_event_set_seqnum (e, demux->seqnum); + ret = gst_pad_push_event (GST_PAD_CAST (pad), e); + + return ret; +} + +static gboolean gst_mxf_demux_push_src_event (GstMXFDemux * demux, GstEvent * event) { gboolean ret = TRUE; @@ -360,7 +380,8 @@ for (i = 0; i < demux->src->len; i++) { GstMXFDemuxPad *pad = GST_MXF_DEMUX_PAD (g_ptr_array_index (demux->src, i)); - if (pad->eos && GST_EVENT_TYPE (event) == GST_EVENT_EOS) + if (pad->eos && (GST_EVENT_TYPE (event) == GST_EVENT_EOS + || GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT_DONE)) continue; ret |= gst_pad_push_event (GST_PAD_CAST (pad), gst_event_ref (event)); @@ -380,9 +401,10 @@ for (i = 0; i < demux->src->len; i++) { GstMXFDemuxPad *p = g_ptr_array_index (demux->src, i); + GstClockTime time = gst_mxf_demux_pad_get_current_time (demux, p); - if (!p->eos && p->position < earliest) { - earliest = p->position; + if (!p->eos && time < earliest) { + earliest = time; pad = p; } } @@ -2661,7 +2683,7 @@ GstMXFDemuxEssenceTrack *etrack = NULL; /* As in GstMXFDemuxIndex */ guint64 pts = G_MAXUINT64; - gint32 max_temporal_offset = 0; + guint32 max_temporal_offset = 0; GstMXFDemuxIndex index_entry = { 0, }; guint64 offset; @@ -2932,15 +2954,32 @@ continue; } + guint64 current_edit_unit = + pad->current_essence_track_position - pad->current_component_start; + GstClockTime component_start_time = + gst_util_uint64_scale (pad->current_component_start_position, + pad->material_track->edit_rate.d * GST_SECOND, + pad->material_track->edit_rate.n); + GstClockTime time = + component_start_time + gst_util_uint64_scale (current_edit_unit, + pad->current_essence_track->source_track->edit_rate.d * GST_SECOND, + pad->current_essence_track->source_track->edit_rate.n); + GstClockTime time_end = component_start_time + + gst_util_uint64_scale (current_edit_unit + index_entry.duration, + pad->current_essence_track->source_track->edit_rate.d * GST_SECOND, + pad->current_essence_track->source_track->edit_rate.n); + { GstMXFDemuxPad *earliest = gst_mxf_demux_get_earliest_pad (demux); + GstClockTime earliest_time = + gst_mxf_demux_pad_get_current_time (demux, earliest); - if (earliest && earliest != pad && earliest->position < pad->position && - pad->position - earliest->position > demux->max_drift) { + if (earliest && earliest != pad && earliest_time < time && + time - earliest_time > demux->max_drift) { GST_DEBUG_OBJECT (earliest, "Pad is too far ahead of time (%" GST_TIME_FORMAT " vs earliest:%" - GST_TIME_FORMAT ")", GST_TIME_ARGS (earliest->position), - GST_TIME_ARGS (pad->position)); + GST_TIME_FORMAT ")", GST_TIME_ARGS (earliest_time), + GST_TIME_ARGS (time)); continue; } } @@ -2952,34 +2991,25 @@ pts = index_entry.pts; - GST_BUFFER_DTS (outbuf) = pad->position; + GST_BUFFER_DTS (outbuf) = time; if (etrack->intra_only) { - GST_BUFFER_PTS (outbuf) = pad->position; + GST_BUFFER_PTS (outbuf) = time; } else if (pts != G_MAXUINT64) { - GST_BUFFER_PTS (outbuf) = gst_util_uint64_scale (pts * GST_SECOND, - pad->current_essence_track->source_track->edit_rate.d, + GST_BUFFER_PTS (outbuf) = + component_start_time + gst_util_uint64_scale (pts, + pad->current_essence_track->source_track->edit_rate.d * GST_SECOND, pad->current_essence_track->source_track->edit_rate.n); - GST_BUFFER_PTS (outbuf) += - gst_util_uint64_scale (pad->current_component_start_position * - GST_SECOND, pad->material_track->edit_rate.d, - pad->material_track->edit_rate.n); /* We are dealing with reordered data, the PTS is shifted forward by the * maximum temporal reordering (the DTS remain as-is). */ - if (max_temporal_offset > 0) - GST_BUFFER_PTS (outbuf) += - gst_util_uint64_scale (max_temporal_offset * GST_SECOND, - pad->current_essence_track->source_track->edit_rate.d, - pad->current_essence_track->source_track->edit_rate.n); - + GST_BUFFER_PTS (outbuf) += + gst_util_uint64_scale_ceil (max_temporal_offset, + pad->current_essence_track->source_track->edit_rate.d * GST_SECOND, + pad->current_essence_track->source_track->edit_rate.n); } else { GST_BUFFER_PTS (outbuf) = GST_CLOCK_TIME_NONE; } - GST_BUFFER_DURATION (outbuf) = - gst_util_uint64_scale (GST_SECOND, - index_entry.duration * - pad->current_essence_track->source_track->edit_rate.d, - pad->current_essence_track->source_track->edit_rate.n); + GST_BUFFER_DURATION (outbuf) = time_end - time; GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE; GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE; @@ -3008,47 +3038,26 @@ } - /* Update accumulated error and compensate */ - { - guint64 abs_error = - (GST_SECOND * pad->current_essence_track->source_track->edit_rate.d) % - pad->current_essence_track->source_track->edit_rate.n; - pad->position_accumulated_error += - ((gdouble) abs_error) / - ((gdouble) pad->current_essence_track->source_track->edit_rate.n); - } - if (pad->position_accumulated_error >= 1.0) { - GST_BUFFER_DURATION (outbuf) += 1; - pad->position_accumulated_error -= 1.0; - } - if (pad->need_segment) { GstEvent *e; + GstSegment shifted_segment; - if (demux->close_seg_event) - gst_pad_push_event (GST_PAD_CAST (pad), - gst_event_ref (demux->close_seg_event)); - - if (max_temporal_offset > 0) { - GstSegment shift_segment; - /* Handle maximum temporal offset. We are shifting all output PTS for - * this stream by the greatest temporal reordering that can occur. In - * order not to change the stream/running time we shift the segment - * start and stop values accordingly */ - gst_segment_copy_into (&demux->segment, &shift_segment); - if (GST_CLOCK_TIME_IS_VALID (shift_segment.start)) - shift_segment.start += - gst_util_uint64_scale (max_temporal_offset * GST_SECOND, - pad->current_essence_track->source_track->edit_rate.d, - pad->current_essence_track->source_track->edit_rate.n); - if (GST_CLOCK_TIME_IS_VALID (shift_segment.stop)) - shift_segment.stop += - gst_util_uint64_scale (max_temporal_offset * GST_SECOND, - pad->current_essence_track->source_track->edit_rate.d, - pad->current_essence_track->source_track->edit_rate.n); - e = gst_event_new_segment (&shift_segment); - } else - e = gst_event_new_segment (&demux->segment); + /* Handle maximum temporal offset. We are shifting all output PTS for + * this stream by the greatest temporal reordering that can occur. In + * order not to change the stream/running time we shift the segment + * start and stop values accordingly */ + gst_segment_copy_into (&demux->segment, &shifted_segment); + if (GST_CLOCK_TIME_IS_VALID (shifted_segment.start)) + shifted_segment.start += + gst_util_uint64_scale_ceil (max_temporal_offset, + pad->current_essence_track->source_track->edit_rate.d * + GST_SECOND, pad->current_essence_track->source_track->edit_rate.n); + if (GST_CLOCK_TIME_IS_VALID (shifted_segment.stop)) + shifted_segment.stop += + gst_util_uint64_scale_ceil (max_temporal_offset, + pad->current_essence_track->source_track->edit_rate.d * + GST_SECOND, pad->current_essence_track->source_track->edit_rate.n); + e = gst_event_new_segment (&shifted_segment); GST_DEBUG_OBJECT (pad, "Sending segment %" GST_PTR_FORMAT, e); gst_event_set_seqnum (e, demux->seqnum); gst_pad_push_event (GST_PAD_CAST (pad), e); @@ -3060,7 +3069,6 @@ pad->tags = NULL; } - pad->position += GST_BUFFER_DURATION (outbuf); pad->current_material_track_position += index_entry.duration; if (pad->discont) { @@ -3096,8 +3104,8 @@ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret); GST_LOG_OBJECT (pad, "combined return %s", gst_flow_get_name (ret)); - if (pad->position > demux->segment.position) - demux->segment.position = pad->position; + if (time_end > demux->segment.position) + demux->segment.position = time_end; if (ret != GST_FLOW_OK) goto out; @@ -3132,13 +3140,7 @@ } if (ret == GST_FLOW_EOS) { - GstEvent *e; - - GST_DEBUG_OBJECT (pad, "EOS for track"); - pad->eos = TRUE; - e = gst_event_new_eos (); - gst_event_set_seqnum (e, demux->seqnum); - gst_pad_push_event (GST_PAD_CAST (pad), e); + gst_mxf_demux_eos_single_stream (demux, pad); ret = GST_FLOW_OK; } @@ -3958,12 +3960,7 @@ if (!p->eos && p->current_essence_track_position >= p->current_essence_track->duration) { - GstEvent *e; - - p->eos = TRUE; - e = gst_event_new_eos (); - gst_event_set_seqnum (e, demux->seqnum); - gst_pad_push_event (GST_PAD_CAST (p), e); + gst_mxf_demux_eos_single_stream (demux, p); } } } @@ -4072,12 +4069,7 @@ if (!p->eos && p->current_essence_track->position >= p->current_essence_track->duration) { - GstEvent *e; - - p->eos = TRUE; - e = gst_event_new_eos (); - gst_event_set_seqnum (e, demux->seqnum); - gst_pad_push_event (GST_PAD_CAST (p), e); + gst_mxf_demux_eos_single_stream (demux, p); } } @@ -4093,13 +4085,8 @@ gst_mxf_demux_find_essence_element (demux, p->current_essence_track, &position, FALSE); if (offset == -1) { - GstEvent *e; - GST_ERROR_OBJECT (demux, "Failed to find offset for essence track"); - p->eos = TRUE; - e = gst_event_new_eos (); - gst_event_set_seqnum (e, demux->seqnum); - gst_pad_push_event (GST_PAD_CAST (p), e); + gst_mxf_demux_eos_single_stream (demux, p); continue; } @@ -4238,8 +4225,9 @@ GstMXFDemuxPad *earliest = NULL; /* We allow time drifts of at most 500ms */ while ((earliest = gst_mxf_demux_get_earliest_pad (demux)) && (force_switch - || demux->segment.position - earliest->position > - demux->max_drift)) { + || demux->segment.position - + gst_mxf_demux_pad_get_current_time (demux, + earliest) > demux->max_drift)) { guint64 offset; gint64 position; @@ -4258,14 +4246,10 @@ gst_mxf_demux_find_essence_element (demux, earliest->current_essence_track, &position, FALSE); if (offset == -1) { - GstEvent *e; - GST_WARNING_OBJECT (demux, "Failed to find offset for late essence track"); - earliest->eos = TRUE; - e = gst_event_new_eos (); - gst_event_set_seqnum (e, demux->seqnum); - gst_pad_push_event (GST_PAD_CAST (earliest), e); + gst_mxf_demux_eos_single_stream (demux, earliest); + continue; } @@ -4352,7 +4336,9 @@ for (i = 0; i < demux->src->len; i++) { GstMXFDemuxPad *p = g_ptr_array_index (demux->src, i); - if (!p->eos && p->position < demux->segment.stop) { + if (!p->eos + && gst_mxf_demux_pad_get_current_time (demux, + p) < demux->segment.stop) { eos = FALSE; break; } @@ -4732,14 +4718,7 @@ if (p->current_essence_track_position >= p->current_essence_track->duration && p->current_essence_track->duration > 0) { p->current_essence_track_position = p->current_essence_track->duration; - p->position = - gst_util_uint64_scale (p->current_essence_track->duration, - p->material_track->edit_rate.d * GST_SECOND, - p->material_track->edit_rate.n); - } else { - p->position = start; } - p->position_accumulated_error = 0.0; p->current_material_track_position = p->current_essence_track_position; return; @@ -4762,10 +4741,6 @@ } if (i == p->material_track->parent.sequence->n_structural_components) { - p->position = - gst_util_uint64_scale (sum, p->material_track->edit_rate.d * GST_SECOND, - p->material_track->edit_rate.n); - p->position_accumulated_error = 0.0; p->current_material_track_position = sum; gst_mxf_demux_pad_set_component (demux, p, i); @@ -4787,29 +4762,37 @@ p->current_essence_track->source_track->edit_rate.d * GST_SECOND); p->current_essence_track_position += essence_offset; - - p->position = gst_util_uint64_scale (sum, - GST_SECOND * p->material_track->edit_rate.d, - p->material_track->edit_rate.n) + gst_util_uint64_scale (essence_offset, - GST_SECOND * p->current_essence_track->source_track->edit_rate.d, - p->current_essence_track->source_track->edit_rate.n); - p->position_accumulated_error = 0.0; p->current_material_track_position = sum + essence_offset; } - if (p->current_essence_track_position >= p->current_essence_track->duration - && p->current_essence_track->duration > 0) { + if (p->current_essence_track->duration > 0 && + p->current_essence_track_position >= p->current_essence_track->duration) { p->current_essence_track_position = p->current_essence_track->duration; - p->position = - gst_util_uint64_scale (sum + p->current_component->parent.duration, - p->material_track->edit_rate.d * GST_SECOND, - p->material_track->edit_rate.n); - p->position_accumulated_error = 0.0; p->current_material_track_position = sum + p->current_component->parent.duration; } } +static GstClockTime +gst_mxf_demux_pad_get_current_time (GstMXFDemux * demux, GstMXFDemuxPad * p) +{ + if (!p->current_essence_track || !p->material_track) + return GST_CLOCK_TIME_NONE; + + guint64 current_edit_unit = + p->current_essence_track_position - p->current_component_start; + GstClockTime component_start_time = + gst_util_uint64_scale (p->current_component_start_position, + p->material_track->edit_rate.d * GST_SECOND, + p->material_track->edit_rate.n); + GstClockTime time = + component_start_time + gst_util_uint64_scale (current_edit_unit, + p->current_essence_track->source_track->edit_rate.d * GST_SECOND, + p->current_essence_track->source_track->edit_rate.n); + + return time; +} + static gboolean gst_mxf_demux_seek_push (GstMXFDemux * demux, GstEvent * event) { @@ -5263,12 +5246,6 @@ } else { new_offset = MIN (off, new_offset); if (position != p->current_essence_track_position) { - p->position -= - gst_util_uint64_scale (p->current_essence_track_position - - position, - GST_SECOND * p->current_essence_track->source_track->edit_rate.d, - p->current_essence_track->source_track->edit_rate.n); - p->position_accumulated_error = 0.0; p->current_material_track_position -= gst_util_uint64_scale (p->current_essence_track_position - position, @@ -5299,11 +5276,6 @@ demux->state = GST_MXF_DEMUX_STATE_KLV; } - if (G_UNLIKELY (demux->close_seg_event)) { - gst_event_unref (demux->close_seg_event); - demux->close_seg_event = NULL; - } - if (flush) { GstEvent *e; @@ -5311,13 +5283,6 @@ e = gst_event_new_flush_stop (TRUE); gst_event_set_seqnum (e, seqnum); gst_mxf_demux_push_src_event (demux, e); - } else { - GST_DEBUG_OBJECT (demux, "closing running segment %" GST_SEGMENT_FORMAT, - &demux->segment); - - /* Close the current segment for a linear playback */ - demux->close_seg_event = gst_event_new_segment (&demux->segment); - gst_event_set_seqnum (demux->close_seg_event, demux->seqnum); } /* Ok seek succeeded, take the newly configured segment */ @@ -5438,7 +5403,7 @@ pos = format == GST_FORMAT_DEFAULT ? mxfpad->current_material_track_position : - mxfpad->position; + gst_mxf_demux_pad_get_current_time (demux, mxfpad); GST_DEBUG_OBJECT (pad, "Returning position %" G_GINT64_FORMAT " in format %s", pos, @@ -5965,11 +5930,6 @@ demux->flowcombiner = NULL; } - if (demux->close_seg_event) { - gst_event_unref (demux->close_seg_event); - demux->close_seg_event = NULL; - } - g_free (demux->current_package_string); demux->current_package_string = NULL; g_free (demux->requested_package_string);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/mxf/mxfdemux.h -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/mxf/mxfdemux.h
Changed
@@ -119,8 +119,8 @@ MXFUMID source_package_uid; /* Position and duration in edit units */ - gint64 position; - gint64 duration; + guint64 position; + guint64 duration; GArray *offsets; @@ -196,10 +196,8 @@ guint32 track_id; gboolean need_segment; - GstClockTime position; - gdouble position_accumulated_error; /* Current position in the material track (in edit units) */ - gint64 current_material_track_position; + guint64 current_material_track_position; gboolean eos, discont; @@ -214,15 +212,15 @@ MXFMetadataSourceClip *current_component; /* Position in the material track where this component started */ - gint64 current_component_start_position; + guint64 current_component_start_position; /* Position/duration in the source track */ - gint64 current_component_start; - gint64 current_component_duration; + guint64 current_component_start; + guint64 current_component_duration; /* Current essence track and position (in edit units) */ GstMXFDemuxEssenceTrack *current_essence_track; - gint64 current_essence_track_position; + guint64 current_essence_track_position; }; struct _GstMXFDemuxPadClass @@ -250,8 +248,6 @@ GstSegment segment; guint32 seqnum; - GstEvent *close_seg_event; - guint64 offset; gboolean random_access;
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/gst/mxf/mxfmpeg.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/gst/mxf/mxfmpeg.c
Changed
@@ -566,6 +566,12 @@ 0x01,} }; +/* SMPTE RDD-9, Annex C, Table C.1 */ +static const MXFUL sony_mpeg_compression = { { + 0x06, 0x0E, 0x2B, 0x34, 0x04, 0x01, 0x01, 0x03, 0x0E, 0x06, 0x41, 0x02, + 0x01,} +}; + static const MXFUL sound_essence_compression_ac3 = { { 0x06, 0x0E, 0x2B, 0x34, 0x04, 0x01, 0x01, 0x01, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x01, 0x00} @@ -629,6 +635,8 @@ memcpy (mdata, &t, sizeof (MXFMPEGEssenceType)); *intra_only = FALSE; } else if (!mxf_ul_is_subclass (&video_mpeg_compression, + &p->picture_essence_coding) && + !mxf_ul_is_subclass (&sony_mpeg_compression, &p->picture_essence_coding)) { GST_ERROR ("Not MPEG picture essence coding %s", mxf_ul_to_string (&p->picture_essence_coding, str));
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/meson.build -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.26.9', + version : '1.26.10', meson_version : '>= 1.4', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/po/gst-plugins-bad-1.0.pot -> _service:download_files:gst-plugins-bad-1.26.10.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.9\n" +"Project-Id-Version: gst-plugins-bad-1.26.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-01 17:27+0000\n" +"POT-Creation-Date: 2025-12-25 15:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/curl/gstcurlhttpsrc.c:1442 +#: ext/curl/gstcurlhttpsrc.c:1483 msgid "No URL set." msgstr ""
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/po/gst-plugins-bad.pot -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.26.9\n" +"Project-Id-Version: gst-plugins-bad-1.26.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-01 17:27+0000\n" +"POT-Creation-Date: 2025-12-25 15:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/curl/gstcurlhttpsrc.c:1442 +#: ext/curl/gstcurlhttpsrc.c:1483 msgid "No URL set." msgstr ""
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/decklink/gstdecklinkvideosink.cpp -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/decklink/gstdecklinkvideosink.cpp
Changed
@@ -405,6 +405,13 @@ *ret = (LPVOID *) static_cast<IDeckLinkVideoFrameMetadataExtensions *>(this); return S_OK; } + else if (memcmp (&iid, &IID_IDeckLinkVideoFrame, sizeof (iid)) + == 0) { + AddRef (); + *ret = (LPVOID *) static_cast<IDeckLinkVideoFrame *>(this); + return S_OK; + } + return E_NOINTERFACE; }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codecav1dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codecav1dec.c
Changed
@@ -1297,7 +1297,7 @@ { GstV4l2CodecAV1Dec *self = GST_V4L2_CODEC_AV1_DEC (decoder); GstVideoCodecFrame *frame; - GstV4l2Request *request; + GstV4l2Request *request = NULL; GstBuffer *buffer; GstFlowReturn flow_ret; guint count = 1; @@ -1406,7 +1406,14 @@ return GST_FLOW_OK; fail: + if (request) + gst_v4l2_request_unref (request); + gst_v4l2_codec_av1_dec_reset_picture (self); + + if (flow_ret != GST_FLOW_OK) + return flow_ret; + return GST_FLOW_ERROR; }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codech264dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codech264dec.c
Changed
@@ -1116,6 +1116,8 @@ GstCodecPicture *codec_picture = GST_CODEC_PICTURE (picture); gint ret; + g_return_val_if_fail (request, GST_FLOW_ERROR); + if (codec_picture->discont_state) { if (!gst_video_decoder_negotiate (vdec)) { GST_ERROR_OBJECT (vdec, "Could not re-negotiate with updated state");
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codech265dec.c
Changed
@@ -1276,6 +1276,8 @@ GstCodecPicture *codec_picture = GST_CODEC_PICTURE (picture); gint ret; + g_return_val_if_fail (request, GST_FLOW_ERROR); + if (codec_picture->discont_state) { if (!gst_video_decoder_negotiate (vdec)) { GST_ERROR_OBJECT (vdec, "Could not re-negotiate with updated state");
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codecmpeg2dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codecmpeg2dec.c
Changed
@@ -747,6 +747,8 @@ GstCodecPicture *codec_picture = GST_CODEC_PICTURE (picture); gint ret; + g_return_val_if_fail (request, GST_FLOW_ERROR); + if (codec_picture->discont_state) { if (!gst_video_decoder_negotiate (vdec)) { GST_ERROR_OBJECT (vdec, "Could not re-negotiate with updated state");
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codecvp8dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codecvp8dec.c
Changed
@@ -667,7 +667,7 @@ { GstV4l2CodecVp8Dec *self = GST_V4L2_CODEC_VP8_DEC (decoder); GstVideoCodecFrame *frame; - GstV4l2Request *request; + GstV4l2Request *request = NULL; GstBuffer *buffer; GstFlowReturn flow_ret = GST_FLOW_OK; gsize bytesused; @@ -734,6 +734,9 @@ return GST_FLOW_OK; fail: + if (request) + gst_v4l2_request_unref (request); + gst_v4l2_codec_vp8_dec_reset_picture (self); if (flow_ret != GST_FLOW_OK) @@ -801,6 +804,8 @@ GstCodecPicture *codec_picture = GST_CODEC_PICTURE (picture); gint ret; + g_return_val_if_fail (request, GST_FLOW_ERROR); + if (codec_picture->discont_state) { if (!gst_video_decoder_negotiate (vdec)) { GST_ERROR_OBJECT (vdec, "Could not re-negotiate with updated state");
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/v4l2codecs/gstv4l2codecvp9dec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/v4l2codecs/gstv4l2codecvp9dec.c
Changed
@@ -958,6 +958,10 @@ gst_v4l2_request_unref (request); gst_v4l2_codec_vp9_dec_reset_picture (self); + + if (flow_ret != GST_FLOW_OK) + return flow_ret; + return GST_FLOW_ERROR; }
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/sys/va/gstvabasedec.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/sys/va/gstvabasedec.c
Changed
@@ -484,7 +484,13 @@ gboolean has_videometa, has_video_crop_meta; gboolean dont_use_other_pool = FALSE, ret = FALSE; - g_assert (base->min_buffers > 0); + if (base->min_buffers == 0) { + GST_DEBUG_OBJECT (base, + "Don't know minimum number of required buffers yet"); + return + GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS + (decoder))->decide_allocation (decoder, query); + } gst_query_parse_allocation (query, &caps, NULL);
View file
_service:download_files:gst-plugins-bad-1.26.9.tar.xz/tests/check/elements/curlhttpsrc.c -> _service:download_files:gst-plugins-bad-1.26.10.tar.xz/tests/check/elements/curlhttpsrc.c
Changed
@@ -698,6 +698,7 @@ GstElement *pipe; HttpSrcTestDownloader *downloader1; HttpSrcTestDownloader *downloader2; + gboolean started; gboolean failed; } MultipleHttpRequestsContext; @@ -716,30 +717,43 @@ switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_STATE_CHANGED: gst_message_parse_state_changed (msg, NULL, &newstate, &pending); - if (newstate == GST_STATE_PLAYING && pending == GST_STATE_VOID_PENDING && - GST_MESSAGE_SRC (msg) == GST_OBJECT (context->pipe)) { - GST_DEBUG ("Test ready to start"); - start_next_download (context->downloader1); - if (context->downloader2) - start_next_download (context->downloader2); - } else if (newstate == GST_STATE_READY - && pending == GST_STATE_VOID_PENDING) { - if (GST_MESSAGE_SRC (msg) == GST_OBJECT (context->downloader1->bin)) { - if (++context->downloader1->count < 20) { - start_next_download (context->downloader1); - } - } else if (context->downloader2 && GST_MESSAGE_SRC (msg) == - GST_OBJECT (context->downloader2->bin)) { - if (++context->downloader2->count < 20) { + if (pending == GST_STATE_VOID_PENDING) { + if (newstate == GST_STATE_PLAYING && !context->started && + GST_MESSAGE_SRC (msg) == GST_OBJECT (context->pipe)) { + GST_DEBUG ("Test ready to start"); + context->started = TRUE; + start_next_download (context->downloader1); + if (context->downloader2) start_next_download (context->downloader2); + } else if (newstate == GST_STATE_READY && context->started) { + if (GST_MESSAGE_SRC (msg) == GST_OBJECT (context->downloader1->bin)) { + if (++context->downloader1->count < 20) { + start_next_download (context->downloader1); + } + } else if (context->downloader2 && GST_MESSAGE_SRC (msg) == + GST_OBJECT (context->downloader2->bin)) { + if (++context->downloader2->count < 20) { + start_next_download (context->downloader2); + } + } + if (context->downloader1->count == 20 && + (context->downloader2 == NULL + || context->downloader2->count == 20)) { + g_main_loop_quit (context->loop); + } + } else if (newstate == GST_STATE_PAUSED && context->started) { + if (GST_MESSAGE_SRC (msg) == GST_OBJECT (context->downloader1->bin)) { + gst_element_set_state (context->downloader1->bin, + GST_STATE_PLAYING); + } else if (context->downloader2 + && GST_MESSAGE_SRC (msg) == + GST_OBJECT (context->downloader2->bin)) { + gst_element_set_state (context->downloader2->bin, + GST_STATE_PLAYING); } - } - if (context->downloader1->count == 20 && - (context->downloader2 == NULL - || context->downloader2->count == 20)) { - g_main_loop_quit (context->loop); } } + break; case GST_MESSAGE_ERROR: debug = NULL; @@ -781,6 +795,7 @@ guint watch_id; GstBus *bus; + context.started = FALSE; context.loop = g_main_loop_new (NULL, FALSE); context.downloader1 = test_curl_http_src_downloader_new ("bin1", 5 * G_USEC_PER_SEC / 1000); @@ -844,6 +859,7 @@ gulong probe_id; DataProbeResult dpr; + context.started = FALSE; context.loop = g_main_loop_new (NULL, FALSE); context.downloader1 = test_curl_http_src_downloader_new ("bin1", 5 * G_USEC_PER_SEC / 1000); @@ -874,8 +890,8 @@ g_main_loop_run (context.loop); fail_unless_equals_uint64 (dpr.received, - 1 + context.downloader1->stop_position - - context.downloader1->start_position); + 20 * (1 + context.downloader1->stop_position - + context.downloader1->start_position)); g_source_remove (watch_id); gst_pad_remove_probe (src_pad, probe_id); gst_object_unref (src_pad);
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
.