Commit graph

565 commits

Author SHA1 Message Date
Nicolas Dufresne
5c256cffa6 basesink: Add GST_BASE_SINK_FLOW_DROPPED return value
This new flow return value can be used in ::render virtual method
to signal that a frame is not being rendered.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3801>
2023-03-14 21:50:57 +00:00
Alicia Boya García
136b2e0eae tracers: Document the 'log' tracer
This patch adds documentation to the 'log' tracer and amends the design
document of Tracers to replace a misleading example of the 'log' tracer
with a different example that uses tracer arguments with tracers that do
actually handle said arguments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4153>
2023-03-14 01:35:14 +00:00
Xavier Claessens
174132af8d gstallocator: Use the right allocator instance to free memory
In the case GST_ALLOCATOR_FLAG_CUSTOM_ALLOC is set, `copy` is allocated
by the default allocator and not mem->allocator.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4144>
2023-03-11 08:03:17 +00:00
Nirbheek Chauhan
f3665ce800 gstvalue: Implement union for GstFractionRange
This fixes simplification of caps with GstFractionRange structures,
for example, this caps:

  video/x-raw, framerate=(fraction)5/1; video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

can now be simplified to:

  video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

instead of:

  video/x-raw, framerate=(fraction){ 5/1, [ 5/1, 30/1 ] }

And this:

  video/x-raw, framerate=(fraction)[ 2/1, 5/1 ]; video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

can be simplified to:

  video/x-raw, framerate=(fraction)[ 2/1, 30/1 ]

instead of

  video/x-raw, framerate=(fraction){ [ 2/1, 5/1 ], [ 5/1, 30/1 ] }

This fixes overly-complicated GL caps set by avfvideosrc on macOS and
iOS when capturing from a webcam.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4132>
2023-03-11 04:15:13 +00:00
Chao Guo
dfa8661334 bin: Fix bin won't post async done message to parent while nothing pending in state changing
When we run Cheese 41.1 on our imx platform, Cheese preview freeze
at first frame.

During pipeline state changing from NULL to PLAYING, if there are
both elements that state change asynchronously and state change
with no preroll in the bin, the element inside may send ASYNC_DONE
message to it, while the bin's pending state is VOID_PENDING.

In this case, the bin will not post ASYNC_DONE message to parent
bin, which makes parent bin thinks that there are still elements
in it that haven't completed state changing, causing the pipeline
freeze in an intermediate state.

This commit modifies the bin_handle_async_done() function. When the
bin, whose pending state is VOIDING_PENDING, receives the ASYNC_DONE
message, it will also post this message to its parent bin.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3490>
2023-03-03 12:22:08 +00:00
Alicia Boya García
0f8785cbc6 basesink: Support position queries after non-resetting flushes
A flush is resetting or not depending on the reset_time argument in the
FLUSH_STOP event is set.

Resetting flushes reset the running time to zero and clear any existing
segment. These are the kind of flushes used by flushing seeks, and by far the
most common. Non-resetting flushes are much more niche, used for instance for
quality changes in adaptivedemux2 and MediaSource Extensions in WebKit.

A key difference between the seek use case and the quality change use case is
that the latter is much more removed from the player. Seeks generally occur
because an user request it, whereas quality changes can be automatic.

Currently, there are three notable cases where position queries fail:

(a) before pre-roll, as there is no segment yet. This is one is understandable,
as for at least some time before pre-roll, we cannot know if a media stream
would start at 0 or any other position, or the duration of the stream for that
matter.

(b) after a resetting flush caused by a seek. This kind of flush resets the
segment, so it's not surprising position queries fail. This is inconvenient for
applications, as it means they always need to handle position reporting (e.g.
in UI) separately every time they request a seek, e.g. by caching the seek
target and using it when the position query fail. I'm not fond of this
behavior, as it's unintuitive and makes GStreamer harder to use, but at this
point could be difficult to change and it's not within the scope of this
proposal.

(c) after a non-resetting flush, e.g. caused by a quality change. The segment
is not reset in this case. Position queries work until a FLUSH_STOP is sent.
Querying position after a FLUSH_START but before a FLUSH_STOP works, and
returns the position the sink was at the moment the FLUSH_START was received.
**This in fact the only reliable way (short of adding probes to the sink
element) to get this position**, as FLUSH_START receival is asynchronous with
playback.

In the case (c), as of currently, position queries fail once the FLUSH_STOP is
received. But unlike in (b), the application has no position to fall back to,
as the FLUSH_START was initiated by elements inside the pipeline that are in a
lower layer of abstraction. Specific applications that have control of both the
player and the internal element doing the flushing -- such as WebKit -- can
still work around this problem through layer violations (lucky!), but this
still puts in question this behavior in GStreamer.

This patch fixes this case by amending the position query handler of basesink,
which was previously erroneously returning early with "wrong state", even
though the flush occurs in PAUSED or PLAYING.

A unit test checking this behavior has also been added.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3471>
2023-03-03 10:16:25 +00:00
Vivia Nikolaidou
cf5b659bc6 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/4098>
2023-03-02 16:52:35 +02:00
Mathieu Duponchelle
f3e16deaad aggregator: improve parsing in create_new_pad
The previous implementation was a bit primitive, assuming the subclass
had registered a template name starting with sink_ . Instead make
the effort of parsing the actual template name, and use that to generate
the final pad name.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4032>
2023-02-28 17:43:57 +00:00
Stefan Brüns
fb076db1b2 gst-inspect: Enhance auto-install-info output for De/Encryptor class
Without this it is not possible to lookup which plugin handles a specific
encrypted mimetype (e.g. application/x-cenc or application/x-aavd).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1604>
2023-02-23 15:35:32 +00:00
Tim-Philipp Müller
65d9467f37 gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4040>
2023-02-22 12:22:12 +00:00
James Hilliard
1f1e7a3d99 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/4034>
2023-02-21 20:14:00 -07:00
Jan Alexander Steffens (heftig)
aeb262a7e1 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/3920>
2023-02-09 15:40:56 +00:00
Thibault Saunier
1bab0ef2aa bin: Do not deactivate pad in NULL_TO_READY
Since b76d336549
pads are deactivated when going to READY but in `uridecodebin(3)`, the
sources source pads are activated while in NULL state (when PULL mode is
supported), meaning that we are ending up deactivating those pads in
NULL_TO_READY, breaking the pipeline.

The intent of the commit mentioned above is to ensure that the pads are
deactivated either in PAUSED_TO_READY or READY_TO_READY, so it should
be safe to avoid deactivating in NULL_TO_READY.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3849>
2023-02-08 13:23:46 +00:00
medithe
3943503fc1 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/3903>
2023-02-07 19:03:43 +02:00
Sebastian Dröge
716aaa562b net: ptp: Use GSubprocess instead of lower-level GLib APIs that don't work on Windows
libgstnet depends on GIO already anyway so we can as well make use of it
instead of a half-baked Windows implementation that doesn't actually
work.

