Bug#1092940: release.debian.org: package gstreamer1.0/1.22.12-0~deb12u1
Package: release.debian.org
Severity: normal
[Reason]
Discussion during DSA preparation where 1.22.12 carries CVE fixes and
important bugfixes.
[ Impact ]
CVE/segfaults, stability improvements
[ Tests ]
Only selected patches not yet in the LTE 1.22.12 release have been
added. Respective issues have been tested in the upstream stable release
(1.24.x) and the LTS releases.
[ Risks ]
Low. The LTS 1.22.12 is very selective in the patches added (bugfixes
and CVEs)
[ Checklist ]
[ ] The changes are documented in detail in the changelog
(/usr/share/doc/libgstreamer1.0-0/changelog.gz)
[X] The changes were reviewed together with the GStreamer packaging
team
[X] attach debdiff against the package in (old)stable
[X] the issue is verified as fixed in unstable
[ Changes ]
Bump release base LTS release from 1.22.0 to 1.22.12+
diff -Nru gstreamer1.0-1.22.0/ChangeLog gstreamer1.0-1.22.12/ChangeLog
--- gstreamer1.0-1.22.0/ChangeLog 2023-01-23 20:29:57.703900600 +0100
+++ gstreamer1.0-1.22.12/ChangeLog 2024-04-29 21:10:09.511509200 +0200
@@ -1,3 +1,751 @@
+=== release 1.22.12 ===
+
+2024-04-29 20:09:52 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.12
+
+2024-03-27 17:05:09 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/base/gstbasesrc.c:
+ basesrc: Clear submitted buffer lists consistently with buffers
+ And handle the case of a NULL buffer being returned cleanly, which is
+ valid as long as a buffer list is returned instead. Previously this
+ would cause an assertion because of calling gst_buffer_unref() with
+ NULL.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6462>
+
+2024-03-19 08:57:43 -0400 Thomas Goodwin <thomas.goodwin@laerdal.com>
+
+ * tests/check/tools/gstinspect.c:
+ * tools/gst-inspect.c:
+ gst-inspect: fix --atleast-version to be implicitly applied to --exists
+ The --atleast-version implies --exists, but the implementation in
+ earlier commits had the version check applied any time the --exists was
+ checked, and the default value of the major and minor versions were set
+ to the GStreamer major and minor versions. The resulting behavior would
+ have gst-inspect return '1' if the plugin's version didn't match
+ gstreamer's even when --atleast-version was not specified in the command
+ line args. The change in this patch removes that behavior and adds
+ tests to verify that if --exists is specified WITHOUT --atleast-version
+ the version check will NOT be applied. If both arguments are specified
+ and the version does not match the arg-supplied version number, a new
+ return code of '2' is used to uniquely identify the failure.
+ Fixes #3246
+ Signed-off-by: Thomas Goodwin <thomas.goodwin@laerdal.com>
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6415>
+
+2024-03-26 14:28:28 +0100 Arnaud Vrac <avrac@freebox.fr>
+
+ * plugins/elements/gstinputselector.c:
+ inputselector: fix possible clock leak on shutdown
+ Avoid leaking a GstClock object on shutdown, bail out before taking the ref when
+ not playing.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6458>
+
+2024-03-26 19:40:04 +0530 Taruntej Kanakamalla <taruntej@asymptotic.io>
+
+ * libs/gst/net/gstptpclock.c:
+ net/gstptpclock: fix double free of domain data during deinit
+ The attempt to free the domain data is happeing twice during the ptp deinit.
+ Once while iterating through the list domain_data and second while iterating
+ through the list domain_clocks, so this is crashing the application
+ trying to gst_ptp_deinit
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6459>
+
+2024-03-20 00:07:00 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6408>
+
+=== release 1.22.11 ===
+
+2024-03-19 22:01:08 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.11
+
+2024-03-13 19:12:48 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/net/gstptpclock.c:
+ ptp: Initialize expected DELAY_REQ seqnum to an invalid value
+ This allows distinguishing pending syncs that didn't have a DELAY_REQ
+ sent from ones that did but used a seqnum of 0, like the very first one.
+ Specifically, if the first one or more syncs are still pending and we
+ send the first DELAY_REQ for a later pending sync, then the DELAY_RESP
+ would've been wrongly associated to the very first pending sync because
+ of the seqnum.
+ Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3383
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6368>
+
+2024-02-27 18:59:41 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * gst/gsturi.c:
+ gsturi: Sort by feature name to break a feature rank tie
+ This matches autoplug in other places such as decodebin, otherwise we
+ will pick "randomly" based on the order in which plugins are
+ registered, which is mostly dependent on the order in which readdir()
+ returns items.
+ So let's make it predictable.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6348>
+
+2024-03-08 17:05:34 +1100 Jan Schmidt <jan@centricular.com>
+
+ * plugins/elements/gstidentity.c:
+ identity: Don't refuse seeks unless single-segment=true
+ identity only needs to configure the internal seek segment if it's
+ aggregating upstream segments into 1. If it's not, don't break
+ other seek behaviour by refusing (for example) instant-rate change
+ seeks.
+ Fixes: #3363
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6307>
+
+2024-02-25 04:26:21 +1100 Jan Schmidt <jan@centricular.com>
+
+ * gst/gstsegment.c:
+ gstsegment: Don't use g_return_val_if_fail()
+ Don't use g_return_val_if_fail() to catch the
+ open-ended segment or empty segment cases in
+ gst_segment_to_running_time_full()
+ g_return_val_if_fail() is for programmer errors,
+ and can be compiled out with a flag.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6279>
+
+2024-02-13 16:27:38 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6111>
+
+=== release 1.22.10 ===
+
+2024-02-13 14:39:08 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.10
+
+2024-01-26 19:12:18 +0100 Piotr Brzeziński <piotr@centricular.com>
+
+ * gst/gstmacos.m:
+ macos: Fix gst_macos_main() terminating whole process before returning a value
+ Removes the usage of [NSApp terminate] to avoid killing the process and thus never actually returning a value.
+ The new way is just to use [NSApp stop] and send an event, since stop only happens after an event is processed.
+ Unlike terminate, stop will only halt the event loop, not the whole process.
+ This uses an NSApplicationDelegate to listen for NSApp finishing the launch process, and then signals the 'main' thread
+ to proceed. That makes sure to never call [NSApp stop] before NSApp is actually running, which could happen if the
+ provided 'main' function finished quickly enough.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6103>
+
+2023-04-03 13:51:38 +0100 Lukas Geiger <lukas.geiger94@gmail.com>
+
+ * gst/gstmacos.m:
+ macos: Set activation policy in `gst_macos_main`
+ Setting the policy to NSApplicationActivationPolicyAccessory by default makes
+ sure that we can activate windows programmatically or by clicking on them.
+ Without that, windows would disappear if you clicked outside them and there
+ would be no way to bring them to front again. This change also allows osxvideosink
+ to receive navigation events correctly.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6103>
+
+2024-02-05 18:37:59 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstpad.c:
+ pad: Copy over seqnum when creating a new segment event for applying pad offset
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6067>
+
+2023-11-21 19:54:32 -0300 Thibault Saunier <tsaunier@igalia.com>
+
+ * libs/gst/base/gstbasesink.c:
+ basesink: Preroll on out of segment buffers when not dropping them
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6045>
+
+2024-01-25 00:18:12 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5990>
+
+=== release 1.22.9 ===
+
+2024-01-24 18:21:13 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.9
+
+2023-12-12 23:55:04 +0100 Alexander Slobodeniuk <aslobodeniuk@fluendo.com>
+
+ * libs/gst/base/gstaggregator.c:
+ * tests/check/libs/aggregator.c:
+ aggregator: fix use-after-free in queries processing
+ Test included.
+ The problem appears when aggregator drops the query while
+ it's being proccessed by the klass->sink_query handler.
+ This can happen on FLUSH_START event. If the query is still
+ in the queue, it can be safely dropped, but if it's already
+ in the klass->sink_query() handler, then sink pad has no
+ choice and has to wait for the proccessing to complete.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5958>
+
+2023-12-10 03:25:57 +1100 Jan Schmidt <jan@centricular.com>
+
+ * plugins/elements/gstmultiqueue.c:
+ multiqueue: Ignore queue fullness for most events
+ Use gst_data_queue_push_force() for most events so they
+ are immediately enqueued. Only gap events and actual buffer
+ data will now block when the queue is full.
+ This fixes a problem with non-flushing seek handling
+ where events following a segment-done event would block
+ if they precede the SEGMENT event, since only SEGMENT
+ events would clear the 'eos' state of the multiqueue
+ queue.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5954>
+
+2023-12-18 13:52:12 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5826>
+
+=== release 1.22.8 ===
+
+2023-12-18 12:09:37 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.8
+
+2023-11-27 13:16:47 +0100 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: Reset metadata for reverse playback fragment buffers
+ Don't let the adapter leak uncontrollable values.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5720>
+
+2023-11-27 12:29:08 +0100 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: Add missing gst_buffer_make_writable
+ When the subclass attempts to finish without an explicit `out_buffer`,
+ we take a buffer from our adapter. We need to make this buffer writable
+ before copying the metadata.
+ This led to data races such as in the following pipeline, which randomly
+ messed up the buffer PTS:
+ gst-launch-1.0 -e audiotestsrc timestamp-offset=5555 num-buffers=100 \
+ ! opusenc ! tee name=t ! queue ! opusparse ! fakesink silent=0 \
+ t. ! queue ! opusparse ! fakesink silent=0 -v | grep '0000, dur'
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5720>
+
+2023-03-15 09:11:51 -0400 Xavier Claessens <xavier.claessens@collabora.com>
+
+ * gst/gstbuffer.c:
+ * tests/check/gst/gstbufferpool.c:
+ gstbuffer: Add parent meta when a copy shares memory with parent
+ When copying a buffer, for example with gst_buffer_make_writable(), the
+ new buffer might reference the same GstMemory as the src buffer,
+ making those memories not writable. If the src buffer gets disposed
+ first it should return to its buffer pool, but since some of its
+ memories are not writable it gets discarded and new buffer/memory gets
+ allocated.
+ Solves this by making the new buffer keep a reference to the src buffer,
+ that ensures that by the time the src buffer gets disposed no other
+ buffer are referencing its memories and it can thus return safely to its
+ pool.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5696>
+
+2023-03-09 22:18:12 -0800 Xavier Claessens <xavier.claessens@collabora.com>
+
+ * gst/gstbuffer.c:
+ * tests/check/gst/gstbufferpool.c:
+ gstbuffer: Unref memories before metas
+ gst_buffer_add_parent_buffer_meta() is used when a GstBuffer uses
+ GstMemory from another buffer that was allocated from a pool. In that
+ case we want to make sure the buffer returns to the pool when the memory
+ is writable again, otherwise a copy of the memory is created. That means
+ the child buffer must drop its ref to the memory first, then drop the
+ ref to parent buffer so it can return to the pool when it is the only
+ owner of the memory.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5696>
+
+2023-11-15 10:03:52 +0000 Daniel Moberg <daniemob@axis.com>
+
+ * gst/gstpad.c:
+ gstpad: Recheck pads when linking after temporary unlock
+ This commit makes sure that pads are valid for linking
+ after the pads has been temporarily unlocked in the linking process.
+ Not doing this opens up for a race condition where
+ pads potentially can be linked twice.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5678>
+
+2023-11-13 14:57:09 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5650>
+
+=== release 1.22.7 ===
+
+2023-11-13 11:04:22 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.7
+
+2023-10-25 13:58:55 +0100 Philippe Normand <philn@igalia.com>
+
+ * gst/gstdebugutils.c:
+ debugutils: Ensure we always expose a bin_to_dot_data implementation
+ Fixes a linking issue when building with `-Dgst_debug=false`.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5563>
+
+2023-10-19 19:44:21 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/base/gstaggregator.c:
+ aggregator: Allow passing unparented pads to gst_aggregator_pad_is_inactive()
+ It's very difficult to ensure that a pad is still child of the
+ aggregator during aggregation, so simply consider unparented pads as
+ inactive instead of asserting.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5553>
+
+2023-10-19 19:43:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/base/gstaggregator.c:
+ aggregator: Also release clipped buffer when releasing an aggregator pad
+ Instead of waiting until the pad is actually finalized.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5553>
+
+2023-10-19 19:43:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/base/gstaggregator.c:
+ aggregator: Take pad lock while releasing buffers when removing pads
+ Accessing the buffers in all other places requires the pad lock and not
+ taking it here can cause access to already freed buffers if there's
+ concurrent access from another thread.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5553>
+
+2023-09-20 19:41:00 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5371>
+
+=== release 1.22.6 ===
+
+2023-09-20 18:10:57 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.6
+
+2023-03-28 19:58:30 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tools/gst-inspect.c:
+ tools: gst-inspect: print action signals as emit_by_name() invocations
+ It's quite confusing to print a function callback signature for
+ action signals when people need to do a g_signal_by_name() invocation
+ in order to use this feature. Requires too much background knowledge
+ about how GObject works under the hood to make sense of that.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5206>
+
+2023-03-29 16:46:43 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tools/gst-inspect.c:
+ tools: gst-inspect: prettify type names for strings
+ 'gchararray' and 'GStrv' are not types used anywhere else
+ and are just confusing. Map that to 'const gchar *' and 'gchar *'
+ etc. depending on context.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5206>
+
+2023-03-28 19:56:14 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tools/gst-inspect.c:
+ tools: gst-inspect: add vertical spacing between properties and signals
+ Makes it easier to read and less squashed.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5206>
+
+2023-08-15 16:01:28 +0200 Piotr Brzeziński <piotr@centricular.com>
+
+ * tools/gst-launch.c:
+ tools: Disable fault signal handlers in gst-launch/gst-validate on macOS
+ By default, macOS attempts to run lldb against a misbehaving process to handle the crash. This does not play well
+ with the SISEGV/SIGQUIT handler we add in gst-launch/gst-validate. The 'spinning' mechanism causes the lldb
+ and debugserver processes ran by macOS to misbehave, taking 100% CPU and rendering both themselves and the GStreamer
+ instance frozen and very hard to effectively kill. macOS's Activity Monitor is also unusable while this is happening.
+ This patch takes the quickest possible solution of just disabling those signal handlers entirely on macOS.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5201>
+
+2023-07-20 16:57:47 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5082>
+
+=== release 1.22.5 ===
+
+2023-07-20 15:22:48 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.5
+
+2023-07-17 15:18:39 +0100 Philippe Normand <philn@igalia.com>
+
+ * gst/gstquery.c:
+ query: Add a quark for SELECTABLE query type
+ So that `gst_query_type_get_name()` won't return "unknown" for this type.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5067>
+
+2023-03-26 16:40:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/gsttaglist.c:
+ taglist, plugins: fix compiler warnings with GLib >= 2.76
+ Fix compiler warnings about not using the return value when
+ freeing the GString segment with g_string_free(.., FALSE):
+ ignoring return value of ‘g_string_free_and_steal’ declared with attribute ‘warn_unused_result’
+ which we get with newer GLib versions. These were all harmless.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5015>
+
+2023-07-06 18:08:57 +0200 Théo Maillart <tmaillart@freebox.fr>
+
+ * plugins/elements/gstinputselector.c:
+ inputselector: fix playing variable is never set
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4988>
+
+2023-02-16 13:44:50 +0100 Guillaume Desmottes <guillaume.desmottes@onestream.live>
+
+ * gst/gsttracerutils.c:
+ tracerutils: allow casting parameters types
+ It was impossible to have an u32 parameter such as
+ 'max-buffer-size=(uint)5' because the parentheses were not properly
+ parsed.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4941>
+
+2023-06-20 19:10:38 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4907>
+
+=== release 1.22.4 ===
+
+2023-06-20 17:42:25 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.4
+
+2023-06-09 17:51:28 +0800 Elliot Chen <elliot.chen@nxp.com>
+
+ * libs/gst/base/gsttypefindhelper.c:
+ typefindhelper: avoid printing error log
+ some plugins such as wavparse may need find if type of media
+ contained in the given data and will print error log if there
+ is no matching factory.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4859>
+
+2023-06-09 10:28:43 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/helpers/gst-ptp-helper.c:
+ ptp: Correctly parse clock ID from the commandline parameters in the helper
+ Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2652
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4813>
+
+2023-06-08 20:52:21 +0900 Seungha Yang <seungha@centricular.com>
+
+ * plugins/elements/gstelements_private.c:
+ * tests/check/elements/filesink.c:
+ filesink: Fix buffered mode writing
+ Fixing miscalculated buffer index when a buffer holds multiple
+ memories and it's not aligned to the vector size 16
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4817>
+
+2023-06-06 20:44:02 +0900 Seungha Yang <seungha@centricular.com>
+
+ * tests/check/libs/basesink.c:
+ tests: basesink: Add STREAM-START after EOS test
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4797>
+
+2023-06-06 04:42:05 +0900 Seungha Yang <seungha@centricular.com>
+
+ * libs/gst/base/gstbasesink.c:
+ basesink: Clear EOS flag on STREAM-START event
+ EOS -> STREAM-START -> new data flow is valid scenario
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4797>
+
+2023-06-01 14:49:06 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * gst/gstinfo.c:
+ docs: Use backticks to escape * in markdown
+ Otherwise it's interpreted as emphasis.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4763>
+
+2023-05-17 10:01:30 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * libs/gst/net/gstptpclock.c:
+ ptp: Work around bug in ptpd in default configuration
+ ptpd is defaulting to the hybrid mode, and was sending invalid multicast
+ PTP messages in that configuration until ce96c742a88792a8d92deebaf03927e1b367f4a9.
+ While this commit was made in 2015 there was no release in the meantime.
+ Work around this by detecting this case and defaulting to the default
+ values for the given intervals as given by the PTP standard.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4683>
+
+2023-05-19 12:36:19 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4679>
+
+=== release 1.22.3 ===
+
+2023-05-19 09:23:19 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * README.md:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.3
+
+2023-05-12 18:35:48 +0200 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * gst/parse/grammar.y.in:
+ parse/grammar: fix missing unref of looked up child
+ the target parameter of gst_child_proxy_lookup() is (transfer full)
+ Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2560
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4624>
+
+2023-03-28 16:13:51 +0200 Juan Navarro <juan.navarro@gmx.es>
+
+ * gst/gstutils.c:
+ gstutils: Add category and object to most logging messages
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4615>
+
+2023-04-12 10:58:31 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gst.c:
+ gst: tracer: Initialize tracing infrastructure even if the debug system is not compiled in
+ There is a separate #define for the tracing infrastructure.
+ Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2467
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4424>
+
+2023-04-12 00:31:17 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.22.2 ===
+
+2023-04-11 17:29:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.2
+
+2023-04-10 13:49:41 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/sr.po:
+ gstreamer: update translations
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4390>
+
+2023-03-31 04:40:58 +0900 Seungha Yang <seungha@centricular.com>
+
+ * tools/gst-inspect.c:
+ * tools/gst-launch.c:
+ * tools/gst-stats.c:
+ * tools/gst-typefind.c:
+ tools: Count argc after parsing GOption on Windows
+ Existing codes rely on modified argc value by g_option_context_parse()
+ but g_option_context_parse_strv() is used in case of Windows.
+ Count arguments after the option parsing manually.
+ Fixing command "gst-inspect-1.0.exe -b"
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4322>
+
+2023-03-24 18:34:36 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstdatetime.c:
+ datetime: Return G_MAXFLOAT instead of G_MAXDOUBLE for no timezone offset
+ Returning G_MAXDOUBLE from a function returning a float is not going to
+ work well and MSVC also correctly warns about this.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4285>
+
+2023-03-16 12:38:23 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * plugins/elements/gstinputselector.c:
+ inputselector: Wake up streaming thread before PLAYING_TO_PAUSED transition
+ Also take object lock before iterating the pads.
+ https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1772
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4196>
+
+2023-03-04 16:13:04 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
+=== release 1.22.1 ===
+
+2023-03-04 13:42:32 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * NEWS:
+ * RELEASE:
+ * gstreamer.doap:
+ * meson.build:
+ Release 1.22.1
+
+2023-03-02 15:51:08 +0200 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * plugins/elements/gstinputselector.c:
+ * plugins/elements/gstinputselector.h:
+ inputselector: Avoid deadlock when shutting down
+ Transition from PLAYING to PAUSED unschedules any pending clock wait,
+ but there was no guard that prevented another input buffer then waiting
+ again while in PAUSED before dataflow stops. Use a new `playing` flag to
+ avoid this, and exit the chain function if instead of playing we're now
+ flushing. Basically the same as the clocksync element.
+ Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1772
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4099>
+
+2023-01-28 02:32:13 +0900 Seungha Yang <seungha@centricular.com>
+
+ * tools/gst-inspect.c:
+ * tools/gst-launch.c:
+ * tools/gst-stats.c:
+ * tools/gst-typefind.c:
+ tools: Make sure UTF-8 encoded command line arguments on Windows
+ On Windows, arguments passed in main() are system codepage
+ encoded and might not be valid UTF-8 string.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4072>
+
+2023-02-21 20:13:57 -0700 James Hilliard <james.hilliard1@gmail.com>
+
+ * gst/gstbuffer.c:
+ buffer: fix copy meta reference debug log formatting
+ Fixes the following valgrind error:
+ ==616== Conditional jump or move depends on uninitialised value(s)
+ ==616== at 0x4900E34: gst_debug_print_object (gstinfo.c:1143)
+ ==616== by 0x49010B6: gst_info_printf_pointer_extension_func (gstinfo.c:1215)
+ ==616== by 0x4959FDB: __gst_printf_pointer_extension_serialize (printf-extension.c:47)
+ ==616== by 0x495A487: printf_postprocess_args (vasnprintf.c:258)
+ ==616== by 0x495A52C: __gst_vasnprintf (vasnprintf.c:290)
+ ==616== by 0x4959F8F: __gst_vasprintf (printf.c:154)
+ ==616== by 0x4901C1F: gst_debug_message_get (gstinfo.c:791)
+ ==616== by 0x4901C75: _gst_debug_log_preamble (gstinfo.c:1431)
+ ==616== by 0x4903208: gst_debug_log_default (gstinfo.c:1575)
+ ==616== by 0x49020BA: gst_debug_log_full_valist (gstinfo.c:624)
+ ==616== by 0x490211D: gst_debug_log_valist (gstinfo.c:656)
+ ==616== by 0x49021AD: gst_debug_log (gstinfo.c:533)
+ ==616== by 0x48DDC11: gst_buffer_copy_into (gstbuffer.c:693)
+ ==616== by 0x48DF5F1: gst_buffer_copy_with_flags (gstbuffer.c:727)
+ ==616== by 0x48DF640: gst_buffer_copy_deep (gstbuffer.c:756)
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4038>
+
+2023-02-22 11:51:58 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/fur.po:
+ gstreamer: update translations
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4041>
+
+2023-02-09 13:53:48 +0100 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * gst/gstpad.c:
+ pad: Don't leak user_data in gst_pad_start_task
+ When the task already exists, we forgot to free the passed `user_data`.
+ This wasn't an issue for most C code, which doesn't pass a
+ `GDestroyNotify`, but bindings such as gstreamer-rs do!
+ That said, allocating a trampoline in gstreamer-rs just for it to get
+ thrown away again is awkward. Maybe we need a `gst_pad_resume_task`?
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3925>
+
+2023-02-07 13:43:06 +0000 medithe <medithe@gmx.at>
+
+ * gst/gstbin.c:
+ gstreamer: bin: Don't unlock unlocked mutex in gst_bin_remove_func()
+ Calling `g_mutex_unlock(mutex)` leads to an undefined behavior if the
+ mutex is not locked by the current thread.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3910>
+
+2023-01-27 19:29:24 +0100 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * libs/gst/base/gstbasesrc.h:
+ BaseSrc: fix transfer annotation for fixate virtual method
+ The fixate virtual method has the same semantics as gst_caps_fixate(),
+ so the caps parameter must be marked as (transfer full).
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3839>
+
+2023-01-26 15:42:18 +0100 Mathieu Duponchelle <mathieu@centricular.com>
+
+ * libs/gst/base/gstbasesrc.h:
+ * libs/gst/base/gstpushsrc.h:
+ BaseSrc, PushSrc: add nullable annotations to virtual methods
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3833>
+
+2023-01-26 10:33:26 +0100 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * libs/gst/base/gstaggregator.c:
+ aggregator: Warn about the right segment's format
+ We were checking the head segment here, not the current segment.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3819>
+
+2020-09-02 17:59:30 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+ * libs/gst/base/gstaggregator.c:
+ aggregator: Always lock aggpad around update_time_level
+ `aggpad->segment` is protected by the `aggpad`'s object lock. We need to
+ take the lock before calling `update_time_level`.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3819>
+
+2023-01-25 13:26:08 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gsttypefind.c:
+ gst: Fix gst_type_find_peek() return value annotation
+ It's not possible to annotate a in-parameter for a return value array as
+ the array length. Both are assumed to have the same direction and the
+ current annotation causes the size parameter to be considered an out
+ parameter.
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3814>
+
+2023-01-23 17:26:07 +0100 Edward Hervey <edward@centricular.com>
+
+ * plugins/elements/gstmultiqueue.c:
+ multiqueue: Handle use-interleave latency live pipelines
+ Due to the dynamic nature of multiqueue, when `use-interleave` is used we can't
+ report a maximum tolerated latency (when queried) since it is calculated
+ dynamically.
+ When in such live pipelines, we need to make sure multiqueue can handle the
+ lowest global latency (provided by this event). Failure to do that would
+ result in not providing enough buffering for a realtime pipeline.
+ Fixes #1732
+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3810>
+
+2023-01-25 16:46:42 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * meson.build:
+ Back to development
+
=== release 1.22.0 ===
2023-01-23 19:29:34 +0000 Tim-Philipp Müller <tim@centricular.com>
diff -Nru gstreamer1.0-1.22.0/debian/changelog gstreamer1.0-1.22.12/debian/changelog
--- gstreamer1.0-1.22.0/debian/changelog 2024-12-13 06:13:42.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/changelog 2025-01-03 18:28:30.000000000 +0100
@@ -1,9 +1,95 @@
-gstreamer1.0 (1.22.0-2+deb12u1) bookworm-security; urgency=high
+gstreamer1.0 (1.22.12-0+deb12u1) stable; urgency=medium
- * Non-maintainer upload by the Security Team.
- * allocator: Avoid integer overflow when allocating sysmem (CVE-2024-47606)
+ * d/patches: import stable release patch
+ * d/gbp: adjust for bookworm import
+ * New upstream version 1.22.12
- -- Salvatore Bonaccorso <carnil@debian.org> Fri, 13 Dec 2024 06:13:42 +0100
+ -- Marc Leeman <marc.leeman@gmail.com> Fri, 03 Jan 2025 18:28:30 +0100
+
+gstreamer1.0 (1.22.10-1) unstable; urgency=medium
+
+ * d/watch: pin master releases on 1.22.x
+ * New upstream version 1.22.10
+ * d/control: pkg-config is transitional
+
+ -- Marc Leeman <marc.leeman@gmail.com> Wed, 14 Feb 2024 10:19:25 +0100
+
+gstreamer1.0 (1.22.9-1) unstable; urgency=medium
+
+ * New upstream version 1.22.9
+
+ -- Marc Leeman <m.leeman@televic.com> Thu, 01 Feb 2024 10:05:16 +0100
+
+gstreamer1.0 (1.22.8-1) unstable; urgency=medium
+
+ * Team upload.
+ * New upstream version 1.22.8
+
+ -- Marc Leeman <marc.leeman@gmail.com> Mon, 18 Dec 2023 15:41:12 +0100
+
+gstreamer1.0 (1.22.7-1) unstable; urgency=medium
+
+ [ Marc Leeman ]
+ * New upstream version 1.22.7
+ * d/lintian-overrides: hide warnings
+ * Team upload.
+
+ [ Aurelien Jarno ]
+ * Enable libunwind on riscv64 (Closes: #1057048)
+
+ [ Debian Janitor ]
+ * Remove constraints unnecessary since buster (oldstable)
+
+ -- Marc Leeman <marc.leeman@gmail.com> Tue, 14 Nov 2023 14:01:28 +0100
+
+gstreamer1.0 (1.22.6-1) unstable; urgency=medium
+
+ * Team upload
+ * New upstream bugfix release
+
+ -- Jeremy Bícha <jbicha@ubuntu.com> Mon, 25 Sep 2023 13:04:27 -0400
+
+gstreamer1.0 (1.22.5-1) unstable; urgency=medium
+
+ * Team upload
+ * New upstream release
+
+ -- Jeremy Bícha <jbicha@ubuntu.com> Tue, 15 Aug 2023 11:15:42 -0400
+
+gstreamer1.0 (1.22.4-1) unstable; urgency=medium
+
+ * Team upload
+ * New upstream release
+
+ -- Jeremy Bícha <jbicha@ubuntu.com> Fri, 30 Jun 2023 11:36:07 -0400
+
+gstreamer1.0 (1.22.3-2) unstable; urgency=medium
+
+ * Team upload
+ * Release to unstable
+
+ -- Jeremy Bícha <jbicha@ubuntu.com> Mon, 12 Jun 2023 14:48:37 -0400
+
+gstreamer1.0 (1.22.3-1) experimental; urgency=medium
+
+ * Team upload
+ * New upstream release
+
+ -- Jeremy Bícha <jbicha@ubuntu.com> Fri, 19 May 2023 12:06:27 -0400
+
+gstreamer1.0 (1.22.2-1) experimental; urgency=medium
+
+ * Team upload
+ * New upstream bugfix release (LP: #2015943)
+
+ -- Jeremy Bicha <jbicha@ubuntu.com> Wed, 12 Apr 2023 11:47:38 -0400
+
+gstreamer1.0 (1.22.1-1) experimental; urgency=medium
+
+ * Team upload
+ * New upstream bugfix release (LP: #2015129)
+
+ -- Jeremy Bicha <jbicha@ubuntu.com> Mon, 03 Apr 2023 16:03:42 -0400
gstreamer1.0 (1.22.0-2) unstable; urgency=medium
diff -Nru gstreamer1.0-1.22.0/debian/control gstreamer1.0-1.22.12/debian/control
--- gstreamer1.0-1.22.0/debian/control 2024-12-13 06:09:16.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/control 2025-01-03 17:45:54.000000000 +0100
@@ -3,22 +3,22 @@
Priority: optional
Maintainer: Maintainers of GStreamer packages <gstreamer1.0@packages.debian.org>
Uploaders: Sebastian Dröge <slomo@debian.org>,
- Sjoerd Simons <sjoerd@debian.org>
+ Sjoerd Simons <sjoerd@debian.org>,
+ Marc Leeman <marc.leeman@gmail.com>,
Build-Depends: debhelper-compat (= 13),
dh-sequence-gir,
- dpkg-dev (>= 1.15.1),
meson (>= 0.62),
- pkg-config (>= 0.11.0),
+ pkgconf,
perl-doc,
- zlib1g-dev (>= 1:1.1.4),
- libglib2.0-dev (>= 2.62.0),
+ zlib1g-dev,
+ libglib2.0-dev,
libgmp-dev <!nocheck> | libgmp3-dev <!nocheck>,
libgsl-dev <!nocheck> | libgsl0-dev <!nocheck>,
- libunwind-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el],
- libdw-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el],
- bison (>= 1:2.4),
- flex (>= 2.5.34),
- libgirepository1.0-dev (>= 0.9.12-4~),
+ libunwind-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el riscv64],
+ libdw-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el riscv64],
+ bison,
+ flex,
+ libgirepository1.0-dev,
gir1.2-glib-2.0,
gir1.2-freedesktop,
bash-completion,
@@ -38,9 +38,6 @@
${misc:Depends},
libcap2-bin [linux-any]
Suggests: gstreamer1.0-tools,
-Breaks: gstreamer1.0-plugins-base (<< 1.8.0),
- gstreamer1.0-plugins-bad (<< 1.11.1),
- libgstreamer-plugins-bad1.0-0 (<< 1.13.1)
Description: Core GStreamer libraries and elements
GStreamer is a streaming media framework, based on graphs of filters
which operate on media data. Applications using this library can do
@@ -57,15 +54,13 @@
Section: libdevel
Depends: libgstreamer1.0-0 (= ${binary:Version}),
libc6-dev | libc-dev,
- pkg-config,
+ pkgconf,
libglib2.0-dev,
- libunwind-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el],
- libdw-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el],
+ libunwind-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el riscv64],
+ libdw-dev [i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el riscv64],
${shlibs:Depends},
${misc:Depends},
gir1.2-gstreamer-1.0 (= ${binary:Version})
-Conflicts: libgstreamer-plugins-bad1.0-dev (<< 1.13.1)
-Replaces: libgstreamer-plugins-bad1.0-dev (<< 1.13.1)
Suggests: gstreamer1.0-doc
Description: GStreamer core development files
GStreamer is a streaming media framework, based on graphs of filters
diff -Nru gstreamer1.0-1.22.0/debian/gbp.conf gstreamer1.0-1.22.12/debian/gbp.conf
--- gstreamer1.0-1.22.0/debian/gbp.conf 2024-12-13 06:09:16.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/gbp.conf 2025-01-03 18:24:29.000000000 +0100
@@ -1,6 +1,6 @@
[DEFAULT]
-upstream-branch = upstream
-debian-branch = master
+upstream-branch = upstream-bookworm
+debian-branch = debian/bookworm
pristine-tar = True
upstream-tag = upstream/%(version)s
debian-tag = debian/%(version)s
diff -Nru gstreamer1.0-1.22.0/debian/libgstreamer1.0-0.lintian-overrides gstreamer1.0-1.22.12/debian/libgstreamer1.0-0.lintian-overrides
--- gstreamer1.0-1.22.0/debian/libgstreamer1.0-0.lintian-overrides 1970-01-01 01:00:00.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/libgstreamer1.0-0.lintian-overrides 2024-12-04 09:07:53.000000000 +0100
@@ -0,0 +1,2 @@
+# gstreamer package naming vs major api release
+libgstreamer1.0-0: package-name-doesnt-match-sonames
diff -Nru gstreamer1.0-1.22.0/debian/patches/0002-allocator-Avoid-integer-overflow-when-allocating-sys.patch gstreamer1.0-1.22.12/debian/patches/0002-allocator-Avoid-integer-overflow-when-allocating-sys.patch
--- gstreamer1.0-1.22.0/debian/patches/0002-allocator-Avoid-integer-overflow-when-allocating-sys.patch 1970-01-01 01:00:00.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/patches/0002-allocator-Avoid-integer-overflow-when-allocating-sys.patch 2025-01-03 18:05:22.000000000 +0100
@@ -0,0 +1,52 @@
+From 69f71e2addd5d3d3243efa6d9d5fac9b27071e9d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Thu, 26 Sep 2024 22:07:22 +0300
+Subject: [PATCH] allocator: Avoid integer overflow when allocating sysmem
+
+Thanks to Antonio Morales for finding and reporting the issue.
+
+Fixes GHSL-2024-166
+Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3851
+
+Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8094>
+---
+ gst/gstallocator.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/gst/gstallocator.c b/gst/gstallocator.c
+index f3cd20e86d..e8f21ba3f8 100644
+--- a/gst/gstallocator.c
++++ b/gst/gstallocator.c
+@@ -430,8 +430,20 @@ _sysmem_new_block (GstMemoryFlags flags,
+ /* ensure configured alignment */
+ align |= gst_memory_alignment;
+ /* allocate more to compensate for alignment */
++ if (align > G_MAXSIZE || maxsize > G_MAXSIZE - align) {
++ GST_CAT_WARNING (GST_CAT_MEMORY,
++ "Allocating %" G_GSIZE_FORMAT " bytes with alignment %" G_GSIZE_FORMAT
++ "x overflows", maxsize, align);
++ return NULL;
++ }
+ maxsize += align;
+ /* alloc header and data in one block */
++ if (maxsize > G_MAXSIZE - sizeof (GstMemorySystem)) {
++ GST_CAT_WARNING (GST_CAT_MEMORY,
++ "Allocating %" G_GSIZE_FORMAT " bytes with alignment %" G_GSIZE_FORMAT
++ "x overflows", maxsize, align);
++ return NULL;
++ }
+ slice_size = sizeof (GstMemorySystem) + maxsize;
+
+ mem = g_slice_alloc (slice_size);
+@@ -481,6 +493,8 @@ _sysmem_copy (GstMemorySystem * mem, gssize offset, gsize size)
+ size = mem->mem.size > offset ? mem->mem.size - offset : 0;
+
+ copy = _sysmem_new_block (0, size, mem->mem.align, 0, size);
++ if (!copy)
++ return NULL;
+ GST_CAT_DEBUG (GST_CAT_PERFORMANCE,
+ "memcpy %" G_GSIZE_FORMAT " memory %p -> %p", size, mem, copy);
+ memcpy (copy->data, mem->data + mem->mem.offset + offset, size);
+--
+2.45.2
+
diff -Nru gstreamer1.0-1.22.0/debian/patches/allocator-Avoid-integer-overflow-when-allocating-sys.patch gstreamer1.0-1.22.12/debian/patches/allocator-Avoid-integer-overflow-when-allocating-sys.patch
--- gstreamer1.0-1.22.0/debian/patches/allocator-Avoid-integer-overflow-when-allocating-sys.patch 2024-12-13 06:12:17.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/patches/allocator-Avoid-integer-overflow-when-allocating-sys.patch 1970-01-01 01:00:00.000000000 +0100
@@ -1,48 +0,0 @@
-From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
-Date: Thu, 26 Sep 2024 22:07:22 +0300
-Subject: allocator: Avoid integer overflow when allocating sysmem
-Origin: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/72af11b248b4cb60d3dfe4e9459eec0d20052c9b
-Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2024-47606
-
-Thanks to Antonio Morales for finding and reporting the issue.
-
-Fixes GHSL-2024-166
-Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3851
-
-Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8044>
----
- subprojects/gstreamer/gst/gstallocator.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
---- a/gst/gstallocator.c
-+++ b/gst/gstallocator.c
-@@ -430,8 +430,20 @@ _sysmem_new_block (GstMemoryFlags flags,
- /* ensure configured alignment */
- align |= gst_memory_alignment;
- /* allocate more to compensate for alignment */
-+ if (align > G_MAXSIZE || maxsize > G_MAXSIZE - align) {
-+ GST_CAT_WARNING (GST_CAT_MEMORY,
-+ "Allocating %" G_GSIZE_FORMAT " bytes with alignment %" G_GSIZE_FORMAT
-+ "x overflows", maxsize, align);
-+ return NULL;
-+ }
- maxsize += align;
- /* alloc header and data in one block */
-+ if (maxsize > G_MAXSIZE - sizeof (GstMemorySystem)) {
-+ GST_CAT_WARNING (GST_CAT_MEMORY,
-+ "Allocating %" G_GSIZE_FORMAT " bytes with alignment %" G_GSIZE_FORMAT
-+ "x overflows", maxsize, align);
-+ return NULL;
-+ }
- slice_size = sizeof (GstMemorySystem) + maxsize;
-
- mem = g_slice_alloc (slice_size);
-@@ -481,6 +493,8 @@ _sysmem_copy (GstMemorySystem * mem, gss
- size = mem->mem.size > offset ? mem->mem.size - offset : 0;
-
- copy = _sysmem_new_block (0, size, mem->mem.align, 0, size);
-+ if (!copy)
-+ return NULL;
- GST_CAT_DEBUG (GST_CAT_PERFORMANCE,
- "memcpy %" G_GSIZE_FORMAT " memory %p -> %p", size, mem, copy);
- memcpy (copy->data, mem->data + mem->mem.offset + offset, size);
diff -Nru gstreamer1.0-1.22.0/debian/patches/series gstreamer1.0-1.22.12/debian/patches/series
--- gstreamer1.0-1.22.0/debian/patches/series 2024-12-13 06:11:22.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/patches/series 2025-01-03 18:05:34.000000000 +0100
@@ -1,2 +1,2 @@
0001-registrybinary-Update-magic-version-string.patch
-allocator-Avoid-integer-overflow-when-allocating-sys.patch
+0002-allocator-Avoid-integer-overflow-when-allocating-sys.patch
diff -Nru gstreamer1.0-1.22.0/debian/rules gstreamer1.0-1.22.12/debian/rules
--- gstreamer1.0-1.22.0/debian/rules 2024-12-13 06:09:16.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/rules 2025-01-03 17:45:54.000000000 +0100
@@ -40,7 +40,7 @@
-Dptp-helper-setuid-user=nobody -Dptp-helper-setuid-group=nobody
endif
-ifeq (,$(filter $(DEB_HOST_ARCH),i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el))
+ifeq (,$(filter $(DEB_HOST_ARCH),i386 amd64 armel armhf arm64 powerpc ppc64 ppc64el mipsel mips64el riscv64))
conf_flags += -Dlibunwind=disabled -Dlibdw=disabled
endif
diff -Nru gstreamer1.0-1.22.0/debian/watch gstreamer1.0-1.22.12/debian/watch
--- gstreamer1.0-1.22.0/debian/watch 2024-12-13 06:09:16.000000000 +0100
+++ gstreamer1.0-1.22.12/debian/watch 2025-01-03 17:45:54.000000000 +0100
@@ -1,3 +1,3 @@
version=4
opts=pgpmode=auto \
-https://gstreamer.freedesktop.org/src/gstreamer/ gstreamer-(1\.[\d]+\.[\d]+)@ARCHIVE_EXT@
+https://gstreamer.freedesktop.org/src/gstreamer/ gstreamer-(1\.22+\.[\d]+)@ARCHIVE_EXT@
diff -Nru gstreamer1.0-1.22.0/gst/gstbin.c gstreamer1.0-1.22.12/gst/gstbin.c
--- gstreamer1.0-1.22.0/gst/gstbin.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstbin.c 2024-04-29 21:09:52.000000000 +0200
@@ -1567,8 +1567,10 @@
GST_OBJECT_LOCK (element);
elem_name = g_strdup (GST_ELEMENT_NAME (element));
- if (GST_OBJECT_PARENT (element) != GST_OBJECT_CAST (bin))
+ if (GST_OBJECT_PARENT (element) != GST_OBJECT_CAST (bin)) {
+ GST_OBJECT_UNLOCK (element);
goto not_in_bin;
+ }
/* remove the parent ref */
GST_OBJECT_PARENT (element) = NULL;
@@ -1819,7 +1821,6 @@
/* ERROR handling */
not_in_bin:
{
- GST_OBJECT_UNLOCK (element);
GST_OBJECT_UNLOCK (bin);
GST_WARNING_OBJECT (bin, "Element '%s' is not in bin", elem_name);
g_free (elem_name);
diff -Nru gstreamer1.0-1.22.0/gst/gstbuffer.c gstreamer1.0-1.22.12/gst/gstbuffer.c
--- gstreamer1.0-1.22.0/gst/gstbuffer.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstbuffer.c 2024-04-29 21:09:52.000000000 +0200
@@ -546,6 +546,7 @@
GstMetaItem *walk;
gsize bufsize;
gboolean region = FALSE;
+ gboolean sharing_mem = FALSE;
g_return_val_if_fail (dest != NULL, FALSE);
g_return_val_if_fail (src != NULL, FALSE);
@@ -649,6 +650,9 @@
return FALSE;
}
+ /* Indicates if dest references any of src memories. */
+ sharing_mem |= (newmem == mem);
+
_memory_add (dest, -1, newmem);
left -= tocopy;
}
@@ -662,6 +666,10 @@
gst_buffer_remove_memory_range (dest, dest_len, -1);
return FALSE;
}
+
+ /* If we were sharing memory and the merge is no-op, we are still sharing. */
+ sharing_mem &= (mem == GST_BUFFER_MEM_PTR (dest, 0));
+
_replace_memory (dest, len, 0, len, mem);
}
}
@@ -691,7 +699,8 @@
} else if (deep && gst_meta_api_type_has_tag (info->api,
_gst_meta_tag_memory_reference)) {
GST_CAT_DEBUG (GST_CAT_BUFFER,
- "don't copy meta with memory references %" GST_PTR_FORMAT, meta);
+ "don't copy memory reference meta %p of API type %s", meta,
+ g_type_name (info->api));
} else if (info->transform_func) {
GstMetaTransformCopy copy_data;
@@ -709,6 +718,14 @@
}
}
+ if (sharing_mem && src->pool != NULL) {
+ /* The new buffer references some of src's memories. We have to ensure that
+ * src buffer does not return to its buffer pool as long as its memories are
+ * used by other buffers. That would cause the buffer to be discarted by the
+ * pool because its memories are not writable. */
+ gst_buffer_add_parent_buffer_meta (dest, src);
+ }
+
return TRUE;
}
@@ -788,6 +805,15 @@
GST_CAT_LOG (GST_CAT_BUFFER, "finalize %p", buffer);
+ /* free our memory */
+ len = GST_BUFFER_MEM_LEN (buffer);
+ for (i = 0; i < len; i++) {
+ gst_memory_unlock (GST_BUFFER_MEM_PTR (buffer, i), GST_LOCK_FLAG_EXCLUSIVE);
+ gst_mini_object_remove_parent (GST_MINI_OBJECT_CAST (GST_BUFFER_MEM_PTR
+ (buffer, i)), GST_MINI_OBJECT_CAST (buffer));
+ gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i));
+ }
+
/* free metadata */
for (walk = GST_BUFFER_META (buffer); walk; walk = next) {
GstMeta *meta = &walk->meta;
@@ -806,15 +832,6 @@
* itself */
msize = GST_BUFFER_SLICE_SIZE (buffer);
- /* free our memory */
- len = GST_BUFFER_MEM_LEN (buffer);
- for (i = 0; i < len; i++) {
- gst_memory_unlock (GST_BUFFER_MEM_PTR (buffer, i), GST_LOCK_FLAG_EXCLUSIVE);
- gst_mini_object_remove_parent (GST_MINI_OBJECT_CAST (GST_BUFFER_MEM_PTR
- (buffer, i)), GST_MINI_OBJECT_CAST (buffer));
- gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i));
- }
-
/* we set msize to 0 when the buffer is part of the memory block */
if (msize) {
#ifdef USE_POISONING
diff -Nru gstreamer1.0-1.22.0/gst/gst.c gstreamer1.0-1.22.12/gst/gst.c
--- gstreamer1.0-1.22.0/gst/gst.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gst.c 2024-04-29 21:09:52.000000000 +0200
@@ -812,7 +812,7 @@
* environment variable */
_priv_gst_plugin_feature_rank_initialize ();
-#ifndef GST_DISABLE_GST_DEBUG
+#ifndef GST_DISABLE_GST_TRACER_HOOKS
_priv_gst_tracing_init ();
#endif
diff -Nru gstreamer1.0-1.22.0/gst/gstdatetime.c gstreamer1.0-1.22.12/gst/gstdatetime.c
--- gstreamer1.0-1.22.0/gst/gstdatetime.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstdatetime.c 2024-04-29 21:09:52.000000000 +0200
@@ -334,7 +334,7 @@
* values, timezones before (to the west) of UTC have negative values.
* If @datetime represents UTC time, then the offset is zero.
*
- * Return value: the offset from UTC in hours, or %G_MAXDOUBLE if none is set.
+ * Return value: the offset from UTC in hours, or %G_MAXFLOAT if none is set.
*/
gfloat
gst_date_time_get_time_zone_offset (const GstDateTime * datetime)
@@ -342,7 +342,7 @@
g_return_val_if_fail (datetime != NULL, 0.0);
if (!gst_date_time_has_time (datetime))
- return G_MAXDOUBLE;
+ return G_MAXFLOAT;
return (g_date_time_get_utc_offset (datetime->datetime) /
G_USEC_PER_SEC) / 3600.0;
diff -Nru gstreamer1.0-1.22.0/gst/gstdebugutils.c gstreamer1.0-1.22.12/gst/gstdebugutils.c
--- gstreamer1.0-1.22.0/gst/gstdebugutils.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstdebugutils.c 2024-04-29 21:09:52.000000000 +0200
@@ -922,6 +922,13 @@
}
#else /* !GST_DISABLE_GST_DEBUG */
#ifndef GST_REMOVE_DISABLED
+
+gchar *
+gst_debug_bin_to_dot_data (GstBin * bin, GstDebugGraphDetails details)
+{
+ return g_strdup ("");
+}
+
void
gst_debug_bin_to_dot_file (GstBin * bin, GstDebugGraphDetails details,
const gchar * file_name)
diff -Nru gstreamer1.0-1.22.0/gst/gstinfo.c gstreamer1.0-1.22.12/gst/gstinfo.c
--- gstreamer1.0-1.22.0/gst/gstinfo.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstinfo.c 2024-04-29 21:09:52.000000000 +0200
@@ -2387,8 +2387,8 @@
* %FALSE if adding the threshold described by @list to the one already set.
*
* Sets the debug logging wanted in the same form as with the GST_DEBUG
- * environment variable. You can use wildcards such as '*', but note that
- * the order matters when you use wild cards, e.g. "foosrc:6,*src:3,*:2" sets
+ * environment variable. You can use wildcards such as `*`, but note that
+ * the order matters when you use wild cards, e.g. `foosrc:6,*src:3,*:2` sets
* everything to log level 2.
*
* Since: 1.2
diff -Nru gstreamer1.0-1.22.0/gst/gstmacos.m gstreamer1.0-1.22.12/gst/gstmacos.m
--- gstreamer1.0-1.22.0/gst/gstmacos.m 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstmacos.m 2024-04-29 21:09:52.000000000 +0200
@@ -9,11 +9,37 @@
char **argv;
gpointer user_data;
gboolean is_simple;
+ GMutex nsapp_mutex;
+ GCond nsapp_cond;
};
+@interface GstCocoaApplicationDelegate : NSObject <NSApplicationDelegate>
+@property (assign) GMutex *nsapp_mutex;
+@property (assign) GCond *nsapp_cond;
+@end
+
+@implementation GstCocoaApplicationDelegate
+
+- (void)applicationDidFinishLaunching:(NSNotification *)notification
+{
+ g_mutex_lock (self.nsapp_mutex);
+ g_cond_signal (self.nsapp_cond);
+ g_mutex_unlock (self.nsapp_mutex);
+}
+
+@end
+
int
gst_thread_func (ThreadArgs *args)
{
+ /* Only proceed once NSApp is running, otherwise we could
+ * attempt to call [NSApp: stop] before it's even started. */
+ g_mutex_lock (&args->nsapp_mutex);
+ while (![[NSRunningApplication currentApplication] isFinishedLaunching]) {
+ g_cond_wait (&args->nsapp_cond, &args->nsapp_mutex);
+ }
+ g_mutex_unlock (&args->nsapp_mutex);
+
int ret;
if (args->is_simple) {
ret = ((GstMainFuncSimple) args->main_func) (args->user_data);
@@ -21,7 +47,20 @@
ret = ((GstMainFunc) args->main_func) (args->argc, args->argv, args->user_data);
}
- [NSApp terminate: nil];
+ /* Post a message so we'll break out of the message loop */
+ NSEvent *event = [NSEvent otherEventWithType: NSEventTypeApplicationDefined
+ location: NSZeroPoint
+ modifierFlags: 0
+ timestamp: 0
+ windowNumber: 0
+ context: nil
+ subtype: NSEventSubtypeApplicationActivated
+ data1: 0
+ data2: 0];
+
+ [NSApp postEvent:event atStart:YES];
+ [NSApp stop:nil];
+
return ret;
}
@@ -29,12 +68,31 @@
run_main_with_nsapp (ThreadArgs args)
{
GThread *gst_thread;
+ GstCocoaApplicationDelegate* delegate;
+ int result;
+
+ g_mutex_init (&args.nsapp_mutex);
+ g_cond_init (&args.nsapp_cond);
+
+ [NSApplication sharedApplication];
+ delegate = [[GstCocoaApplicationDelegate alloc] init];
+ delegate.nsapp_mutex = &args.nsapp_mutex;
+ delegate.nsapp_cond = &args.nsapp_cond;
+ [NSApp setDelegate:delegate];
+
+ /* This lets us show an icon in the dock and correctly focus opened windows */
+ if ([NSApp activationPolicy] == NSApplicationActivationPolicyProhibited) {
+ [NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory];
+ }
- [NSApplication sharedApplication];
gst_thread = g_thread_new ("macos-gst-thread", (GThreadFunc) gst_thread_func, &args);
[NSApp run];
+ result = GPOINTER_TO_INT (g_thread_join (gst_thread));
+
+ g_mutex_clear (&args.nsapp_mutex);
+ g_cond_clear (&args.nsapp_cond);
- return GPOINTER_TO_INT (g_thread_join (gst_thread));
+ return result;
}
/**
diff -Nru gstreamer1.0-1.22.0/gst/gstpad.c gstreamer1.0-1.22.12/gst/gstpad.c
--- gstreamer1.0-1.22.0/gst/gstpad.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstpad.c 2024-04-29 21:09:52.000000000 +0200
@@ -659,15 +659,18 @@
if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
GstSegment segment;
+ guint32 seqnum;
g_assert (!upstream);
/* copy segment values */
gst_event_copy_segment (event, &segment);
+ seqnum = gst_event_get_seqnum (event);
gst_event_unref (event);
gst_segment_offset_running_time (&segment, segment.format, pad_offset);
event = gst_event_new_segment (&segment);
+ gst_event_set_seqnum (event, seqnum);
}
event = gst_event_make_writable (event);
@@ -2378,22 +2381,18 @@
}
}
-/* FIXME leftover from an attempt at refactoring... */
-/* call with the two pads unlocked, when this function returns GST_PAD_LINK_OK,
- * the two pads will be locked in the srcpad, sinkpad order. */
+/* check that pads does not have any exisiting links
+ * and that hierarchy is valid for linking.
+ *
+ * The LOCK should be held on both pads
+ */
static GstPadLinkReturn
-gst_pad_link_prepare (GstPad * srcpad, GstPad * sinkpad, GstPadLinkCheck flags)
+gst_pad_link_check_relations (GstPad * srcpad, GstPad * sinkpad,
+ GstPadLinkCheck flags)
{
- GST_CAT_INFO (GST_CAT_PADS, "trying to link %s:%s and %s:%s",
- GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
-
- GST_OBJECT_LOCK (srcpad);
-
if (G_UNLIKELY (GST_PAD_PEER (srcpad) != NULL))
goto src_was_linked;
- GST_OBJECT_LOCK (sinkpad);
-
if (G_UNLIKELY (GST_PAD_PEER (sinkpad) != NULL))
goto sink_was_linked;
@@ -2403,12 +2402,6 @@
&& !gst_pad_link_check_hierarchy (srcpad, sinkpad))
goto wrong_hierarchy;
- /* check pad caps for non-empty intersection */
- if (!gst_pad_link_check_compatible_unlocked (srcpad, sinkpad, flags))
- goto no_format;
-
- /* FIXME check pad scheduling for non-empty intersection */
-
return GST_PAD_LINK_OK;
src_was_linked:
@@ -2418,7 +2411,6 @@
GST_DEBUG_PAD_NAME (GST_PAD_PEER (srcpad)));
/* we do not emit a warning in this case because unlinking cannot
* be made MT safe.*/
- GST_OBJECT_UNLOCK (srcpad);
return GST_PAD_LINK_WAS_LINKED;
}
sink_was_linked:
@@ -2428,23 +2420,57 @@
GST_DEBUG_PAD_NAME (GST_PAD_PEER (sinkpad)));
/* we do not emit a warning in this case because unlinking cannot
* be made MT safe.*/
- GST_OBJECT_UNLOCK (sinkpad);
- GST_OBJECT_UNLOCK (srcpad);
return GST_PAD_LINK_WAS_LINKED;
}
wrong_hierarchy:
{
GST_CAT_INFO (GST_CAT_PADS, "pads have wrong hierarchy");
- GST_OBJECT_UNLOCK (sinkpad);
- GST_OBJECT_UNLOCK (srcpad);
return GST_PAD_LINK_WRONG_HIERARCHY;
}
-no_format:
- {
+}
+
+/* FIXME leftover from an attempt at refactoring... */
+/* call with the two pads unlocked, when this function returns GST_PAD_LINK_OK,
+ * the two pads will be locked in the srcpad, sinkpad order. */
+static GstPadLinkReturn
+gst_pad_link_prepare (GstPad * srcpad, GstPad * sinkpad, GstPadLinkCheck flags)
+{
+ GstPadLinkReturn result;
+
+ GST_CAT_INFO (GST_CAT_PADS, "trying to link %s:%s and %s:%s",
+ GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
+
+ GST_OBJECT_LOCK (srcpad);
+ GST_OBJECT_LOCK (sinkpad);
+
+ /* Check pads state, not already linked and correct hierachy. */
+ result = gst_pad_link_check_relations (srcpad, sinkpad, flags);
+ if (result != GST_PAD_LINK_OK)
+ goto unlock_and_return;
+
+ /* check pad caps for non-empty intersection */
+ if (!gst_pad_link_check_compatible_unlocked (srcpad, sinkpad, flags)) {
GST_CAT_INFO (GST_CAT_PADS, "caps are incompatible");
+ result = GST_PAD_LINK_NOFORMAT;
+ goto unlock_and_return;
+ }
+
+ /* Need to recheck our pads since gst_pad_link_check_compatible_unlocked might have temporarily unlocked them.
+ Keeping the first check, because gst_pad_link_check_compatible_unlocked potentially is an expensive operation
+ which gst_pad_link_check_relations is not. */
+ result = gst_pad_link_check_relations (srcpad, sinkpad, flags);
+ if (result != GST_PAD_LINK_OK)
+ goto unlock_and_return;
+
+ /* FIXME check pad scheduling for non-empty intersection */
+
+ return GST_PAD_LINK_OK;
+
+unlock_and_return:
+ {
GST_OBJECT_UNLOCK (sinkpad);
GST_OBJECT_UNLOCK (srcpad);
- return GST_PAD_LINK_NOFORMAT;
+ return result;
}
}
@@ -6324,6 +6350,7 @@
task = GST_PAD_TASK (pad);
if (task == NULL) {
task = gst_task_new (func, user_data, notify);
+ notify = NULL;
gst_task_set_lock (task, GST_PAD_GET_STREAM_LOCK (pad));
gst_task_set_enter_callback (task, pad_enter_thread, pad, NULL);
gst_task_set_leave_callback (task, pad_leave_thread, pad, NULL);
@@ -6345,6 +6372,10 @@
res = gst_task_set_state (task, GST_TASK_STARTED);
GST_OBJECT_UNLOCK (pad);
+ /* free user_data if it wasn't used for gst_task_new */
+ if (notify)
+ notify (user_data);
+
return res;
/* ERRORS */
diff -Nru gstreamer1.0-1.22.0/gst/gstquery.c gstreamer1.0-1.22.12/gst/gstquery.c
--- gstreamer1.0-1.22.0/gst/gstquery.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstquery.c 2024-04-29 21:09:52.000000000 +0200
@@ -106,6 +106,7 @@
{GST_QUERY_DRAIN, "drain", 0},
{GST_QUERY_CONTEXT, "context", 0},
{GST_QUERY_BITRATE, "bitrate", 0},
+ {GST_QUERY_SELECTABLE, "selectable", 0},
{0, NULL, 0}
};
diff -Nru gstreamer1.0-1.22.0/gst/gstsegment.c gstreamer1.0-1.22.12/gst/gstsegment.c
--- gstreamer1.0-1.22.0/gst/gstsegment.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstsegment.c 2024-04-29 21:09:52.000000000 +0200
@@ -769,8 +769,8 @@
stop = segment->start + segment->duration;
/* cannot continue if no stop position set or invalid offset */
- g_return_val_if_fail (stop != -1, 0);
- g_return_val_if_fail (stop >= offset, 0);
+ if (stop == -1 || stop < offset)
+ return 0;
stop -= offset;
diff -Nru gstreamer1.0-1.22.0/gst/gsttaglist.c gstreamer1.0-1.22.12/gst/gsttaglist.c
--- gstreamer1.0-1.22.0/gst/gsttaglist.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gsttaglist.c 2024-04-29 21:09:52.000000000 +0200
@@ -455,8 +455,7 @@
}
g_value_init (dest, G_TYPE_STRING);
- g_value_take_string (dest, str->str);
- g_string_free (str, FALSE);
+ g_value_take_string (dest, g_string_free (str, FALSE));
}
static GstTagInfo *
diff -Nru gstreamer1.0-1.22.0/gst/gsttracerutils.c gstreamer1.0-1.22.12/gst/gsttracerutils.c
--- gstreamer1.0-1.22.0/gst/gsttracerutils.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gsttracerutils.c 2024-04-29 21:09:52.000000000 +0200
@@ -100,7 +100,21 @@
while (t[i]) {
// check t[i] for params
if ((params = strchr (t[i], '('))) {
- gchar *end = strchr (¶ms[1], ')');
+ // params can contain multiple '(' when using this kind of parameter: 'max-buffer-size=(uint)5'
+ guint n_par = 1, j;
+ gchar *end = NULL;
+
+ for (j = 1; params[j] != '\0'; j++) {
+ if (params[j] == '(')
+ n_par++;
+ else if (params[j] == ')') {
+ n_par--;
+ if (n_par == 0) {
+ end = ¶ms[j];
+ break;
+ }
+ }
+ }
*params = '\0';
params++;
if (end)
diff -Nru gstreamer1.0-1.22.0/gst/gsttypefind.c gstreamer1.0-1.22.12/gst/gsttypefind.c
--- gstreamer1.0-1.22.0/gst/gsttypefind.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gsttypefind.c 2024-04-29 21:09:52.000000000 +0200
@@ -115,7 +115,7 @@
* the stream. The returned memory is valid until the typefinding function
* returns and must not be freed.
*
- * Returns: (transfer none) (array length=size) (nullable): the
+ * Returns: (transfer none) (nullable): the
* requested data, or %NULL if that data is not available.
*/
const guint8 *
diff -Nru gstreamer1.0-1.22.0/gst/gsturi.c gstreamer1.0-1.22.12/gst/gsturi.c
--- gstreamer1.0-1.22.0/gst/gsturi.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gsturi.c 2024-04-29 21:09:52.000000000 +0200
@@ -564,8 +564,12 @@
static gint
sort_by_rank (GstPluginFeature * first, GstPluginFeature * second)
{
- return gst_plugin_feature_get_rank (second) -
+ int diff = gst_plugin_feature_get_rank (second) -
gst_plugin_feature_get_rank (first);
+ if (diff == 0)
+ diff = g_strcmp0 (gst_plugin_feature_get_name (first),
+ gst_plugin_feature_get_name (second));
+ return diff;
}
static GList *
diff -Nru gstreamer1.0-1.22.0/gst/gstutils.c gstreamer1.0-1.22.12/gst/gstutils.c
--- gstreamer1.0-1.22.0/gst/gstutils.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/gstutils.c 2024-04-29 21:09:52.000000000 +0200
@@ -199,7 +199,8 @@
value_type = pspec->value_type;
- GST_DEBUG ("pspec->flags is %d, pspec->value_type is %s",
+ GST_CAT_DEBUG_OBJECT (GST_CAT_PARAMS, object,
+ "pspec->flags is %d, pspec->value_type is %s",
pspec->flags, g_type_name (value_type));
if (!(pspec->flags & G_PARAM_WRITABLE))
@@ -1145,9 +1146,8 @@
g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
- GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS,
- "finding pad in %s compatible with %s:%s",
- GST_ELEMENT_NAME (element), GST_DEBUG_PAD_NAME (pad));
+ GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element,
+ "finding pad compatible with %s:%s", GST_DEBUG_PAD_NAME (pad));
g_return_val_if_fail (GST_PAD_PEER (pad) == NULL, NULL);
@@ -1173,8 +1173,8 @@
current = g_value_get_object (&padptr);
- GST_CAT_LOG (GST_CAT_ELEMENT_PADS, "examining pad %s:%s",
- GST_DEBUG_PAD_NAME (current));
+ GST_CAT_LOG_OBJECT (GST_CAT_ELEMENT_PADS, element,
+ "examining pad %s:%s", GST_DEBUG_PAD_NAME (current));
if (GST_PAD_IS_SRC (current)) {
srcpad = current;
@@ -1204,7 +1204,7 @@
gst_caps_unref (intersection);
if (compatible) {
- GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS,
+ GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element,
"found existing unlinked compatible pad %s:%s",
GST_DEBUG_PAD_NAME (current));
gst_iterator_free (pads);
@@ -1262,7 +1262,7 @@
gst_object_unref (templ);
if (foundpad) {
- GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS,
+ GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element,
"found existing request pad %s:%s", GST_DEBUG_PAD_NAME (foundpad));
return foundpad;
}
@@ -1618,13 +1618,15 @@
e2 = GST_OBJECT_PARENT (*sink);
if (G_UNLIKELY (e1 == NULL)) {
- GST_WARNING ("Trying to ghost a pad that doesn't have a parent: %"
- GST_PTR_FORMAT, *src);
+ GST_CAT_WARNING (GST_CAT_ELEMENT_PADS,
+ "Trying to ghost a pad that doesn't have a parent: %" GST_PTR_FORMAT,
+ *src);
return FALSE;
}
if (G_UNLIKELY (e2 == NULL)) {
- GST_WARNING ("Trying to ghost a pad that doesn't have a parent: %"
- GST_PTR_FORMAT, *sink);
+ GST_CAT_WARNING (GST_CAT_ELEMENT_PADS,
+ "Trying to ghost a pad that doesn't have a parent: %" GST_PTR_FORMAT,
+ *sink);
return FALSE;
}
@@ -2158,7 +2160,7 @@
capsfilter = gst_element_factory_make ("capsfilter", NULL);
if (!capsfilter) {
- GST_ERROR ("Could not make a capsfilter");
+ GST_CAT_ERROR (GST_CAT_ELEMENT_PADS, "Could not make a capsfilter");
return FALSE;
}
@@ -2168,7 +2170,7 @@
gst_element_get_state (GST_ELEMENT_CAST (parent), &state, &pending, 0);
if (!gst_bin_add (GST_BIN (parent), capsfilter)) {
- GST_ERROR ("Could not add capsfilter");
+ GST_CAT_ERROR (GST_CAT_ELEMENT_PADS, "Could not add capsfilter");
gst_object_unref (parent);
return FALSE;
}
@@ -2327,15 +2329,16 @@
if ((srcpad = gst_element_request_pad_simple (src, srcpadname)))
srcrequest = TRUE;
if (srcpad == NULL) {
- GST_WARNING_OBJECT (src, "source element has no pad \"%s\"", srcpadname);
+ GST_CAT_WARNING_OBJECT (GST_CAT_ELEMENT_PADS, src,
+ "source element has no pad \"%s\"", srcpadname);
return;
}
if (!(destpad = gst_element_get_static_pad (dest, destpadname)))
if ((destpad = gst_element_request_pad_simple (dest, destpadname)))
destrequest = TRUE;
if (destpad == NULL) {
- GST_WARNING_OBJECT (dest, "destination element has no pad \"%s\"",
- destpadname);
+ GST_CAT_WARNING_OBJECT (GST_CAT_ELEMENT_PADS, dest,
+ "destination element has no pad \"%s\"", destpadname);
goto free_src;
}
@@ -2813,9 +2816,11 @@
GstCaps *peercaps, *intersection;
gst_query_parse_caps_result (data->query, &peercaps);
- GST_DEBUG_OBJECT (pad, "intersect with result %" GST_PTR_FORMAT, peercaps);
+ GST_CAT_DEBUG_OBJECT (GST_CAT_PADS, pad,
+ "intersect with result %" GST_PTR_FORMAT, peercaps);
intersection = gst_caps_intersect (data->ret, peercaps);
- GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, intersection);
+ GST_CAT_DEBUG_OBJECT (GST_CAT_PADS, pad,
+ "intersected %" GST_PTR_FORMAT, intersection);
gst_caps_unref (data->ret);
data->ret = intersection;
@@ -3194,7 +3199,7 @@
query = gst_query_new_accept_caps (caps);
if (gst_pad_query (pad, query)) {
gst_query_parse_accept_caps_result (query, &res);
- GST_DEBUG_OBJECT (pad, "query returned %d", res);
+ GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "query returned %d", res);
}
gst_query_unref (query);
@@ -3223,7 +3228,7 @@
query = gst_query_new_accept_caps (caps);
if (gst_pad_peer_query (pad, query)) {
gst_query_parse_accept_caps_result (query, &res);
- GST_DEBUG_OBJECT (pad, "query returned %d", res);
+ GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "query returned %d", res);
}
gst_query_unref (query);
@@ -3256,14 +3261,14 @@
GstPad *peer;
GstPad *pad = g_value_get_object (&data);
- GST_CAT_LOG (GST_CAT_ELEMENT_PADS, "examining pad %s:%s",
- GST_DEBUG_PAD_NAME (pad));
+ GST_CAT_LOG_OBJECT (GST_CAT_ELEMENT_PADS, element,
+ "examining pad %s:%s", GST_DEBUG_PAD_NAME (pad));
peer = gst_pad_get_peer (pad);
if (peer == NULL) {
unlinked_pad = gst_object_ref (pad);
done = TRUE;
- GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS,
+ GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element,
"found existing unlinked pad %s:%s",
GST_DEBUG_PAD_NAME (unlinked_pad));
} else {
@@ -4192,9 +4197,10 @@
gst_event_parse_stream_start (event, &stream_id);
ret = g_strdup (stream_id);
gst_event_unref (event);
- GST_LOG_OBJECT (pad, "pad has stream-id '%s'", ret);
+ GST_CAT_LOG_OBJECT (GST_CAT_PADS, pad, "pad has stream-id '%s'", ret);
} else {
- GST_DEBUG_OBJECT (pad, "pad has not received a stream-start event yet");
+ GST_CAT_DEBUG_OBJECT (GST_CAT_PADS, pad,
+ "pad has not received a stream-start event yet");
}
return ret;
@@ -4227,9 +4233,10 @@
if (event != NULL) {
gst_event_parse_stream (event, &stream);
gst_event_unref (event);
- GST_LOG_OBJECT (pad, "pad has stream object %p", stream);
+ GST_CAT_LOG_OBJECT (GST_CAT_PADS, pad, "pad has stream object %p", stream);
} else {
- GST_DEBUG_OBJECT (pad, "pad has not received a stream-start event yet");
+ GST_CAT_DEBUG_OBJECT (GST_CAT_PADS, pad,
+ "pad has not received a stream-start event yet");
}
return stream;
diff -Nru gstreamer1.0-1.22.0/gst/parse/grammar.y.in gstreamer1.0-1.22.12/gst/parse/grammar.y.in
--- gstreamer1.0-1.22.0/gst/parse/grammar.y.in 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gst/parse/grammar.y.in 2024-04-29 21:09:52.000000000 +0200
@@ -672,6 +672,8 @@
g_object_set_property (target, pspec->name, &v);
g_value_unset (&v);
}
+
+ gst_object_unref (target);
}
}
diff -Nru gstreamer1.0-1.22.0/gstreamer.doap gstreamer1.0-1.22.12/gstreamer.doap
--- gstreamer1.0-1.22.0/gstreamer.doap 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/gstreamer.doap 2024-04-29 21:09:52.000000000 +0200
@@ -40,6 +40,126 @@
<release>
<Version>
+ <revision>1.22.12</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2024-04-29</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.12.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.11</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2024-03-19</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.11.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.10</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2024-02-13</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.10.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.9</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2024-01-24</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.9.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.8</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-12-18</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.8.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.7</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-11-13</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.7.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.6</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-09-20</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.6.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.5</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-07-20</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.5.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.4</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-06-20</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.4.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.3</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-05-19</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.2</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-04-11</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
+ <revision>1.22.1</revision>
+ <branch>1.22</branch>
+ <name></name>
+ <created>2023-03-04</created>
+ <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.1.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.22.0</revision>
<branch>main</branch>
<name></name>
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstaggregator.c gstreamer1.0-1.22.12/libs/gst/base/gstaggregator.c
--- gstreamer1.0-1.22.0/libs/gst/base/gstaggregator.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstaggregator.c 2024-04-29 21:09:52.000000000 +0200
@@ -264,6 +264,12 @@
guint num_buffers;
GstBuffer *peeked_buffer;
+ /* TRUE if the serialized query is in the proccess of handling at some
+ * exact moment. This will obligate the sinkpad streaming thread wait
+ * until the handling finishes.
+ * Always protected by the PAD_LOCK. */
+ gboolean query_in_proccess;
+
/* used to track fill state of queues, only used with live-src and when
* latency property is set to > 0 */
GstClockTime head_position;
@@ -971,8 +977,10 @@
!GST_IS_BUFFER (g_queue_peek_tail (&pad->priv->data))) {
if (GST_IS_EVENT (g_queue_peek_tail (&pad->priv->data)))
event = gst_event_ref (g_queue_peek_tail (&pad->priv->data));
- if (GST_IS_QUERY (g_queue_peek_tail (&pad->priv->data)))
+ if (GST_IS_QUERY (g_queue_peek_tail (&pad->priv->data))) {
query = g_queue_peek_tail (&pad->priv->data);
+ pad->priv->query_in_proccess = TRUE;
+ }
}
PAD_UNLOCK (pad);
if (event || query) {
@@ -1007,6 +1015,8 @@
NULL);
g_queue_pop_tail (&pad->priv->data);
}
+
+ pad->priv->query_in_proccess = FALSE;
}
PAD_BROADCAST_EVENT (pad);
@@ -1636,7 +1646,7 @@
PAD_FLUSH_UNLOCK (aggpad);
}
-/* Must be called with the the PAD_LOCK held */
+/* Must be called with the PAD_LOCK and OBJECT_LOCK held */
static void
update_time_level (GstAggregatorPad * aggpad, gboolean head)
{
@@ -2032,7 +2042,10 @@
SRC_LOCK (self);
gst_aggregator_pad_set_flushing (aggpad, GST_FLOW_FLUSHING, TRUE);
+ PAD_LOCK (aggpad);
gst_buffer_replace (&aggpad->priv->peeked_buffer, NULL);
+ gst_buffer_replace (&aggpad->priv->clipped_buffer, NULL);
+ PAD_UNLOCK (aggpad);
gst_element_remove_pad (element, pad);
self->priv->has_peer_latency = FALSE;
@@ -2635,9 +2648,14 @@
SRC_BROADCAST (self);
SRC_UNLOCK (self);
- while (!gst_aggregator_pad_queue_is_empty (aggpad)
- && aggpad->priv->flow_return == GST_FLOW_OK) {
- GST_DEBUG_OBJECT (aggpad, "Waiting for buffer to be consumed");
+ /* Sanity check: aggregator's sink pad can only proccess one serialized
+ * query at a time. */
+ g_warn_if_fail (!aggpad->priv->query_in_proccess);
+
+ while ((!gst_aggregator_pad_queue_is_empty (aggpad)
+ && aggpad->priv->flow_return == GST_FLOW_OK) ||
+ aggpad->priv->query_in_proccess) {
+ GST_DEBUG_OBJECT (aggpad, "Waiting for query to be consumed");
PAD_WAIT_EVENT (aggpad);
}
@@ -3105,7 +3123,9 @@
else
aggpad->priv->tail_position = timestamp;
+ GST_OBJECT_LOCK (aggpad);
update_time_level (aggpad, head);
+ GST_OBJECT_UNLOCK (aggpad);
}
/*
@@ -3198,7 +3218,7 @@
GST_WARNING_OBJECT (aggpad,
"Ignoring request of selecting the first start time "
"as the segment is a %s segment instead of a time segment",
- gst_format_get_name (aggpad->segment.format));
+ gst_format_get_name (aggpad->priv->head_segment.format));
}
GST_OBJECT_UNLOCK (aggpad);
break;
@@ -3696,8 +3716,8 @@
gboolean inactive;
self = GST_AGGREGATOR (gst_pad_get_parent_element (GST_PAD (pad)));
-
- g_assert_nonnull (self);
+ if (!self)
+ return FALSE;
PAD_LOCK (pad);
inactive = self->priv->ignore_inactive_pads && is_live_unlocked (self)
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstbaseparse.c gstreamer1.0-1.22.12/libs/gst/base/gstbaseparse.c
--- gstreamer1.0-1.22.0/libs/gst/base/gstbaseparse.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstbaseparse.c 2024-04-29 21:09:52.000000000 +0200
@@ -2289,6 +2289,10 @@
outbuf = gst_buffer_make_writable (outbuf);
GST_BUFFER_PTS (outbuf) = pts;
GST_BUFFER_DTS (outbuf) = dts;
+ GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_FLAGS (outbuf) = 0;
parse->priv->buffers_head =
g_slist_prepend (parse->priv->buffers_head, outbuf);
outbuf = NULL;
@@ -2728,6 +2732,7 @@
GstBuffer *src, *dest;
frame->out_buffer = gst_adapter_take_buffer (parse->priv->adapter, size);
+ frame->out_buffer = gst_buffer_make_writable (frame->out_buffer);
dest = frame->out_buffer;
src = frame->buffer;
GST_BUFFER_PTS (dest) = GST_BUFFER_PTS (src);
@@ -2735,7 +2740,7 @@
GST_BUFFER_OFFSET (dest) = GST_BUFFER_OFFSET (src);
GST_BUFFER_DURATION (dest) = GST_BUFFER_DURATION (src);
GST_BUFFER_OFFSET_END (dest) = GST_BUFFER_OFFSET_END (src);
- GST_MINI_OBJECT_FLAGS (dest) = GST_MINI_OBJECT_FLAGS (src);
+ GST_BUFFER_FLAGS (dest) = GST_BUFFER_FLAGS (src);
} else {
gst_adapter_flush (parse->priv->adapter, size);
}
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstbasesink.c gstreamer1.0-1.22.12/libs/gst/base/gstbasesink.c
--- gstreamer1.0-1.22.0/libs/gst/base/gstbasesink.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstbasesink.c 2024-04-29 21:09:52.000000000 +0200
@@ -2185,7 +2185,11 @@
}
goto do_times;
}
- goto out_of_segment;
+ if (basesink->priv->drop_out_of_segment)
+ goto out_of_segment;
+
+ cstart = start;
+ cstop = stop;
}
if (G_UNLIKELY (start != cstart || stop != cstop)) {
@@ -3664,6 +3668,9 @@
if (bclass->event)
result = bclass->event (basesink, event);
break;
+ case GST_EVENT_STREAM_START:
+ basesink->priv->received_eos = FALSE;
+ /* fallthrough */
default:
if (GST_EVENT_IS_SERIALIZED (event)) {
GST_BASE_SINK_PREROLL_LOCK (basesink);
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstbasesrc.c gstreamer1.0-1.22.12/libs/gst/base/gstbasesrc.c
--- gstreamer1.0-1.22.0/libs/gst/base/gstbasesrc.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstbasesrc.c 2024-04-29 21:09:52.000000000 +0200
@@ -2599,7 +2599,8 @@
wait_ret = gst_base_src_wait_playing_unlocked (src);
if (wait_ret != GST_FLOW_OK) {
if (ret == GST_FLOW_OK && own_res_buf)
- gst_buffer_unref (res_buf);
+ gst_clear_buffer (&res_buf);
+ gst_clear_buffer_list (&src->priv->pending_bufferlist);
ret = wait_ret;
goto stopped;
}
@@ -2612,7 +2613,8 @@
if (G_UNLIKELY (g_atomic_int_get (&src->priv->has_pending_eos))) {
if (ret == GST_FLOW_OK) {
if (own_res_buf)
- gst_buffer_unref (res_buf);
+ gst_clear_buffer (&res_buf);
+ gst_clear_buffer_list (&src->priv->pending_bufferlist);
}
src->priv->forced_eos = TRUE;
goto eos;
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstbasesrc.h gstreamer1.0-1.22.12/libs/gst/base/gstbasesrc.h
--- gstreamer1.0-1.22.0/libs/gst/base/gstbasesrc.h 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstbasesrc.h 2024-04-29 21:09:52.000000000 +0200
@@ -184,6 +184,14 @@
/* decide on caps */
gboolean (*negotiate) (GstBaseSrc *src);
/* called if, in negotiation, caps need fixating */
+ /**
+ * GstBaseSrcClass::fixate:
+ * @caps: (transfer full):
+ *
+ * Called if, in negotiation, caps need fixating.
+ *
+ * Returns: (transfer full): the fixated caps
+ */
GstCaps * (*fixate) (GstBaseSrc *src, GstCaps *caps);
/* notify the subclass of new caps */
gboolean (*set_caps) (GstBaseSrc *src, GstCaps *caps);
@@ -241,7 +249,7 @@
/**
* GstBaseSrcClass::create:
- * @buf: (inout):
+ * @buf: (inout) (nullable):
*
* Ask the subclass to create a buffer with @offset and @size, the default
* implementation will call alloc if no allocated @buf is provided and then call fill.
@@ -250,7 +258,7 @@
GstBuffer **buf);
/**
* GstBaseSrcClass::alloc:
- * @buf: (out):
+ * @buf: (out) (nullable):
*
* Ask the subclass to allocate an output buffer with @offset and @size, the default
* implementation will use the negotiated allocator.
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gstpushsrc.h gstreamer1.0-1.22.12/libs/gst/base/gstpushsrc.h
--- gstreamer1.0-1.22.0/libs/gst/base/gstpushsrc.h 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gstpushsrc.h 2024-04-29 21:09:52.000000000 +0200
@@ -72,7 +72,7 @@
/**
* GstPushSrcClass::create:
- * @buf: (inout):
+ * @buf: (inout) (nullable):
*
* Ask the subclass to create a buffer, the default implementation will call alloc if
* no allocated @buf is provided and then call fill.
@@ -80,7 +80,7 @@
GstFlowReturn (*create) (GstPushSrc *src, GstBuffer **buf);
/**
* GstPushSrcClass::alloc:
- * @buf: (out):
+ * @buf: (out) (nullable):
*
* Allocate memory for a buffer.
*/
diff -Nru gstreamer1.0-1.22.0/libs/gst/base/gsttypefindhelper.c gstreamer1.0-1.22.12/libs/gst/base/gsttypefindhelper.c
--- gstreamer1.0-1.22.0/libs/gst/base/gsttypefindhelper.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/base/gsttypefindhelper.c 2024-04-29 21:09:52.000000000 +0200
@@ -742,7 +742,7 @@
factories = gst_type_find_list_factories_for_caps (obj, caps);
if (!factories) {
- GST_ERROR_OBJECT (obj, "Failed to typefind for caps: %" GST_PTR_FORMAT,
+ GST_INFO_OBJECT (obj, "Failed to typefind for caps: %" GST_PTR_FORMAT,
caps);
goto out;
}
diff -Nru gstreamer1.0-1.22.0/libs/gst/helpers/gst-ptp-helper.c gstreamer1.0-1.22.12/libs/gst/helpers/gst-ptp-helper.c
--- gstreamer1.0-1.22.0/libs/gst/helpers/gst-ptp-helper.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/helpers/gst-ptp-helper.c 2024-04-29 21:09:52.000000000 +0200
@@ -71,10 +71,37 @@
static guint64 clock_id = (guint64) - 1;
static guint8 clock_id_array[8];
+static gboolean
+parse_clock_id (const gchar * option_name, const gchar * value, gpointer data,
+ GError ** err)
+{
+ gchar *endptr;
+ guint64 v;
+
+ errno = 0;
+ v = g_ascii_strtoull (value, &endptr, 16);
+ if (endptr == NULL || *endptr != '\0') {
+ g_set_error (err, G_OPTION_ERROR, G_OPTION_ERROR_UNKNOWN_OPTION,
+ "Cannot parse integer value \"%s\" for --clock-id", value);
+ return FALSE;
+ }
+
+ if (errno != 0) {
+ g_set_error (err, G_OPTION_ERROR, G_OPTION_ERROR_UNKNOWN_OPTION,
+ "Cannot parse integer value \"%s\" for --clock-id: %s", value,
+ g_strerror (errno));
+ return FALSE;
+ }
+
+ clock_id = v;
+
+ return TRUE;
+}
+
static GOptionEntry opt_entries[] = {
{"interface", 'i', 0, G_OPTION_ARG_STRING_ARRAY, &ifaces,
"Interface to listen on", NULL},
- {"clock-id", 'c', 0, G_OPTION_ARG_INT64, &clock_id,
+ {"clock-id", 'c', 0, G_OPTION_ARG_CALLBACK, parse_clock_id,
"PTP clock id", NULL},
{"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
"Be verbose", NULL},
diff -Nru gstreamer1.0-1.22.0/libs/gst/net/gstptpclock.c gstreamer1.0-1.22.12/libs/gst/net/gstptpclock.c
--- gstreamer1.0-1.22.0/libs/gst/net/gstptpclock.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/libs/gst/net/gstptpclock.c 2024-04-29 21:09:52.000000000 +0200
@@ -279,13 +279,13 @@
guint domain;
PtpClockIdentity master_clock_identity;
- guint16 sync_seqnum;
+ guint32 sync_seqnum;
GstClockTime sync_recv_time_local; /* t2 */
GstClockTime sync_send_time_remote; /* t1, might be -1 if FOLLOW_UP pending */
GstClockTime follow_up_recv_time_local;
GSource *timeout_source;
- guint16 delay_req_seqnum;
+ guint32 delay_req_seqnum;
GstClockTime delay_req_send_time_local; /* t3, -1 if we wait for FOLLOW_UP */
GstClockTime delay_req_recv_time_remote; /* t4, -1 if we wait */
GstClockTime delay_resp_recv_time_local;
@@ -336,6 +336,11 @@
GstClock *domain_clock;
} PtpDomainData;
+// The lists domain_clocks and domain_data are same but the former is protected
+// by the domain_clocks_lock.
+// It is needed because sometimes other threads than the PTP thread will need
+// to access the list, and without a mutex it might happen that the original
+// list (domain_data) is modified at the same time (prepending a new domain).
static GList *domain_data;
static GMutex domain_clocks_lock;
static GList *domain_clocks;
@@ -346,6 +351,11 @@
static gint domain_stats_n_hooks;
static gboolean domain_stats_hooks_initted = FALSE;
+/* Only ever accessed from the PTP thread */
+/* PTPD in hybrid mode (default) sends multicast PTP messages with an invalid
+ * logMessageInterval. We work around this here and warn once */
+static gboolean ptpd_hybrid_workaround_warned_once = FALSE;
+
/* Converts log2 seconds to GstClockTime */
static GstClockTime
log2_to_clock_time (gint l)
@@ -909,7 +919,17 @@
return;
}
- sender->announce_interval = log2_to_clock_time (msg->log_message_interval);
+ if (msg->log_message_interval == 0x7f) {
+ sender->announce_interval = 2 * GST_SECOND;
+
+ if (!ptpd_hybrid_workaround_warned_once) {
+ GST_WARNING ("Working around ptpd bug: ptpd sends multicast PTP packets "
+ "with invalid logMessageInterval");
+ ptpd_hybrid_workaround_warned_once = TRUE;
+ }
+ } else {
+ sender->announce_interval = log2_to_clock_time (msg->log_message_interval);
+ }
announce = g_new0 (PtpAnnounceMessage, 1);
announce->receive_time = receive_time;
@@ -1511,7 +1531,17 @@
return;
#endif
- domain->sync_interval = log2_to_clock_time (msg->log_message_interval);
+ if (msg->log_message_interval == 0x7f) {
+ domain->sync_interval = GST_SECOND;
+
+ if (!ptpd_hybrid_workaround_warned_once) {
+ GST_WARNING ("Working around ptpd bug: ptpd sends multicast PTP packets "
+ "with invalid logMessageInterval");
+ ptpd_hybrid_workaround_warned_once = TRUE;
+ }
+ } else {
+ domain->sync_interval = log2_to_clock_time (msg->log_message_interval);
+ }
/* Check if duplicated */
for (l = domain->pending_syncs.head; l; l = l->next) {
@@ -1539,6 +1569,7 @@
sync->delay_req_send_time_local = GST_CLOCK_TIME_NONE;
sync->delay_req_recv_time_remote = GST_CLOCK_TIME_NONE;
sync->delay_resp_recv_time_local = GST_CLOCK_TIME_NONE;
+ sync->delay_req_seqnum = G_MAXUINT32;
/* 0.5 correction factor for division later */
sync->correction_field_sync = msg->correction_field;
@@ -1708,8 +1739,18 @@
requesting_port_identity.port_number != ptp_clock_id.port_number)
return;
- domain->min_delay_req_interval =
- log2_to_clock_time (msg->log_message_interval);
+ if (msg->log_message_interval == 0x7f) {
+ domain->min_delay_req_interval = GST_SECOND;
+
+ if (!ptpd_hybrid_workaround_warned_once) {
+ GST_WARNING ("Working around ptpd bug: ptpd sends multicast PTP packets "
+ "with invalid logMessageInterval");
+ ptpd_hybrid_workaround_warned_once = TRUE;
+ }
+ } else {
+ domain->min_delay_req_interval =
+ log2_to_clock_time (msg->log_message_interval);
+ }
/* Check if we know about this one */
for (l = domain->pending_syncs.head; l; l = l->next) {
@@ -2317,7 +2358,8 @@
}
g_list_free (domain_data);
domain_data = NULL;
- g_list_foreach (domain_clocks, (GFunc) g_free, NULL);
+ // The domain_clocks list is same as domain_data
+ // and the elements are freed above already
g_list_free (domain_clocks);
domain_clocks = NULL;
diff -Nru gstreamer1.0-1.22.0/meson.build gstreamer1.0-1.22.12/meson.build
--- gstreamer1.0-1.22.0/meson.build 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/meson.build 2024-04-29 21:09:52.000000000 +0200
@@ -1,5 +1,5 @@
project('gstreamer', 'c',
- version : '1.22.0',
+ version : '1.22.12',
meson_version : '>= 0.62',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
diff -Nru gstreamer1.0-1.22.0/NEWS gstreamer1.0-1.22.12/NEWS
--- gstreamer1.0-1.22.0/NEWS 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/NEWS 2024-04-29 21:09:52.000000000 +0200
@@ -2,10 +2,16 @@
GStreamer 1.22.0 was originally released on 23 January 2023.
+The latest bug-fix release in the now old-stable 1.22 series is 1.22.12
+and was released on 29 April 2024.
+
See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
version of this document.
-Last updated: Monday 23 January 2023, 17:00 UTC (log)
+The GStreamer 1.22 stable series has since been superseded by the
+GStreamer 1.24 stable release series.
+
+Last updated: Monday 29 April 2024, 20:00 UTC (log)
Introduction
@@ -298,8 +304,8 @@
- This is enabled by setting the instant-uri property to true,
setting the URI to switch to immediately, and then disabling the
instant-uri property again afterwards.
-- playbin3, decodebin3, uridecodebin3, parsebin, and urisrc are no
- longer experimental
+- playbin3, decodebin3, uridecodebin3, parsebin, and urisourcebin are
+ no longer experimental
- They were originally marked as ‘technology preview’ but have
since seen extensive usage in production settings, so are
considered ready for general use now.
@@ -819,9 +825,9 @@
New MP4 muxer + Fragmented MP4 muxer
-- fmp4mux: New fragmented MP4/ISOBMFF/CMAF muxer for generating
- e.g. DASH/HLS media fragments.
-- isomp4mux: New non-fragmented, normal MP4 muxer.
+- isofmp4mux, cmafmux, dashmp4mux, onviffmp4mux: New fragmented
+ MP4/ISOBMFF/CMAF muxer for generating e.g. DASH/HLS media fragments.
+- isomp4mux, onvifmp4mux: New non-fragmented, normal MP4 muxer.
Both plugins provides elements that replace the existing qtmux/mp4mux
element from gst-plugins-good. While not feature-equivalent yet, the new
@@ -1217,17 +1223,2075 @@
1.22.0 was originally released on 23 January 2023.
-Schedule for 1.24
+1.22.1
+
+The first 1.22 bug-fix release (1.22.1) was released on 04 March 2023.
+
+This release only contains bugfixes and it should be safe to update from
+1.22.0.
+
+Highlighted bugfixes in 1.22.1
+
+- audio channel-mix: allow up to 64 channels (instead of up to 63
+ channels)
+- avfvideosrc: Don’t wait on main thread for permissions request
+- avvidenc: avoid generating inaccurate output timestamps, especially
+ with variable framerate streams
+- AV1 video codec caps signalling improvements in various elements
+- codectimestamper: Fix timestamping on sequence update
+- d3d11overlaycompositor: fix texture width and height
+- d3d11videosink: Fix rendering on external handle
+- dashdemux2: fix seek operation taking a log time to finish for some
+ streams
+- nvencoder: Fix B-frame encoding on Linux and min buffers in auto GPU
+ mode
+- playbin3: fixing buffering for live pipelines
+- playbin: fix potential deadlock when stopping stream with subtitles
+ visible
+- redenc: fix setting of extension ID for twcc
+- rtspsrc: improved compatibility with more broken RTSP servers
+- v4l2h264dec: Fix Raspberry Pi4 will not play video in application
+- vtdec: fix jittery playback of H.264 Level 4.1 movies in macOS
+- vtdec: Fix non-deterministic frame output after flushing seeks
+- vtenc: fix handling of interlaced ProRes on Apple M1 hardware
+- vtenc: don’t advertise ARGB/RGBA64 input caps on M1 Pro/Max with
+ macOS <13
+- wasapi2src: Fix loopback capture on Windows 10 Anniversary Update
+- tools: better handling of non-ASCII command line arguments on
+ Windows
+- gst-libav: fix build against newer ffmpeg versions
+- gst-python: Use arch-specific install dir for gi overrides
+- cerbero: Fix setuptools site.py breakage in Python 3.11
+- macOS packages: Fix broken binaries on macos < 11.0
+- various bug fixes, memory leak fixes, and other stability and
+ reliability improvements
+
+gstreamer
+
+- buffer: fix copy meta reference debug log formatting
+- bin: Don’t unlock unlocked mutex in gst_bin_remove_func()
+- pad: Don’t leak user_data in gst_pad_start_task()
+- aggregator: Always lock aggpad around update_time_level
+- inputselector: Avoid potential deadlock when shutting down,
+ e.g. playbin with subtitles
+- multiqueue: Handle use-interleave latency live pipelines, fixing
+ buffering for live pipelines in playbin3
+- GstBaseSrc: fix transfer annotation for fixate() virtual method
+- GstBaseSrc, GstPushSrc: add nullable annotations to virtual methods
+- tools: Make sure UTF-8 encoded command line arguments on Windows
+
+gst-plugins-base
+
+- alsasink: Fix stall when going from PLAYING to NULL (stucked at
+ PAUSED) with uac1 gadget
+- appsrc: Don’t chain up BaseSrc::negotiate()
+- audio: channel-mix: Fix channel count limit to be able to equal 64
+- gldisplay: Mark gst_gl_display_create_context() other_context
+ parameter as nullable
+- gldisplay: Remove unused code
+- gstglwindow_x11.c: Fix colormap leak
+- gl/cocoa: Return a strong ref to the parent GstGLContext
+- rtspconnection: Annotate RTSP message and RTSP events parameters
+ correctly
+- sdp, typefind: Fix some annotations
+- sdp: gstmikey: gst_mikey_message_to_caps: extract ROC from first
+ crypto session
+- subparse: Properly forward segment seqnum
+- uridecodebin: Set source element to READY before querying it
+- uritranscodebin: Fix unref of NULL
+- gst-play-1.0: Don’t force accurate seeking
+
+gst-plugins-good
+
+- adaptivedemux2: Fix buffering threshold initialization
+- dashdemux2: the seek operation takes a log time to finish for some
+ streams
+- glvideomixer: Keep a reference to the underlying pad
+- qtdemux: Don’t emit GstSegment correcting start time when in MSE
+ mode
+- qtdemux: Handle moov atom length=0 case by reading until the end
+- qtdemux, qtmux: Drop av1C version 0 parsing and implement version 1
+ parsing/writing
+- qtmux: Fix assertion on caps update
+- redenc: fix setting of extension ID for twcc
+- rtspsrc: Use the correct vfunc for the push-backchannel-sample
+ action signal
+- rtpssrcdemux: set different stream-id on each src pad
+- udpsrc: GstSocketTimestampMessage only for SCM_TIMESTAMPNS
+- v4l2h264dec: Fix Raspberry Pi4 will not play video in application
+
+gst-plugins-bad
+
+- aom: Include stream-format and alignment in the AV1 caps
+- av1parser, h265parser: Fix some code defects
+- av1parser: Don’t consider unknown metadata OBUs a bitstream error
+- avfvideosrc: Don’t wait on main thread for permissions request
+- ccconverter: don’t debug a potentially freed filter caps
+- codectimestamper: Fix timestamping on sequence update
+- codecparsers: {h264, h265}bitwriter: Remove redundant condition
+ checks
+- codecs: decoders: fail early if no input caps have been provided for
+ all new decoder base classes
+- closedcaption: Don’t leak caps event
+- curlhttpsrc: Add curl anyauth option
+- d3d11overlaycompositor: fix texture width and height
+- d3d11videosink: Fix rendering on external handle
+- h265parse: Always set profile on src caps
+- msdkav1enc: fix the category for msdkav1enc debug
+- nvcodec: improve error reporting on plugin init
+- nvencoder: Fix b-frame encoding on Linux
+- nvencoder: Fix min buffers parameter of allocation query in auto GPU
+ mode
+- nvvp9dec: Fix return value
+- qsvav1enc, amfav1enc: Set stream-format on caps
+- vtdec: Jittery playback of H.264 Level 4.1 movies in macOS (both
+ x86_64 and arm64)
+- vtdec: Fix DPB size calculations not taking values from SPS into
+ account
+- vtdec: Fix not waiting for async frames when flushing
+- vtenc: Disable ARGB/RGBA64 caps on M1 Pro/Max with macOS <13
+- vtenc: Fix checking for certain CPU variants when running in VMs
+- vtenc: Disable HW acceleration for interlaced ProRes
+- va: Avoid the array index overflow when filling 8x8 scaling list.
+- va: Fix some code defects
+- vah265enc: Use helper to update properties.
+- vulkan: memory: Flush non coherent memory after write.
+- wasapi2src: Fix loopback capture on Windows 10 Anniversary Update
+- webrtcbin: small stats improvements
+- win32ipcutils: Add missing include
+- wpe: Logging fixes for the WebExtension
+
+gst-plugins-ugly
+
+- mpegpsdemux: Ignore DTS if PTS < DTS
+
+gst-libav
+
+- avauddec, avviddec: Free packet side data after usage
+- avviddec: change
+ AV_CODEC_CAP_AUTO_THREADS->AV_CODEC_CAP_OTHER_THREADS to fix build
+ against newer ffmpeg versions
+- Memory leak in ’ av_packet_add_side_data’ in
+ /lib/x86_64-linux-gnu/libavcodec.so reading the file
+ clock_odd_size_RLE_g1597902.avi
+- avvidenc: Don’t take ffmpeg timestamps verbatim but only use them to
+ calculate DTS
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- vaapi: Skip plugin pc file for shared plugins
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- gst-python: Use arch-specific install dir for gi overrides
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- validate:scenario: sink refs when building
+- tests: Fix known issue definition location for unit tests and how we
+ handle them in validate launcher
+- tests: mark elements_srtp.test_play test as flaky
+- Fix gstreamer-validate-1.0 dependency name
+- validate-scenario: fix g-i warning in annotation
+- validate: Fix gst_validate_execute_action annotation
+
+gst-examples
+
+- webrtc examples: Use webrtc.gstreamer.net
+- webrtc_sendrecv.py: Various fixes
+
+Development build environment
+
+- gst-env: Handle installing python modules to dist-packages
+- meson: Allow sysdeps to be forced as fallback subprojects
+- meson: Switch dav1d wrap to a tarball and update to dav1d 1.1.0
+
+Cerbero build tool and packaging changes in 1.22.1
+
+- macos: Fix broken binaries on macos < 11.0
+- orc: Update pthread_jit_write_protect fix for macOS/iOS
+- dav1d: Update to 1.1.0
+- libsrtp: update to v2.5.0
+- rustup: Update to 1.25.2
+- rust: Update to 1.67; cargo-c to 0.9.16
+- cerbero: Don’t error out if bindir already exists
+- Fix setuptools site.py breakage in Python 3.11, bump
+ gobject-introspection, bump windows image
+- cerbero: Retry if cargo update fails on macOS
+- gst-plugins-rs: Build glib/gio bindings with 2.74 API support
+
+Contributors to 1.22.1
+
+Alessandro Bono, Arun Raghavan, Bart Van Severen, Carlos Falgueras
+García, Célestin Marot, David Svensson Fors, Edward Hervey, Enrique
+Ocaña González, Frank Dana, Guillaume Desmottes, He Junyan, James
+Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jordan Petridis,
+Mathieu Duponchelle, Matthew Waters, medithe, Mengkejiergeli Ba, Nicolas
+Beland, Nirbheek Chauhan, Patricia Muscalu, Pawel Stawicki, Philippe
+Normand, Piotr Brzeziński, Rajneesh Soni, Robert Rosengren, Sanchayan
+Maity, Sebastian Dröge, Seungha Yang, Simon Himmelbauer, Thibault
+Saunier, Tim-Philipp Müller, Tristan van Berkom, U. Artie Eoff, Víctor
+Manuel Jáquez Leal, Vivia Nikolaidou, Xuchen Yang, Yinhang 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.22.1
+
+- List of Merge Requests applied in 1.22.1
+- List of Issues fixed in 1.22.1
+
+1.22.2
+
+The second 1.22 bug-fix release (1.22.2) was released on 11 April 2023.
+
+This release only contains bugfixes and it should be safe to update from
+1.22.x.
+
+Highlighted bugfixes in 1.22.2
+
+- avdec_h264: fix decoder deadlocks with FFmpeg 6.0
+- rtspsrc: fix regression with URI protocols in OPTIONS requests for
+ RTSP over TLS
+- rtspsrc: improved control url handling compatibility for broken
+ servers
+- decklink: fix 10 bit RGB (r210) format auto detection for capture
+ and fix playout if video caps are configured before audio caps
+- d3d11videosink: Fix tearing in case of fullscreen mode
+- playbin: fix deadlock when stopping stream with subtitles visible
+ (even more)
+- typefinding: fix regression not detecting application/dash+xml in
+ some corner cases
+- osxvideosink: fix broken aspect ratio and frame drawing region
+- decodebin3, parsebin: Improve elementary stream handling when
+ decoders are not present and fix hang when removing a failing stream
+- urisourcebin: Propagate sticky events from parsebin, so that the
+ STREAM_START event with the GstStream info is always available when
+ pads get exposed
+- v4l2: Add support for YVU420M format; mark JPEG content as parsed
+- h264decoder, h265decoder: DPB bumping process and latency reporting
+ fixes
+- Opus: Fix reading of extended channel config in MPEG-TS and fix
+ missing sample rate when remuxing from RTP to Matroska
+- zxing: add support for building against zxing-c++ 2.0
+- cerbero: Fix packaging of Rust plugins on Android; fix modern Gentoo
+ distro detection
+- various bug fixes, memory leak fixes, and other stability and
+ reliability improvements
+
+gstreamer
+
+- datetime: Return G_MAXFLOAT instead of G_MAXDOUBLE for no timezone
+ offset
+- inputselector: Wake up streaming thread before PLAYING_TO_PAUSED
+ transition
+- tools: fix potential crash when passing command-line options on
+ Windows
+
+gst-plugins-base
+
+- alsasink: Fix for being stuck in stop_streaming_threads state
+- decodebin3: fix hang when removing a failing stream
+- gl: wayland: cleanup on close
+- parsebin: Improve elementary stream handling
+- playbin: fix deadlock when stopping stream with subtitles visible
+ even more
+- sdp: Skip source-specific caps fields when creating an SDP media
+ from caps
+- urisourcebin: Propagate sticky events from parsebin
+- urisourcebin: Activate pad before transferring sticky events
+- typefinding: fix failure to recognize application/dash+xml in some
+ cases
+
+gst-plugins-good
+
+- osxvideosink: fix broken aspect ratio and frame drawing region
+- qtdemux: Fix seek adjustment with SNAP_AFTER flag
+- rtpopusdepay, matroskamux: Fix invalid rate while muxing Opus in
+ Matroska
+- rtpmanager: twcc: Fix duplicate packet handling
+- rtsp: url: fix incorrect request URI scheme for TLS transport
+ methods (regression)
+- rtspsrc: Consider “451: Parameter Not Understood” when handling
+ broken control urls
+- rtspsrc: fix behavior change with URI protocols in OPTIONS requests
+- rtspsrc: Skip PTs with caps incompatible to the global caps
+- rtpjpegdepay: fix logic error when checking if an end of image (EOI)
+ tag is present
+- v4l2: Add support for YVU420M format
+- v4l2: mark JPEG as parsed
+
+gst-plugins-bad
+
+- cea708overlay: fix HCR interpretation
+- d3d11bufferpool: Fix invalid access in debug print loop
+- d3d11compositor: Fix composition error on release_pad()
+- d3d11converter: Fix conversion backend selection
+- d3d11videosink: Fix tearing in case of fullscreen mode -
+ d3d11bufferpool: Fix invalid access in debug print loop
+- d3d11window: fix memory leak
+- decklink: fix 10 bit RGB (r210) format auto detection
+- decklinkaudiosink: Fix playback when video caps is configured before
+ audio
+- decklinkvideosrc: RGB 4:4:4 doesn’t work after GStreamer upgrade
+ (regression)
+- decklinkvideosrc: unable to show HDMI stream that Blackmagic’s Media
+ Express is able to see
+- debugqroverlay: fix string leak
+- gtkwaylandsink: Destroy GstWlWindow when parent GtkWindow is
+ destroyed
+- gtkwaylandsink: Fix crash when rendering after the window is closed
+- ksvideo, directshow: Fix reference leaks in device providers
+- h264decoder: Fix DPB bumping process
+- h264decoder, h265decoder: Latency reporting related fixes
+- h264parse: Validate VUI framerate
+- jpegparse: reset parse state when the SOI is not the first marker
+- nvencoder: Fix CQP option setting
+- nvh264encoder: Fix template caps to include progressive mode as well
+- openjpegdec: allow multithread decoding only in subframe mode
+- tsdemux: Fix reading of extended Opus channel configuration
+- vulkan: fix validation layer issues
+- vulkanoverlaycompositor: fix potential use after free
+- vulkanswapper: correctly handle force-aspect-ratio=false
+- wasapi2: Fix potential crash on device activation failure
+- webrtc: Fix segfault traversing ice transports
+- webrtc: patch leak caused by early return
+- zxing: add support for zxing-c++ 2.0
+
+gst-plugins-ugly
+
+- No changes
+
+gst-libav
+
+- avdec_h264 pipeline freeze with FFmpeg6
+- avdeinterlace, avmux: fix element reference leak
+- avviddec: Drop decoder stream lock when calling send_packet
+
+gst-rtsp-server
+
+- rtsp-server: fix deadlock on shutdown with non-live pipeline if
+ media isn’t playing/prerolled yet and eos-shutdown is enabled for
+ the media
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- git: prevent CRLF line ending conversion for patches to fix pango
+ subproject patching issues on Windows
+
+Cerbero build tool and packaging changes in 1.22.2
+
+- build: retry rust build on SIGBUS errors too
+- Fix packaging of rust plugins on Android
+- Modern Gentoo distro adaptation
+- sbc: update to 2.0
+- speex: update to 1.2.1
+
+Contributors to 1.22.2
+
+Adrien De Coninck, Albert Sjölund, Alexande B, Antonio Rojas, Arun
+Raghavan, Bart Van Severen, Carlo Cabrera, Colin Kinloch, Edward Hervey,
+Guillaume Desmottes, Haihua Hu, He Junyan, Ilie Halip, Jordan Petridis,
+Josef Kolář, Lily Foster, Mathieu Duponchelle, Matt Feury, Matthew
+Waters, Maxim P. Dementyev, Michael Tretter, Nicolas Dufresne, Nirbheek
+Chauhan, Piotr Brzeziński, Robert Rosengren, Rouven Czerwinski,
+Sebastian Dröge, Seungha Yang, Shengqi Yu, Stéphane Cerveau, Talha Khan,
+Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Vivia
+Nikolaidou, Wang Chuan, Wojciech Kapsa,
+
+… 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.22.2
+
+- List of Merge Requests applied in 1.22.2
+- List of Issues fixed in 1.22.2
+
+1.22.3
+
+The third 1.22 bug-fix release (1.22.3) was released on 19 May 2023.
+
+This release only contains bugfixes and it should be safe to update from
+1.22.x.
+
+Highlighted bugfixes in 1.22.3
+
+- avdec: fix occasional video decoder deadlock on seeking with FFmpeg
+ 6.0
+- decodebin3: fix regression handling input streams without CAPS or
+ TIME segment such as e.g. udpsrc or `pushfilesrc
+- bluez: a2dpsink: fix Bluetooth SIG Certification test failures
+- osxvideosink: fix deadlock upon closing output window
+- qtdemux: fix edit list handling regression and AV1 codec box parsing
+- qtmux: fix extraction of CEA608 closed caption data from S334-1A
+ packets
+- rtspsrc: Fix handling of * control path
+- splitmux: timestamp handling improvements
+- v4l2videodec: Rework dynamic resolution change handling (needed for
+ IMX6 mainline codec)
+- videoflip: fix regression with automatically rotating video based on
+ tags
+- d3d11: many d3d11videosink and d3d11compositor fixes
+- webrtc, rtp: numerous data race fixes and stability fixes
+- various bug fixes, memory leak fixes, and other stability and
+ reliability improvements
+
+gstreamer
+
+- tracing: Initialize tracing infrastructure even if the debug system
+ is not compiled in
+- parse-launch: fix missing unref of looked-up child element
+- gstutils: Add category and object to most logging messages
+
+gst-plugins-base
+
+- allocators: Fix fdmem unit test with recent GLib versions
+- audiotestsrc: Initialize all samples in wave=ticks mode
+- decodebin3: Handle input streams without CAPS or TIME segment such
+ as e.g. udpsrc or pushfilesrc
+- decodebin3: fix regression handling streams without caps
+- decodebin3: fix random hang when remove failing stream
+- uridecodebin3: Ensure atomic urisourcebin state change
+- glvideoflip: fix leaked caps
+- glcontext_wgl: fix missing unref
+- playsink: Fix volume leak
+
+gst-plugins-good
+
+- adaptivedemux2: fix critical when using an unsupported URI
+- dashdemux2: mpdclient: fix divide by 0 if segment has no duration
+- imagesequencesrc: Properly set default location
+- multifile: error out if no filename was set
+- osxvideosink: fix deadlock upon closing output window
+- rtpmanager: rtpsession: data race leading to critical warnings
+- rtpmanager: rtpsession: race conditions leading to critical warnings
+- rtspsrc: Fix handling of * control path
+- splitmuxsink: Catch invalid DTS to avoid running into problems later
+- splitmuxsrc: Make PTS contiguous by preference
+- qtdemux: emit no-more-pads after pruning old pads
+- Revert “qtdemux: fix conditions for end of segment in reverse
+ playback” to fix edit list regression
+- qtdemux: Fix av1C parsing
+- qtmux: Fix extraction of CEA608 data from S334-1A packets
+- qtwindow: unref caps in destructor
+- v4l2: device provider: Fix GMainLoop leak
+- v4l2: videodec: Rework dynamic resolution change handling
+- v4l2: videodec: Prefer acquired caps over anything downstream
+- videoflip: fix setting of method property at construction time
+- videoflip 1.22.2 not rotating video when extracting frames
+
+gst-plugins-bad
+
+- a2dpsink: Fails many tests in Bluetooth SIG Certification
+- avdtputil: Use int instead of int range for fixed bitpool values
+- ccconverter: reintroduce frame count reset on cycle completion
+- ccconverter: integer overflow & crashing
+- codectimestamper: remove PC file generation from plugin’s own
+ meson.build
+- cudamemory: Fix for semi planar YUV memory size decision
+- d3d11compositor: Reconfigure resource only when output caps is
+ changed
+- d3d11compositor: Skip zero alpha input
+- d3d11convert: Fix for runtime property update
+- d3d11memory: Don’t clear wrapped texture memory
+- d3d11videosink: Fix for ignored initial render rectangle
+- d3d11videosink: fix race condition in window unprepare
+- d3d11videosink: Enhancement for initial window size decision
+- d3d11videosink: Don’t clear prepared buffer on unlock_stop()
+- dashdemux: mpdclient: fix divide by 0 if segment has no duration
+- dtlstransport: Keep strong ref of dtls encoder/decoder
+- GstPlay: avoid getting property of playbin2 if subtitle_sid is null
+- GstPlay: fix critical log when using playbin3
+- h264decoder: Drop nonexisting picture silently without error
+- dtmf: element classification improvements
+- mfvideoenc: Allow only even resolution numbers
+- sctpenc: Fix potential shutdown deadlock
+- srtpdec: fix “srtp-key” check
+- tests: disable dtls test if openssl is not present
+- tsdemux: Set number of channels to 2 for dual mono Opus
+- va: Various fixes for defects found with MSVC
+- wasapi2: Allows process loopback capture on Windows 10
+- webrtcdatachannel: Bind to parent webrtcbin using a weak reference
+- webrtcbin: Fix potential deadlock when closing before any data was
+ sent
+- webrtc: Plug leaks of resolved ICE addresses
+- webrtc: do not tear down data channel before data is flushed
+
+gst-plugins-ugly
+
+- mpegpsdemux: Rework gap sending
+
+gst-libav
+
+- avviddec: Temporarily unlock stream lock while flushing buffers
+- Random freeze and deadlock in ffmpegviddec flush and get_buffer
+ while seeking
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- ges: base-xml-formatter: Don’t pass non-GObject pointers to
+ GST_DEBUG_OBJECT
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.3
+
+- glib: Ship Windows process spawning helpers
+- recipes: add recipe for libltc for timecodestamper element
+- Add support for RHEL9 and Rocky Linux
+
+Contributors to 1.22.3
+
+Aleksandr Slobodeniuk, Antonio Kevo, Arun Raghavan, Carlos Rafael Giani,
+Daniel Moberg, Edward Hervey, Elliot Chen, François Laignel, Guillaume
+Desmottes, Haihua Hu, Jan Alexander Steffens (heftig), Jan Beich, Jan
+Schmidt, Johan Sternerup, John King, Jordan Petridis, Juan Navarro, Lily
+Foster, Martin Nordholts, Mathieu Duponchelle, Matthew Waters, Matthias
+Fuchs, Michael Olbrich, Mihail Ivanchev, Nick Steel, Nicolas Dufresne,
+Nirbheek Chauhan, Patricia Muscalu, Philippe Normand, Piotr Brzeziński,
+Sanchayan Maity, Sebastian Dröge, Seungha Yang, Stéphane Cerveau,
+Thibault Saunier, Tim-Philipp Müller, Xabier Rodriguez Calvar,
+
+… 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.22.3
+
+- List of Merge Requests applied in 1.22.3
+- List of Issues fixed in 1.22.3
+
+1.22.4
+
+The fourth 1.22 bug-fix release (1.22.4) was released on 20 June 2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.4
+
+- Security fixes for flacparse, dvdspu, and subparse
+- d3d11videosink: Fix error on pause and play
+- decklink: Correctly handle SDK strings on macOS and free strings
+ after usage on Linux
+- filesink: Fix buffered mode writing of buffer lists and buffers with
+ multiple memories
+- gldownload: handle passthrough without a critical
+- h265parse: Fix framerate handling regression
+- oggdemux: vp8 fixes
+- mp4mux, qtmux, qtdemux: Opus audio mapping fixes
+- pngdec: Fix wrong colours output from 16bit RGB images
+- ptp clock: Work around ptpd bug in default configuration
+- srtpdec: fix critical warnings on shutdown
+- v4l2src: fix support for bayer format
+- v4l2videoenc: support force-keyframe event in v4l2 encoder
+- vtenc: apply DTS offset to ensure DTS <= PTS
+- gst-python: allow more functions to be called before gst_init()
+- cerbero: fix vaapi variant; add qt6 build on windows; ensure errors
+ on unguarded use of new APIs, require macOS 10.13
+- packages: ship codecalpha, rtponvif, dvbsubenc, switchbin,
+ videosignal plugins; fix pango crash on 32-bit windows
+- various bug fixes, memory leak fixes, and other stability and
+ reliability improvements
+
+gstreamer
+
+- filesink: Fix buffered mode writing of buffer lists and buffers with
+ multiple memories
+- basesink: Clear EOS flag on STREAM-START event
+- typefindhelper: downgrade bogus error level debug log message
+- ptp: Correctly parse clock ID from the commandline parameters in the
+ helper
+- ptp: Work around bug in ptpd in default configuration
+
+gst-plugins-base
+
+- alsasink: Fix stall for transition from PAUSED to READY with USB
+ speakerphone.
+- appsink: unref buffer in prev sample early so buffers from v4l2 can
+ be released properly
+- basetextoverlay: Fix typo in “text-y” property description
+- gldownload: handle passthrough without a critical
+- glfilter: add parent meta to output buffer for input buffer
+- oggdemux: vp8: Push headers downstream and detect keyframe packets
+- opus: Fix potential crash when getting unexpected channel position
+- streamsynchronizer: reset eos on STREAM_START
+- subparse: Look for the closing > of a tag after the opening <
+- video: convertframe: Add D3D11 specific conversion path
+- videometa: Only validate the alignment only when it contains some
+ info
+- video-blend: Fix linking error with C++
+
+gst-plugins-good
+
+- flacparse: Avoid integer overflow in available data check for image
+ tags
+- flvmux: use the correct timestamp to calculate wait times
+- isomp4: Fix (E)AC-3 channel count handling
+- jpegdec: fixes related to interlaced jpeg
+- pngdec: Fix wrong colours output from 16bit RGB images
+- qtmux, qtdemux: fix byte order for opus extension
+- rtspsrc: Do not try send dropped get/set parameter
+- qt5, qt6: Add more meson options and eliminate all automagic
+- qt: glrenderer: don’t attempt to use QWindow from non-Qt main thread
+- qml6glsink: Support building on win32
+- v4l2src: fix support for bayer format
+- v4l2: Change to query only up to
+ V4L2_CID_PRIVATE_BASE+V4L2_CID_MAX_CTRLS
+- v4l2videodec: treat MPEG-1 format as MPEG-2
+- v4l2videoenc: support force keyframe event in v4l2 encoder
+- tests: rtpbin_buffer_list: fix possible unaligned write/read on
+ 32-bit ARM
+
+gst-plugins-bad
+
+- asfmux: fix possible unaligned write on 32-bit ARM
+- d3d11videosink: Fix error on pause and play
+- d3dvideosink: Fix navigation event leak
+- decklink: Correctly handle SDK strings on macOS and free strings
+ after usage on Linux
+- dvdspu: Make sure enough data is allocated for the available data
+- fdkaacdec: Support up to 5 rear channels
+- h265parse: Fix framerate handling
+- kmssink: Add STM32 LTDC and NXP i.MX8M Plus LCDIFv3 auto-detection
+- sdpdemux: ensure that only one srcpad is created per stream
+- srtpdec: fix critical warnings on shutdown
+- testsrcbin: Remove spurious caps unref
+- va: map the mbbrc to correct enum value in get_property()
+- vtenc: apply DTS offset to ensure DTS <= PTS
+- vtdec: time glitches on h264 playback
+- waylandsink: Emit “map” signal boarder surface is ready
+
+gst-plugins-ugly
+
+- No changes
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- vaapidecodebin: don’t load vaapipostproc if not available
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- python: More functions can be called before gst_init()
+
+gst-editing-services
+
+- ges: launcher: Never put sinks in a GstPipeline
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.4
+
+- Ship codecalpha, rtponvif, dvbsubenc, switchbin, videosignal plugins
+- pango: Fix crash on Windows 32bit build
+- qml6: Add support for building the qml6 plugin on Windows and bump
+ meson to 1.1.1
+- vaapi: update vaapi variant/recipe for meson option changes
+- packages: Put libass in the same category as assrender
+- cerbero: Don’t extract if already extracted in fetch
+- darwin: Ensure errors on unguarded use of new APIs, require macOS
+ 10.13
+
+Contributors to 1.22.4
+
+Andoni Morales Alastruey, Arun Raghavan, Colin Kinloch, Daniel Morin,
+Edward Hervey, ekwange, Elliot Chen, François Laignel, Guillaume
+Desmottes, Haihua Hu, He Junyan, Hou Qi, Jan Alexander Steffens
+(heftig), Jochen Henneberg, Jordan Petridis, Kevin Song, Maksym
+Khomenko, Marek Vasut, Mathieu Duponchelle, Matthew Waters,
+Mengkejiergeli Ba, Michael Olbrich, Nicolas Beland, Nicolas Dufresne,
+Nirbheek Chauhan, Philippe Normand, Piotr Brzeziński, Sebastian Dröge,
+Seungha Yang, Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez
+Leal, William Manley, Xavier Claessens, Yuri Fedoseev,
+
+… 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.22.4
+
+- List of Merge Requests applied in 1.22.4
+- List of Issues fixed in 1.22.4
+
+1.22.5
+
+The fifth 1.22 bug-fix release (1.22.5) was released on 20 July 2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.5
+
+- Security fixes for the RealMedia demuxer
+- vaapi decoders, postproc: Disable DMAbuf from caps negotiation to
+ fix garbled video in some cases
+- decodebin3, playbin3, parsebin fixes, especially for stream
+ reconfiguration
+- hlsdemux2: fix early seeking; don’t pass referer when updating
+ playlists; webvtt fixes
+- gtk: Fix critical caused by pointer movement when stream is getting
+ ready
+- qt6: Set sampler filtering method, fixes bad quality with qml6glsink
+ and gstqt6d3d11
+- v4l2src: handle resolution change when buffers are copied
+- videoflip: update orientation tag in auto mode
+- video timecode: Add support for framerates lower than 1fps and
+ accept 119.88 (120/1.001) fps
+- webrtcsink: fixes for x264enc and NVIDIA encoders
+- cerbero: Pull ninja from system if possible, avoid spurious
+ bootstrap of cmake
+- packages: Recipe updates for ffmpeg, libsoup, orc
+- various bug fixes, memory leak fixes, and other stability and
+ reliability improvements
+
+gstreamer
+
+- taglist, plugins: fix compiler warnings with GLib >= 2.76
+- tracerutils: allow casting parameter types
+- inputselector: fix playing variable is never set
+
+gst-plugins-base
+
+- appsink: add missing make_writable call
+- audioaggregator: Do not post message before being constructed
+- decodebin3: Prevent a critical warning when reassigning output slots
+- decodebin3: Fix slot input linking when the associated stream has
+ changed
+- decodebin3: Remove spurious input locking during parsebin
+ reconfiguration
+- urisourcebin: Set source element to READY before querying it
+- gl/viv-fb: meson build updates
+- plugins: fix compiler warnings with GLib >= 2.76
+- subtitleoverlay: fix mutex error if sink caps is not video
+- video: timecode: Add support for framerates lower than 1fps
+- video: accept timecode of 119.88 (120/1.001) FPS
+- video: cannot attach time code meta when frame rate is 119.88
+ (120000/1001)
+- videodecoder: fix copying buffer metas
+
+gst-plugins-good
+
+- adaptivedemux2: Fix early seeking
+- hlsdemux2: Ensure processed webvtt ends with empty new line
+- hlsdemux2: Don’t set a referer when updating playlists
+- matroska: demux: Strip signal byte when encrypted
+- rtspsrc: Fix crash when is-live=false
+- gtk: Fix critical caused by pointer movement when stream is getting
+ ready
+- qt6: Set sampler filtering method, fixes bad quality with qml6glsink
+ and gstqt6d3d11
+- qtdemux: opus: set entry as sampled
+- v4l2src: handle resolution change when buffers are copied
+- v4l2videodec: Fix handling of initial gaps
+- v4l2videodec: correctly register v4l2mpeg2dec
+- v4l2videoenc: replace custom QUERY_CAPS handling with getcaps
+ callback
+- videoflip: update orientation tag in auto mode
+- videoflip: fix critical when tag list is not writable
+
+gst-plugins-bad
+
+- d3d11bufferpool: Fix heavy CPU usage in case of fixed-size pool
+- jpegparser: jpegdecoder: Don’t pollute bus and comply with spec
+- plugins: fix compiler warnings with GLib >= 2.76
+- webrtcbin: Prevent critical warning when creating an additional data
+ channel
+- webrtcstats: Properly report IceCandidate type
+
+gst-plugins-ugly
+
+- rmdemux: add some integer overflow checks
+
+gst-plugins-rs
+
+- fallbackswitch: Change the threshold for trailing buffers
+- fallbackswitch: Fix pad health calculation and notifies
+- fmp4mux: Fix draining in chunk mode if keyframes are too late
+- livesync: Wait for the end timestamp of the previous buffer before
+ looking at queue
+- livesync: Improve EOS handling
+- togglerecord: Clip segment before calculating timestamp/duration
+- togglerecord: Error out if main stream buffer has no valid running
+ time
+- webrtcsink: fix pipeline when input caps contain max-framerate
+- webrtcsink: Configure only 4 threads for x264enc
+- webrtcsink: Translate force-keyunit events to force-IDR action
+ signal for NVIDIA encoders
+- webrtcsink: Set config-interval=-1 and aggregate-mode=zero-latency
+ on rtph264pay and rtph265pay
+- webrtcsink: Set VP8/VP9 payloader based on payloader element factory
+ name
+- webrtcink: Use correct property types for nvvideoconvert
+- webrtc/signalling: fix race condition in message ordering
+- videofx: Minimize dependencies of the image crate
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- vaapidecode,vaapipostproc: Disable DMAbuf from caps negotiation.
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- ges: some fixes for 32-bit systems
+- ges, nle: Avoid setting state or sending query when constructing
+ objects
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.5
+
+- Pull ninja from system if possible, avoid spurious bootstrap of
+ cmake
+- ffmpeg: update to 5.0.3
+- libsoup: update to 2.74.3
+- orc: update to 0.4.34
+
+Contributors to 1.22.5
+
+Andoni Morales Alastruey, Bastien Nocera, Carlos Rafael Giani, David
+Craven, Doug Nazar, Edward Hervey, François Laignel, Guillaume
+Desmottes, He Junyan, Hou Qi, Jan Alexander Steffens (heftig), Jan
+Schmidt, Maksym Khomenko, Mathieu Duponchelle, Matthew Waters, Michael
+Olbrich, Michael Tretter, Nicolas Dufresne, Nirbheek Chauhan, Philippe
+Normand, Ruslan Khamidullin, Sebastian Dröge, Seungha Yang, Théo
+Maillart, Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez
+Leal, Vivia Nikolaidou, Yatin Maan,
+
+… 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.22.5
+
+- List of Merge Requests applied in 1.22.5
+- List of Issues fixed in 1.22.5
+
+1.22.6
+
+The sixth 1.22 bug-fix release (1.22.6) was released on 20 September
+2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.6
+
+- Security fixes for the MXF demuxer and H.265 video parser
+- Fix latency regression in H.264 hardware decoder base class
+- androidmedia: fix HEVC codec profile registration and fix coded_data
+ handling
+- decodebin3: fix switching from a raw stream to an encoded stream
+- gst-inspect: prettier and more correct signal and action signals
+ printing
+- rtmp2: Allow NULL flash version, omitting the field, for better RTMP
+ server compatibility
+- rtspsrc: better compatibility with buggy RTSP servers that don’t set
+ a clock-rate
+- rtpjitterbuffer: fix integer overflow that led to more packets being
+ declared lost than have been lost
+- v4l2: fix video encoding regression on RPi and fix support for left
+ and top padding
+- waylandsink: Crop surfaces to their display width height
+- cerbero: recognise Manjaro; add Rust support for MSVC ARM64; cmake
+ detection fixes
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- gst-inspect: prettier and more correct signal printing, and print
+ action signals in g_signal_emit_by_name() format
+- gst-launch: Disable fault signal handlers on macOS
+
+gst-plugins-base
+
+- audio: Make sure to stop ringbuffer on error
+- decodebin3: avoid identity, sinkpad, parsebin leakage when reset
+ input
+- decodebin3: Ensure the slot is unlinked before linking to decoder
+- sdp: fix wrong debug log error message for missing clock-rate in
+ caps
+- sdp: Parse zero clock-rate as default
+
+gst-plugins-good
+
+- adaptivedemux2: fix memory leak
+- pulsedeviceprovider: fix incorrect usage of GST_ELEMENT_ERROR
+- qt: Unbreak build with qt-egl enabled but viv_fb missing
+- qt: Fix searching of qt5/qt6 tools with qmake in Meson
+- qtdemux: Fix premature EOS when some files are played in push mode
+- qtdemux: attach cbcs crypt info at the right moment
+- rtpjitterbuffer: Avoid integer overflow in max saveable packets
+ calculation with negative offset
+- videoflip: fix concurrent access when modifying the tag list
+- v4l2: allocator: Don’t close foreign dmabuf
+- v4l2: bufferpool: Fix large encoded stream regression
+- v4l2: bufferpool: Problems when checking for truncated buffer
+- v4l2: Fix support for left and top padding
+- v4l2object: clear format lists if source change event is received
+
+gst-plugins-bad
+
+- androidmedia/enc: handle codec-data before popping
+ GstVideoCodecFrames
+- androidmedia: fix hevc codec profile registration
+- androidmedia: Small fixes
+- androidmedia: Add more null checks (of env) to JNI utilities
+- applemedia: Fix pixel format for I420 and NV12
+- audiolatency: Forward latency query and event upstream
+- av1parser: Fix segmentation params update
+- codecparsers: Fix MPEG-1 aspect ratio table
+- d3d11convert: Passthrough allocation query on same caps
+- h264decoder: Update latency dynamically
+- h265parser: Allow partially broken hvcC data
+- h265parser: Fix possible overflow using max_sub_layers_minus1
+- hlssink2: Always use forward slash separator
+- mdns: Fix a crash on context error
+- mxfdemux: Fix integer overflow causing out of bounds writes when
+ handling invalid uncompressed video and check channels for AES3
+- nvencoder: Fix negotiation error when interlace-mode is unspecified
+- rtmp2: Allow NULL flash version, omitting the field
+- rtmp2sink: fix crash if message conversion failed
+- transcodebin: Fixes for upstream selectable support
+- va: Fix in error logs functions mismatches
+- waylandsink: Crop surfaces to their display width height
+- waylandsink: Fix cropping for video with non-square aspect ratio
+- webrtc: Fix docs for create-data-channel action signal
+- win32ipc: Fix pipe handle leak
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- fallbackswitch: locking/deadlock fixes
+- onvifmetadataparse: Skip metadata frames with unrepresentable UTC
+ time
+- transcriberbin: Configure audioresample in front of transcriber
+- webrtcsink: Propagate GstContext messages
+- webrtcsink: Add support for d3d11 memory and qsvh264enc
+- webrtcsink: fix TWCC extension adding
+- webrtcsink: don’t forget to setup encoders for discoveries
+- webrtcsink: NVIDIA V4L2 encoders always require NVMM memory
+- meson: Fix handling of optional deps, and don’t require Python 3.8
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- gst-validate: Disable fault signal handlers on macOS
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- macos-bison: Update to 3.8.2 and add an ARM64 build
+- wrap: update libpsl to 0.21.2
+
+Cerbero build tool and packaging changes in 1.22.6
+
+- Add Rust support for MSVC ARM64
+- Recognise PERL5LIB as a joinable Unix variable
+- Recognise Manjaro as an Arch derivative
+- Fix picking up cmake from build-tools
+
+Contributors to 1.22.6
+
+Akihiro Sagawa, Alicia Boya García, Guillaume Desmottes, Haihua Hu,
+Hugues Fruchet, Ivan Molodetskikh, Jan Alexander Steffens (heftig), Jan
+Schmidt, L. E. Segovia, Mathieu Duponchelle, Matthew Waters, Ming Qian,
+Nicolas Dufresne, Nirbheek Chauhan, Olivier Blin, Olivier Crête,
+Philippe Normand, Piotr Brzeziński, Robert Ayrapetyan, Ryan Pavlik,
+Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Stephan Seitz, Thomas
+Schneider, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Wang Chuan,
+Xabier Rodriguez Calvar,
+
+… 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.22.6
+
+- List of Merge Requests applied in 1.22.6
+- List of Issues fixed in 1.22.6
+
+1.22.7
+
+The seventh 1.22 bug-fix release (1.22.7) was released on 13 November
+2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.7
+
+- Security fixes for the MXF demuxer and AV1 codec parser
+- glfilter: Memory leak fix for OpenGL filter elements
+- d3d11videosink: Fix toggling between fullscreen and maximized, and
+ window switching in fullscreen mode
+- DASH / HLS adaptive streaming fixes
+- Decklink card device provider device name string handling fixes
+- interaudiosrc: handle non-interleaved audio properly
+- openh264: Fail gracefully if openh264 encoder/decoder creation fails
+- rtspsrc: improved whitespace handling in response headers by certain
+ cameras
+- v4l2codecs: avoid wrap-around after 1000000 frames; tiled formats
+ handling fixes
+- video-scaler, audio-resampler: downgraded “Can’t find exact taps”
+ debug log messages
+- wasapi2: Don’t use global volume control object
+- Rust plugins: various improvements in aws, fmp4mux, hlssink3,
+ livesync, ndisrc, rtpav1depay, rsfilesink, s3sink, sccparse
+- WebRTC: various webrtchttp, webrtcsrc, and webrtcsink improvements
+ and fixes
+- Cerbero build tools: recognise Windows 11; restrict parallelism of
+ gst-plugins-rs build on small systems
+- Packages: ca-certificates update; fix gio module loading and TLS
+ support on macOS
+
+gstreamer
+
+- debugutils: provide gst_debug_bin_to_dot_data() implementation even
+ if debug system is disabled
+
+gst-plugins-base
+
+- audioaggregator, audiomixer: Make access to the pad list thread-safe
+ while mixing
+- basetextoverlay: Fix overlay never rendering again if width reaches
+ 1px
+- glfiter: Protect GstGLContext access
+- glfilter: Only add parent meta if inbuf != outbuf
+- macOS: fix huge memory leak with glfilter-based elements
+- rtspconnection: Ignore trailing whitespace in rtsp headers
+- video-scaler, audio-resampler: downgrade ‘can’t find exact taps’ to
+ debug
+
+gst-plugins-good
+
+- adaptivedemux2: Do not submit_transfer when cancelled
+- adaptivedemux2: Call GTasks’s return functions for blocking tasks
+- flacenc: Correctly handle up to 255 cue entries
+- flvmux: set the src segment position as running time
+- imagesequencesrc: fix deadlock when feeding the same image in a loop
+- pngenc: output one frame only in snapshot mode and mark output
+ frames as I-frames
+- qmlglsrc: sync on the streaming thread
+- souphttpsrc: Chain up to finalize to fix memory leak
+- wavparse: fix buffer leak with adtl tag
+- v4l2codecs: Avoid QBUF/DQBUF struct timeval .tv_usec wrap-around at
+ frame 1000000
+- v4l2codecs: Fix tiled formats stride conversion
+
+gst-plugins-bad
+
+- audiobuffersplit: disable max-silence-time if set to 0
+- libde265: Do not decode the non 4:2:0 8 bits format
+- codecparsers: av1: Clip max tile rows and cols values
+- codecs: h265: Do not free slice header before using it
+- d3d11converter: Fix 10/12bits planar output
+- d3d11decoder: Fix crash on negotiate() when decoder is not
+ configured
+- d3d11videosink: Fix toggling between fullscreen and maximized
+- d3d11videosink: Fix window switching in case of fullscreen mode
+- d3d11screencapturesrc: Fix mouse cursor blending
+- decklink: Fix broken COM string conversion
+- decklink: Decklink Device Provider wrongly parses SDK strings
+- gstwayland: Don’t depend on wayland-protocols
+- interaudiosrc: Add audio meta to buffers containing non-interleaved
+ samples
+- kmssink: Add TIDSS auto-detection
+- mfvideoencoder: Fix typo in template caps
+- mxfdemux: Store GstMXFDemuxEssenceTrack in their own fixed
+ allocation
+- nvcodec: fix bounds for auto-select GPU enumeration
+- openh264: Fail gracefully if openh264 encoder/decoder creation fails
+- tsmux: More cleanups
+- tsmux: Fill padding packets with stuffing bytes
+- v4l2codecs: Fix tiled formats stride conversion
+- v4l2videodec: Correctly free caps to avoid memory leak
+- wasapi2: Don’t use global volume control object
+- wasapi2device: Ignore activation failed device
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- aws: s3sink: Fix handling of special characters in key
+- aws: s3: Properly percent-decode GstS3Url
+- fmp4mux: Don’t overflow negative composition offset calculation
+- fmp4mux: specify the fragment duration unit
+- hlssink3: Use Path API for getting file name
+- hlssink3: Use sprintf for segment name formatting
+- hlssink3: Remove unused deps
+- hlssink3: Don’t remove old files if max-files is zero
+- hlssink3: Don’t remove uri from playlist if playlist-length is zero
+- hlssink3: Various cleanup
+- livesync: log new pending segments
+- livesync: display jitter when waiting on clock
+- livesync: Rename activatemode methods to *_activatemode
+- livesync: Simplify start_src_task and src_loop
+- livesync: Improve audio duration fixups
+- livesync: Log a category error when we are missing the segment
+- livesync: Clean up state handling
+- livesync: Replace an if-let with match
+- livesync: Move a notify closer to the interesting state change
+- livesync: Move num_in counting to the src task
+- livesync: Simplify num_duplicate counting
+- livesync: Handle flags and late buffer patching after queueing
+- livesync: Separate out_buffer duplicate status from GAP flag
+- livesync: Use fallback_duration for audio repeat buffers as well
+- livesync: example: Add identities single-segment=1
+- livesync: Split fallback_duration into in_ and out_duration
+- livesync: Keep existing buffer duration in some cases
+- livesync: Remove the stop from outgoing segments
+- ndisrc: Assume input with more than 8 raw audio channels is
+ unpositioned
+- rtpav1depay: Skip unexpected leading fragments
+- rtpav1depay: Don’t push stale temporal delimiters downstream
+- rsfilesink: set sync=false
+- s3sink: set sync=false
+- sccparse: Fix leading spaces between the tab and caption data
+- webrtchttp: Respect HTTP redirects
+- webrtcsrc: use @watch instead of @to-owned
+- webrtcsrc: add turn-servers property
+- webrtc: Fix paths in README
+- webrtcsink: don’t miss ice candidates
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- rtspclientsink: Don’t leak previous server_ip
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- gst-validate: Fix compatibility with Python 3.12
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.7
+
+- Add Windows 11 to the supported versions list
+- ca-certificates: Update to version from 2023-08-22
+- cargo: Restrict parallelism if a small system is detected (for
+ gst-plugins-rs build)
+- Fix venv setup on Python 3.11+
+- Fix unlinking of Android NDK directories if install fails midway
+- glib: Work around AppleClang + -Werror test build failure
+- glib: Re-add gio module loading patch for macOS, remove unused patch
+ files
+
+Contributors to 1.22.7
+
+Albert Sjölund, Arun Raghavan, Balló György, Benjamin Gaignard, Detlev
+Casanova, Doug Nazar, Eric, Florian Zwoch, François Laignel, Guillaume
+Desmottes, He Junyan, Hou Qi, James Oliver, Jan Alexander Steffens
+(heftig), Jan Schmidt, Johan Adam Nilsson, Jordan Yelloz, Kalev Lember,
+L. E. Segovia, Lieven Paulissen, Maksym Khomenko, Marek Vasut, Matthias
+Fuchs, Michiel Westerbeek, Nicolas Dufresne, Philippe Normand, Piotr
+Brzeziński, Rahul T R, Sean DuBois, Sebastian Dröge, Seungha Yang,
+Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller,
+
+… 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.22.7
+
+- List of Merge Requests applied in 1.22.7
+- List of Issues fixed in 1.22.7
+
+1.22.8
+
+The eight 1.22 bug-fix release (1.22.8) was released on 18 December
+2023.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.8
+
+- Security fixes for the AV1 video codec parser
+- avdec video decoder: fix another possible deadlock with FFmpeg 6.1
+- qtdemux: reverse playback and seeking fixes for files with raw audio
+ streams
+- v4l2: fix “newly allocated buffer … is not free” warning log flood
+- GstPlay + GstPlayer library fixes
+- dtls: Fix build failure on Windows when compiling against OpenSSL
+ 3.2.0
+- d3d11screencapturesrc: Fix wrong color with HDR enabled
+- Cerbero build tool: More python 3.12 string escape warning fixes;
+ make sure to bundle build tools as well
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- buffer: Unref memories before metas
+- pad: Recheck pads when linking after temporary unlock
+- baseparse: Fixes to buffers extracted from adapter
+
+gst-plugins-base
+
+- appsrc: Fix flow return when buffer is dropped
+- audioringbuffer: Don’t try to map MONO channel
+- encoding-target: Properly free when missing type field in
+ parse_encoding_profile
+- pbutils: Don’t include default vp9 parameters in resulting codec
+ mime string
+- videorate: Don’t forget last_ts on caps changes
+
+gst-plugins-good
+
+- dcaparse: keep upstream buffer meta
+- rtpklvdepay: Recover after invalid fragmented KLV unit
+- matroska-demux: fix accumulated base offset in segment seeks
+- qtdemux: fix bug report URL
+- qtdemux: Don’t overflow sample index
+- qtdemux: Fix reverse playback for pcm audio stream
+- qtdemux: Ignore raw audio streams when adjusting seek
+- qtdemux: Under-seeking to a key unit in certain (encoded by Adobe
+ products) ProRes movies (macOS x86_64 & arm64, Windows x86_64, …)
+- rtpac3depay: should output audio/x-ac3 not audio/ac3
+- rtp: Fix incorrect RTP channel order lookup by name
+- v4l2bufferpool: add lock as atomic operation for seek
+
+gst-plugins-bad
+
+- aesenc: Fix IV length addition to output buffer length
+- av1parser: Fix array sizes in scalability structure
+- camerabin: Fix source updates with user filters
+- codecparsers: av1: Clip max tile rows and cols values
+- dtlscertificate: Define WINSOCKAPI before including windows.h
+- d3d11: fix building with address sanitizer
+- d3d11screencapturesrc: Fix wrong color with HDR enabled
+- h264decoder: Fix GstVideoCodecFrame leak
+- ladspa: Make RDF parsing truly optional
+- rtponviftimestamp: Fix drop-out-of-segment=false mode
+- qsvdecoder: Fix stream format detection
+- webrtcsdp: Remove fingerprint validation that doesn’t make sense
+- GstPlay: Automatically flush the bus when disposing the signal
+ adapter
+- GstPlayer: Without dispatcher emit signals directly instead of via
+ the default main context
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- threadshare: Fix a deadlock in used-socket notification
+- threadshare: Fix a typo while logging
+- webrtcsink: don’t panic on failure to request pad from webrtcbin
+- ndi: Remove wrong Clone impl on RecvInstance
+- ndi: Don’t mark private type as public
+- fallbacksrc: Fix timeout scheduling
+
+gst-libav
+
+- avviddec: Unlock stream lock while waiting for decoded frame. Fixes
+ potential deadlock
+- avviddec: Calculate latency only for fixed framerate
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.8
+
+- cerbero: Fix some more python 3.12 string escape warnings
+- cerbero: Fix bundle-source not including build-tools recipes, fix
+ CalledProcessError handling
+- pango: Add Perl interpreter consistency check
+
+Contributors to 1.22.8
+
+Alessandro Bono, Alexander Slobodeniuk, Arun Raghavan, Benjamin
+Gaignard, Daniel Moberg, Dongyun Seo, Doug Nazar, Guillaume Desmottes,
+Hosang Lee, Jan Alexander Steffens (heftig), jeri.li, Jimmy Ohn, L. E.
+Segovia, Mathieu Duponchelle, Nicolas Dufresne, Nirbheek Chauhan,
+Olivier Crête, Philippe Normand, Piotr Brzeziński, Rabindra Harlalka,
+Robert Mader, Robin Gustavsson, Sebastian Dröge, Seungha Yang, Stefan
+Brüns, Tim-Philipp Müller, Xavier Claessens,
+
+… 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.22.8
+
+- List of Merge Requests applied in 1.22.8
+- List of Issues fixed in 1.22.8
+
+1.22.9
+
+The ninth 1.22 bug-fix release (1.22.9) was released on 24 January 2024.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.9
+
+- More Security fixes for the AV1 video codec parser
+- va: fixes for Mesa Gallium drivers in Mesa versions older than v23.2
+- v4l2src: Consider framerate during caps selection
+- v4l2codec: decoder fixes
+- rtspsrc: multicast fixes
+- camerabin viewfinder fixes
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- aggregator: fix use-after-free in queries processing
+- multiqueue: Ignore queue fullness for most events
+
+gst-plugins-base
+
+- audiobasesink: Don’t wait on gap events
+- audioconvert: change gst_audio_convert_get_unit_size() log levels
+- glcolorconvert: Correct transform_caps direction
+- gloverlay: Apply updated overlay coordinates correctly
+- videorate: keep pool if max_buffers is unlimited
+
+gst-plugins-good
+
+- rtpsession: Only warn once if configured latency needs to be known
+ but isn’t yet
+- rtphdrext-clientaudiolevel: Fix level value being written by the
+ extension
+- rtspsrc: set multicast-iface on udpsinks and fix RTCP sink TTL
+- v4l2object: clear old fds when initializing poll during opening v4l2
+ device
+- v4l2src: Consider framerate during caps selection
+- vpxdec: Use appropriate domain and code for decoding errors
+
+gst-plugins-bad
+
+- av1parser: Fix potential stack overflow during tile list parsing
+- camerabin: Correctly relink viewfinderbin_queue
+- GstPlay: Fix error details parsing
+- h264decoder: Handle malformed avc/avc3 packets
+- h264decoder: h265decoder: Align with wraparound fix
+- vp8decoder: vp9decoder: av1decoder: mpeg2decoder: Fix multiplication
+ wraparound
+- vah264enc/vah264dec issues after recent upgrade to 1.22.8 from
+ 1.22.7
+- va: fixes for Mesa Gallium drivers in Mesa versions older than v23.2
+- vp9parse: Fix critical warning during caps negotiation
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- No changes
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.9
+
+- No changes
+
+Contributors to 1.22.9
+
+Alexander Slobodeniuk, Chao Guo, Damian Hobson-Garcia, Dan Searles,
+Guillaume Desmottes, Jan Schmidt, Marek Vasut, Mengkejiergeli Ba,
+Michael Tretter, Philippe Normand, Robert Mader, Sanchayan Maity,
+Sebastian Dröge, Seungha Yang, Tim-Philipp Müller, Víctor Manuel Jáquez
+Leal, Xavier Claessens,
+
+… 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.22.9
+
+- List of Merge Requests applied in 1.22.9
+- List of Issues fixed in 1.22.9
-Our next major feature release will be 1.24, and 1.23 will be the
-unstable development version leading up to the stable 1.24 release. The
-development of 1.23/1.24 will happen in the git main branch of the
-GStreamer mono repository.
+1.22.10
-The plan for the 1.24 development cycle is yet to be confirmed.
+The tenth 1.22 bug-fix release (1.22.10) was released on 13 February
+2024.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+Highlighted bugfixes in 1.22.10
+
+- gst-python: fix bindings overrides for Python >= 3.12
+- glcolorconvert: fix wrong RGB to YUV matrix with bt709
+- glvideoflip: fix “method” property setting at construction time
+- gtk4paintablesink: Always draw a black background behind the video
+ frame, and other fixes
+- pad: keep segment event seqnums the same when applying a pad offset
+- basesink: Preroll on out of segment buffers when not dropping them
+- Prefer FFmpeg musepack decoder/demuxer, fixing musepack playback in
+ decodebin3/playbin3
+- livesync: add support for image formats such as JPEG or PNG
+- sdpdemux: Add SDP message (aka session) attributes to the caps too
+- textwrap: add support for gaps
+- macos: Fix gst_macos_main() terminating whole process, and set
+ activation policy
+- webrtcbin: Improve SDP intersection for Opus
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- pad: Copy over seqnum when creating a new segment event for applying
+ pad offset
+- basesink: Preroll on out of segment buffers when not dropping them
+- macos: Fix gst_macos_main() terminating whole process before
+ returning a value
+- macos: Set activation policy in gst_macos_main()
+
+gst-plugins-base
+
+- glcolorconvert: fix wrong RGB to YUV matrix with bt709
+- glvideoflip: fix setting of method property at construction time
+- glvideoflip: “method”` property is broken if set during element
+ construction
+- macos: Set activation policy in glimagesink
+- videoaggregator: fix bufferpool leak
+
+gst-plugins-good
+
+- taglib: Set cpp_std to c++17 to fix compilation with TagLib >= 2.0
+- macos: Set activation policy in osxvideosink
+
+gst-plugins-bad
+
+- neon: Allow building against neon 0.33.x
+- sdpdemux: Add SDP message (aka session) attributes to the caps too
+- srtpenc: Fix potential leak
+- webrtcbin: Improve SDP intersection for Opus
+- wpe: Rename WPEView to WPEThreadedView to avoid clash with newer wpe
+ version
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- gtk4: Fix segfault running gst-inspect -a when GTK4 and GTK3 is
+ installed
+- gtk4: Always draw a black background behind the video frame
+- livesync: add support for image formats
+- livesync: properly format jitter in debug logs
+- textwrap: add support for gaps
+- webrtc: only use close() to close websockets
+- webrtc: signallers: attempt to close the ws when an error occurs
+- webrtc/signalling: Fix potential hang and FD leak
+- webrtc/signalling: We get the address when accepting
+- meson: Fix build on Windows with MSVC
+- meson: pkg-config is required at build time
+- meson: Add nasm to PATH if meson can find it
+- meson: allow building plugins with GTK 4 examples
+- Update GStreamer bindings in Cargo.lock
+
+gst-libav
+
+- Prefer using FFmpeg musepack decoder/demuxer
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- Some Python 3.12 fixes
+- python: Port from deprecated imp to importlib
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.10
+
+- gst-plugins-bad: build soundtouch plugin on MSVC
+- cerbero: Fix GNU tar –checkpoint compatibility with macOS
+- cerbero: Fix bootstrap venv error after upgrading Python
+- gst-plugins-good: build taglib plugin on MSVC
+
+Contributors to 1.22.10
+
+Alexander Slobodeniuk, Christian Curtis Veng, Edward Hervey, François
+Laignel, Guillaume Desmottes, Heiko Becker, Jan Schmidt, Jonas Kvinge,
+Jordan Petridis, L. E. Segovia, Lukas Geiger, Marvin Schmidt, Mathieu
+Duponchelle, Michael Tretter, Nirbheek Chauhan, Philippe Normand, Piotr
+Brzeziński, Ruben Gonzalez, Sebastian Dröge, Thibault Saunier,
+Tim-Philipp Müller,
+
+… 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.22.10
+
+- List of Merge Requests applied in 1.22.10
+- List of Issues fixed in 1.22.10
+
+1.22.11
+
+The eleventh 1.22 bug-fix release (1.22.11) was released on 19 March
+2024.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+The GStreamer 1.22 stable series has since been superseded by the
+GStreamer 1.24 stable release series.
+
+Highlighted bugfixes in 1.22.11
+
+- Fix instant-EOS regression in audio sinks in some cases when volume
+ is 0
+- rtspsrc: server compatibility improvements and ONVIF trick mode
+ fixes
+- libsoup linking improvements on non-Linux platforms
+- va: improvements for intel i965 driver
+- wasapi2: fix choppy audio and respect ringbuffer buffer/latency time
+- rtsp-server file descriptor leak fix
+- uridecodebin3 fixes
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- uri: Sort uri protocol sources/sinks by feature name to break a
+ feature rank tie
+- segment: Don’t use g_return_val_if_fail() in
+ gst_segment_to_running_time_full()
+- identity: Don’t refuse seeks unless single-segment=true
+- ptp clock: Initialize expected DELAY_REQ seqnum to an invalid value
+
+gst-plugins-base
+
+- audiobasesink: Revert “Don’t wait on gap events” again, fixes
+ instant-EOS in some cases
+- audioencoder: Avoid using temporarily mapped memory as base for
+ input buffers
+- glimagesink: Fix the sink not always respecting preferred size on
+ macOS
+- uridecodebin3: fix deadlock when switching input item
+- urisourcebin: Don’t acquire STATE_LOCK if shutting down
+- video: Fix NV12_16L32S video frame size
+
+gst-plugins-good
+
+- jpegdec: Fix progressive/interlaced detection
+- mpg123audiodec: Correctly handle the case of clipping all decoded
+ samples
+- plugins: Fix GstFlowReturn/gboolean mixups
+- qtdemux: Do not set channel-mask to zero
+- rtpgstpay: Delay pushing of event packets until the next buffer
+- rtspsrc: remove ‘deprecated’ flag from the ‘push-backchannel-sample’
+ signal
+- rtspsrc: Don’t invoke close when stopping if we’ve started cleanup
+- rtspsrc: Reset combined flows after a seek before restarting
+- rtspsrc: Increase rank to PRIMARY for autoplug purposes
+- rtspsrc: Consider 503 Service Not Available when handling broken
+ control urls
+- rtspsrc, rtponviftimestamp: ONVIF mode fixes
+- soup, adaptivedemux2: Backport various libsoup build fixes from main
+- v4l2src: fix cannot reuse current caps when fixate caps in
+ negotiation
+
+gst-plugins-bad
+
+- asio: Fix {input,output}-channels property handling
+- asiosink: Fix channel selection
+- d3d11device: Fix adapter LUID comparison in wrapped device mode
+- d3d11window_win32: fix crash on RC unprepare() vs window_proc()
+- dvbsubenc: Fix bottom field size calculation
+- dvdspu: avoid null dereference
+- v4l2codecs: h264: Fix a memory leak on renegotiation
+- va: backport missing commits for i965 driver
+- vulkan/wayland: use xdg_wm_base when available
+- wasapi, wasapi2: Fix memory issues
+- wasapi2: Respect ringbuffer buffer/latency time
+- wasapi2: Fix choppy rendering
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- No changes
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- rtsp-stream: clear sockets when leaving bin
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- No changes
+
+gst-editing-services
+
+- No changes
+
+gst-validate + gst-integration-testsuites
+
+- No changes
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.11
+
+- x264: fix linker path in pc file
+- taglib: Fix msvc x86 build race
+
+Contributors to 1.22.11
+
+Alexander Slobodeniuk, Arnaud Vrac, Edward Hervey, Elizabeth Figura,
+Guillaume Desmottes, Haihua Hu, Jan Schmidt, Loïc Molinari, Mark
+Nauwelaerts, Mathieu Duponchelle, Mikhail Rudenko, Nirbheek Chauhan,
+Olivier Crête, Piotr Brzeziński, Robert Mader, Sebastian Dröge, Seungha
+Yang, Stéphane Cerveau, Tim-Philipp Müller, Víctor Manuel Jáquez Leal,
+
+… 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.22.11
+
+- List of Merge Requests applied in 1.22.11
+- List of Issues fixed in 1.22.11
+
+1.22.12
+
+The twelfth 1.22 bug-fix release (1.22.12) was released on 29 April
+2024.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.22.x.
+
+The GStreamer 1.22 stable series has since been superseded by the
+GStreamer 1.24 stable release series.
+
+Highlighted bugfixes in 1.22.12
+
+- EXIF image tag parsing security fixes
+- glimagesink, gl/macos: race and reference count fixes
+- GstPlay, dvbsubenc, alphadecodebin, d3dvideosink fixes
+- rtpjitterbuffer extended timestamp handling fixes
+- v4l2: fix regression with tiled formats
+- ximagesink: fix regression on RPi/aarch64
+- Thread-safety fixes
+- Python bindings fixes
+- cerbero build fixes with clang 15 on latest macOS/iOS
+- various bug fixes, build fixes, memory leak fixes, and other
+ stability and reliability improvements
+
+gstreamer
+
+- basesrc: Clear submitted buffer lists consistently with buffers
+- inputselector: fix possible clock leak on shutdown
+- ptpclock: fix double free of domain data during deinit
+- gst-inspect-1.0: fix –exists for plugins with versions other than
+ GStreamer’s version, like the Rust plugins
+
+gst-plugins-base
+
+- EXIF image tag parsing security fixes
+- glimagesink, gl/macos: a couple of race/reference count fixes
+- typefinding: Handle WavPack block sizes > 131072
+- v4l2: fix error in calculating padding bottom for tile format
+- ximagesink: initialize mask for XISelectEvents
+
+gst-plugins-good
+
+- pulsedeviceprovider: Add compare_device_type_name function and
+ missing lock
+- qtdemux: fix wrong full_range offset when parsing colr box
+- rtpjitterbuffer: Use an extended RTP timestamp for the clock-base
+- soup: fix thread name
+- tests: rtpred: fix out-of-bound writes in unit test
+- v4l2: silence valgrind warning
+
+gst-plugins-bad
+
+- alphadecodebin: Explicitly pass 64 bit integers as such through
+ varargs
+- d3d11videosink: disconnect signals before releasing the window
+- dvbsubenc: fixed some memory leaks and a crash
+- GstPlay: Update video_snapshot to support playbin3
+
+gst-plugins-ugly
+
+- No changes
+
+gst-plugins-rs
+
+- No changes
+
+gst-libav
+
+- No changes
+
+gst-rtsp-server
+
+- No changes
+
+gstreamer-vaapi
+
+- No changes
+
+gstreamer-sharp
+
+- No changes
+
+gst-omx
+
+- No changes
+
+gst-python
+
+- Don’t link to python for the gi overrides module
+
+gst-editing-services
+
+- No changes
+
+gst-devtools, gst-validate + gst-integration-testsuites
+
+- debug-viewer: Fix plugin loading machinery
+
+gst-examples
+
+- No changes
+
+Development build environment
+
+- No changes
+
+Cerbero build tool and packaging changes in 1.22.12
+
+- glib: disable error for int-conversion introduced by default with
+ clang 15
+- cerbero: Fix shutil.rmtree hack to passthrough unknown kwargs
+
+Contributors to 1.22.12
+
+Alexander Slobodeniuk, Arnaud Vrac, Elliot Chen, eri, F. Duncanh, Jan
+Schmidt, Jimmy Ohn, Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan,
+Philippe Normand, Qian Hu (胡骞), Sebastian Dröge, Taruntej Kanakamalla,
+Thomas Goodwin, Tim Blechmann, Tim-Philipp Müller,
+
+… 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.22.12
+
+- List of Merge Requests applied in 1.22.12
+- List of Issues fixed in 1.22.12
+
+Schedule for 1.24
-1.24 will be backwards-compatible to the stable 1.22, 1.20, 1.18, 1.16,
-1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
+GStreamer 1.24 was released on 4 March 2024.
------------------------------------------------------------------------
diff -Nru gstreamer1.0-1.22.0/plugins/elements/gstelements_private.c gstreamer1.0-1.22.12/plugins/elements/gstelements_private.c
--- gstreamer1.0-1.22.0/plugins/elements/gstelements_private.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/plugins/elements/gstelements_private.c 2024-04-29 21:09:52.000000000 +0200
@@ -540,6 +540,10 @@
current_buf_mem_idx = 0;
}
current_buf_idx = i;
+ if (current_buf_mem_idx != 0) {
+ g_assert (current_buf_idx > 0);
+ current_buf_idx--;
+ }
}
do {
@@ -629,6 +633,10 @@
current_buf_mem_idx = 0;
}
current_buf_idx = i;
+ if (current_buf_mem_idx != 0) {
+ g_assert (current_buf_idx > 0);
+ current_buf_idx--;
+ }
}
} while (left > 0);
diff -Nru gstreamer1.0-1.22.0/plugins/elements/gstidentity.c gstreamer1.0-1.22.12/plugins/elements/gstidentity.c
--- gstreamer1.0-1.22.0/plugins/elements/gstidentity.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/plugins/elements/gstidentity.c 2024-04-29 21:09:52.000000000 +0200
@@ -569,14 +569,16 @@
&start, &stop_type, &stop);
GST_OBJECT_LOCK (identity);
- gst_segment_init (&identity->seek_segment, fmt);
- if (!gst_segment_do_seek (&identity->seek_segment, rate, fmt,
- flags, start_type, start, stop_type, stop, NULL)) {
- GST_WARNING_OBJECT (identity, "Could not run seek %" GST_PTR_FORMAT,
- event);
- GST_OBJECT_UNLOCK (identity);
+ if (identity->single_segment) {
+ gst_segment_init (&identity->seek_segment, fmt);
+ if (!gst_segment_do_seek (&identity->seek_segment, rate, fmt,
+ flags, start_type, start, stop_type, stop, NULL)) {
+ GST_WARNING_OBJECT (identity, "Could not handle %" GST_PTR_FORMAT,
+ event);
+ GST_OBJECT_UNLOCK (identity);
- return FALSE;
+ return FALSE;
+ }
}
GST_OBJECT_UNLOCK (identity);
diff -Nru gstreamer1.0-1.22.0/plugins/elements/gstinputselector.c gstreamer1.0-1.22.12/plugins/elements/gstinputselector.c
--- gstreamer1.0-1.22.0/plugins/elements/gstinputselector.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/plugins/elements/gstinputselector.c 2024-04-29 21:09:52.000000000 +0200
@@ -839,6 +839,13 @@
GstClockTimeDiff jitter;
GstClockID clock_id;
+ if (!sel->playing) {
+ GST_DEBUG_OBJECT (selpad, "Waiting for playing");
+ GST_INPUT_SELECTOR_WAIT (sel);
+ GST_DEBUG_OBJECT (selpad, "Done waiting");
+ continue;
+ }
+
base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel));
if (!GST_CLOCK_TIME_IS_VALID (base_time)) {
GST_DEBUG_OBJECT (selpad, "sync-mode=clock but no base time. Blocking");
@@ -1432,6 +1439,7 @@
g_mutex_init (&sel->lock);
g_cond_init (&sel->cond);
sel->eos = FALSE;
+ sel->playing = FALSE;
sel->upstream_latency = 0;
sel->last_output_ts = GST_CLOCK_TIME_NONE;
@@ -2029,9 +2037,20 @@
GST_INPUT_SELECTOR_BROADCAST (self);
GST_INPUT_SELECTOR_UNLOCK (self);
break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
+ GST_INPUT_SELECTOR_LOCK (self);
+ self->playing = TRUE;
+ GST_INPUT_SELECTOR_BROADCAST (self);
+ GST_INPUT_SELECTOR_UNLOCK (self);
+ break;
+ }
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:{
GList *walk;
+ GST_INPUT_SELECTOR_LOCK (self);
+ self->playing = FALSE;
+ GST_INPUT_SELECTOR_BROADCAST (self);
+ GST_OBJECT_LOCK (self);
for (walk = GST_ELEMENT_CAST (self)->sinkpads; walk;
walk = g_list_next (walk)) {
GstSelectorPad *selpad = GST_SELECTOR_PAD_CAST (walk->data);
@@ -2040,6 +2059,8 @@
gst_clock_id_unschedule (selpad->clock_id);
}
}
+ GST_OBJECT_UNLOCK (self);
+ GST_INPUT_SELECTOR_UNLOCK (self);
break;
}
default:
diff -Nru gstreamer1.0-1.22.0/plugins/elements/gstinputselector.h gstreamer1.0-1.22.12/plugins/elements/gstinputselector.h
--- gstreamer1.0-1.22.0/plugins/elements/gstinputselector.h 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/plugins/elements/gstinputselector.h 2024-04-29 21:09:52.000000000 +0200
@@ -81,6 +81,7 @@
gboolean eos;
gboolean eos_sent;
gboolean flushing;
+ gboolean playing;
GstClockTime upstream_latency;
GstClockTime last_output_ts;
diff -Nru gstreamer1.0-1.22.0/plugins/elements/gstmultiqueue.c gstreamer1.0-1.22.12/plugins/elements/gstmultiqueue.c
--- gstreamer1.0-1.22.0/plugins/elements/gstmultiqueue.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/plugins/elements/gstmultiqueue.c 2024-04-29 21:09:52.000000000 +0200
@@ -2648,6 +2648,7 @@
GstEventType type;
GstEvent *sref = NULL;
GstPad *srcpad;
+ gboolean is_timed_event = FALSE;
sq = GST_MULTIQUEUE_PAD (pad)->sq;
@@ -2732,6 +2733,7 @@
GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
}
}
+ is_timed_event = TRUE;
break;
default:
@@ -2755,8 +2757,13 @@
"Enqueuing event %p of type %s with id %d",
event, GST_EVENT_TYPE_NAME (event), curid);
- if (!gst_data_queue_push (sq->queue, (GstDataQueueItem *) item))
- goto flushing;
+ if (is_timed_event) {
+ if (!gst_data_queue_push (sq->queue, (GstDataQueueItem *) item))
+ goto flushing;
+ } else {
+ if (!gst_data_queue_push_force (sq->queue, (GstDataQueueItem *) item))
+ goto flushing;
+ }
/* mark EOS when we received one, we must do that after putting the
* buffer in the queue because EOS marks the buffer as filled. */
@@ -2964,6 +2971,34 @@
}
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_LATENCY:
+ {
+ GstClockTime latency = GST_CLOCK_TIME_NONE;
+ gst_event_parse_latency (event, &latency);
+ if (GST_CLOCK_TIME_IS_VALID (latency)) {
+ GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+ if (latency > mq->min_interleave_time) {
+ /* Due to the dynamic nature of multiqueue, whe `use-interleave` is
+ * used we can't report a maximum tolerated latency (when queried)
+ * since it is calculated dynamically.
+ *
+ * When in such live pipelines, we need to make sure multiqueue can
+ * handle the lowest global latency (provided by this event). Failure
+ * to do that would result in not providing enough buffering for a
+ * realtime pipeline.
+ */
+ GST_DEBUG_OBJECT (mq,
+ "Raising minimum interleave time to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (latency));
+ mq->min_interleave_time = latency;
+ if (mq->use_interleave)
+ calculate_interleave (mq, NULL);
+ }
+ GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
+ }
+ ret = gst_pad_push_event (sinkpad, event);
+ }
+ break;
case GST_EVENT_RECONFIGURE:
GST_MULTI_QUEUE_MUTEX_LOCK (mq);
if (sq->srcresult == GST_FLOW_NOT_LINKED) {
diff -Nru gstreamer1.0-1.22.0/po/fur.po gstreamer1.0-1.22.12/po/fur.po
--- gstreamer1.0-1.22.0/po/fur.po 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/po/fur.po 2024-04-29 21:09:52.000000000 +0200
@@ -1,22 +1,23 @@
# Friulian translation for gstreamer package of GStreamer project.
# This file is put in the public domain.
-# Fabio Tomat <f.t.public@gmail.com>, 2017.
+# Fabio Tomat <f.t.public@gmail.com>, 2023.
#
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer 1.10.0\n"
+"Project-Id-Version: gstreamer 1.21.90\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-11 15:40+0000\n"
-"PO-Revision-Date: 2017-03-19 15:41+0100\n"
-"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
+"POT-Creation-Date: 2023-02-22 11:51+0000\n"
+"PO-Revision-Date: 2023-01-28 11:40+0100\n"
+"Last-Translator: Fabio T. <f.t.public@gmail.com>\n"
"Language-Team: Friulian <f.t.public@gmail.com>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.12\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Editor: HaiPO 1.4 beta\n"
+"X-Generator: Poedit 3.2.2\n"
msgid "Print the GStreamer version"
msgstr "Stampe la version di GStreamer"
@@ -25,11 +26,12 @@
msgstr "Fâs deventâ ducj i avertiments fatâi"
msgid "Print available debug categories and exit"
-msgstr ""
+msgstr "Stampe lis categoriis di debug disponibilis e jes"
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
+"Nivel di debug predefinît di 1 (dome erôr) a 9 (dut) opûr 0 par no vê output"
msgid "LEVEL"
msgstr "NIVEL"
@@ -38,26 +40,30 @@
"Comma-separated list of category_name:level pairs to set specific levels for "
"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
msgstr ""
+"Liste separade di virgulis di cubiis non_categorie:nivel par stabilî i nivei "
+"specifics pes categoriis individuâls. Esempli: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
msgid "LIST"
msgstr "LISTE"
msgid "Disable colored debugging output"
-msgstr ""
+msgstr "Disabilite la jessude di debug colorade"
msgid ""
"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
"auto, unix"
msgstr ""
+"Al cambie la modalitât di colorazion dal regjistri di debug. Lis modalitât "
+"pussibilis: off, on, disable, auto, unix"
msgid "Disable debugging"
-msgstr ""
+msgstr "Disabilite il debug"
msgid "Enable verbose plugin loading diagnostics"
-msgstr ""
+msgstr "Abilite lis diagnostichis prolissis pal cjariament dai plugins"
msgid "Colon-separated paths containing plugins"
-msgstr ""
+msgstr "Percors separâts di “:” che a contegnin i plugins"
msgid "PATHS"
msgstr "PERCORS"
@@ -66,18 +72,24 @@
"Comma-separated list of plugins to preload in addition to the list stored in "
"environment variable GST_PLUGIN_PATH"
msgstr ""
+"Liste separade di “:” di plugins di pre-cjariâ in zonte ae liste archividade "
+"te variabile di ambient GST_PLUGIN_PATH"
msgid "PLUGINS"
msgstr "PLUGIN"
msgid "Disable trapping of segmentation faults during plugin loading"
msgstr ""
+"Disabilite la cature di vuascj di segmentazion dilunc il cjariament dai "
+"plugins"
msgid "Disable updating the registry"
-msgstr ""
+msgstr "Disabilite l'inzornament dal regjistri"
msgid "Disable spawning a helper process while scanning the registry"
msgstr ""
+"Disabilite la creazion di un procès aiutant intant che si analize il "
+"regjistri"
msgid "GStreamer Options"
msgstr "Opzions GStreamer"
@@ -90,69 +102,75 @@
msgstr "Opzion no cognossude"
msgid "GStreamer encountered a general core library error."
-msgstr ""
+msgstr "GStreamer al à riscontrât un erôr gjenerâl de librarie cûr."
msgid ""
"GStreamer developers were too lazy to assign an error code to this error."
msgstr ""
+"I svilupadôrs di GStreamer a jerin masse pelandrons par assegnâ un codiç di "
+"erôr a chest erôr."
msgid "Internal GStreamer error: code not implemented."
-msgstr ""
+msgstr "Erôr interni di GStreamer: codiç no implementât."
msgid ""
"GStreamer error: state change failed and some element failed to post a "
"proper error message with the reason for the failure."
msgstr ""
+"Erôr di GStreamer: il cambiament di stât al à falît e cualchi element nol è "
+"rivât a publicâ un messaç di erôr adat cul motîf relatîf al faliment."
msgid "Internal GStreamer error: pad problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di imbotidure."
msgid "Internal GStreamer error: thread problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di thread."
msgid "GStreamer error: negotiation problem."
-msgstr ""
+msgstr "Erôr di GStreamer: probleme di negoziazion."
msgid "Internal GStreamer error: event problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di event."
msgid "Internal GStreamer error: seek problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di ricercje."
msgid "Internal GStreamer error: caps problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di sottitui."
msgid "Internal GStreamer error: tag problem."
-msgstr ""
+msgstr "Erôr interni di GStreamer: probleme di etichete."
msgid "Your GStreamer installation is missing a plug-in."
-msgstr ""
+msgstr "Ae tô instalazion di GStreamer e mancje un plug-in."
msgid "GStreamer error: clock problem."
-msgstr ""
+msgstr "Erôr di GStreamer: probleme di orloi."
msgid ""
"This application is trying to use GStreamer functionality that has been "
"disabled."
msgstr ""
+"Cheste aplicazion e sta cirint di doprâ une funzion di GStreamer che e je "
+"stade disabilitade."
msgid "GStreamer encountered a general supporting library error."
-msgstr ""
+msgstr "GStreamer al à riscontrât un erôr gjenerâl de librarie di supuart."
msgid "Could not initialize supporting library."
-msgstr ""
+msgstr "Impussibil inizializâ la librarie di supuart."
msgid "Could not close supporting library."
-msgstr ""
+msgstr "Impussibil sierâ la libarie di supuart."
msgid "Could not configure supporting library."
-msgstr ""
+msgstr "Impussibil configurâ la librarie di supuart."
msgid "Encoding error."
msgstr "Erôr di codifiche."
msgid "GStreamer encountered a general resource error."
-msgstr ""
+msgstr "GStreamer al à riscontrât un erôr gjenerâl des risorsis."
msgid "Resource not found."
msgstr "Risorse no cjatade."
@@ -194,19 +212,22 @@
msgstr "No autorizât a acedi ae risorse."
msgid "GStreamer encountered a general stream error."
-msgstr ""
+msgstr "GStreamer al à riscontrât un erôr gjenerâl di flus."
msgid "Element doesn't implement handling of this stream. Please file a bug."
msgstr ""
+"L'element nol implemente la gjestion di chest flus. Par plasê, fâs une "
+"segnalazion di erôr."
msgid "Could not determine type of stream."
msgstr "Impussibil determinâ il gjenar di flus."
msgid "The stream is of a different type than handled by this element."
-msgstr ""
+msgstr "Il flus al è di un gjenar diferent di chel gjestît di chest element."
msgid "There is no codec present that can handle the stream's type."
msgstr ""
+"Nol è presint nissun codificadôr che al pues gjestî chest gjenar di flus."
msgid "Could not decode stream."
msgstr "Impussibil decodificâ il flus."
@@ -215,10 +236,10 @@
msgstr "Impussibil codificâ il flus."
msgid "Could not demultiplex stream."
-msgstr ""
+msgstr "Impussibil demultiplexâ il flus."
msgid "Could not multiplex stream."
-msgstr ""
+msgstr "Impussibil multiplexâ il flus."
msgid "The stream is in the wrong format."
msgstr "Il flus al è tal formât sbaliât."
@@ -242,7 +263,7 @@
msgstr "Nissun messaç di erôr standard pal domini %s e codiç %d."
msgid "Selected clock cannot be used in pipeline."
-msgstr ""
+msgstr "Nol è pussibil doprâ te pipeline l'orloi selezionât."
#, c-format
msgid "Error writing registry cache to %s: %s"
@@ -319,13 +340,14 @@
msgstr "coment"
msgid "free text commenting the data"
-msgstr ""
+msgstr "test libar che al comente i dâts"
msgid "extended comment"
-msgstr ""
+msgstr "coment slargjât"
msgid "free text commenting the data in key=value or key[en]=comment form"
msgstr ""
+"test libar che al comente i dâts te forme clâf=valôr o clâf[ing]=coment"
msgid "track number"
msgstr "numar dal toc"
@@ -366,8 +388,8 @@
msgid "Homepage for this media (i.e. artist or movie homepage)"
msgstr ""
-"sît web par chest contignût multimediâl (p.e. il sît web dal artist o dal "
-"film)"
+"Sît web par chest contignût multimediâl (vâl a dî la pagjine web dal artist "
+"o dal film)"
msgid "description"
msgstr "descrizion"
@@ -507,16 +529,16 @@
msgstr "bitrate massim in bit/s"
msgid "encoder"
-msgstr ""
+msgstr "codificadôr"
msgid "encoder used to encode this stream"
-msgstr ""
+msgstr "codificadôr doprât par codificâ chest flus"
msgid "encoder version"
-msgstr ""
+msgstr "version codificadôr"
msgid "version of the encoder used to encode this stream"
-msgstr ""
+msgstr "version dal codfiicadôr doprât par codificâ chest flus"
msgid "serial"
msgstr "seriâl"
@@ -552,7 +574,7 @@
msgstr ""
msgid "reference level of track and album gain values"
-msgstr ""
+msgstr "nivel di riferiment dai valôrs di vuadagn de linie e dal album"
msgid "language code"
msgstr "codiç lenghe"
@@ -604,6 +626,8 @@
"human readable descriptive location of where the media has been recorded or "
"produced"
msgstr ""
+"ubicazion descritive par umans di dulà che l'element multimediâl al è stât "
+"regjistrât o prodot"
msgid "geo location latitude"
msgstr "latitudin posizion gjeog."
@@ -662,6 +686,8 @@
"a location within a city where the media has been produced or created (e.g. "
"the neighborhood)"
msgstr ""
+"une posizion dentri di une citât dulà che l'element multimediâl al è stât "
+"prodot o creât (p.e. borc)"
msgid "geo location horizontal error"
msgstr ""
@@ -855,13 +881,13 @@
msgid "no property \"%s\" in element \"%s\""
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Element \"%s\" is not a GstPreset"
-msgstr "Il file \"%s\" al è un socket."
+msgstr "L'element \"%s\" nol è un GstPreset"
-#, fuzzy, c-format
+#, c-format
msgid "could not set preset \"%s\" in element \"%s\""
-msgstr "Impussibil creâ il file temporani \"%s\"."
+msgstr "impussibil stabilî la pre-configurazion \"%s\" tal element \"%s\""
#, c-format
msgid "no element \"%s\""
@@ -926,10 +952,10 @@
msgstr ""
msgid "empty pipeline not allowed"
-msgstr ""
+msgstr "la pipeline vueide no je ametude"
msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "La costrusion de pipeline no je valide, zonte codis di riproduzion."
msgid "A lot of buffers are being dropped."
msgstr ""
@@ -1035,9 +1061,9 @@
msgid "Stream contains no data."
msgstr "Il flus nol conten dâts."
-#, fuzzy, c-format
+#, c-format
msgid "%sImplemented Interfaces%s:\n"
-msgstr "Interfacis implementadis:\n"
+msgstr "%sInterfacis implementadis%s:\n"
msgid "readable"
msgstr ""
@@ -1066,9 +1092,9 @@
msgid "Blacklisted files:"
msgstr "File te liste nere:"
-#, fuzzy, c-format
+#, c-format
msgid "%sTotal count%s: %s"
-msgstr "Conte totâl: "
+msgstr "%sConte totâl%s: %s"
#, c-format
msgid "%d blacklisted file"
@@ -1146,10 +1172,10 @@
msgstr ""
msgid "Setting pipeline to PLAYING ...\n"
-msgstr ""
+msgstr "Daûr a meti la pipeline a RIPRODUZION ...\n"
msgid "ERROR: pipeline doesn't want to play.\n"
-msgstr ""
+msgstr "ERÔR: la pipeline no vûl riprodusi.\n"
#, c-format
msgid "Got message #%u from element \"%s\" (%s): "
@@ -1172,7 +1198,7 @@
msgstr ""
msgid "EOS received - stopping pipeline...\n"
-msgstr ""
+msgstr "Ricevût EOS - daûr a fermâ la pipeline...\n"
#, c-format
msgid "FOUND TAG : found by element \"%s\".\n"
@@ -1205,10 +1231,12 @@
"INFO:\n"
"%s\n"
msgstr ""
+"INFORMAZION:\n"
+"%s\n"
#, c-format
msgid "WARNING: from element %s: %s\n"
-msgstr ""
+msgstr "ATENZION: dal element %s: %s\n"
msgid "Pipeline is PREROLLED ...\n"
msgstr ""
@@ -1220,35 +1248,38 @@
msgstr ""
msgid "buffering..."
-msgstr ""
+msgstr "daûr a jemplâ la memorie tampon..."
msgid "Done buffering, setting pipeline to PLAYING ...\n"
msgstr ""
+"Terminât di jemplâ la memorie tampon, daûr a meti la pipeline a "
+"RIPRODUZION ...\n"
#. we were not buffering but PLAYING, PAUSE the pipeline.
msgid "Buffering, setting pipeline to PAUSED ...\n"
msgstr ""
+"Daûr a jemplâ la memorie tampon, configurazion de pipeline a IN PAUSE ...\n"
msgid "Redistribute latency...\n"
msgstr ""
#, c-format
msgid "Setting state to %s as requested by %s...\n"
-msgstr ""
+msgstr "Daûr a meti il stât a %s come domandât di %s...\n"
#. this application message is posted when we caught an interrupt and
#. * we need to stop the pipeline.
msgid "Interrupt: Stopping pipeline ...\n"
-msgstr ""
+msgstr "Interuzion: daûr a fermâ la pipeline ...\n"
msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
-msgstr ""
+msgstr "Interuzion dilunc la spiete pal EOS - daûr a fermâ la pipeline...\n"
msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
-msgstr ""
+msgstr "EOS al distudâ abilitât -- Daûr a sfuarçâ il EOS su la pipeline\n"
msgid "Waiting for EOS...\n"
-msgstr ""
+msgstr "Daûr a spietâ il EOS...\n"
#, c-format
msgid "Progress: (%s) %s\n"
@@ -1266,74 +1297,84 @@
msgstr ""
msgid "An error happened while waiting for EOS\n"
-msgstr ""
+msgstr "Al è capitât un erôr intant che si spietave il EOS\n"
#, c-format
msgid "Use Windows high-resolution clock, precision: %u ms\n"
msgstr ""
+"Dopre l'orloi di sisteme di Windows a alte risoluzion, precision: %u ms\n"
msgid "Output tags (also known as metadata)"
-msgstr ""
+msgstr "Etichetis di jessude (cognossudis ancje come metadâts)"
msgid "Output TOC (chapters and editions)"
-msgstr ""
+msgstr "TOC di jessude (cjapitui e edizions)"
msgid "Output status information and property notifications"
-msgstr ""
+msgstr "Informazions di stât di jessude e notifichis di proprietâts"
msgid "Do not print any progress information"
msgstr "No stâ stampâ nissune informazion di progrès"
msgid "Output messages"
-msgstr ""
+msgstr "Messaçs di jessude"
msgid ""
"Do not output status information for the specified property if verbose "
"output is enabled (can be used multiple times)"
msgstr ""
+"No sta mandâ fûr lis informazions di stât pe proprietât indicade se la "
+"jessude prolisse e je abilitade (al è pussibil doprâle plui voltis)"
msgid "PROPERTY-NAME"
-msgstr ""
+msgstr "NON-PROPRIETÂT"
msgid "Do not install a fault handler"
-msgstr ""
+msgstr "No sta instalâ un gjestôr di erôrs"
msgid "Force EOS on sources before shutting the pipeline down"
-msgstr ""
+msgstr "Sfuarce l'EOS su lis sorzints prime di distudâ la pipeline"
msgid "Gather and print index statistics"
-msgstr ""
+msgstr "Recupere e stampe lis statistichis de tabele"
msgid ""
"Do not print current position of pipeline. If this option is unspecified, "
"the position will be printed when stdout is a TTY. To enable printing "
"position when stdout is not a TTY, use \"force-position\" option"
msgstr ""
+"No sta stampâ la posizion corinte de pipeline. Se cheste opzion no ven "
+"specificade e se il stdout al è un TTY, la posizion e vignarà stampade. Par "
+"abilitâ la stampe de posizion cuant che il stdout nol è un TTY, dopre la "
+"opzion \"force-position\""
msgid ""
"Allow printing current position of pipeline even if stdout is not a TTY. "
"This option has no effect if the \"no-position\" option is specified"
msgstr ""
+"Permet di stampâ la posizion corinte de pipeline ancje se il stdout nol è un "
+"TTY. Cheste opzion no à efiet se e je stade specificade la opzion “no-"
+"position”"
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
-msgstr ""
+msgstr "ERÔR: nol è stât pussibil costruî la pipeline: %s.\n"
msgid "ERROR: pipeline could not be constructed.\n"
-msgstr ""
+msgstr "ERÔR: nol è stât pussibil costruî la pipeline.\n"
#, c-format
msgid "WARNING: erroneous pipeline: %s\n"
-msgstr ""
+msgstr "ATENZION: pipeline sbaliade: %s\n"
msgid "ERROR: the 'pipeline' element wasn't found.\n"
-msgstr ""
+msgstr "ERÔR: nol è stât cjatât l'element 'pipeline'.\n"
msgid "Setting pipeline to PAUSED ...\n"
-msgstr ""
+msgstr "Daûr a meti la pipeline a IN PAUSE ...\n"
msgid "Failed to set pipeline to PAUSED.\n"
-msgstr ""
+msgstr "Impussibil meti la pipeline a IN PAUSE.\n"
msgid "Pipeline is live and does not need PREROLL ...\n"
msgstr ""
@@ -1342,10 +1383,10 @@
msgstr ""
msgid "Execution ended after %"
-msgstr ""
+msgstr "Esecuzion finide dopo %"
msgid "Setting pipeline to NULL ...\n"
-msgstr ""
+msgstr "Daûr a meti la pipeline a NULE ...\n"
msgid "Freeing pipeline ...\n"
-msgstr ""
+msgstr "Daûr a liberâ la pipeline ...\n"
diff -Nru gstreamer1.0-1.22.0/po/gstreamer-1.0.pot gstreamer1.0-1.22.12/po/gstreamer-1.0.pot
--- gstreamer1.0-1.22.0/po/gstreamer-1.0.pot 2023-01-23 20:29:57.475900700 +0100
+++ gstreamer1.0-1.22.12/po/gstreamer-1.0.pot 2024-04-29 21:10:09.183505800 +0200
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer-1.22.0\n"
+"Project-Id-Version: gstreamer-1.22.12\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-23 19:29+0000\n"
+"POT-Creation-Date: 2024-04-29 20:10+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"
@@ -1026,27 +1026,27 @@
msgid ", "
msgstr ""
-#: gst/gsturi.c:641 gst/gsturi.c:814
+#: gst/gsturi.c:645 gst/gsturi.c:818
#, c-format
msgid "Invalid URI: %s"
msgstr ""
-#: gst/gsturi.c:656
+#: gst/gsturi.c:660
#, c-format
msgid "No URI handler for the %s protocol found"
msgstr ""
-#: gst/gsturi.c:836
+#: gst/gsturi.c:840
#, c-format
msgid "URI scheme '%s' not supported"
msgstr ""
-#: gst/gstutils.c:2679 tools/gst-launch.c:350
+#: gst/gstutils.c:2682 tools/gst-launch.c:350
#, c-format
msgid "ERROR: from element %s: %s\n"
msgstr ""
-#: gst/gstutils.c:2681 tools/gst-launch.c:352 tools/gst-launch.c:714
+#: gst/gstutils.c:2684 tools/gst-launch.c:352 tools/gst-launch.c:714
#, c-format
msgid ""
"Additional debug info:\n"
@@ -1071,7 +1071,7 @@
msgstr ""
#: gst/parse/grammar.y.in:438 gst/parse/grammar.y.in:624
-#: gst/parse/grammar.y.in:658 gst/parse/grammar.y.in:770
+#: gst/parse/grammar.y.in:658 gst/parse/grammar.y.in:772
#, c-format
msgid "no property \"%s\" in element \"%s\""
msgstr ""
@@ -1091,7 +1091,7 @@
msgid "no element \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:613 gst/parse/grammar.y.in:793
+#: gst/parse/grammar.y.in:613 gst/parse/grammar.y.in:795
#, c-format
msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
msgstr ""
@@ -1101,70 +1101,70 @@
msgid "could not set property \"%s\" in child of element \"%s\" to \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:854
+#: gst/parse/grammar.y.in:856
msgid "Delayed linking failed."
msgstr ""
-#: gst/parse/grammar.y.in:1067 gst/parse/grammar.y.in:1072
+#: gst/parse/grammar.y.in:1069 gst/parse/grammar.y.in:1074
#, c-format
msgid "could not link %s to %s, %s can't handle caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1077
+#: gst/parse/grammar.y.in:1079
#, c-format
msgid "could not link %s to %s, neither element can handle caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1081
+#: gst/parse/grammar.y.in:1083
#, c-format
msgid "could not link %s to %s with caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1087
+#: gst/parse/grammar.y.in:1089
#, c-format
msgid "could not link %s to %s"
msgstr ""
-#: gst/parse/grammar.y.in:1238
+#: gst/parse/grammar.y.in:1240
#, c-format
msgid "unexpected reference \"%s\" - ignoring"
msgstr ""
-#: gst/parse/grammar.y.in:1244
+#: gst/parse/grammar.y.in:1246
#, c-format
msgid "unexpected pad-reference \"%s\" - ignoring"
msgstr ""
-#: gst/parse/grammar.y.in:1276 gst/parse/grammar.y.in:1285
+#: gst/parse/grammar.y.in:1278 gst/parse/grammar.y.in:1287
#, c-format
msgid "could not parse caps \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1313
+#: gst/parse/grammar.y.in:1315
#, c-format
msgid "no sink element for URI \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1332
+#: gst/parse/grammar.y.in:1334
#, c-format
msgid "no source element for URI \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1422
+#: gst/parse/grammar.y.in:1424
msgid "syntax error"
msgstr ""
-#: gst/parse/grammar.y.in:1445
+#: gst/parse/grammar.y.in:1447
#, c-format
msgid "specified empty bin \"%s\", not allowed"
msgstr ""
-#: gst/parse/grammar.y.in:1455
+#: gst/parse/grammar.y.in:1457
#, c-format
msgid "no bin \"%s\", unpacking elements"
msgstr ""
-#: gst/parse/grammar.y.in:1486
+#: gst/parse/grammar.y.in:1488
msgid "empty pipeline not allowed"
msgstr ""
@@ -1172,23 +1172,23 @@
msgid "Pipeline construction is invalid, please add queues."
msgstr ""
-#: libs/gst/base/gstbasesink.c:3144
+#: libs/gst/base/gstbasesink.c:3148
msgid "A lot of buffers are being dropped."
msgstr ""
-#: libs/gst/base/gstbasesink.c:3799
+#: libs/gst/base/gstbasesink.c:3806
msgid "Internal data flow problem."
msgstr ""
-#: libs/gst/base/gstbasesink.c:4633 libs/gst/base/gstbasesrc.c:2773
+#: libs/gst/base/gstbasesink.c:4640 libs/gst/base/gstbasesrc.c:2775
msgid "Internal data flow error."
msgstr ""
-#: libs/gst/base/gstbasesrc.c:2703
+#: libs/gst/base/gstbasesrc.c:2705
msgid "Internal clock error."
msgstr ""
-#: libs/gst/base/gstbasesrc.c:2731 plugins/elements/gstdownloadbuffer.c:850
+#: libs/gst/base/gstbasesrc.c:2733 plugins/elements/gstdownloadbuffer.c:850
#: plugins/elements/gstdownloadbuffer.c:1275
msgid "Failed to map buffer."
msgstr ""
@@ -1274,11 +1274,11 @@
msgid "File \"%s\" is a socket."
msgstr ""
-#: plugins/elements/gstidentity.c:848
+#: plugins/elements/gstidentity.c:850
msgid "Failed after iterations as requested."
msgstr ""
-#: plugins/elements/gstidentity.c:1066
+#: plugins/elements/gstidentity.c:1068
msgid "eos-after and error-after can't both be defined."
msgstr ""
@@ -1316,84 +1316,84 @@
msgid "%sImplemented Interfaces%s:\n"
msgstr ""
-#: tools/gst-inspect.c:469
+#: tools/gst-inspect.c:470
msgid "readable"
msgstr ""
-#: tools/gst-inspect.c:474
+#: tools/gst-inspect.c:475
msgid "writable"
msgstr ""
-#: tools/gst-inspect.c:479
+#: tools/gst-inspect.c:480
msgid "deprecated"
msgstr ""
-#: tools/gst-inspect.c:483
+#: tools/gst-inspect.c:484
msgid "controllable"
msgstr ""
-#: tools/gst-inspect.c:488
+#: tools/gst-inspect.c:489
msgid "conditionally available"
msgstr ""
-#: tools/gst-inspect.c:494
+#: tools/gst-inspect.c:495
msgid "changeable in NULL, READY, PAUSED or PLAYING state"
msgstr ""
-#: tools/gst-inspect.c:497
+#: tools/gst-inspect.c:498
msgid "changeable only in NULL, READY or PAUSED state"
msgstr ""
-#: tools/gst-inspect.c:500
+#: tools/gst-inspect.c:501
msgid "changeable only in NULL or READY state"
msgstr ""
-#: tools/gst-inspect.c:1248
+#: tools/gst-inspect.c:1287
msgid "Blacklisted files:"
msgstr ""
-#: tools/gst-inspect.c:1263 tools/gst-inspect.c:1400
+#: tools/gst-inspect.c:1302 tools/gst-inspect.c:1439
#, c-format
msgid "%sTotal count%s: %s"
msgstr ""
-#: tools/gst-inspect.c:1265
+#: tools/gst-inspect.c:1304
#, c-format
msgid "%d blacklisted file"
msgid_plural "%d blacklisted files"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1402
+#: tools/gst-inspect.c:1441
#, c-format
msgid "%d plugin"
msgid_plural "%d plugins"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1405
+#: tools/gst-inspect.c:1444
#, c-format
msgid "%d blacklist entry"
msgid_plural "%d blacklist entries"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1410
+#: tools/gst-inspect.c:1449
#, c-format
msgid "%d feature"
msgid_plural "%d features"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:2114
+#: tools/gst-inspect.c:2154
msgid "Print all elements"
msgstr ""
-#: tools/gst-inspect.c:2116
+#: tools/gst-inspect.c:2156
msgid "Print list of blacklisted files"
msgstr ""
-#: tools/gst-inspect.c:2118
+#: tools/gst-inspect.c:2158
msgid ""
"Print a machine-parsable list of features the specified plugin or all "
"plugins provide.\n"
@@ -1401,46 +1401,46 @@
"automatic plugin installation mechanisms"
msgstr ""
-#: tools/gst-inspect.c:2123
+#: tools/gst-inspect.c:2163
msgid "List the plugin contents"
msgstr ""
-#: tools/gst-inspect.c:2125
+#: tools/gst-inspect.c:2165
msgid ""
"A slashes ('/') separated list of types of elements (also known as klass) to "
"list. (unordered)"
msgstr ""
-#: tools/gst-inspect.c:2128
+#: tools/gst-inspect.c:2168
msgid "Check if the specified element or plugin exists"
msgstr ""
-#: tools/gst-inspect.c:2131
+#: tools/gst-inspect.c:2171
msgid ""
"When checking if an element or plugin exists, also check that its version is "
"at least the version specified"
msgstr ""
-#: tools/gst-inspect.c:2135
+#: tools/gst-inspect.c:2175
msgid "Print supported URI schemes, with the elements that implement them"
msgstr ""
-#: tools/gst-inspect.c:2140
+#: tools/gst-inspect.c:2180
msgid ""
"Disable colors in output. You can also achieve the same by setting "
"'GST_INSPECT_NO_COLORS' environment variable to any value."
msgstr ""
-#: tools/gst-inspect.c:2148
+#: tools/gst-inspect.c:2188
msgid "Color output, even when not sending to a tty."
msgstr ""
-#: tools/gst-inspect.c:2306
+#: tools/gst-inspect.c:2360
#, c-format
msgid "Could not load plugin file: %s\n"
msgstr ""
-#: tools/gst-inspect.c:2312
+#: tools/gst-inspect.c:2366
#, c-format
msgid "No such element or plugin '%s'\n"
msgstr ""
@@ -1666,48 +1666,48 @@
"This option has no effect if the \"no-position\" option is specified"
msgstr ""
-#: tools/gst-launch.c:1194
+#: tools/gst-launch.c:1203
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
msgstr ""
-#: tools/gst-launch.c:1198
+#: tools/gst-launch.c:1207
msgid "ERROR: pipeline could not be constructed.\n"
msgstr ""
-#: tools/gst-launch.c:1202
+#: tools/gst-launch.c:1211
#, c-format
msgid "WARNING: erroneous pipeline: %s\n"
msgstr ""
-#: tools/gst-launch.c:1219
+#: tools/gst-launch.c:1228
msgid "ERROR: the 'pipeline' element wasn't found.\n"
msgstr ""
-#: tools/gst-launch.c:1268
+#: tools/gst-launch.c:1277
msgid "Setting pipeline to PAUSED ...\n"
msgstr ""
-#: tools/gst-launch.c:1273
+#: tools/gst-launch.c:1282
msgid "Failed to set pipeline to PAUSED.\n"
msgstr ""
-#: tools/gst-launch.c:1277
+#: tools/gst-launch.c:1286
msgid "Pipeline is live and does not need PREROLL ...\n"
msgstr ""
-#: tools/gst-launch.c:1281
+#: tools/gst-launch.c:1290
msgid "Pipeline is PREROLLING ...\n"
msgstr ""
-#: tools/gst-launch.c:1325
+#: tools/gst-launch.c:1334
msgid "Execution ended after %"
msgstr ""
-#: tools/gst-launch.c:1342
+#: tools/gst-launch.c:1351
msgid "Setting pipeline to NULL ...\n"
msgstr ""
-#: tools/gst-launch.c:1360
+#: tools/gst-launch.c:1369
msgid "Freeing pipeline ...\n"
msgstr ""
diff -Nru gstreamer1.0-1.22.0/po/gstreamer.pot gstreamer1.0-1.22.12/po/gstreamer.pot
--- gstreamer1.0-1.22.0/po/gstreamer.pot 2023-01-23 20:29:57.475900700 +0100
+++ gstreamer1.0-1.22.12/po/gstreamer.pot 2024-04-29 21:10:09.183505800 +0200
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer-1.22.0\n"
+"Project-Id-Version: gstreamer-1.22.12\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-23 19:29+0000\n"
+"POT-Creation-Date: 2024-04-29 20:10+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"
@@ -1026,27 +1026,27 @@
msgid ", "
msgstr ""
-#: gst/gsturi.c:641 gst/gsturi.c:814
+#: gst/gsturi.c:645 gst/gsturi.c:818
#, c-format
msgid "Invalid URI: %s"
msgstr ""
-#: gst/gsturi.c:656
+#: gst/gsturi.c:660
#, c-format
msgid "No URI handler for the %s protocol found"
msgstr ""
-#: gst/gsturi.c:836
+#: gst/gsturi.c:840
#, c-format
msgid "URI scheme '%s' not supported"
msgstr ""
-#: gst/gstutils.c:2679 tools/gst-launch.c:350
+#: gst/gstutils.c:2682 tools/gst-launch.c:350
#, c-format
msgid "ERROR: from element %s: %s\n"
msgstr ""
-#: gst/gstutils.c:2681 tools/gst-launch.c:352 tools/gst-launch.c:714
+#: gst/gstutils.c:2684 tools/gst-launch.c:352 tools/gst-launch.c:714
#, c-format
msgid ""
"Additional debug info:\n"
@@ -1071,7 +1071,7 @@
msgstr ""
#: gst/parse/grammar.y.in:438 gst/parse/grammar.y.in:624
-#: gst/parse/grammar.y.in:658 gst/parse/grammar.y.in:770
+#: gst/parse/grammar.y.in:658 gst/parse/grammar.y.in:772
#, c-format
msgid "no property \"%s\" in element \"%s\""
msgstr ""
@@ -1091,7 +1091,7 @@
msgid "no element \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:613 gst/parse/grammar.y.in:793
+#: gst/parse/grammar.y.in:613 gst/parse/grammar.y.in:795
#, c-format
msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
msgstr ""
@@ -1101,70 +1101,70 @@
msgid "could not set property \"%s\" in child of element \"%s\" to \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:854
+#: gst/parse/grammar.y.in:856
msgid "Delayed linking failed."
msgstr ""
-#: gst/parse/grammar.y.in:1067 gst/parse/grammar.y.in:1072
+#: gst/parse/grammar.y.in:1069 gst/parse/grammar.y.in:1074
#, c-format
msgid "could not link %s to %s, %s can't handle caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1077
+#: gst/parse/grammar.y.in:1079
#, c-format
msgid "could not link %s to %s, neither element can handle caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1081
+#: gst/parse/grammar.y.in:1083
#, c-format
msgid "could not link %s to %s with caps %s"
msgstr ""
-#: gst/parse/grammar.y.in:1087
+#: gst/parse/grammar.y.in:1089
#, c-format
msgid "could not link %s to %s"
msgstr ""
-#: gst/parse/grammar.y.in:1238
+#: gst/parse/grammar.y.in:1240
#, c-format
msgid "unexpected reference \"%s\" - ignoring"
msgstr ""
-#: gst/parse/grammar.y.in:1244
+#: gst/parse/grammar.y.in:1246
#, c-format
msgid "unexpected pad-reference \"%s\" - ignoring"
msgstr ""
-#: gst/parse/grammar.y.in:1276 gst/parse/grammar.y.in:1285
+#: gst/parse/grammar.y.in:1278 gst/parse/grammar.y.in:1287
#, c-format
msgid "could not parse caps \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1313
+#: gst/parse/grammar.y.in:1315
#, c-format
msgid "no sink element for URI \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1332
+#: gst/parse/grammar.y.in:1334
#, c-format
msgid "no source element for URI \"%s\""
msgstr ""
-#: gst/parse/grammar.y.in:1422
+#: gst/parse/grammar.y.in:1424
msgid "syntax error"
msgstr ""
-#: gst/parse/grammar.y.in:1445
+#: gst/parse/grammar.y.in:1447
#, c-format
msgid "specified empty bin \"%s\", not allowed"
msgstr ""
-#: gst/parse/grammar.y.in:1455
+#: gst/parse/grammar.y.in:1457
#, c-format
msgid "no bin \"%s\", unpacking elements"
msgstr ""
-#: gst/parse/grammar.y.in:1486
+#: gst/parse/grammar.y.in:1488
msgid "empty pipeline not allowed"
msgstr ""
@@ -1172,23 +1172,23 @@
msgid "Pipeline construction is invalid, please add queues."
msgstr ""
-#: libs/gst/base/gstbasesink.c:3144
+#: libs/gst/base/gstbasesink.c:3148
msgid "A lot of buffers are being dropped."
msgstr ""
-#: libs/gst/base/gstbasesink.c:3799
+#: libs/gst/base/gstbasesink.c:3806
msgid "Internal data flow problem."
msgstr ""
-#: libs/gst/base/gstbasesink.c:4633 libs/gst/base/gstbasesrc.c:2773
+#: libs/gst/base/gstbasesink.c:4640 libs/gst/base/gstbasesrc.c:2775
msgid "Internal data flow error."
msgstr ""
-#: libs/gst/base/gstbasesrc.c:2703
+#: libs/gst/base/gstbasesrc.c:2705
msgid "Internal clock error."
msgstr ""
-#: libs/gst/base/gstbasesrc.c:2731 plugins/elements/gstdownloadbuffer.c:850
+#: libs/gst/base/gstbasesrc.c:2733 plugins/elements/gstdownloadbuffer.c:850
#: plugins/elements/gstdownloadbuffer.c:1275
msgid "Failed to map buffer."
msgstr ""
@@ -1274,11 +1274,11 @@
msgid "File \"%s\" is a socket."
msgstr ""
-#: plugins/elements/gstidentity.c:848
+#: plugins/elements/gstidentity.c:850
msgid "Failed after iterations as requested."
msgstr ""
-#: plugins/elements/gstidentity.c:1066
+#: plugins/elements/gstidentity.c:1068
msgid "eos-after and error-after can't both be defined."
msgstr ""
@@ -1316,84 +1316,84 @@
msgid "%sImplemented Interfaces%s:\n"
msgstr ""
-#: tools/gst-inspect.c:469
+#: tools/gst-inspect.c:470
msgid "readable"
msgstr ""
-#: tools/gst-inspect.c:474
+#: tools/gst-inspect.c:475
msgid "writable"
msgstr ""
-#: tools/gst-inspect.c:479
+#: tools/gst-inspect.c:480
msgid "deprecated"
msgstr ""
-#: tools/gst-inspect.c:483
+#: tools/gst-inspect.c:484
msgid "controllable"
msgstr ""
-#: tools/gst-inspect.c:488
+#: tools/gst-inspect.c:489
msgid "conditionally available"
msgstr ""
-#: tools/gst-inspect.c:494
+#: tools/gst-inspect.c:495
msgid "changeable in NULL, READY, PAUSED or PLAYING state"
msgstr ""
-#: tools/gst-inspect.c:497
+#: tools/gst-inspect.c:498
msgid "changeable only in NULL, READY or PAUSED state"
msgstr ""
-#: tools/gst-inspect.c:500
+#: tools/gst-inspect.c:501
msgid "changeable only in NULL or READY state"
msgstr ""
-#: tools/gst-inspect.c:1248
+#: tools/gst-inspect.c:1287
msgid "Blacklisted files:"
msgstr ""
-#: tools/gst-inspect.c:1263 tools/gst-inspect.c:1400
+#: tools/gst-inspect.c:1302 tools/gst-inspect.c:1439
#, c-format
msgid "%sTotal count%s: %s"
msgstr ""
-#: tools/gst-inspect.c:1265
+#: tools/gst-inspect.c:1304
#, c-format
msgid "%d blacklisted file"
msgid_plural "%d blacklisted files"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1402
+#: tools/gst-inspect.c:1441
#, c-format
msgid "%d plugin"
msgid_plural "%d plugins"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1405
+#: tools/gst-inspect.c:1444
#, c-format
msgid "%d blacklist entry"
msgid_plural "%d blacklist entries"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:1410
+#: tools/gst-inspect.c:1449
#, c-format
msgid "%d feature"
msgid_plural "%d features"
msgstr[0] ""
msgstr[1] ""
-#: tools/gst-inspect.c:2114
+#: tools/gst-inspect.c:2154
msgid "Print all elements"
msgstr ""
-#: tools/gst-inspect.c:2116
+#: tools/gst-inspect.c:2156
msgid "Print list of blacklisted files"
msgstr ""
-#: tools/gst-inspect.c:2118
+#: tools/gst-inspect.c:2158
msgid ""
"Print a machine-parsable list of features the specified plugin or all "
"plugins provide.\n"
@@ -1401,46 +1401,46 @@
"automatic plugin installation mechanisms"
msgstr ""
-#: tools/gst-inspect.c:2123
+#: tools/gst-inspect.c:2163
msgid "List the plugin contents"
msgstr ""
-#: tools/gst-inspect.c:2125
+#: tools/gst-inspect.c:2165
msgid ""
"A slashes ('/') separated list of types of elements (also known as klass) to "
"list. (unordered)"
msgstr ""
-#: tools/gst-inspect.c:2128
+#: tools/gst-inspect.c:2168
msgid "Check if the specified element or plugin exists"
msgstr ""
-#: tools/gst-inspect.c:2131
+#: tools/gst-inspect.c:2171
msgid ""
"When checking if an element or plugin exists, also check that its version is "
"at least the version specified"
msgstr ""
-#: tools/gst-inspect.c:2135
+#: tools/gst-inspect.c:2175
msgid "Print supported URI schemes, with the elements that implement them"
msgstr ""
-#: tools/gst-inspect.c:2140
+#: tools/gst-inspect.c:2180
msgid ""
"Disable colors in output. You can also achieve the same by setting "
"'GST_INSPECT_NO_COLORS' environment variable to any value."
msgstr ""
-#: tools/gst-inspect.c:2148
+#: tools/gst-inspect.c:2188
msgid "Color output, even when not sending to a tty."
msgstr ""
-#: tools/gst-inspect.c:2306
+#: tools/gst-inspect.c:2360
#, c-format
msgid "Could not load plugin file: %s\n"
msgstr ""
-#: tools/gst-inspect.c:2312
+#: tools/gst-inspect.c:2366
#, c-format
msgid "No such element or plugin '%s'\n"
msgstr ""
@@ -1666,48 +1666,48 @@
"This option has no effect if the \"no-position\" option is specified"
msgstr ""
-#: tools/gst-launch.c:1194
+#: tools/gst-launch.c:1203
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
msgstr ""
-#: tools/gst-launch.c:1198
+#: tools/gst-launch.c:1207
msgid "ERROR: pipeline could not be constructed.\n"
msgstr ""
-#: tools/gst-launch.c:1202
+#: tools/gst-launch.c:1211
#, c-format
msgid "WARNING: erroneous pipeline: %s\n"
msgstr ""
-#: tools/gst-launch.c:1219
+#: tools/gst-launch.c:1228
msgid "ERROR: the 'pipeline' element wasn't found.\n"
msgstr ""
-#: tools/gst-launch.c:1268
+#: tools/gst-launch.c:1277
msgid "Setting pipeline to PAUSED ...\n"
msgstr ""
-#: tools/gst-launch.c:1273
+#: tools/gst-launch.c:1282
msgid "Failed to set pipeline to PAUSED.\n"
msgstr ""
-#: tools/gst-launch.c:1277
+#: tools/gst-launch.c:1286
msgid "Pipeline is live and does not need PREROLL ...\n"
msgstr ""
-#: tools/gst-launch.c:1281
+#: tools/gst-launch.c:1290
msgid "Pipeline is PREROLLING ...\n"
msgstr ""
-#: tools/gst-launch.c:1325
+#: tools/gst-launch.c:1334
msgid "Execution ended after %"
msgstr ""
-#: tools/gst-launch.c:1342
+#: tools/gst-launch.c:1351
msgid "Setting pipeline to NULL ...\n"
msgstr ""
-#: tools/gst-launch.c:1360
+#: tools/gst-launch.c:1369
msgid "Freeing pipeline ...\n"
msgstr ""
diff -Nru gstreamer1.0-1.22.0/po/sr.po gstreamer1.0-1.22.12/po/sr.po
--- gstreamer1.0-1.22.0/po/sr.po 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/po/sr.po 2024-04-29 21:09:52.000000000 +0200
@@ -2,13 +2,14 @@
# Copyright © 2020 Free Software Foundation, Inc.
# This file is distributed under the same license as the gstreamer package.
# Danilo Segan <dsegan@gmx.net>, 2004-2005.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011–2021.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011–2023.
+#
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer-1.19.2\n"
+"Project-Id-Version: gstreamer-1.21.90\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-11 15:40+0000\n"
-"PO-Revision-Date: 2021-10-01 22:08+0200\n"
+"POT-Creation-Date: 2023-04-10 13:49+0100\n"
+"PO-Revision-Date: 2023-02-26 08:09+0100\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -19,6 +20,7 @@
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Project-Style: gnome\n"
+"X-Generator: Gtranslator 41.0\n"
msgid "Print the GStreamer version"
msgstr "Исписује издање Гстримера"
@@ -873,7 +875,7 @@
msgstr "веза нема усклађивање [source=%s@%p]"
msgid "No such property."
-msgstr ""
+msgstr "Нема таквог својства."
#, c-format
msgid "no property \"%s\" in element \"%s\""
@@ -895,9 +897,9 @@
msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
msgstr "не могу да поставим особину „%s“ у елементу „%s“ на „%s“"
-#, fuzzy, c-format
+#, c-format
msgid "could not set property \"%s\" in child of element \"%s\" to \"%s\""
-msgstr "не могу да поставим особину „%s“ у елементу „%s“ на „%s“"
+msgstr "не могу да поставим особину „%s“ у породу елемента „%s“ на „%s“"
msgid "Delayed linking failed."
msgstr "Одложено повезивање није успело."
diff -Nru gstreamer1.0-1.22.0/README.md gstreamer1.0-1.22.12/README.md
--- gstreamer1.0-1.22.0/README.md 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/README.md 2024-04-29 21:09:52.000000000 +0200
@@ -1,4 +1,4 @@
-GStreamer 1.20.x stable series
+GStreamer 1.22.x stable series
WHAT IT IS
----------
diff -Nru gstreamer1.0-1.22.0/RELEASE gstreamer1.0-1.22.12/RELEASE
--- gstreamer1.0-1.22.0/RELEASE 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/RELEASE 2024-04-29 21:09:52.000000000 +0200
@@ -1,4 +1,4 @@
-This is GStreamer core 1.22.0.
+This is GStreamer core 1.22.12.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
diff -Nru gstreamer1.0-1.22.0/tests/check/elements/filesink.c gstreamer1.0-1.22.12/tests/check/elements/filesink.c
--- gstreamer1.0-1.22.0/tests/check/elements/filesink.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tests/check/elements/filesink.c 2024-04-29 21:09:52.000000000 +0200
@@ -24,6 +24,7 @@
#endif
#include <stdio.h>
+#include <string.h>
#include <glib.h>
#include <glib/gstdio.h>
@@ -484,6 +485,86 @@
GST_END_TEST;
+static void
+test_buffered_write (guint num_buf, guint num_mem_per_buf)
+{
+ GstElement *filesink;
+ guint i, j;
+ gchar *tmp_fn;
+ GstSegment segment;
+ const gsize size_per_mem = 4;
+ gsize total_size = size_per_mem * num_buf * num_mem_per_buf;
+ GStatBuf stat_buf;
+
+ tmp_fn = create_temporary_file ();
+ if (!tmp_fn)
+ return;
+
+ filesink = setup_filesink ();
+ g_object_set (filesink, "location", tmp_fn, NULL);
+
+ fail_unless_equals_int (gst_element_set_state (filesink, GST_STATE_PLAYING),
+ GST_STATE_CHANGE_ASYNC);
+
+ fail_unless (gst_pad_push_event (mysrcpad,
+ gst_event_new_stream_start ("test")));
+
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ for (i = 0; i < num_buf; i++) {
+ GstBuffer *buf = gst_buffer_new ();
+ for (j = 0; j < num_mem_per_buf; j++) {
+ GstMemory *mem = gst_allocator_alloc (NULL, size_per_mem, NULL);
+ GstMapInfo info;
+ fail_unless (mem != NULL);
+
+ fail_unless (gst_memory_map (mem, &info, GST_MAP_WRITE));
+ memset (info.data, 0, info.size);
+ gst_memory_unmap (mem, &info);
+
+ gst_buffer_append_memory (buf, mem);
+ }
+
+ fail_unless_equals_int (gst_pad_push (mysrcpad, buf), GST_FLOW_OK);
+ }
+
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+ fail_unless_equals_int (gst_element_set_state (filesink, GST_STATE_NULL),
+ GST_STATE_CHANGE_SUCCESS);
+
+ cleanup_filesink (filesink);
+
+ if (g_stat (tmp_fn, &stat_buf) == 0)
+ fail_unless_equals_int64 (stat_buf.st_size, total_size);
+
+ g_remove (tmp_fn);
+ g_free (tmp_fn);
+}
+
+GST_START_TEST (test_buffered_write_17_1)
+{
+ test_buffered_write (17, 1);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_buffered_write_9_2)
+{
+ test_buffered_write (9, 2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_buffered_write_6_3)
+{
+ test_buffered_write (6, 3);
+}
+
+GST_END_TEST;
+
static Suite *
filesink_suite (void)
{
@@ -496,6 +577,9 @@
tcase_add_test (tc_chain, test_uri_interface);
tcase_add_test (tc_chain, test_seeking);
tcase_add_test (tc_chain, test_flush);
+ tcase_add_test (tc_chain, test_buffered_write_17_1);
+ tcase_add_test (tc_chain, test_buffered_write_9_2);
+ tcase_add_test (tc_chain, test_buffered_write_6_3);
return s;
}
diff -Nru gstreamer1.0-1.22.0/tests/check/gst/gstbufferpool.c gstreamer1.0-1.22.12/tests/check/gst/gstbufferpool.c
--- gstreamer1.0-1.22.0/tests/check/gst/gstbufferpool.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tests/check/gst/gstbufferpool.c 2024-04-29 21:09:52.000000000 +0200
@@ -336,6 +336,114 @@
GST_END_TEST;
+GST_START_TEST (test_parent_meta)
+{
+ GstBufferPool *pool;
+ GstBuffer *buf1, *buf2, *buf3;
+ GstMemory *mem;
+ gint buf1_dcount = 0;
+ gint buf2_dcount = 0;
+
+ pool = create_pool (1, 0, 0);
+ fail_unless (pool);
+ gst_buffer_pool_set_active (pool, TRUE);
+
+ fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf1,
+ NULL) == GST_FLOW_OK);
+ buffer_track_destroy (buf1, &buf1_dcount);
+
+ /* Create a 2nd buffer reffing the same memory. Set parent meta to make sure
+ * buf1 does not return to pool until buf2 is destroyed. */
+ mem = gst_buffer_get_memory (buf1, 0);
+ buf2 = gst_buffer_new ();
+ gst_buffer_append_memory (buf2, mem);
+ gst_buffer_add_parent_buffer_meta (buf2, buf1);
+ buffer_track_destroy (buf2, &buf2_dcount);
+
+ /* buf1 is still reffed by the meta */
+ gst_buffer_unref (buf1);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 0);
+
+ /* buf2 gets destroyed and buf1 returns to pool */
+ gst_buffer_unref (buf2);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 1);
+
+ /* buf1 should be recycled with the same memory */
+ fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf3,
+ NULL) == GST_FLOW_OK);
+ fail_unless_equals_pointer (buf1, buf3);
+ fail_unless_equals_pointer (mem, gst_buffer_peek_memory (buf3, 0));
+
+ gst_buffer_unref (buf3);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 1);
+
+ gst_buffer_pool_set_active (pool, FALSE);
+ gst_object_unref (pool);
+ fail_unless_equals_int (buf1_dcount, 1);
+ fail_unless_equals_int (buf2_dcount, 1);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_make_writable_parent_meta)
+{
+ GstBufferPool *pool;
+ GstBuffer *buf1, *buf2, *buf3;
+ GstMemory *mem1, *mem2;
+ gint buf1_dcount = 0;
+ gint buf2_dcount = 0;
+
+ pool = create_pool (1, 0, 0);
+ fail_unless (pool);
+ gst_buffer_pool_set_active (pool, TRUE);
+
+ fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf1,
+ NULL) == GST_FLOW_OK);
+ buffer_track_destroy (buf1, &buf1_dcount);
+
+ /* Make buf1 not writable and copy it */
+ gst_buffer_ref (buf1);
+ buf2 = gst_buffer_make_writable (buf1);
+ buffer_track_destroy (buf2, &buf2_dcount);
+ fail_unless (buf1 != buf2);
+ fail_unless (gst_buffer_is_writable (buf2));
+
+ /* buf1 and buf2 should be sharing the same memory */
+ mem1 = gst_buffer_peek_memory (buf1, 0);
+ mem2 = gst_buffer_peek_memory (buf2, 0);
+ fail_unless_equals_pointer (mem1, mem2);
+
+ /* buf1 is still reffed by the meta */
+ gst_buffer_unref (buf1);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 0);
+
+ /* buf2 gets destroyed and buf1 returns to pool */
+ gst_buffer_unref (buf2);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 1);
+
+ /* buf1 should be recycled with the same memory */
+ fail_unless (gst_buffer_pool_acquire_buffer (pool, &buf3,
+ NULL) == GST_FLOW_OK);
+ fail_unless_equals_pointer (buf1, buf3);
+ fail_unless_equals_pointer (mem1, gst_buffer_peek_memory (buf3, 0));
+
+ gst_buffer_unref (buf3);
+ fail_unless_equals_int (buf1_dcount, 0);
+ fail_unless_equals_int (buf2_dcount, 1);
+
+ gst_buffer_pool_set_active (pool, FALSE);
+ gst_object_unref (pool);
+ fail_unless_equals_int (buf1_dcount, 1);
+ fail_unless_equals_int (buf2_dcount, 1);
+}
+
+GST_END_TEST;
+
static Suite *
gst_buffer_pool_suite (void)
{
@@ -355,6 +463,8 @@
tcase_add_test (tc_chain, test_pool_config_validate);
tcase_add_test (tc_chain, test_flushing_pool_returns_flushing);
tcase_add_test (tc_chain, test_no_deadlock_for_buffer_discard);
+ tcase_add_test (tc_chain, test_parent_meta);
+ tcase_add_test (tc_chain, test_make_writable_parent_meta);
return s;
}
diff -Nru gstreamer1.0-1.22.0/tests/check/libs/aggregator.c gstreamer1.0-1.22.12/tests/check/libs/aggregator.c
--- gstreamer1.0-1.22.0/tests/check/libs/aggregator.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tests/check/libs/aggregator.c 2024-04-29 21:09:52.000000000 +0200
@@ -166,6 +166,24 @@
#define gst_test_aggregator_parent_class parent_class
G_DEFINE_TYPE (GstTestAggregator, gst_test_aggregator, GST_TYPE_AGGREGATOR);
+static gboolean gst_aggregator_test_slow_down_sink_query = FALSE;
+
+static gboolean
+gst_aggregator_test_slow_sink_query (GstAggregator * self,
+ GstAggregatorPad * aggpad, GstQuery * query)
+{
+ GST_DEBUG ("Handling query %" GST_PTR_FORMAT, query);
+ if (GST_QUERY_IS_SERIALIZED (query)) {
+ GstStructure *s = gst_query_writable_structure (query);
+
+ if (gst_aggregator_test_slow_down_sink_query)
+ g_usleep (G_TIME_SPAN_MILLISECOND * 10);
+ gst_structure_set (s, "some-int", G_TYPE_INT, 123, NULL);
+ GST_DEBUG ("Written to the query %" GST_PTR_FORMAT, query);
+ }
+ return GST_AGGREGATOR_CLASS (parent_class)->sink_query (self, aggpad, query);
+}
+
static void
gst_test_aggregator_class_init (GstTestAggregatorClass * klass)
{
@@ -193,6 +211,7 @@
GST_DEBUG_FUNCPTR (gst_test_aggregator_aggregate);
base_aggregator_class->get_next_time = gst_aggregator_simple_get_next_time;
+ base_aggregator_class->sink_query = gst_aggregator_test_slow_sink_query;
}
static void
@@ -646,6 +665,60 @@
GST_END_TEST;
+GST_START_TEST (test_aggregate_queries_robustness)
+{
+ GThread *thread1;
+ ChainData data1 = { 0, };
+ TestData test = { 0, };
+ GstCaps *caps;
+ gint64 start_time;
+
+ gst_aggregator_test_slow_down_sink_query = TRUE;
+
+ _test_data_init (&test, FALSE);
+
+ caps = gst_caps_new_empty_simple ("foo/x-bar");
+ _chain_data_init (&data1, test.aggregator,
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE),
+ gst_query_new_allocation (caps, FALSE), NULL);
+ gst_caps_unref (caps);
+
+ thread1 = g_thread_try_new ("gst-check", push_data, &data1, NULL);
+ g_usleep (G_TIME_SPAN_MILLISECOND * 5);
+ for (start_time = g_get_monotonic_time ();
+ start_time + G_TIME_SPAN_SECOND > g_get_monotonic_time ();
+ g_usleep (G_TIME_SPAN_MILLISECOND)) {
+ fail_unless (gst_element_send_event (test.aggregator,
+ gst_event_new_flush_start ()));
+ fail_unless (gst_element_send_event (test.aggregator,
+ gst_event_new_flush_stop (TRUE)));
+ }
+
+ g_thread_join (thread1);
+
+ _chain_data_clear (&data1);
+ _test_data_clear (&test);
+
+ gst_aggregator_test_slow_down_sink_query = FALSE;
+}
+
+GST_END_TEST;
+
#define NUM_BUFFERS 3
static void
handoff (GstElement * fakesink, GstBuffer * buf, GstPad * pad, guint * count)
@@ -1398,6 +1471,7 @@
tcase_add_test (general, test_aggregate_gap);
tcase_add_test (general, test_aggregate_handle_events);
tcase_add_test (general, test_aggregate_handle_queries);
+ tcase_add_test (general, test_aggregate_queries_robustness);
tcase_add_test (general, test_flushing_seek);
tcase_add_test (general, test_infinite_seek);
tcase_add_test (general, test_infinite_seek_50_src);
diff -Nru gstreamer1.0-1.22.0/tests/check/libs/basesink.c gstreamer1.0-1.22.12/tests/check/libs/basesink.c
--- gstreamer1.0-1.22.0/tests/check/libs/basesink.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tests/check/libs/basesink.c 2024-04-29 21:09:52.000000000 +0200
@@ -282,6 +282,69 @@
GST_END_TEST;
+GST_START_TEST (basesink_stream_start_after_eos)
+{
+ GstElement *pipeline, *sink;
+ GstPad *pad;
+ GstEvent *ev;
+ GstSegment segment;
+ GstBuffer *buf;
+ GstFlowReturn ret;
+
+ sink = gst_element_factory_make ("fakesink", "sink");
+ g_object_set (sink, "async", FALSE, "sync", FALSE, NULL);
+ pad = gst_element_get_static_pad (sink, "sink");
+
+ pipeline = gst_pipeline_new (NULL);
+
+ gst_bin_add (GST_BIN (pipeline), sink);
+
+ fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+ GST_STATE_CHANGE_SUCCESS);
+
+ /* Normal data flow and EOS */
+ ev = gst_event_new_stream_start ("test");
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ ev = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ buf = gst_buffer_new_and_alloc (4);
+ ret = gst_pad_chain (pad, buf);
+ fail_unless (ret == GST_FLOW_OK);
+
+ ev = gst_event_new_eos ();
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ /* After EOS event, flow return should be EOS */
+ buf = gst_buffer_new_and_alloc (4);
+ ret = gst_pad_chain (pad, buf);
+ fail_unless (ret == GST_FLOW_EOS);
+
+ /* New data flow with new stream-start */
+ ev = gst_event_new_stream_start ("test");
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ ev = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ buf = gst_buffer_new_and_alloc (4);
+ ret = gst_pad_chain (pad, buf);
+ fail_unless (ret == GST_FLOW_OK);
+
+ ev = gst_event_new_eos ();
+ fail_unless (gst_pad_send_event (pad, ev));
+
+ fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+ GST_STATE_CHANGE_SUCCESS);
+ gst_object_unref (pad);
+ gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
static Suite *
gst_basesrc_suite (void)
{
@@ -294,6 +357,7 @@
tcase_add_test (tc, basesink_test_gap);
tcase_add_test (tc, basesink_test_eos_after_playing);
tcase_add_test (tc, basesink_position_query_handles_segment_offset);
+ tcase_add_test (tc, basesink_stream_start_after_eos);
return s;
}
diff -Nru gstreamer1.0-1.22.0/tests/check/tools/gstinspect.c gstreamer1.0-1.22.12/tests/check/tools/gstinspect.c
--- gstreamer1.0-1.22.0/tests/check/tools/gstinspect.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tests/check/tools/gstinspect.c 2024-04-29 21:09:52.000000000 +0200
@@ -30,10 +30,27 @@
#include "../../tools/gst-inspect.c"
#undef main
+// A plugin whose version does not match the gstreamer major/minor
+// see https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6191
+#define TEST_PLUGIN_VERSION "0.1.0"
+#define TEST_ELEMENT_NAME "local_test_bin"
+static gboolean
+test_plugin_init (G_GNUC_UNUSED GstPlugin * plugin)
+{
+ gst_element_register (plugin, TEST_ELEMENT_NAME, GST_RANK_NONE, GST_TYPE_BIN);
+ return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR,
+ test_plugin, "Test Plugin", test_plugin_init, TEST_PLUGIN_VERSION,
+ "LGPL", "gsttestplugin", "testing");
+
GST_START_TEST (test_exists)
{
#define ARGV_LEN (G_N_ELEMENTS (argv) - 1)
+ gst_plugin_test_plugin_register ();
+
{
const gchar *argv[] = { "gst-inspect-1.0", "--exists", "foo", NULL };
@@ -45,6 +62,16 @@
fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
}
{
+ // --exists should work even if the plugin's version does not equal
+ // the gstreamer version (i.e., the --atleast-version check is not
+ // implicitly enforced when not present).
+ const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+ TEST_ELEMENT_NAME, NULL
+ };
+
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+ }
+ {
const gchar *argv[] = { "gst-inspect-1.0", "--exists",
"--atleast-version=" VERSION, "bin", NULL
};
@@ -77,28 +104,41 @@
"--atleast-version=2.0", "bin", NULL
};
- fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 2);
}
{
const gchar *argv[] = { "gst-inspect-1.0", "--exists",
"--atleast-version=2.0.0", "bin", NULL
};
- fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 2);
}
{
const gchar *argv[] = { "gst-inspect-1.0", "--exists",
"--atleast-version=1.44", "bin", NULL
};
- fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 2);
}
{
const gchar *argv[] = { "gst-inspect-1.0", "--exists",
"--atleast-version=1.60.4", "bin", NULL
};
- fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 2);
+ }
+ {
+ // The 'atleast-version' supplied here will not match the test plugin's
+ // version, above, so the test case should return "2" because the test
+ // plugin's 0.1.0 will not meet the minimum version specified by the arg.
+ gchar *atleast = g_strdup_printf ("--atleast-version=%d.%d",
+ GST_VERSION_MAJOR, GST_VERSION_MINOR);
+ const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+ atleast, TEST_ELEMENT_NAME, NULL
+ };
+
+ fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 2);
+ g_free (atleast);
}
{
/* check for plugin should fail like this */
diff -Nru gstreamer1.0-1.22.0/tools/gst-inspect.c gstreamer1.0-1.22.12/tools/gst-inspect.c
--- gstreamer1.0-1.22.0/tools/gst-inspect.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tools/gst-inspect.c 2024-04-29 21:09:52.000000000 +0200
@@ -432,6 +432,7 @@
(GCompareDataFunc) sort_gparamspecs, NULL);
n_print ("%s%s%s:\n", HEADING_COLOR, desc, RESET_COLOR);
+ n_print ("\n");
push_indent ();
@@ -780,6 +781,8 @@
pop_indent_n (11);
g_value_reset (&value);
+
+ n_print ("\n");
}
if (num_properties == 0)
n_print ("%snone%s\n", PROP_VALUE_COLOR, RESET_COLOR);
@@ -1065,6 +1068,21 @@
return FALSE;
}
+static const gchar *
+pretty_type_name (GType type, const gchar ** p_pmark)
+{
+ if (type == G_TYPE_STRING) {
+ *p_pmark = " * ";
+ return "gchar";
+ } else if (type == G_TYPE_STRV) {
+ *p_pmark = " ** ";
+ return "gchar";
+ } else {
+ *p_pmark = gtype_needs_ptr_marker (type) ? " * " : " ";
+ return g_type_name (type);
+ }
+}
+
static void
print_signal_info (GstElement * element)
{
@@ -1077,11 +1095,13 @@
GSList *found_signals, *l;
for (k = 0; k < 2; k++) {
+ gboolean want_actions = (k == 1);
+
found_signals = NULL;
/* For elements that have sometimes pads, also list a few useful GstElement
* signals. Put these first, so element-specific ones come later. */
- if (k == 0 && has_sometimes_template (element)) {
+ if (!want_actions && has_sometimes_template (element)) {
query = g_new0 (GSignalQuery, 1);
g_signal_query (g_signal_lookup ("pad-added", GST_TYPE_ELEMENT), query);
found_signals = g_slist_append (found_signals, query);
@@ -1106,8 +1126,8 @@
query = g_new0 (GSignalQuery, 1);
g_signal_query (signals[i], query);
- if ((k == 0 && !(query->signal_flags & G_SIGNAL_ACTION)) ||
- (k == 1 && (query->signal_flags & G_SIGNAL_ACTION)))
+ if ((!want_actions && !(query->signal_flags & G_SIGNAL_ACTION)) ||
+ (want_actions && (query->signal_flags & G_SIGNAL_ACTION)))
found_signals = g_slist_append (found_signals, query);
else
g_free (query);
@@ -1118,10 +1138,11 @@
if (found_signals) {
n_print ("\n");
- if (k == 0)
+ if (!want_actions)
n_print ("%sElement Signals%s:\n", HEADING_COLOR, RESET_COLOR);
else
n_print ("%sElement Actions%s:\n", HEADING_COLOR, RESET_COLOR);
+ n_print ("\n");
} else {
continue;
}
@@ -1129,47 +1150,65 @@
for (l = found_signals; l; l = l->next) {
gchar *indent;
const gchar *pmark;
+ const gchar *retval_type_name;
int indent_len;
query = (GSignalQuery *) l->data;
- indent_len = strlen (query->signal_name) +
- strlen (g_type_name (query->return_type)) + 24;
+ retval_type_name = pretty_type_name (query->return_type, &pmark);
- if (gtype_needs_ptr_marker (query->return_type)) {
- pmark = "* ";
- indent_len += 2;
- } else {
- pmark = " ";
- }
+ indent_len = strlen (query->signal_name) + strlen (retval_type_name);
+ indent_len += strlen (pmark) - 1;
+ indent_len += (want_actions) ? 36 : 24;
indent = g_new0 (gchar, indent_len + 1);
memset (indent, ' ', indent_len);
- n_print (" %s\"%s\"%s : %s%s%s%suser_function%s (%s%s%s* object%s",
- PROP_NAME_COLOR, query->signal_name, RESET_COLOR,
- DATATYPE_COLOR, g_type_name (query->return_type), PROP_VALUE_COLOR,
- pmark, RESET_COLOR, DATATYPE_COLOR, g_type_name (type),
- PROP_VALUE_COLOR, RESET_COLOR);
+ if (want_actions) {
+ n_print
+ (" %s\"%s\"%s -> %s%s%s %s: g_signal_emit_by_name%s (%selement%s, %s\"%s\"%s",
+ PROP_NAME_COLOR, query->signal_name, RESET_COLOR, DATATYPE_COLOR,
+ retval_type_name, PROP_VALUE_COLOR, pmark,
+ RESET_COLOR, PROP_VALUE_COLOR, RESET_COLOR, PROP_NAME_COLOR,
+ query->signal_name, RESET_COLOR);
+ } else {
+ n_print (" %s\"%s\"%s : %s%s%s%suser_function%s (%s%s%s * object%s",
+ PROP_NAME_COLOR, query->signal_name, RESET_COLOR,
+ DATATYPE_COLOR, retval_type_name, PROP_VALUE_COLOR,
+ pmark, RESET_COLOR, DATATYPE_COLOR, g_type_name (type),
+ PROP_VALUE_COLOR, RESET_COLOR);
+ }
for (j = 0; j < query->n_params; j++) {
- const gchar *type_name, *asterisk;
+ const gchar *type_name, *asterisk, *const_prefix;
- type_name = g_type_name (query->param_types[j]);
- asterisk = gtype_needs_ptr_marker (query->param_types[j]) ? "*" : "";
+ type_name = pretty_type_name (query->param_types[j], &asterisk);
+
+ /* Add const prefix for string and string array arguments */
+ if (g_str_equal (type_name, "gchar") && strchr (asterisk, '*')) {
+ const_prefix = "const ";
+ } else {
+ const_prefix = "";
+ }
g_print (",\n");
- n_print ("%s%s%s%s%s arg%d%s", indent, DATATYPE_COLOR, type_name,
- PROP_VALUE_COLOR, asterisk, j, RESET_COLOR);
+ n_print ("%s%s%s%s%s%sarg%d%s", indent, DATATYPE_COLOR, const_prefix,
+ type_name, PROP_VALUE_COLOR, asterisk, j, RESET_COLOR);
}
- if (k == 0) {
+ if (!want_actions) {
g_print (",\n");
n_print ("%s%sgpointer %suser_data%s);\n", indent, DATATYPE_COLOR,
PROP_VALUE_COLOR, RESET_COLOR);
- } else
- g_print (");\n");
-
+ } else if (query->return_type == G_TYPE_NONE) {
+ n_print ("%s);\n", RESET_COLOR);
+ } else {
+ g_print (",\n");
+ n_print ("%s%s%s%s *%sp_return_value%s);\n", indent, DATATYPE_COLOR,
+ g_type_name (query->return_type), PROP_VALUE_COLOR, pmark,
+ RESET_COLOR);
+ }
g_free (indent);
+ g_print ("\n");
}
if (found_signals) {
@@ -2100,6 +2139,7 @@
gboolean print_aii = FALSE;
gboolean uri_handlers = FALSE;
gboolean check_exists = FALSE;
+ gboolean check_version = FALSE;
gboolean color_always = FALSE;
gchar *min_version = NULL;
guint minver_maj = GST_VERSION_MAJOR;
@@ -2171,7 +2211,12 @@
ctx = g_option_context_new ("[ELEMENT-NAME | PLUGIN-NAME]");
g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, gst_init_get_option_group ());
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+#if defined(G_OS_WIN32) && !defined(GST_CHECK_MAIN)
+ if (!g_option_context_parse_strv (ctx, &argv, &err))
+#else
+ if (!g_option_context_parse (ctx, &argc, &argv, &err))
+#endif
+ {
g_printerr ("Error initializing: %s\n", err->message);
g_clear_error (&err);
g_option_context_free (ctx);
@@ -2182,6 +2227,10 @@
gst_init (&argc, &argv);
#endif
+#if defined(G_OS_WIN32) && !defined(GST_CHECK_MAIN)
+ argc = g_strv_length (argv);
+#endif
+
gst_tools_print_version ();
if (print_all && argc > 1) {
@@ -2205,6 +2254,7 @@
}
g_free (min_version);
check_exists = TRUE;
+ check_version = TRUE;
}
if (check_exists) {
@@ -2216,9 +2266,13 @@
GstPluginFeature *feature;
feature = gst_registry_lookup_feature (gst_registry_get (), argv[1]);
- if (feature != NULL && gst_plugin_feature_check_version (feature,
- minver_maj, minver_min, minver_micro)) {
- exit_code = 0;
+ if (feature != NULL) {
+ if (check_version && !gst_plugin_feature_check_version (feature,
+ minver_maj, minver_min, minver_micro)) {
+ exit_code = 2;
+ } else {
+ exit_code = 0;
+ }
} else {
exit_code = 1;
}
@@ -2338,9 +2392,22 @@
int
main (int argc, char *argv[])
{
+ int ret;
+
+ /* gstinspect.c calls this function */
+#if defined(G_OS_WIN32) && !defined(GST_CHECK_MAIN)
+ argv = g_win32_get_command_line ();
+#endif
+
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
- return gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
+ ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
#else
- return real_main (argc, argv);
+ ret = real_main (argc, argv);
#endif
+
+#if defined(G_OS_WIN32) && !defined(GST_CHECK_MAIN)
+ g_strfreev (argv);
+#endif
+
+ return ret;
}
diff -Nru gstreamer1.0-1.22.0/tools/gst-launch.c gstreamer1.0-1.22.12/tools/gst-launch.c
--- gstreamer1.0-1.22.0/tools/gst-launch.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tools/gst-launch.c 2024-04-29 21:09:52.000000000 +0200
@@ -56,7 +56,7 @@
extern volatile gboolean glib_on_error_halt;
-#ifdef G_OS_UNIX
+#if defined (G_OS_UNIX) && !defined (__APPLE__)
static void fault_restore (void);
static void fault_spin (void);
#endif
@@ -95,7 +95,7 @@
/* convenience macro so we don't have to litter the code with if(!quiet) */
#define PRINT if(!quiet)gst_print
-#ifdef G_OS_UNIX
+#if defined (G_OS_UNIX) && !defined (__APPLE__)
static void
fault_handler_sighandler (int signum)
{
@@ -161,7 +161,7 @@
sigaction (SIGSEGV, &action, NULL);
sigaction (SIGQUIT, &action, NULL);
}
-#endif /* G_OS_UNIX */
+#endif /* G_OS_UNIX && !__APPLE__ */
#if 0
typedef struct _GstIndexStats
@@ -1159,7 +1159,12 @@
ctx = g_option_context_new ("PIPELINE-DESCRIPTION");
g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, gst_init_get_option_group ());
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+#ifdef G_OS_WIN32
+ if (!g_option_context_parse_strv (ctx, &argv, &err))
+#else
+ if (!g_option_context_parse (ctx, &argc, &argv, &err))
+#endif
+ {
if (err)
gst_printerr ("Error initializing: %s\n", GST_STR_NULL (err->message));
else
@@ -1173,9 +1178,13 @@
gst_init (&argc, &argv);
#endif
+#ifdef G_OS_WIN32
+ argc = g_strv_length (argv);
+#endif
+
gst_tools_print_version ();
-#ifdef G_OS_UNIX
+#if defined (G_OS_UNIX) && !defined (__APPLE__)
if (!no_fault)
fault_setup ();
#endif
@@ -1368,9 +1377,21 @@
int
main (int argc, char *argv[])
{
+ int ret;
+
+#ifdef G_OS_WIN32
+ argv = g_win32_get_command_line ();
+#endif
+
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
- return gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
+ ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
#else
- return real_main (argc, argv);
+ ret = real_main (argc, argv);
#endif
+
+#ifdef G_OS_WIN32
+ g_strfreev (argv);
+#endif
+
+ return ret;
}
diff -Nru gstreamer1.0-1.22.0/tools/gst-stats.c gstreamer1.0-1.22.12/tools/gst-stats.c
--- gstreamer1.0-1.22.0/tools/gst-stats.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tools/gst-stats.c 2024-04-29 21:09:52.000000000 +0200
@@ -1283,15 +1283,28 @@
g_set_prgname ("gst-stats-" GST_API_VERSION);
+#ifdef G_OS_WIN32
+ argv = g_win32_get_command_line ();
+#endif
+
ctx = g_option_context_new ("FILE");
g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, gst_init_get_option_group ());
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+#ifdef G_OS_WIN32
+ if (!g_option_context_parse_strv (ctx, &argv, &err))
+#else
+ if (!g_option_context_parse (ctx, &argc, &argv, &err))
+#endif
+ {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
exit (1);
}
g_option_context_free (ctx);
+#ifdef G_OS_WIN32
+ argc = g_strv_length (argv);
+#endif
+
gst_tools_print_version ();
if (filenames == NULL || *filenames == NULL) {
@@ -1312,5 +1325,10 @@
done ();
g_strfreev (filenames);
+
+#ifdef G_OS_WIN23
+ g_strfreev (argv);
+#endif
+
return 0;
}
diff -Nru gstreamer1.0-1.22.0/tools/gst-typefind.c gstreamer1.0-1.22.12/tools/gst-typefind.c
--- gstreamer1.0-1.22.0/tools/gst-typefind.c 2023-01-23 20:29:34.000000000 +0100
+++ gstreamer1.0-1.22.12/tools/gst-typefind.c 2024-04-29 21:09:52.000000000 +0200
@@ -164,7 +164,12 @@
ctx = g_option_context_new ("FILES");
g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, gst_init_get_option_group ());
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+#ifdef G_OS_WIN32
+ if (!g_option_context_parse_strv (ctx, &argv, &err))
+#else
+ if (!g_option_context_parse (ctx, &argc, &argv, &err))
+#endif
+ {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
g_clear_error (&err);
g_option_context_free (ctx);
@@ -172,6 +177,10 @@
}
g_option_context_free (ctx);
+#ifdef G_OS_WIN32
+ argc = g_strv_length (argv);
+#endif
+
gst_tools_print_version ();
if (filenames == NULL || *filenames == NULL) {
@@ -193,9 +202,21 @@
int
main (int argc, char *argv[])
{
+ int ret;
+
+#ifdef G_OS_WIN32
+ argv = g_win32_get_command_line ();
+#endif
+
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
- return gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
+ ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL);
#else
- return real_main (argc, argv);
+ ret = real_main (argc, argv);
#endif
+
+#ifdef G_OS_WIN32
+ g_strfreev (argv);
+#endif
+
+ return ret;
}
Reply to: