platform/upstream/gstreamer.git
4 years agohooks: add opt-in cache update hook
Mathieu Duponchelle [Wed, 24 Jun 2020 23:37:43 +0000 (01:37 +0200)]
hooks: add opt-in cache update hook

CI now checks that plugin caches are up to date, for example
when adding a new property to an element.

This is something pretty easy to forget, and it can be checked
in a pre-commit hook provided the cache generator generates no
unnecessart diff on the developer's machine. This is now the
case for me in core, -base and -good, and eventually all the
repositories should behave appropriately, at least on my
development machine.

The new check in the pre-commit hook is only performed when
the user is in the development environment (it checks
$MESON_BUILD_ROOT to determine that), and when the developer
has opted-in by setting `GST_CACHE_HOOK=enabled`. That is
because the hook will actually rebuild the cache with ninja,
and modify it in the source directory, that's not a behaviour
we want to enable by default.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/546>

4 years agogst-inspect: Use gst_info_strdup_vprintf to print string
Seungha Yang [Wed, 24 Jun 2020 13:51:48 +0000 (22:51 +0900)]
gst-inspect: Use gst_info_strdup_vprintf to print string

g_vprintf() will write a string binary to stdout directly using fwrite().
So, depending on character in the string, fwrite to stdout can
print broken one but printf family might not cause the issue.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/544>

4 years agobus: clear bus->priv->signal_watch immediately when the source is removed
Michael Olbrich [Wed, 24 Jun 2020 05:54:42 +0000 (07:54 +0200)]
bus: clear bus->priv->signal_watch immediately when the source is removed

There is a race-condition that can trigger the assertion in
gst_bus_add_signal_watch_full():

If gst_bus_add_signal_watch_full() is called immediately after
gst_bus_remove_signal_watch() then bus->priv->signal_watch may still be set
because gst_bus_source_dispose() or gst_bus_source_finalize() was not yet
called.
This happens if the corresponding GMainContext has the source queued for
dispatch. In this case, the following dispatch will only unref and delete
the signal_watch because it was already destroyed. Any pending messages
will remain until a new watch is installed.

So bus->priv->signal_watch can be cleared immediately when the watch is
removed. This avoid the race condition.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/543>

4 years agogst-hotdoc-plugins-scanner: serialize interfaces
Mathieu Duponchelle [Mon, 22 Jun 2020 23:54:15 +0000 (01:54 +0200)]
gst-hotdoc-plugins-scanner: serialize interfaces

4 years agogst-hotdoc-plugins-scanner: don't instantiate base classes
Mathieu Duponchelle [Mon, 22 Jun 2020 21:41:06 +0000 (23:41 +0200)]
gst-hotdoc-plugins-scanner: don't instantiate base classes

4 years agogst-hotdoc-plugins-scanner: serialize parents in hierarchy when needed
Mathieu Duponchelle [Sun, 21 Jun 2020 00:00:54 +0000 (02:00 +0200)]
gst-hotdoc-plugins-scanner: serialize parents in hierarchy when needed

4 years agodocs: Document signals and properties only for current type
Thibault Saunier [Mon, 22 Jun 2020 13:11:07 +0000 (09:11 -0400)]
docs: Document signals and properties only for current type

4 years agodoc: Stop documenting properties from parents
Thibault Saunier [Sat, 20 Jun 2020 02:52:01 +0000 (22:52 -0400)]
doc: Stop documenting properties from parents

4 years agoregistry: Print the pointer when printing features
Nirbheek Chauhan [Mon, 22 Jun 2020 23:48:11 +0000 (05:18 +0530)]
registry: Print the pointer when printing features

This is what we do everywhere else too, useful for debugging.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/542>

4 years agoregistry: Use a toolchain-specific registry file on Windows
Nirbheek Chauhan [Mon, 22 Jun 2020 22:13:53 +0000 (03:43 +0530)]
registry: Use a toolchain-specific registry file on Windows

If we load a plugin registry for MinGW plugins when running with MSVC,
we will have to write out the whole cache again, and vice-versa. Just
use separate cache files so that the cache is actually useful.

Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/427

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/542>

4 years agoghostpad: Deprecate gst_ghost_pad_construct()
Sebastian Dröge [Mon, 22 Jun 2020 09:26:46 +0000 (12:26 +0300)]
ghostpad: Deprecate gst_ghost_pad_construct()

Instead do everything it did as part of GObject::constructed() and
change the function to always return TRUE.