As a next step, the helper process also needs to be made usable on
Windows.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1259

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3887>
2023-02-03 18:51:17 +00:00
Seungha Yang
e1a22402d3 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/3828>
2023-02-03 16:05:19 +00:00
Seungha Yang
c0a4f41525 pluginloader-win32: Prepend gstreamer-1.0-0.dll directory to PATH env for child process
Usually gst-plugin-scanner.exe will be located under libexec/gstreamer-1.0
or even somewhere user specified location via GST_PLUGIN_SCANNER
environment. So, in order for child process to be able to load
GStreamer DLLs, parent process will need to update PATH env

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3886>
2023-02-03 14:25:21 +00:00
Jan Schmidt
138863b327 gsturi: Add API to order query strings
Add gst_uri_get_query_string_ordered() and gst_uri_to_string_with_keys() that
allow constructing the URI string with query arguments in a specific order.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3803>
2023-02-02 11:02:47 +01:00
Thibault Saunier
3963396716 gstutils: Add a utility to create a stream-id without a pad
We already have functions to generate a stream-id from pads but in the
end those pads are not even used in most cases. This adds functions to
generate a stream-id even before creating the source pads for the
element that is going to use it. For example a demuxer that is properly
implements the GstStream/GstStreamCollection API will not have a Pad but
already needs to generate a stream-id.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3160>
2023-02-01 22:26:33 +00:00
Seungha Yang
09d29cca5a pluginloader-win32: Watch child process handle on connection
... so that parent can avoid waiting if child process got terminated
unexpectedly

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:11 +00:00
Seungha Yang
464a8be3a4 pluginloader-win32: Check pipe state in child process
Retry if server is not ready for the connection

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:11 +00:00
Seungha Yang
0df7cd852c pluginloader-win32: Enhance debug log
Change log level to ERROR if it's unexpected, and print error reasons

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:10 +00:00
Seungha Yang
f314884b7d pluginloader-win32: Zero initialize overlapped struct before use
Helper child process might be spawned multiple times for some reason
then overlapped struct can hold garbage data. Always clear the struct.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:10 +00:00
Thibault Saunier
35e2ecd48b clocksync: Add "QoS" support
When ClockSync synchronizes the data stream on the clock, it should also
push `QoS` events if the user wants to do it as, as stated in [the QoS
design doc] "Elements that synchronize buffers on the pipeline clock
will usually measure the current QoS".

The logic has been replicated from `GstBaseSink`.

[the QoS design doc]: https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/qos.html

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2225>
2023-02-01 07:02:19 +00:00
Mathieu Duponchelle
4d240c27b7 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/3830>
2023-01-28 03:48:21 +00:00
Mathieu Duponchelle
c8298a2787 BaseSrc, PushSrc: add nullable annotations to virtual methods
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3806>
2023-01-26 22:35:31 +00:00
Jan Alexander Steffens (heftig)
e3fa65abab 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/611>
2023-01-26 10:39:08 +01:00
Jan Alexander Steffens (heftig)
08d4b0051a 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/611>
2023-01-26 10:39:08 +01:00
Daniel Ulery
befab7af72 filesink: Adds rb+ file mode
Adds rb+ file mode to filesink so that files can be pre-allocated. This
can be use to keep reduce fragmentation over time with splitmuxsink.

Fixes  #955

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1532>
2023-01-26 07:05:21 +00:00
Seungha Yang
621feb32e9 gst-plugin-scanner: Add support for Windows
Adding Win32 specific plugin loader implementation.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/11
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3512>
2023-01-25 18:24:28 +00:00
Sebastian Dröge
bfaa02ab56 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/3787>
2023-01-25 13:16:44 +00:00
Edward Hervey
21cad29bcd 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/3772>
2023-01-24 19:42:49 +00:00
Thibault Saunier
095a5ba425 factory: Add "Timestamper" as new factory type
This will be used by elements that correct timestamps (like the
h264timestamper for example)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3779>
2023-01-24 16:31:40 +00:00
Tim-Philipp Müller
45aac1e938 base: bitwriter: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
3dd12cb640 inputselector: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
78a941e873 multiqueue: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
fa55d8302b queue2: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
ed78e55bc7 tracers: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
78149326c9 libs: base: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
1919030363 baseparse: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
ba6d952cd5 gstcheck: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
bda6287075 controller: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
c1baa37f74 tracerutils: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
3261daa623 taskpool: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
eeced74fce segment: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
19a6468a53 sample: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
f343d01f10 query: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
e190ff16cc iterator: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
6a0be7ea56 event: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
dcc8830bb2 info: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
2f88c68659 devicemonitor: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
15c1b9ad45 datetime: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
384c4f1bef clockentry: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
1c8bb3f8db context: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
267adee5b7 uri: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
755f214a52 meta: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
9dd70085f1 message: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
976861a07a gstvalue: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
76c8a619f9 caps, capsfeatures: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
7d58554f4c bus, poll: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
5a2d643f9b bin: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
aef5456140 taglist, tagsetter: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
7d1675e42e toc, tocsetter: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
25f7fa1efc allocator, buffer, bufferlist: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
9e71898337 registrychunks: get rid of internal GST_REGISTRY_CHUNK_FLAG_MALLOC
Not actually needed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
ade83c8355 registry: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
e675519a2c gstparse: drop use of GSlice allocator
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
28dc56dc6c core: examples: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
d5d25c0f7a core: tests: drop use of GSlice allocator
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
6bdef53683 tools: gst-stats: drop use of GSlice allocator
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/291

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Alicia Boya García
2c2767b94a Use automatic pad activation in elements that can take advantage of it
Pads are activated automatically when they are added if the element
state is >=PAUSED, so it's not necessary to activate them manually
anymore.

This patch removes manual pad activation from gstaggregator, gstconcat,
gstfunnel, and gstinputselector.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3636>
2023-01-24 14:42:35 +00:00
Tim-Philipp Müller
41c69372b5 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3775>
2023-01-23 23:04:53 +00:00
Tim-Philipp Müller
f13c65d977 Release 1.22.0 2023-01-23 19:41:07 +00:00
Tim-Philipp Müller
478c6159eb gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3773>
2023-01-23 16:31:20 +00:00
Sebastian Dröge
6a210b53e3 gst: Mark caps parameters in ALLOCATION query API as nullable
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3752>
2023-01-19 16:01:21 +02:00
Jan Alexander Steffens (heftig)
b0e55caf0d input-selector: Take the object lock while iterating sinkpads
Otherwise we can race with pad removal and crash from use-after-free.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1717
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3745>
2023-01-18 16:21:12 +00:00
Tim-Philipp Müller
a9ec35b1ca Release 1.21.90 2023-01-13 19:08:48 +00:00
Tim-Philipp Müller
14e619158f gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3711>
2023-01-11 19:20:17 +00:00
Tim-Philipp Müller
a1672ec004 Fix translation pot files when creating dist tarballs
Add version as per Translation Project requirements and
also add a .pot file without the ABI suffix.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3711>
2023-01-11 19:20:17 +00:00
Sebastian Dröge
c28bc4492e tools: Use gst_macos_main() on macOS
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1673

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3709>
2023-01-11 13:36:55 +00:00
Mathieu Duponchelle
2f020013e6 docs: explicitly declare gir build dependencies
As the path to the gir file is passed to hotdoc.generate_doc() and
not the build target itself, meson doesn't know about the dependency.

In turn, as the CI doesn't build everything before building the
documentation target, some gir files might not exist, for instance
in the case of gst-rtsp-server, causing the output documentation to
be empty.

The error occurred silently because hotdoc accepts wildcards for
*-sources arguments, thus it won't warn about a missing gir file as
it is legitimate for glob matching to resolve to nothing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3686>
2023-01-06 22:50:57 +00:00
Philippe Normand
8ec82f9363 event: Fix gst_event_parse_stream_collection annotation
The output parameter ownership is passed to the caller.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3659>
2022-12-29 18:16:31 +00:00
Philippe Normand
3f3bd70687 tests: gstelement: Fix test_add_pad_while_paused flakiness
`gst_element_remove_pad()` doesn't automatically deactivate the pad, it has to
be done explicitly beforehand, otherwise the pad task might be left dangling,
exposed to undefined behaviour.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3653>
2022-12-28 17:42:31 +00:00
Alicia Boya García
15caeb4ac9 gstelement: fix deadlock in gst_element_add_pad() when >=PAUSED
gst_element_add_pad() is supposed to activate the pad if the element
state is >= PAUSED and the pad is not already active.

Unfortunately, before this patch, the activation was performed while the
element lock was still taken, which ended causing a deadlock in
gst_pad_start_task() as it attempted to post `stream-status` message in
the element, which also requires the element lock.

Elements could work around this bug by activating the pad manually
before adding it to the element.

This patch fixes the problem by performing pad activation only after the
element lock has been released.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3635>
2022-12-27 20:31:10 +00:00
Mart Raudsepp
3fa4ff0562 multiqueue: Fix potential deadlock with parallel release_pad calls
Commit d3a66f9851 introduced a potential deadlock with two parallel release_pad
calls, where one could release the main multiqueue lock (qlock) while still
holding the reconf_lock and then calling other routines which in some conditions
may try to acquire qlock again. The second release_pad could already acquire the
qlock and then start waiting on reconf_lock, which may never be possible because
because the first one isn't releasing it until it can acquire qlock.

