Renegotiation and reconfiguration will fail because all queries
and events won't be accepted by the pad if it's flushing. In the
best case this just causes unneeded work and spurious warnings in
the debug logs, in the worst case it causes elements to fail completely.
We must be certain that we don't cause a deadlock when blocking the serialized
queries. One such deadlock can happen when we are buffering and downstream is
blocked in preroll and a serialized query arrives. Downstream will not unblock
(and allow our query to execute) until we complete buffering and buffering will
not complete until we can answer the query..
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702840
Pass the fixed caps we're asked to accept as a filter for the caps
query, so we don't get a fully-expanded set of caps back (which we don't
need and can take a lot of time for intersection).
This reduces the time for camerabin to produce a second frame on a
logitech C910 camera from around 52 seconds to a bit less then 16
seconds on my system.
https://bugzilla.gnome.org/show_bug.cgi?id=702632
When appending/prepending tags, avoid re-creating (and copying) lists if we already
have one and instead just append/prepend the GValue to the list.
https://bugzilla.gnome.org/show_bug.cgi?id=702545
When we asynchronously go from READY to PLAYING, also call the
state change function so that subclasses can update their state for PLAYING.
Because the PREROLL lock is not recursive, we can't make this without
races and we must assume for now that the subclass can handle concurrent calls
to PAUSED->PLAYING and PLAYING->PAUSED. We can make this assumption because not
many elements actually do something in those state changes and the ones that
did would be broken even more without this change.
https://bugzilla.gnome.org/show_bug.cgi?id=702282
The check is done using curl (if available). It lists the curl exit code + http
status code (for those > 399) together with the use of the url in the code. The
check is not fatal.
Before this patch gst_init would intercept --help, causing for example
cheese's --help to look like this:
[hans@shalem cheese]$ cheese --help
Usage:
cheese [OPTION...] - GStreamer initialization
Help Options:
-h, --help Show help options
--help-all Show all help options
--help-gst Show GStreamer Options
gst_init is the only gfoo_init function which does this.
https://bugzilla.gnome.org/show_bug.cgi?id=702089
Doing it after every single create() is not very efficient and not necessary.
Especially on network file systems fstat() is not cached and causes network
traffic, making the source possibly unusable slow.
https://bugzilla.gnome.org/show_bug.cgi?id=652037
API: gst_value_array_append_and_take_value
API: gst_value_list_append_and_take_value
We were already using this internally, this makes it public for code
which frequently appends values which are expensive to copy (like
structures, arrays, caps, ...).
Avoids copies of the values for users. The passed GValue will also
be 0-memset'ed for re-use.
New users can replace this kind of code:
gst_value_*_append_value(mycontainer, &myvalue);
g_value_unset(&myvalue);
by:
gst_value_*_append_and_take_value(mycontainer, &myvalue);
https://bugzilla.gnome.org/show_bug.cgi?id=701632
By default when the script is about to exit (normally or due to an error),
it checks whether $ERROR_LOG file exists. If the log file exists, the
script prints a "Failures: " message prefix and dumps the log file to the
output.
Apparently the log file is always created and if the update/build is
successful, the script finishes with a bit misleading "Failures: " message.
An improvement provided with this change lets the log file to be created as
needed, i.e. if there's an error message to be printed. If the file
doesn't exists, the script prints a "Update done" message which clearly
indicates success.
https://bugzilla.gnome.org/show_bug.cgi?id=701177
During FLUSH_START the query needs to be unblocked already, otherwise
it can lead to deadlocks if the FLUSH_START is the result of something
done from the streaming thread of the srcpad (the queue will never be
emptied!).
Fixes some deadlocks during flushing.
And store queue items differently to not accidentially read
already unreffed queries when flushing. Queries are owned by
upstream and not us.