gst_ghost_pad_construct() was meant to be called by subclasses right
after construction of the object to finish construction as it can fail
in theory. In practice it's impossible for it to fail, even more so if
called directly from GObject::constructed(): The only failure condition
is if the newly created proxy pad already has a parent, which is
impossible at this point as nothing else can have a reference to it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/540>

4 years agotools: gst-inspect, add option '--color' with short option '-C'
Thor Andreassen [Tue, 19 May 2020 20:54:20 +0000 (22:54 +0200)]
tools: gst-inspect, add option '--color' with short option '-C'

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/498>

4 years agoinfo: Add a printf extension for ClockTime/ClockTimeDiff pointers
Thibault Saunier [Thu, 18 Jun 2020 17:46:29 +0000 (13:46 -0400)]
info: Add a printf extension for ClockTime/ClockTimeDiff pointers

Using both GST_TIME_FORMAT+GST_TIME_ARGS and friend is cumbersome, this
makes it sensibly more user friendly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/535>

4 years agoBack to development
Tim-Philipp Müller [Fri, 19 Jun 2020 23:27:57 +0000 (00:27 +0100)]
Back to development

4 years agoRelease 1.17.1
Tim-Philipp Müller [Fri, 19 Jun 2020 18:13:36 +0000 (19:13 +0100)]
Release 1.17.1

4 years agodoc: Stop recording if building from source/release in plugin cache
Thibault Saunier [Fri, 19 Jun 2020 15:19:43 +0000 (11:19 -0400)]
doc: Stop recording if building from source/release in plugin cache

Closes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/537
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/537>

4 years agoFix up and add various "Since" markers and other related docs fixes
Sebastian Dröge [Fri, 19 Jun 2020 09:01:49 +0000 (12:01 +0300)]
Fix up and add various "Since" markers and other related docs fixes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/536>

4 years agosystemclock: Fix clock time conversion on Windows/xbox
Roman Shpuntov [Thu, 18 Jun 2020 08:52:40 +0000 (15:52 +0700)]
systemclock: Fix clock time conversion on Windows/xbox

The returned ratio can be bigger than GST_SECOND, in which case we would
forever return 0 for the system clock time. Even in other cases if it's
close to GST_SECOND it would result in accuracy loss.

Instead of doing the division by GST_CLOCK_TIME_NONE during
initialization once, do it every time the clock time is requested.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/534>

4 years agogst: Delay creation of threadpools
Edward Hervey [Fri, 12 Jun 2020 13:07:42 +0000 (15:07 +0200)]
gst: Delay creation of threadpools

Since glib 2.64, gthreadpool will start waiting on a GCond immediately upon
creation. This can cause issues if we fork *before* actually using the
threadpool since we will then be signalling that GCond ... from another process
and that will never work.

Instead, delay creationg of thread pools until the very first time we need
them. This introduces a minor (un-noticeable) delay when needing a new thread
but fixes the issues for all users of GSTreamer that will call gst_init, then
fork and actually start pipelines.

See https://gitlab.gnome.org/GNOME/glib/-/issues/2131 for more context.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/531>

4 years agoinputselector: Push event on selected pad only when one is selected
Thibault Saunier [Sun, 7 Jun 2020 16:05:07 +0000 (12:05 -0400)]
inputselector: Push event on selected pad only when one is selected

Calling `gst_input_selector_get_active_sinkpad` triggers sinkpad
selection but won't notify about it, leading  to breaking code that
relying on it. This new code added as part of
63ccf45395ce734a2044a58193939a3eda50eb0c was thought to be triggered only
when a pad was already selected and not change the behavior otherwise
so this commit makes sure it is actually the case.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/766

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/522>

4 years agocheck: Fix datetime unit test for builds without assert
Edward Hervey [Wed, 27 May 2020 13:35:41 +0000 (15:35 +0200)]
check: Fix datetime unit test for builds without assert

If built with assertions disabled, we need to ensure the variable is properly
reset before testing

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/530>

4 years agomessage: Add unit test for GST_MESSAGE_RATE_CHANGE
sohwan.park [Thu, 11 Jun 2020 01:56:10 +0000 (10:56 +0900)]
message: Add unit test for GST_MESSAGE_RATE_CHANGE

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/528>