Fix it by holding reconf_lock for the whole durationg of qlock, making this
particular deadlock impossible.

Fixes #1642

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3571>
2022-12-23 13:08:54 +00:00
Hiero32
7050b00c10 fdsrc,fdsink: Set binary mode on FD
Default mode of STD handles on Windows is text mode, and OS will
insert CRLF sequence by default.

Co-authored-by: Seungha Yang <seungha@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3070>
2022-12-21 06:34:15 +00:00
Hiero32
a29a1b21c3 coreelements: Use G_OS_WIN32 macro
* HAVE_WIN32 is not defined elsewhere
* Enables fdsrc/fdsink for MinGW build as well

Co-authored-by: Seungha Yang <seungha@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3070>
2022-12-21 06:34:15 +00:00
Xavier Claessens
cd78cbac86 Fix API visibility macros
This copies the logic from GLib discussed there:
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2936

Beside being simpler, it also fix all public symbols being annotated
with dllexport when doing a static build, as discovered there:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3540#note_1678335

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3567>
2022-12-20 14:03:35 +00:00
Mathieu Duponchelle
f8b732563b basesrc: respect FIXED_CAPS flag in caps query implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3590>
2022-12-17 12:04:49 +00:00
Hosang Lee
04dc8e2484 gst: handle combinations in gst_stream_type_get_name()
This should handle the majority of the valid stream cases.
The element setting the stream type may set each type separately.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2804>
2022-12-14 15:22:08 +00:00
Piotr Brzeziński
3bb8700577 macos: Add wrapper API to run a NSApplication in the main thread
On macOS, a Cocoa event loop is needed in the main thread to ensure
things like opening a GL window work correctly. In the past, this was
patched into glib via Cerbero, but that prevented us from updating it.
This workaround simply runs an NSApplication and then calls the
main function on a secondary thread, allowing GStreamer to correctly
display windows and/or system permission prompts, for example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3532>
2022-12-13 17:50:32 +00:00
Sebastian Dröge
9ca6b1196e systemclock: Use futex_time64 syscall if available (32-bit systems) and use correct struct timespec definition
See also https://gitlab.gnome.org/GNOME/glib/-/issues/2634

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1648

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3561>
2022-12-13 13:11:56 +00:00
sezanzeb
6687e7ed17 gst_init: Removed wrong warning in docstring
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3562>
2022-12-12 22:34:08 +00:00
Hugo Svirak
4aeb3def20 docs: specify possibility of a NULL return
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3546>
2022-12-11 00:05:04 +00:00
Tim-Philipp Müller
8110ea6b1b multiqueue: update for renamed log id macros
See #1635.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3553>
2022-12-10 12:40:13 +00:00
Tim-Philipp Müller
b74452cbc6 info: rename new log macros from GST_*_OBJECT_ID -> GST_*_ID
Fixes #1635

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3553>
2022-12-10 12:40:13 +00:00
Jan Schmidt
0791a73a04 gstplugin: Handle static plugins in gst_plugin_load_by_name()
gst_plugin_load_by_name() assumed a plugin has a filename,
which isn't true for static plugins, leading to criticals.

If a plugin is already loaded, just return the loaded plugin,
which makes it work for static plugins as well as saving a
moment for already-loaded dynamic plugins.

Add locking in gst_plugin_is_loaded(), as a plugin may be
still being loaded in another thread.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3552>
2022-12-10 11:01:35 +00:00
Tim-Philipp Müller
a2c7398a1c meson: fix check for pthread_setname_np()
Need to define _GNU_SOURCE.

Fixes #1542

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3538>
2022-12-07 11:53:50 +00:00
Edward Hervey
df311a65da gstinfo: Minor modification to avoid gst-indent pain
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3483>
2022-12-05 09:59:30 +00:00
Edward Hervey
f84fe4710a multiqueue: Use new id-based debugging methods
Clarifies the debug logs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3483>
2022-12-05 09:59:30 +00:00
Edward Hervey
a289c61c11 gstinfo: Allow passing a string identifier for debugging
This adds "id" variants to most debugging functions, and allows providing a
string identifier instead of a GObject.

This allows providing unified and clearer debug logs for all the
non-gobject-based items, and opens the way for more unified logging.

As an extension, copying the object name is avoided as much as possible, by
using it directly instead of going through another copy.

* API : gst_debug_message_get_object_id

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3483>
2022-12-05 09:59:30 +00:00
Tim-Philipp Müller
1f65d7cc5c Back to development 2022-12-05 02:29:08 +00:00
Tim-Philipp Müller
fd6a3948c6 Release 1.21.3 2022-12-05 01:28:21 +00:00
Tim-Philipp Müller
84e74ceb10 Remove ChangeLog files from git repository
This information is tracked fully in the git repository, so
no point having the ChangeLog duplicate it, and it interferes
with grepping the repository.

We are going to create the ChangeLogs on the fly when generating
tarballs going forward (with a limited history), since it's still
valuable for tarball consumers to be able to easily see a list of
recent changes.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-project/-/issues/73

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3521>
2022-12-04 18:16:25 +00:00
Tim-Philipp Müller
9eb081ea0a meson: Generate ChangeLog files for release tarballs on dist
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3521>
2022-12-04 18:16:25 +00:00
Edward Hervey
90d4129301 multiqueue: Handle gapless with flushing
Don't reset the stream-start group-id when stop/pausing single queues. They are
only resetted when re-used (in READY->PAUSED).

Fixes #1586

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3487>
2022-12-02 09:22:41 +00:00
Edward Hervey
9f9e625776 gstinfo: Optimize color escape code creation
When coloring is in use, those escape codes are going to be created many times
for almost all debug lines.

Don't create plenty of temporary allocations, and instead build the escape code
ourselves statically

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3498>
2022-12-02 06:02:48 +00:00
Edward Hervey
0841e846a3 gst-inspect: Don't leak list
Just iterate the list instead of trying to be smart...

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3497>
2022-12-01 06:42:22 +00:00
Vivia Nikolaidou
c6af0a39e7 inputselector: Add drop-backwards property
When sync-streams=true, drop backwards buffers on pad switch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3256>
2022-11-22 21:21:40 +02:00
Vivia Nikolaidou
5fb71dd55b inputselector: Fix waiting on sync-mode=clock
Basically copy over what clocksync does, but taking into account that we
have multiple upstream latencies.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3256>
2022-11-22 21:21:40 +02:00
Jan Schmidt
2a32861ab3 event: Add transfer none annotation to gst_event_new_stream_collection()
Update the documentation

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3387>
2022-11-21 10:32:02 +00:00
Jan Schmidt
bdaa8f83aa pad: Fix sticky event ordering for instant-rate-change
The event type for instant-rate-change events was poorly chosen,
leading to them being re-sent too late and even after EOS.

Add a mechanism in GstPad for the sticky event order to be
different to the value of the event type to fix that up.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3387>
2022-11-21 10:32:02 +00:00
Célestin Marot
9d829b85e4 fakesrc: avoid time overflow with datarate
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3433>
2022-11-19 11:13:33 +00:00
Colin Kinloch
7840db5384 gst: serialization of GLibDateTime
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2980>
2022-11-18 21:11:07 +00:00
Mathieu Duponchelle
b5cd758230 aggregator: Implement force_live API
Setting force_live lets aggregator behave as if it had at least one of
its sinks connected to a live source, which should let us get rid of the
fake live test source hack that is probably present in dozens of
applications by now.

+ Expose API for subclasses to set and get force_live
+ Expose force-live properties in GstVideoAggregator and GstAudioAggregator
+ Adds a simple test

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3008>
2022-11-18 18:14:26 +00:00
Jan Schmidt
d3a66f9851 multiqueue: Protect reconfiguration with a lock
Add a lock to prevent overlapping of request and release
pads, to close a race where multiqueue might try and
add a slot with an id that hasn't quite finished being
removed yet by another thread.

