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