4 years agoevent: Add unit test for INSTANT_RATE_CHANGE and INSTANT_RATE_SYNC_TIME
sohwan.park [Thu, 11 Jun 2020 01:54:54 +0000 (10:54 +0900)]
event: Add unit test for INSTANT_RATE_CHANGE and INSTANT_RATE_SYNC_TIME

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/528>

4 years agosegment: Add unit test for GST_SEEK_FLAG_INSTANT_RATE_CHANGE
sohwan.park [Thu, 11 Jun 2020 01:53:59 +0000 (10:53 +0900)]
segment: Add unit test for GST_SEEK_FLAG_INSTANT_RATE_CHANGE

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/528>

4 years agodocs: Update plugins cache
Thibault Saunier [Tue, 9 Jun 2020 19:06:52 +0000 (15:06 -0400)]
docs: Update plugins cache

4 years agodocs: Fix the way we mark properties mutability
Thibault Saunier [Tue, 9 Jun 2020 19:05:54 +0000 (15:05 -0400)]
docs: Fix the way we mark properties mutability

When nothing is specified, we should default to NULL, not PLAYING

4 years agoaggregator: Fix StartTimeSelection enum type registration
Sebastian Dröge [Wed, 10 Jun 2020 08:23:42 +0000 (11:23 +0300)]
aggregator: Fix StartTimeSelection enum type registration

Make it thread-safe and use the actual C identifiers for the "name"
field, as otherwise gobject-introspection will fall apart.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/527>

4 years agodocs: Update plugins cache
Thibault Saunier [Mon, 8 Jun 2020 14:51:57 +0000 (10:51 -0400)]
docs: Update plugins cache

4 years agotracers/leaks: fix reentrancy issues with the custom signal handlers
Matthew Waters [Thu, 1 Sep 2016 07:33:13 +0000 (17:33 +1000)]
tracers/leaks: fix reentrancy issues with the custom signal handlers

The signal handlers were performing mutex operations in the signal handlers
which is bad idea that may lead to deadlocks.

1. Implement a separate signal thread to handle the signals.
2. Use the glib provided signal GSource to avoid performing operations in
   the signal handler.

Fix #186

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/487>

4 years agogst_private.h: increse padding in struct _GstClockEntryImpl
Havard Graff [Mon, 8 Jun 2020 20:47:56 +0000 (22:47 +0200)]
gst_private.h: increse padding in struct _GstClockEntryImpl

When compiling for 32bit ios arm, the static assert that the
GstClockEntryImpl smaller or equal to the struct _GstClockEntryImpl
triggered. (they were 12bytes off).

To fix this, the padding is increased by 12 bytes (on 32bit).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/525>

4 years agoparamspecs: add 'Since: 1.18' markers for new param spec flags
Tim-Philipp Müller [Mon, 8 Jun 2020 15:04:51 +0000 (16:04 +0100)]
paramspecs: add 'Since: 1.18' markers for new param spec flags

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/524>

4 years agodoc: Add GstObject specific GParamFlags
Seungha Yang [Sun, 7 Jun 2020 11:56:49 +0000 (20:56 +0900)]
doc: Add GstObject specific GParamFlags

Document "controllable", "mutable-{ready, paused, playing}" and
"conditonally-available" GParamFlags

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/283>

4 years agoparamspecs: Add a GParamSpecFlag to indicate the property might not always exists
Seungha Yang [Wed, 11 Sep 2019 04:51:04 +0000 (13:51 +0900)]
paramspecs: Add a GParamSpecFlag to indicate the property might not always exists

Add new flag for users to notice that the property is not guaranteed
to exist depending on environment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/283>

4 years agocheck: Avoid race with leaks test
Edward Hervey [Sun, 7 Jun 2020 16:42:21 +0000 (18:42 +0200)]
check: Avoid race with leaks test

The problem is that the taskpool might not have completely drained by the time
we check for leaks.

Instead, ensure all tasks have stopped before testing for valid results.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/523>

4 years agoqueue: protect against lost wakeups for iterm_del condition
Camilo Celis Guzman [Thu, 4 Jun 2020 15:50:01 +0000 (17:50 +0200)]
queue: protect against lost wakeups for iterm_del condition

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/513>

4 years agodocs: Prevent potential NULL pointer dereference when serializing plugin object types
Sebastian Dröge [Sat, 6 Jun 2020 07:19:57 +0000 (10:19 +0300)]
docs: Prevent potential NULL pointer dereference when serializing plugin object types

CID 1464007

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/516>