Fix for https://gitlab.freedesktop.org/bilboed/gstreamer/-/issues/5
and https://gitlab.freedesktop.org/bilboed/gstreamer/-/issues/11

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2784>
2022-11-16 14:01:46 +00:00
Edward Hervey
4b8f411c5d multiqueue: Handle gapless input
When dealing with gapless input (i.e. streams with changing group-id in
GST_EVENT_STREAM_START), we need to take into account the elapsed
running-time (if applicable) in order to properly calculate levels and output
time. Without doing this all incoming data from future groups would be
considered as being "late" and would be consumed immediately.

This does **NOT** modify the actual segment and buffer times, and is only used
internally.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2784>
2022-11-16 14:01:46 +00:00
Edward Hervey
64c81b6972 urisourcebin: Remove pending pad handling
This was needed to support the legacy handling of changing streams (add new
pads, send EOS and remove old pads).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2784>
2022-11-16 14:01:46 +00:00
Sebastian Dröge
72c5105312 typefindhelper: Fix docs/annotations for the new functions
Follow-up for https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3296

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3418>
2022-11-16 04:07:09 +00:00
Thibault Saunier
9dc787755d inspect: Print default value of ValueArray properties
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3377>
2022-11-15 17:20:56 +00:00
Sanchayan Maity
30841dae99 typefindhelper: Use the new GstTypeFind * API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3296>
2022-11-15 14:05:40 +00:00
Sanchayan Maity
89da632219 typefindhelper: Introduce a new API for working with a GstTypeFind *
Introduce a new API that can return a GstTypeFind * with helper functions
and data set around buffer data.

While at it, drop factory field from GstTypeFindBufHelper. While it was
useful for logging, it was not passed through function arguments and keeping
it for logging would require an additional API increasing the API surface
and making it harder to use.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3296>
2022-11-15 14:05:40 +00:00
Sanchayan Maity
036b77b519 typefindhelper: Add helpers to improve type finding given the caps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3296>
2022-11-15 14:05:40 +00:00
Sanchayan Maity
58f7d88585 typefindhelper: Update annotation for function parameters
Fix the nullable/optional situation. allow-none is deprecated and
replaced by either or both of the others.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3296>
2022-11-15 14:05:40 +00:00
Edward Hervey
ba0c95312e streams: Reset stream id field on finalize
If debugging is activated, the parent class finalize might attempt to read it

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3390>
2022-11-12 10:33:50 +01:00
Edward Hervey
e3637e3207 childproxy: Fix documentation
Warning: Gst: gst_child_proxy_get_child_by_name_recurse: unknown parameter
'parent' in documentation comment, should be 'child_proxy'

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3370>
2022-11-09 16:03:58 +00:00
Sebastian Dröge
82f09d64d7 allocator: Switch allow-none annotations to nullable / optional
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3364>
2022-11-08 17:45:37 +02:00
Sebastian Dröge
aadebd6921 allocator: Copy allocator name in gst_allocator_register()
The parameter is not marked as `transfer full` and stays around in the
hash table, so we will have to copy it ourselves.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3364>
2022-11-08 17:44:54 +02:00
Guillaume Desmottes
c624900a44 tracers: latency: document the 'reported' flag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3359>
2022-11-08 10:10:09 +00:00
Tim-Philipp Müller
db450689db Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3358>
2022-11-08 02:08:08 +00:00
Tim-Philipp Müller
3e29ac35c4 Release 1.21.2 2022-11-07 23:54:03 +00:00
Tim-Philipp Müller
98d2f958a9 Update ChangeLogs for 1.21.2 2022-11-07 23:53:57 +00:00
Xavier Claessens
e8eddf46ea hotdoc: gst-hotdoc-plugins-scanner is not needed for libraries
Meson >= 0.64.0 does not allow any more to add executables into
hotdoc.generate_doc(..., dependencies: ...) and it should not be needed
any way.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3352>
2022-11-07 23:06:32 +00:00
Jan Alexander Steffens (heftig)
a51d492445 tests: gstinfo: Test set_threshold_from_string's new reset behavior
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/605>
2022-11-07 14:49:45 +00:00
Jan Alexander Steffens (heftig)
38a2453f23 tests: gstinfo: Make logging tests pass when GST_DEBUG is set
Use gst_debug_set_threshold_from_string's new reset behavior to undo
GST_DEBUG and ensure the logging tests have a known configuration.

`gst_debug_set_threshold_from_string ("LOG", TRUE)` has the same effect
as `gst_debug_set_threshold_from_string ("", TRUE)` followed by
`gst_debug_set_default_threshold (GST_LEVEL_LOG)`.

Don't bother remembering the default log level set when the test
started. It will get reset by the next test, anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/605>
2022-11-07 14:49:44 +00:00
Jan Alexander Steffens (heftig)
58013b4b21 info: Reset patterns with set_threshold_from_string
TLDR: Make `gst_set_threshold_from_string ("", TRUE)` reset *all*
threshold settings, including those set by previous invocations of
`gst_debug_set_threshold_from_string`.

The docs say:

    @reset: %TRUE to clear all previously-set debug levels before setting
        new thresholds

What actually happens is it sets the default threshold to `ERROR`,
leaves the patterns in place and calls
`gst_debug_category_reset_threshold` on each category.

In effect, any category that is matched by a pattern gets reset to that
threshold if the app changed it by directly invoking
`gst_debug_category_set_threshold`. All other categories are reset to
`ERROR`.

In my opinion this parameter currently has little value, as the same
effect can be achieved by including `ERROR` (without a pattern) in the
string, as in `"foo*:WARNING,*bar:INFO,ERROR"`.

What I actually expect it to do is reset *all* threshold settings,
including those set by previous invocations of
`gst_debug_set_threshold_from_string`, starting off with a clean slate
for the patterns provided with the call.

Otherwise there is no API to do this, besides:

  - Painfully removing patterns one-by-one via
    `gst_debug_unset_threshold_for_name` *if* you know what the patterns
    are.
  - Adding a `*:FOO` pattern to affect all categories, which makes the
    default threshold useless and practically leaks all the old
    patterns.

In my opinion this also makes it fit better into the layers of threshold
config, which is:

1. Temporary:
  - `gst_debug_category_set_threshold`
  - `gst_debug_category_reset_threshold`
2. Patterns:
  - `gst_debug_set_threshold_for_name`
  - `gst_debug_unset_threshold_for_name`
  - `gst_debug_set_threshold_from_string`
  - `GST_DEBUG`
3. Default:
  - `gst_debug_set_default_threshold`

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/605>
2022-11-07 14:49:44 +00:00
Edward Hervey
605cb6a4d4 gstpad: Avoid race in (un)setting EOS flag on sinkpads
The scenario is the following:

* Thread 1 is pushing an EOS event on a sinkpad
* Thread 2 is pushing a STREAM_START event on the same sinkpad before Thread 1
returns. Note : It starts pushing the event after Thread 1 took the object lock.

There is a potential race between:

* The moment Thread 1 sets the EOS flag once it has finished sending the
event (via store_sticky_event). When it does that it has both the STREAM and
OBJECT lock

* The moment Thread 2 sends the STREAM_START event (Which should release that
EOS status), but removing the EOS flag is only done while holding the OBJECT
lock and not the STREAM_LOCK, which means it could be re-set by Thread 1 before
it then checks again the EOS flag (without the STREAM lock taken).

The EOS flag unsetting by STREAM_START should be done with the STREAM lock
taken, otherwise it will be racy.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1452

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3320>
2022-11-07 06:28:39 +01:00
Tim-Philipp Müller
62f8d292a1 gst-inspect: print doc urls for Rust plugins
We have documentation for them now after all.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3346>
2022-11-06 18:10:44 +00:00
Tim-Philipp Müller
04581fad6a identity: fix "handoff" signal docs
The docs list an extra pad argument, which doesn't
match the actual signal function signature. Probably
a copy'n'paste mistake when copying things from fakesink.