4 years agopadtemplate: Directly unreference the documentation caps
Edward Hervey [Sat, 6 Jun 2020 06:24:01 +0000 (08:24 +0200)]
padtemplate: Directly unreference the documentation caps

The public-facing API has a (valid) protection against NULL caps. We can just
directly remove it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/515>

4 years agoutils: fix markdown link to #GstPluginAPIFlags
Mathieu Duponchelle [Fri, 5 Jun 2020 23:10:09 +0000 (01:10 +0200)]
utils: fix markdown link to #GstPluginAPIFlags

4 years agopadtemplate: expose getters and setters "documentation caps"
Mathieu Duponchelle [Fri, 5 Jun 2020 21:28:38 +0000 (23:28 +0200)]
padtemplate: expose getters and setters "documentation caps"

This can be used in elements where the caps of pad templates
are dynamically generated and dependent on the environment.

An example is x265enc.

4 years agoutils: expose GstPluginAPIFlags
Mathieu Duponchelle [Fri, 5 Jun 2020 19:10:29 +0000 (21:10 +0200)]
utils: expose GstPluginAPIFlags

These can be passed to gst_type_mark_as_plugin_api, to inform
plugin cache generation.

For now a single flag is specified, "IGNORE_ENUM_MEMBERS", it
can be used for dynamically generated enums to avoid documenting
environment-specific enumeration members. An example is
GstX265EncTune.

4 years agoidentity, clocksync: implement provide_clock
Mathieu Duponchelle [Mon, 1 Jun 2020 14:18:50 +0000 (16:18 +0200)]
identity, clocksync: implement provide_clock

Since those are using the clock for sync, they need to also
provide a clock for good measure. The reason is that even if
downstream elements provide a clock, we don't want to have
that clock selected because it might not be running yet.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/509>

4 years agostructure: Quickly document serialization format
Thibault Saunier [Wed, 3 Jun 2020 02:39:41 +0000 (22:39 -0400)]
structure: Quickly document serialization format

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/510>

4 years agostructure: Reflow the SECTION comment
Thibault Saunier [Wed, 3 Jun 2020 13:17:32 +0000 (09:17 -0400)]
structure: Reflow the SECTION comment

Removing trailing whitespaces and avoiding to exceed 80chars

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/510>

4 years agoqueue2: Defer downstream bitrate query to the streaming thread.
Jan Schmidt [Tue, 26 May 2020 17:41:37 +0000 (03:41 +1000)]
queue2: Defer downstream bitrate query to the streaming thread.

When we want to perform a downstream bitrate query, just
set the reconfigure flag on the srcpad and get the streaming
thread to do it. That avoids emitting a downstream query
when receiving the upstream RECONFIGURE event - which can
lead to deadlocks if downstream is sending the event from
within a lock - e.g. input-selector.

If querying the downstream bitrate changes the cached
value, then make sure to update our buffering state
and potentially post a BUFFERING message to the application.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/566
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/501>

4 years agoinputselector: Avoid deadlock when requesting pads
Edward Hervey [Wed, 3 Jun 2020 06:09:04 +0000 (08:09 +0200)]
inputselector: Avoid deadlock when requesting pads

The deadlock was the following:
* One thread requests a new pad, the internal lock is kept while adding the pad
* Another thread (or the same one) requests the internal links of a pad (could
be that pad)... which also requires that lock.

That internal lock is not required when adding the pad to the element (which is
the last action when requesting a new pad). The fact it will be actually used
will be *after* the request pad function is released.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/512>

4 years agodoc: document fundamental types
Mathieu Duponchelle [Thu, 4 Jun 2020 01:24:50 +0000 (03:24 +0200)]
doc: document fundamental types

4 years agodoc: Require hotdoc >= 0.11.0
Thibault Saunier [Wed, 3 Jun 2020 22:33:51 +0000 (18:33 -0400)]
doc: Require hotdoc >= 0.11.0

4 years agodocs: Don't include GObject and GstPipeline signals
Sebastian Dröge [Tue, 2 Jun 2020 19:25:24 +0000 (22:25 +0300)]
docs: Don't include GObject and GstPipeline signals

They're already documented from elsewhere.

4 years agoaggregator: Export GstAggregatorStartTimeSelection in the header and document it
Sebastian Dröge [Tue, 2 Jun 2020 09:25:00 +0000 (12:25 +0300)]
aggregator: Export GstAggregatorStartTimeSelection in the header and document it

It is used by one of the aggregator properties and was private in the
source file before.