Fixes #1546

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3337>
2022-11-05 11:58:34 +00:00
Edward Hervey
730ed3a69a gstpad: Fix non-serialized sticky event push
With non-serialized sticky events, such as GST_EVENT_INSTANT_RATE, we both want
to store the event (for later re-linking) *AND* push the event in a non-blocking
way.

We therefore must *not* propagate pending sticky events if the event is "sticky
or serialized" but only if it's "serialized"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3254>
2022-11-04 14:20:36 +00:00
Michael Gruner
2cdfa8f419 parse: do delayed set only if the target child was not found and fail otherwise
When using the child proxy notation (child::property=value) it may
happen that the target child does not exist at the time of parsing
(i.e: decodebin creates the encoder according to the contents of the
stream). On this cases, we want to delay the setting of the property
to later, when new elements are added. Previous logic performed a
delayed set even if the target child was found but the property
was not found in it. This should be treated as a failure because,
unlike missing elements, properties should not appear dynamically.
By not failing, typos in property names may go unnoticed to the end
user.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2908>
2022-11-02 13:21:09 +00:00
Michael Gruner
ded2fed3b9 childproxy: Implement a new ::get_child_by_name_recurse() API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2908>
2022-11-02 13:21:09 +00:00
Sebastian Dröge
c878d0f68b core/base: Only post latency messages if the latency values have actually changed
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1525

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3282>
2022-10-27 15:25:22 +00:00
Edward Hervey
cb1345ab77 concat: Properly propagate EOS seqnum
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3284>
2022-10-27 11:20:01 +02:00
Sebastian Dröge
366893e9ac Fix various warnings from gobject-introspection
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3261>
2022-10-25 09:45:25 +03:00
Seungha Yang
e25a6f4794 gst-inspect: Hide GST_PARAM_DOC_SHOW_DEFAULT flag
It's known flag but only for documentation purpose. Don't show
its (and user cannot understand) value 0x2000

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3241>
2022-10-24 17:14:48 +00:00
Sebastian Dröge
fee144bca5 net: Add missing nullable annotation on the name parameter in the net/NTP clock constructors
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3249>
2022-10-22 15:59:16 +00:00
Seungha Yang
249790fa59 padtemplate: Fix annotations
gst_caps_replace() does not take ownership of the new caps

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3248>
2022-10-22 22:06:13 +09:00
Seungha Yang
7bc5ed34fd gst-inspect: Don't print link to doc if it's known to be unavailable
"gst_element_factory_get_skip_documentation() == true" means
documentation was intentionally skipped for the element feature

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3243>
2022-10-22 05:36:38 +09:00
François Laignel
a5f3ccc037 gst: uri query: fix inconsistent uri nullability assertion
Functions `gst_query_set_uri` and `gst_query_set_uri_redirection`
can both set a `NULL` `uri`, as annotated in the documentation.
However the functions bodies reject `NULL` `uri`s.

See [1] for a discussion on that matter.