4 years agodocs: Update gst_plugins_cache.json
Sebastian Dröge [Mon, 25 May 2020 13:21:12 +0000 (16:21 +0300)]
docs: Update gst_plugins_cache.json

4 years agoplugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types
Sebastian Dröge [Thu, 28 May 2020 18:51:22 +0000 (21:51 +0300)]
plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types

4 years agodocs: Store all non-element types in a separate other-types array
Sebastian Dröge [Thu, 28 May 2020 20:40:09 +0000 (23:40 +0300)]
docs: Store all non-element types in a separate other-types array

And also make sure to not duplicate them.

4 years agodocs: Use gst_type_is_plugin_api() for deciding whether a type should be included...
Sebastian Dröge [Thu, 28 May 2020 19:59:09 +0000 (22:59 +0300)]
docs: Use gst_type_is_plugin_api() for deciding whether a type should be included in the docs

4 years agoutils: Add helper function for marking types as plugin API
Sebastian Dröge [Thu, 28 May 2020 17:56:14 +0000 (20:56 +0300)]
utils: Add helper function for marking types as plugin API

This can be used to mark additional types exposed by plugins (i.e.
enums, flags and GObjects) via properties, signals or pad templates as
plugin API. They can then be picked up by the documentation for the
plugin.

Not all types exposed by plugins are documented automatically because
they might come from an external library and should be documented from
there instead.

4 years agodocs: Don't try to print pad templates of non-GstElement types
Sebastian Dröge [Tue, 26 May 2020 10:06:20 +0000 (13:06 +0300)]
docs: Don't try to print pad templates of non-GstElement types

4 years agodocs: Print object/flag/enum type information in a more structured way and in more...
Sebastian Dröge [Thu, 21 May 2020 14:33:36 +0000 (17:33 +0300)]
docs: Print object/flag/enum type information in a more structured way and in more places

Custom types are printed now for signal parameters/return value and properties, and more consistently.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/-/issues/59

4 years agoqueue2: Avoid races when posting buffering messages
Edward Hervey [Thu, 4 Jun 2020 09:21:45 +0000 (11:21 +0200)]
queue2: Avoid races when posting buffering messages

When posting a buffering message succesfully:
* Remember the *actual* percentage value that was posted
* Make sure we only reset the percent_changed variable if the value we just
  posted is indeed different from the current value

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/511>

4 years agotests:validate: Whitelist validate plugins
Thibault Saunier [Thu, 28 May 2020 18:56:26 +0000 (14:56 -0400)]
tests:validate: Whitelist validate plugins

This is required so we can use validateflow for example

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/506>

4 years agotester: Fix exit code on bailout/skipping
Thibault Saunier [Thu, 28 May 2020 16:39:08 +0000 (12:39 -0400)]
tester: Fix exit code on bailout/skipping

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/506>

4 years agopromise: update documentation and annotations for NULL replies
Matthew Waters [Wed, 27 May 2020 10:22:49 +0000 (20:22 +1000)]
promise: update documentation and annotations for NULL replies

The implementation and tests already handle NULL replies.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1300
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/502>

4 years agotests: leak tracer: disable stack traces for faster test execution
Tim-Philipp Müller [Wed, 27 May 2020 11:26:01 +0000 (12:26 +0100)]
tests: leak tracer: disable stack traces for faster test execution

This test takes 39 seconds on my machine even though it just runs
a couple of fakesrc num-buffers=2 ! fakesink pipelines. Most of
the cpu seems to be spent in libz, related to stack trace management.

Use stack-traces-flags=none instead of stack-traces-flags=full
until a better solution can be found. Might warrant more
investigation in any case..

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/503>

4 years agoqueue2: don't post unnecessary buffering message, refine locking
Mathieu Duponchelle [Wed, 20 May 2020 15:32:48 +0000 (17:32 +0200)]
queue2: don't post unnecessary buffering message, refine locking

This is a follow up to review comments in !297

+ The posting of the buffering message in READY_TO_PAUSED isn't
  needed, removing it made the test fail, but the correct fix
  was simply to link elements together

+ Move code to relock the queue and set last_posted_buffering_percent
  and percent_changed inside the buffering_post_lock in create_write().
  This makes locking consistent with post_buffering()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/297>

4 years agoqueue2: Fix missing/dropped buffering messages at startup
Carlos Rafael Giani [Fri, 4 Oct 2019 14:57:29 +0000 (16:57 +0200)]
queue2: Fix missing/dropped buffering messages at startup

This fixes a bug that occurs when an attempt is made to post a buffering
message before the queue2 was assigned a bus. One common situation where
this happens is when the use-buffering property is set to TRUE before the
queue2 was added to a bin.

If the result of gst_element_post_message() is not checked, and the
aforementioned situation occurs, then last_posted_buffering_percent and
percent_changed will still be updated, as if posting the message succeeded.
Later attempts to post again will not do anything because the code then
assumes that a message with the same percentage was previously posted
successfully and posting again is redundant.

Updating these variables only if posting succeed and explicitely
posting a buffering message in the READY->PAUSED state change ensure that
a buffering message is posted as early as possible.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/297>

4 years agosystemclock: Only try initializing entries if they were not initialized before
Sebastian Dröge [Mon, 25 May 2020 11:56:10 +0000 (14:56 +0300)]
systemclock: Only try initializing entries if they were not initialized before

And add assertions accordingly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/500>

4 years agosystemclock: Clarify comment that described a previous version of the code
Sebastian Dröge [Mon, 25 May 2020 09:51:19 +0000 (12:51 +0300)]
systemclock: Clarify comment that described a previous version of the code

Nowadays we are only waking up the head entry waiting if either the head
entry is unscheduled (which is handled some lines above already), or
when the head entry specifically is woken up because a new entry became
the new head entry.

We're not waking up *all* entries anymore whenever any entry in the last
was unscheduled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/500>

4 years agosystemclock: Get rid of atomic access to clock entry status and use the mutex instead
Sebastian Dröge [Fri, 22 May 2020 16:28:54 +0000 (19:28 +0300)]
systemclock: Get rid of atomic access to clock entry status and use the mutex instead

We already have a mutex in each clock entry anyway and need to make use
of that mutex in most cases when the status changes. Removal of the
atomic operations and usage of the mutex instead simplifies the code
considerably.

The only downside is that unscheduling a clock entry might block for the
time it needs for the waiting thread to go from checking the status of
the entry to actually waiting, which is not a lot of code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/500>

4 years agosystemclock: Don't start waiting for a clock id if it was signalled before
Sebastian Dröge [Fri, 22 May 2020 15:12:55 +0000 (18:12 +0300)]
systemclock: Don't start waiting for a clock id if it was signalled before

Otherwise it can happen that unscheduling a clock id never takes place
and instead it is waiting until the normal timeout. This can happen if
the wait thread checks the status and sets it to busy, then the
unschedule thread sets it to unscheduled and signals the condition
variable, and then the waiting thread starts waiting. As condition
variables don't have a state (unlike Windows event objects), we have to
remember ourselves in a new boolean flag protected by the entry mutex
whether it is currently signalled, and reset this after waiting.

Previously this was not a problem because a file descriptor was written
to for waking up, and the token was left on the file descriptor until
the read from it for waiting.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/500>

4 years agosparsefile: fix possible crash when seeking
dhilshad [Sat, 15 Feb 2020 16:50:18 +0000 (22:20 +0530)]
sparsefile: fix possible crash when seeking

In gst_sparse_file_clear function we were closing a file and
reopening it using closed file descriptor.

Fix: Removed closing and reopening of file.

Fixes #512

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/372>

4 years agovalue: Fix comparison of int/int64 ranges
Edward Hervey [Sat, 4 Nov 2017 12:28:03 +0000 (13:28 +0100)]
value: Fix comparison of int/int64 ranges

ranges are only equal if:
* Their bounds are equal
* And their step value are equal *IF* they contain more than one value

https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/253

4 years agofdsink: do not supress legitimate errors when unlocking
Mathieu Duponchelle [Tue, 12 May 2020 00:05:25 +0000 (02:05 +0200)]
fdsink: do not supress legitimate errors when unlocking

Instead, only wait_preroll when writev_* returns FLUSHING

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/476>

4 years agofdsink: remove unused struct member `bytes_written`
Mathieu Duponchelle [Mon, 11 May 2020 22:57:36 +0000 (00:57 +0200)]
fdsink: remove unused struct member `bytes_written`

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/476>

4 years agofilesink: port over unlock code from fdsink
Mathieu Duponchelle [Mon, 11 May 2020 22:54:56 +0000 (00:54 +0200)]
filesink: port over unlock code from fdsink

See also: 5216322d39448ed61c86bb1b3dd9c8c5e6feccf3