[1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1134#note_1600988

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3237>
2022-10-21 15:05:48 +00:00
Thibault Saunier
dbed9978ac docs: plugins-scanner: Handle interface used for plugin API properties
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3236>
2022-10-21 09:14:25 +00:00
Seungha Yang
09fc6f14f3 docs: plugin-scanner: Stop updating "long-name" metadata
The "long-name" value can be environment dependent, and it's not
actually used by our documentation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3208>
2022-10-20 10:38:19 +00:00
Seungha Yang
fcde6af7df parse: Adjust debug log level
That's not an error case at all

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3228>
2022-10-19 18:43:53 +00:00
Sebastian Dröge
c7080b1626 {element,deviceprovider}factory: g_object_new() can't ever return NULL
So treat it as the assertion it is.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3226>
2022-10-19 12:09:45 +00:00
Sebastian Dröge
4f03dbd37c elementfactory: Handle element factory loading failure in gst_element_factory_create_valist() not as assertion
In gst_element_factory_create_with_properties() it is a normal error
path so let's keep this consistent.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3226>
2022-10-19 12:09:45 +00:00
Sebastian Dröge
3ceee904dc gst: Use G_TYPE_INVALID instead of 0 for GTypes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3226>
2022-10-19 12:09:45 +00:00
Mathieu Duponchelle
f0598767f0 tests: parse-launch: remove assignment order tests
These tests relied on setting the name of an element twice to verify
that the last one set took precedence, however name is a CONSTRUCT property
and the parser now errors out when such properties are set twice, in
g_object_new_with_properties .

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3026>
2022-10-19 11:21:04 +00:00
Mathieu Duponchelle
c2f890aba7 parse: refactor to make use of gst_element_factory_make_with_properties
Instead of creating the element first, then setting properties and
presets, we gather those and construct the element with the properties.

This means users of gst_parse_launch can now set construct-only
properties.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1380

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3026>
2022-10-19 11:21:04 +00:00
Bunio_FH
095bca9bdb gstminiobject: shares capacity increase
during the MSE (WebKit) tests from Apple suite:
https://hls-streaming.cdn-apple.com/hls_conformance/dist/v1.1/index.html?pretty=true&whitelist=MSE%20Suite
webkit attempts to add a single audio buffer containing ~35.5k frames.
when corresponding GstSamples are pulled buffer is being referenced
more than object capacity allows: 2^15-1. since the case could be considered
malformed a surgical patch is applied to increase the capacity.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3221>
2022-10-19 10:16:05 +00:00
Sebastian Dröge
749423bb7f core: Add/fix various annotations
And fix memory leaks/null pointer dereferences in GstUri in error cases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 13:51:16 +03:00
Sebastian Dröge
0a513e9168 check: Add/fix various annotations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 08:56:58 +00:00
Sebastian Dröge
3e7f684609 net: Add/fix various annotations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 08:56:58 +00:00
Sebastian Dröge
07f8c012c7 base: Add/fix annotations in GstQueueArray
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 08:56:58 +00:00
Sebastian Dröge
2ede719b4b controller: Add/fix various annotations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3194>
2022-10-18 08:56:58 +00:00
Guillaume Desmottes
2df2dfce55 aggregator: fix input buffering
We need to be able to buffer at least the aggregator latency +
upstream latency, which is the value used to compute the aggregator
deadline.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3138>
2022-10-07 16:27:51 +02:00
Jan Schmidt
92efecd1fe gstbin: Use g_queue_clear_full()
Use g_queue_clear_full() to release the child list
instead of iterating over the list twice.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3101>
2022-10-04 11:19:14 +00:00
Jan Schmidt
8f91f1efe4 gstbin: Fix a potential leak in gst_bin_do_deep_add_remove()
If a child element of a bin is unparented while
gst_bin_do_deep_add_remove() is iterating the children,
don't leak a ref to it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3101>
2022-10-04 11:19:14 +00:00
Jan Schmidt
b7b4d93452 gstiterator: Don't use gst_object_unref() for a GObject
The owner of a GstIterator is a plain GObject. Don't unref it
with gst_object_unref(), or it will be logged in tracer
info incorrectly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3101>
2022-10-04 11:19:14 +00:00
Tim-Philipp Müller
99bbb1ef35 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3115>
2022-10-04 03:57:31 +01:00
Tim-Philipp Müller
9820e58be6 Release 1.21.1 2022-10-04 01:18:20 +01:00
Tim-Philipp Müller
c376d80e9b Update ChangeLogs for 1.21.1 2022-10-04 01:13:59 +01:00
Edward Hervey
f08bdf1c4a queue2: Hold the lock when modifying sinkresult
As it's done elsewhere. Avoids a potential race of the field being modified in
the meantime.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3110>
2022-10-03 15:18:09 +00:00
Philipp Zabel
3b900e1fa4 buffer: drop parent meta in deep copy/foreach_metadata
The purpose of a deep buffer copy is to be able to release the source
buffer and all its dependencies. Attaching the parent buffer meta to
the newly created deep copy needlessly keeps holding a reference to the
parent buffer.

The issue this solves is the fact you need to allocate more
buffers, as you have free buffers being held for no reason. In the good
cases it will use more memory, in the bad case it will stall your
pipeline (since codecs often need a minimum number of buffers to
actually work).

Fixes #283

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2928>
2022-09-28 12:34:44 -06:00
Sebastian Dröge
498ad133ba gsturi: When setting the same string again do nothing
Otherwise code like gst_uri_set_host(uri, gst_uri_get_host(uri)) would
first free the string, then create a copy of the freed string and then
assigned that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3076>
2022-09-26 14:17:18 +03:00
Edward Hervey
b2701418d7 basetransform: Avoid useless codepath
If QoS is disabled, skip the whole computation (avoids calculating values which
won't be needed)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3034>
2022-09-22 13:45:50 +00:00
Nirbheek Chauhan
a0e6278dba meson: Use implicit builtin dirs in pkgconfig generation
Starting with Meson 0.62, meson automatically populates the variables
list in the pkgconfig file if you reference builtin directories in the
pkgconfig file (whether via a custom pkgconfig variable or elsewhere).
We need this, because ${prefix}/libexec is a hard-coded value which is
incorrect on, for example, Debian.

Bump requirement to 0.62, and remove version compares that retained
support for older Meson versions.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1245

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3061>
2022-09-21 21:08:11 +05:30
Xavier Claessens
5f0493d33a meson: Set install_tag on some targets
Trying to follow recommendation from Meson documentation:
https://mesonbuild.com/Installing.html#installation-tags

Move tools into 'bin' or 'bin-devel' categories to keep only libs and
plugins in the default 'runtime' category. This simplifies distribution
of GStreamer application skipping parts that are not needed, similarly
to what Cerbero does by hardcoding huge list of files.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3017>
2022-09-20 10:08:15 +00:00
Paweł Stawicki
ccef26908e queue2: Fix deadlock when deactivate is called in pull mode
check is flush was called before waiting on condition

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2967>
2022-09-20 09:23:22 +00:00
Edward Hervey
7a5846d69d baseparse: If available, return average bitrate upstream
Helps improve queue2 buffering for single stream playback (ex: FLAC or mp3)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3033>
2022-09-16 16:12:03 +00:00
Thibault Saunier
339e5916c6 Build documentation for rust plugins
- Update the docker image we use, starting using the standard one adding
  `gtk4-doc` as required by rust plugins
- Update the plugins_doc_caches as required, some more plugins are built
  with the new image
- Install ninja from pip as the version from F31 is too old
- Avoid buildings all GSreamer plugins when building the doc as it takes
  time and resources for no good reason
- Stop linking to `GInstanceInitFunc` as it is not present in latest GLib
  documentation, leading to warnings in hotdoc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2954>
2022-09-15 20:11:47 +00:00
Thibault Saunier
c8a9736244 docs: plugin-scanner: Minor debug enhancement
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2954>
2022-09-15 20:11:46 +00:00
Jordan Petridis
d75a69ec95 gstinfo: remove the vasprintf fallback
We are always building our printf implementation, even when
GST_DEBUG is disabled, since we are exposing api (gst_print*)
that's dependant on our printf behavior.

We don't need to keep __gst_info_fallback_vasprintf around anymore.

Close #640

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/739>
2022-09-13 19:53:40 +00:00
Zebediah Figura
c4681ac428 meson: Build with -Wl,-z,nodelete to prevent unloading of dynamic libraries and plugins
GLib made the unfortunate decision to prevent libgobject from ever being
unloaded, which means that now any library which registers a static type
can't ever be unloaded either (and any library that depends on those,
ad nauseam).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/778>
2022-09-13 15:48:52 +00:00
Doug Nazar
79020fa355 registry: skip integration testsuite directory during plugin scan
When using an uninstalled development environment and running the
validation tests, the number of log files can grow substantially,
slowing down startup.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/799>
2022-09-12 18:52:51 +01:00
Xavier Claessens
a9ae28d10b doc: Clarify that gst_buffer_pool_acquire_buffer() blocks by default
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2955>
2022-09-11 19:29:19 +00:00
Thibault Saunier
6a4425e46a meson: Call pkgconfig.generate in the loop where we declare plugins dependencies
Removing some copy pasted code

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2970>
2022-09-01 21:17:35 +00:00
Thibault Saunier
bc9c1e3956 meson: Namespace the plugins_doc_dep/libraries variables
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2970>
2022-09-01 21:17:35 +00:00
Thibault Saunier
b5e90fe579 meson: Rename plugins list and make them "dependency" objects
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2970>
2022-09-01 21:17:35 +00:00
Martin Dørum
5745791345 gstpluginloader: Don't hang on short reads/writes
If read_one or write_one was called but the stream closed before it could
read/write a whole packet, read_one/write_one would hang indefinitely,
consuming 100% CPU. This commit fixes that by treating a short read/write
as an error.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2964>
2022-08-31 16:54:24 +00:00
Xavier Claessens
165fbec0a3 gst_init: Initialize static plugins just before dynamic plugins
All plugins needs to be initialized after `gst_initialized = TRUE;`
otherwise they could complain that gst_init() has not been called.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2962>
2022-08-31 14:20:58 +00:00
Stéphane Cerveau
6b1ffadb0c docs: disable in static build
Following gst-plugins-base, disable docs if static_build
in:
 - gstreamer
 - gst-plugins-good
 - gst-plugins-ugly
 - gst-libav
 - gstreamer-vaapi

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2529>
2022-08-30 14:46:28 +00:00
Olivier Crête
8e3e6ddba3 value: Use g_critical() when trying to serialize things that can't be
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2823>
2022-08-25 22:27:51 +00:00
Olivier Crête
927334ef43 gstvalue: Don't loop forever when serializing invalid flag
The serialization code would loop forever if an invalid flag was sent into it.

With unit test for this corner case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2823>
2022-08-25 22:27:51 +00:00
Sebastian Dröge
404b646b6e bin: Don't propagate state change errors of elements in locked state
Theoretically having elements in locked state should not have any effect
at all when the surrounding bin is doing state changes. However
previously a state change error of a locked element would cause the
bin's state change to also fail, which is clearly not intended.

State change failures of locked elements are to be handled by whoever
set the element to locked state. By always returning them here it is
impossible for the owner of the element to handle state change failures
gracefully without potentially affecting the whole pipeline's state
changes.

Non-failure returns are still returned as-is as the distinction between
ASYNC/NO_PREROLL/SUCCESS has big consequences on the state changes of
the bin and overall pipeline. Theoretically SUCCESS should also be
returned in all cases but I can't estimate the effects this would have
on the overall pipeline.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2932>
2022-08-25 15:33:07 +00:00
Sebastian Dröge
d9bd870db4 aggregator: Improve debug output to better understand why pads are not ready or can't accept more data
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2907>
2022-08-17 19:06:35 +00:00
Nirbheek Chauhan
a14df98ff4 meta: Set the parent refcount of the GstStructure correctly
The parent refcount is of the *transformed* buffer, not the input
buffer.

Also update the docs to clarify that @transbuf is the transformed
buffer, and not the buffer on which a transformation is being
performed.

Due to this bug, modifying the structure of a meta that has been
copied to another buffer fails with:

gst_structure_set: assertion 'IS_MUTABLE (structure) || field == NULL' failed

Add a test for the same.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2890>
2022-08-15 19:58:26 +00:00
Sebastian Dröge
0f0441564d gst: Protect initialization state with a recursive mutex.
Otherwise a gst_init() call from a plugin would deadlock if the plugin
is loaded as part of registry updating.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/940

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2740>
2022-08-10 11:31:50 +00:00
Sebastian Dröge
cc2cc03717 registry: Remove dead code
Initialization/updating of the registry can't possible fail and all code
paths always returned TRUE.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2740>
2022-08-10 11:31:50 +00:00
Sebastian Dröge
8409798f17 gst: Don't fail gst_init() if updating the registry fails
Everything is already marked as initialized at that point and by failing
no tracers would be loaded or plugin feature rank overrides would be
applied.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2740>
2022-08-10 11:31:50 +00:00
Tim-Philipp Müller
27d18f35e5 tracers: leaks: delay type name lookup
Micro optimisation: Store the quark of the type name when tracking
objects and only do the quark to string conversion (hashtable lookup)
later when we actually need the string.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2832>
2022-08-04 11:55:53 +01:00
Corentin Damman
75bdd2b7eb tracers: leaks: fix potentially invalid memory access when trying to detect object type
The is_gst_mini_object_check would sometimes detect a proper GObject
as a mini object, and then bad things happen.

We know whether a pointer is a proper GObject or a MiniObject here
though, so just pass that information to the right code paths and
avoid the heuristics altogether.

Eliminates all remaining uses of object_is_gst_mini_object().

Fixes #1334

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2832>
2022-08-04 11:55:15 +01:00
Tim-Philipp Müller
5a055ae70a tracers: leaks: fix potentially invalid memory access when trying to detect object type
The is_gst_mini_object_check would sometimes detect a proper GObject
as a mini object, and then bad things happen.

We know whether a pointer is a proper GObject or a MiniObject here
though, so just pass that information to the right code paths and
avoid the heuristics altogether.

There are probably more cases where the check should be eliminated.

Fixes #1334, maybe

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2832>
2022-08-04 11:54:33 +01:00
Rafael Sobral
e9a642feb8 aggregator: fix reversed active/flushing arguments in debug log output
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2813>
2022-08-01 23:03:59 +01:00
Philippe Normand
53800b308b GST_CHECK_VERSION: Fix unexpected "git = next version" assumption
1.21.0.1 should not satisfy a check for 1.22.0.

If someone needs more control they should do a feature check for
the symbol in the headers or lib.

Based on a similar patch by Tim-Philipp Müller for libnice.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2501>
2022-07-28 08:52:13 +00:00
Seungha Yang
43052fabb5 gststructure: Add gst_structure_get_flags method
We don't prevent setting G_TYPE_FLAGS on GstStructure
but no helper method for getting the value.
Add a method similar to gst_structure_get_enum()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2770>
2022-07-19 20:54:31 +09:00
Sebastian Dröge
205034dea9 aggregator: Reset EOS flag after receiving a stream-start event
And also don't assert that there are no buffers queued up when handling
an EOS event. The pad's streaming thread might've already received a new
stream-start event and queued up a buffer in the meantime.

This still leaves a race condition where the srcpad task sees all pads
in EOS state and finishes the stream, while shortly afterwards a pad
might receive a stream-start event again, but this doesn't seem to be
solveable with the current aggregator design.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2769>
2022-07-18 15:46:21 +03:00
Corentin Damman
f95ca93d25 tracers: leaks: fix object-refings.class flags
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2749>
2022-07-12 12:29:38 +00:00
Sebastian Dröge
47ac79d7b8 devicemonitor: Use a sync bus handler for the provider to avoid accumulating all messages until the provider is stopped
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/981

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2741>
2022-07-12 11:57:02 +00:00
Jan Alexander Steffens (heftig)
dfea5070df gstinfo: Parse "NONE" as a valid level name
This allows using `NONE` in `GST_DEBUG`,
`gst_debug_set_threshold_from_string`, etc. It was accessible before,
but only via the integer `0`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2734>
2022-07-08 17:07:36 +00:00
Sebastian Dröge
de30de865c tracing: add hooks for gst_pad_chain() / gst_pad_chain_list()
This allows tracing buffers when they arrive in a pad instead of just
when they are pushed out of a pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2682>
2022-06-29 21:05:14 +00:00
Tim-Philipp Müller
9272943bc7 coding style: allow declarations after statement
See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1243/
and https://gitlab.freedesktop.org/gstreamer/gstreamer-project/-/issues/78

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2683>
2022-06-29 13:40:25 +00:00
Jonas Danielsson
4068564880 gst: add missing define guard
If compiled with -Dgstreamer:gst_debug=false and we have
GST_REMOVE_DISABLED defined we will get the following compiler error:

```
[...]/libgstreamer-1.0.so.0.2100.0.p/gst.c.o: in function `gst_deinit':
[...]/gst/gst.c:1258: undefined reference to `_priv_gst_debug_cleanup'
[...] hidden symbol `_priv_gst_debug_cleanup' isn't defined
```

Add the missing define guard to avoid this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2648>
2022-06-22 09:43:02 +02:00
Sebastian Dröge
e1e2d8d58c bin: Fix race conditions in tests
The latency messages are non-deterministic and can arrive before/after
async-done or during state-changes as they are posted by e.g. sinks from
their streaming thread but bins are finishing asynchronous state changes
from a secondary helper thread.

To solve this, expect latency messages at any time and assert that we
receive one at some point during the test.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2643>
2022-06-21 17:27:28 +00:00
Sebastian Dröge
a3cbaa8209 element: Fix requesting of pads with string templates
Previously it was only possible to request them with the exact template
name, e.g. 'src_%s', but not with "instantiated" names that would match
this template, e.g.'src_foo_bar'.

This is now possible and a test was added for this, in addition to
fixing a previously invalid test.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2635>
2022-06-21 06:00:15 +00:00
Xavier Claessens
5fc953e838 Add GstMemoryMapInfo to be used with g_auto()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2412>
2022-06-20 16:17:50 +00:00
Xavier Claessens
8bf778bb1f Add GstBufferMapInfo to be used with g_auto()
We need a separate typedef for this feature because GstMapInfo itself
can be initialized by gst_memory_map() in which case info.memory should
not be unreffed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2412>
2022-06-20 16:17:50 +00:00
Philippe Normand
190f15660f gst-inspect: Fix inspection of third-party plugins
Since commit de57657de1 inspecting a third-party
plugin would trigger a segfault (Address boundary error) due to the missing
sentinel in the list of GStreamer modules.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2636>
2022-06-20 15:29:21 +01:00
Tim-Philipp Müller
cdf5ee470b docs: ensure coretracers plugin index page is index.html
And not blank.html

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2592>
2022-06-15 21:05:28 +00:00
Tim-Philipp Müller
de57657de1 gst-inspect: print link to documentation for gstreamer elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2592>
2022-06-15 21:05:28 +00:00
Adam Doupe
e77ed17f15 queuearray: Fix potential heap overflow when expanding GstQueueArray
Check that elt_size*newsize doesn't overflow when expanding a
GstQueueArray, which has the potential for a heap overwrite.

Co-authored-by: Sebastian Dröge <sebastian@centricular.com>

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1232

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2606>
2022-06-15 15:42:40 +00:00
Víctor Manuel Jáquez Leal
428b66cfae docs: harness: Fix example
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2602>
2022-06-15 13:22:20 +02:00
Tim-Philipp Müller
e72434ba20 multiqueue: fix potential crash on shutdown
The mq we get out of the weak ref might be NULL if we're
shutting down, which could cause assertion failures or
crashes.

It might also cause miscompilations where the compiler just
optimises away the NULL check because it jumps to a code path
that then dereferences the pointer which clearly isn't going
to work. Seems like something like this happens with gcc 11.

Fixes #1262

Co-authored-by: Doug Nazar <nazard@nazar.ca>
Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2599>
2022-06-14 17:32:03 +00:00
James Hilliard
64ad82e00c multiqueue: fix warning: ‘is_query’ may be used uninitialized in this function
Fixes:
../plugins/elements/gstmultiqueue.c: In function ‘gst_multi_queue_loop’:
../plugins/elements/gstmultiqueue.c:2394:19: warning: ‘is_query’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 2394 |     if (object && !is_query)
      |                   ^~~~~~~~~

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2593>
2022-06-14 12:54:35 +00:00
Tim-Philipp Müller
5c8bbde1d4 docs: update technical howto in moving-plugins
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2583>
2022-06-10 11:40:45 +01:00
Nirbheek Chauhan
604b92b9cb clock: Use g_atomic_rc_box for refcounting entry clocks
g_atomic_rc_box was added in GLib 2.58, and we require 2.62 now, so we
can fix the FIXME and use this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2568>
2022-06-10 06:01:41 +00:00
Tim-Philipp Müller
9d9e59622f Bump GLib requirement to >= 2.62
Can't require 2.64 yet because of
https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/323

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2568>
2022-06-10 06:01:41 +00:00
Guillaume Desmottes
0086d7b016 basetransform: handle gst_base_transform_query_caps() returning NULL
If gst_base_transform_transform_caps() returns NULL, gst_base_transform_query_caps()
will return NULL as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2532>
2022-06-01 09:55:53 +02:00
Jan Alexander Steffens (heftig)
15c69c17ea clock: Avoid creating a weakref with every entry
Creating and destroying weakrefs takes a write lock on a global
`GRWLock`. This makes for a very contended lock when the pipeline has
many synchronizing elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2530>
2022-06-01 06:03:28 +00:00
Guillaume Desmottes
4cb935bcea basetransform: fix critical if transform_caps() returned NULL
klass->transform_caps() may return NULL, which was raising this
critical:

  GStreamer-CRITICAL **: 12:23:56.243: gst_caps_is_subset: assertion 'subset != NULL' failed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2528>
2022-05-31 14:27:51 +02:00
tom schuring
d71a6bf457 plugin: add Apache 2 license to known licenses
the licence in gstreamer/subprojects/gstreamer/gst/gstplugin.c
currently is defined to be one of:
LGPL GPL QPL GPL/QPL MPL BSD MIT/X11 0BSD Proprietary
The open source project for the kinesis plugin is using an
Apache 2.0 license. Because "Apache 2.0" is not one of the
supported licenses it automatically falls back to Proprietary.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2514>
2022-05-29 12:36:42 +00:00
Thibault Saunier
79e28368fc structure: Fix serializing with new format inside arrays/lists
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1554>
2022-05-24 17:20:50 +00:00
WANG Xuerui
b6076d7394 gstreamer/gst/gstconfig.h.in: Add support for LoongArch
While current and future LoongArch machines that are supposed to run
GStreamer all support unaligned accesses, there might be future
lower-end cores (e.g. the embedded product line) without such support,
and we may not want to penalize these use cases.

So, mark LoongArch as not supporting unaligned accesses for now, and
hope the compilers do a good job optimizing them. We can always flip
switch later.

Suggested-by: CHEN Tao <redeast_cn@outlook.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2443>
2022-05-18 16:08:39 +00:00
Sebastian Dröge
fbf0cc2279 element: Add sanity check with a critical warning if a pad is requested for a pad template that is not installed on the element class
Various elements are assuming that the pointer matches a pad template
they know about, and also randomly created pad templates might be
missing some important information that is necessary to create a valid
pad.

For example, creating a new pad template for audiomixer's sinkpad
without providing the correct GType would cause audiomixer to create a
GstAggregatorPad. That will then later fail spectacularly because it
assumes that it got a GstAudioAggregatorPad.

Passing a pad template that does not belong to the element class in here
will easily lead to undefined behaviour.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2410>
2022-05-12 17:29:26 +00:00
Stéphane Cerveau
260c085a59 tests: test fixed caps
Add a test entry to check wether a caps is fixed
or not.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2290>
2022-05-11 08:59:55 +02:00
Stéphane Cerveau
7f7084cd3a caps: warn with wrong mediatype in gst_caps_new_empty_simple
If passing ANY/EMPTY to gst_caps_new_empty_simple
as a mediatype, a warning will be displayed to alert
on this misuse of the API.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2290>
2022-05-11 08:59:37 +02:00
Sebastian Dröge
b247305bfd aggregator: Don't send multiple caps events with the same caps
Every time aggregator is reconfiguring it will try to negotiate new
caps. If these resulting caps are the same as the previously negotiated
caps then don't send a new caps event with the same caps again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>
2022-05-05 17:41:58 +00:00
Sebastian Dröge
90584e29d7 aggregator: Only send events up to CAPS event from gst_aggregator_set_src_caps()
Otherwise setting the srcpad caps based on the sinkpad caps event will
already push a segment event downstream before the upstream segment is
known.

If the upstream segments are just forwarded when the upstream segment
event arrives this would result in two segment events being sent
downstream, of which the first one will usually be simply wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>
2022-05-05 17:41:58 +00:00
Edward Hervey
db758558e3 multiqueue: Increase initial interleave growth rate
In the case where not all streams have received any data, growing the interleave
by only 100ms is too restrictive and would cause some (valid) mpeg-ts streams to
hang.

Bump up the interleave growth rate for those use-cases to 500ms per input (still
up to the limit of 5s).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2370>
2022-05-05 09:02:05 +02:00
Tim-Philipp Müller
5687568144 filesink: fix handling of non-existing paths with musl
Fixes #1194

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2341>
2022-05-02 16:46:44 +00:00
Tim-Philipp Müller
1fbf1b30b3 registry: skip Rust dep builddirs when searching for plugins recursively
These artefacts confuse the plugin scanner and may cause noisy warnings
(and slow down things).

Fixes https://gitlab.freedesktop.org/gstreamer/gst-build/-/issues/68

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2146>
2022-04-30 08:48:22 +00:00
Mathieu Duponchelle
da25b95bdf aggregator: forward gap event information to gap buffer
When the GAP event was flagged with MISSING_DATA, subclasses
may want to adopt a different behaviour, for example by repeating
the last buffer.

As we turn these gap events into gap buffers, we need to flag
those, we do so with a new custom meta.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/708>
2022-04-22 17:43:50 +00:00
Xavier Claessens
b225f4215b meson: Add PYTHONPATH to load GDB helper module
Meson generates a gdbinit file that will automatically load gstreamer
script. However that script uses a helper python module that needs
PYTHONPATH to be pointing into the right location in the source
tree to be able to find gst_gdb.py.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1796>
2022-04-22 11:53:31 +00:00
Guillaume Desmottes
8eccf79fff gstleaks: log the number of alive objects
Can help checking if the number of alive objects is growing over time or stays stable.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2245>
2022-04-20 15:58:29 +00:00
Sebastian Dröge
1eb7f81f9d gstreamer: Document various caps for the reference timestamp meta
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2132>
2022-04-20 14:40:25 +00:00
Xavier Claessens
e950095867 Always define ENABLE_NLS
GLib guarantees libintl API is always available, provided by
proxy-libintl as last resort. GLib itself unconditionally define
ENABLE_NLS.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2028>
2022-04-19 18:01:06 +00:00
Xavier Claessens
82ca0e291b Delete unused i18n headers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2028>
2022-04-19 18:01:06 +00:00
Xavier Claessens
b99ecc78ca Replace gst-i18n-*.h with gi18n-lib.h
GLib guarantees libintl is always present, using proxy-libintl as
last resort. There is no need to mock gettex API any more.

This fix static build on Windows because G_INTL_STATIC_COMPILATION must
be defined before including libintl.h, and glib does it for us as part
as including glib.h.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2028>
2022-04-19 18:01:06 +00:00
Nirbheek Chauhan
97655eb8ac meson: Add -Wl,-rpath,${libdir} on macOS
We made the gstreamer installation prefix relocatable by picking up
plugins relative to the location of libgstreamer-1.0.dylib, similar to
how it's done for Windows:

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1627

This had a lot of side-effects:

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1051
https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/363
https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/371
https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/362

A partial fix for the cerbero side of these was:

https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/807

However, this relied on the consumers knowing that they need to add
`LC_RPATH` entries to the libdir of the prefix. This is done
automatically by build systems like Meson, but not by others, such as
Autotools, CMake, Cargo, XCode, etc. For those, we need to add the
RPATH entries to the gstreamer-1.0.pc file.

This also has the side-effect of fixing the loading of gstreamer rust
plugins on macOS:

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1159

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1149

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2218>
2022-04-19 12:11:17 +00:00
Ruben Gonzalez
70579285a8 gst_plugin_load_file: force plugin reload if diff filename
If a file includes a new version of a plugin that exits in the
registry, the output of gst-inspect is incorrect. The output has the
correct version but incorrect filename, and element description.

This seems to have also fixed some documentation issues.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1344>
2022-04-19 14:26:08 +05:30
Tulio Beloqui
cf684051dd gstdevicemonitor: added cleanup of signal handlers and hidden providers list
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2182>
2022-04-18 15:30:35 +00:00