The previous code was causing "random" flushing returns
in scenarios with intensive state changes such as within
a buffering pipeline.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/476>

4 years agodocs: Add boolean field for readability of properties
Sebastian Dröge [Tue, 19 May 2020 19:24:39 +0000 (22:24 +0300)]
docs: Add boolean field for readability of properties

Some properties are write-only.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/496>

4 years agotools: option '-u' occurs twice in gst-inspect-1.0.1
Thor Andreassen [Tue, 19 May 2020 08:34:01 +0000 (10:34 +0200)]
tools: option '-u' occurs twice in gst-inspect-1.0.1

I have removed the erroneous one according to the source file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/492>

4 years agotester: Stop using g_file_new_build_filename
Thibault Saunier [Tue, 19 May 2020 18:16:49 +0000 (14:16 -0400)]
tester: Stop using g_file_new_build_filename

It was introduced in GLib 2.56 only

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/495>

4 years agotests: Add a gst-tester utility
Thibault Saunier [Mon, 4 May 2020 21:05:07 +0000 (17:05 -0400)]
tests: Add a gst-tester utility

gst-tester is a tool to launch `.validatetest` files with
TAP[0] compatible output and supporting missing `gst-validate`
application which means that it can be cleanly integrated with meson
test harness.

It allows us to use `gst-validate` to write integration tests in any
GStreamer repository keeping them as close as possible to the code. It
can simplify a lot test writing and reading and not having to go into
another repository to implement or run tests makes it more convenient to
use.

This also implements a stupid simple test to show how that works

[0] https://testanything.org/

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/461>

4 years agodocs: update moving-plugins to use gitlab and meson
Stéphane Cerveau [Tue, 19 May 2020 09:30:50 +0000 (09:30 +0000)]
docs: update moving-plugins to use gitlab and meson

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/493>

4 years agogstbin: Remove mentions of duration caching
Edward Hervey [Mon, 18 May 2020 08:46:04 +0000 (10:46 +0200)]
gstbin: Remove mentions of duration caching

This was effectively disabled in 1.0 with the intent of maybe re-enabling it.

The problem is that caching duration at a bin level doesn't make much sense
since there might be queueing/buffering taking place internally and therefore
the duration reported might have no correlation to what is actually being
outputted.

Remove commented code and fixmes, and update documentation

Fixes #4

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/489>

4 years agoinput-selector: Ensure events are forwarded only once per pad
Thibault Saunier [Fri, 15 May 2020 11:48:07 +0000 (11:48 +0000)]
input-selector: Ensure events are forwarded only once per pad

The code was prepared to do it but was missing to fill the pushed_pads
list.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/485>

4 years agoinputselector: Ensure that events are pushed first on active pad
Thibault Saunier [Thu, 14 May 2020 21:13:05 +0000 (17:13 -0400)]
inputselector: Ensure that events are pushed first on active pad

Making it less random and fixing a race in a GES test where we have
as pipeline:

```
videotestsrc ! output-selector name=s ! input-selector name=i s. ! timecodestamper ! i.
```

which we seek, leading to the seek reaching the video testsrc
without going through the timecodestamper and generating a buffer
even before timecodestamper gets the seek which means that its internal
state is wrong compared to the datastream it gets and attaches wrong
timecode metas.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/485>

4 years agodocs: Add list of interfaces implemented by elements to the docs
Sebastian Dröge [Fri, 15 May 2020 07:38:30 +0000 (10:38 +0300)]
docs: Add list of interfaces implemented by elements to the docs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/486>

4 years agogdb: Print event seqnums, object pointers and structures
Thibault Saunier [Wed, 13 May 2020 21:35:01 +0000 (17:35 -0400)]
gdb: Print event seqnums, object pointers and structures

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/482>

4 years agogdb: Add support for queries and buffers
Thibault Saunier [Wed, 13 May 2020 21:34:12 +0000 (17:34 -0400)]
gdb: Add support for queries and buffers

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/482>

4 years agoinputselector: Never reset active pad set from the user
Thibault Saunier [Wed, 13 May 2020 21:07:43 +0000 (17:07 -0400)]
inputselector: Never reset active pad set from the user

This was leading to interesting races in a GES test.
Related to: https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/issues/108

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/481>

4 years agobasetransform: Minor refactoring
Edward Hervey [Thu, 14 May 2020 10:13:07 +0000 (12:13 +0200)]
basetransform: Minor refactoring

Move checks related to peerfilter in one place. No impact except for logic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/484>

4 years agogstvalue: Minor list intersection optimization
Edward Hervey [Thu, 14 May 2020 09:32:39 +0000 (11:32 +0200)]
gstvalue: Minor list intersection optimization

When matching against the 2nd list, increment the starting position of the inner
list iteration.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/484>

4 years agobufferpool: unblock acquire thread when we discard buffer
Xu Guangxin [Thu, 7 May 2020 13:06:18 +0000 (21:06 +0800)]
bufferpool: unblock acquire thread when we discard buffer

else the acquire thread will wait infinitely.
The deadlock showed in prevous unit test commit. This will fix it

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/470>

4 years agotests: bufferpool: add dead lock test for buffer discard
Xu Guangxin [Mon, 11 May 2020 10:21:48 +0000 (18:21 +0800)]
tests: bufferpool: add dead lock test for buffer discard

you will see a deadlock after you apply this patch, and run following commandline:

GST_STATE_IGNORE_ELEMENTS=1 tests/check/gst_gstbufferpool

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/470>

4 years agooutput-selector: Drop duplicated seek events
Thibault Saunier [Tue, 12 May 2020 02:27:14 +0000 (22:27 -0400)]
output-selector: Drop duplicated seek events

When we get a seek event on several source pads, we should drop
the duplicated ones as any element that has several srcpads (like
demuxers).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/478>

4 years agomeson: Pass native: false to add_languages()
Nirbheek Chauhan [Tue, 12 May 2020 00:28:38 +0000 (05:58 +0530)]
meson: Pass native: false to add_languages()

This is needed for cross-compiling without a build machine compiler
available. The option was added in 0.54, but we only need this in
Cerbero and it doesn't affect older versions so it should be ok.
Will just cause a spurious warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/477>

4 years agogdb: Fix iterating GstStructure fields
Thibault Saunier [Tue, 12 May 2020 20:42:42 +0000 (16:42 -0400)]
gdb: Fix iterating GstStructure fields

This broke with 1b568fa01fa16885c3a7368551034c206493a41a where we inlined the array

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/479>

4 years agodocs: Update gst_plugins_cache.json
Sebastian Dröge [Sun, 10 May 2020 08:37:45 +0000 (11:37 +0300)]
docs: Update gst_plugins_cache.json

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/474>

4 years agodocs: Output JSON files with UTF-8 encoding
Sebastian Dröge [Sun, 10 May 2020 08:35:53 +0000 (11:35 +0300)]
docs: Output JSON files with UTF-8 encoding

Otherwise non-ASCII characters are encoded as \uXXXX.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/474>

4 years agogstvalue: Fix segment (de)serialization
Edward Hervey [Fri, 8 May 2020 15:21:20 +0000 (17:21 +0200)]
gstvalue: Fix segment (de)serialization

By using the proper quarks (stored in the indirection table) and not the *enums*
of those entry in the quark table.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/473>

4 years agocheck: uri: Check return value
Edward Hervey [Fri, 8 May 2020 06:03:54 +0000 (08:03 +0200)]
check: uri: Check return value

CID #1455381

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/472>

4 years agocheck: gstvalue: Check return value
Edward Hervey [Fri, 8 May 2020 06:02:12 +0000 (08:02 +0200)]
check: gstvalue: Check return value

As is done everywhere else

CID #1455540

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/472>

4 years agocheck: testclock: Check return values
Edward Hervey [Fri, 8 May 2020 05:43:02 +0000 (07:43 +0200)]
check: testclock: Check return values

As done everywhere else.

CID #1455383
CID #1455524

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/472>

4 years agocheck: gst_promise_reply() takes ownership
Edward Hervey [Fri, 8 May 2020 05:03:49 +0000 (07:03 +0200)]
check: gst_promise_reply() takes ownership

Copy the structure temporarily to check it further down.

CID #1455392

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/472>

4 years agocheck: Don't leak test string
Edward Hervey [Fri, 8 May 2020 04:49:45 +0000 (06:49 +0200)]
check: Don't leak test string

Turns out the length returned by `__gst_vasprintf()` doesn't include the final
`\0`.

CID #1455430

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/472>

4 years agotaglist: Fix crash when comparing two lists of the same length but with different...
Matej Knopp [Thu, 7 May 2020 21:00:13 +0000 (23:00 +0200)]
taglist: Fix crash when comparing two lists of the same length but with different items

Fixes #549

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/469>