Arun Raghavan
2e5d6c3a3e
aggregator: Use standard upstream latency querying logic
...
The same functionality is duplicated in the default latency querying
now.
2015-02-27 01:05:51 +05:30
Olivier Crete
880dcd8039
aggregator: Use src_lock to protect latency related members
...
One has to use the src_lock anyway to protect the min/max/live so they
can be notified atomically to the src thread to wake it up on changes,
such as property changes. So no point in having a second lock.
Also, the object lock was being held across a call to
GST_ELEMENT_WARNING, guaranteeing a deadlock.
2015-02-19 21:22:53 -05:00
Olivier Crête
083df6412f
aggregator: Remove untrue comment
2015-02-19 19:05:42 -05:00
Olivier Crête
97f6b7a8aa
aggregator: Don't try to push tags while flush seeking
...
The downstream segment could have been flushed already, so
need to re-send the segment event before re-sending the tags.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-02-19 19:05:27 -05:00
Sebastian Dröge
2516e8111c
aggregator: Use the sinkpads iterator directly to query upstream latencies
...
While gst_aggregator_iterate_sinkpads() makes sure that every pad is only
visited once, even when the iterator has to resync, this is not all we have
to do for querying the latency. When the iterator resyncs we actually have
to query all pads for the latency again and forget our previous results. It
might have happened that a pad was removed, which influenced the result of
the latency query.
2015-02-19 11:04:28 +02:00
Sebastian Dröge
d3205e1363
aggregator: Move gst_aggregator_get_latency_unlocked() a bit
...
It was between another function and its helper function before, which was
confusing when reading the code as it had nothing to do with the other
functions.
2015-02-19 10:57:09 +02:00
Sebastian Dröge
44ffb87f8a
aggregator: Fail the latency query if one of the upstream queries fails
2015-02-19 01:28:06 +02:00
Olivier Crête
c37e82587c
aggregator: Document locking order
...
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-02-18 17:20:03 -05:00
Olivier Crête
17df37d8cb
aggregator: Rename confusinly named SRC_STREAM_LOCK macros to SRC_LOCK
...
This will match the name of the lock itself. It is also not a stream
lock as it not recursive and not held while pushing.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-02-18 17:20:03 -05:00
Olivier Crête
3a3f2b5343
aggregator: Rename confusingly named stream lock to flush lock
...
This lock is not what is commonly known as a "stream lock" in GStremer,
it's not recursive and it's taken from the non-serialized FLUSH_START event.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-02-18 17:20:03 -05:00
Olivier Crête
36ef8f0bd4
aggregator: Fix macro indendation
...
Changes no code
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-02-18 17:20:03 -05:00
Tim-Philipp Müller
282dbcee0b
aggregator: drop GAP events until we handle them properly
2015-02-13 23:45:20 +00:00
Tim-Philipp Müller
3c2ee8ece5
aggregator: use new gst_aggregator_pad_drop_buffer()
2015-02-13 16:25:45 +00:00
Tim-Philipp Müller
592c2c8105
aggregator: add gst_aggregator_pad_drop_buffer()
...
steal_buffer() + unref seems to be a wide-spread idiom
(which perhaps indicates that something is not quite
right with the way aggregator pad works currently).
2015-02-13 16:25:45 +00:00
Tim-Philipp Müller
55abf436a0
aggregator: only post latency message if anything changed
...
Perhaps we should check for element state as well and
only post it if in PLAYING state.
2015-02-13 16:25:14 +00:00
Sebastian Dröge
037928dcf6
Improve and fix LATENCY query handling
...
This now follows the design docs everywhere, especially the maximum latency
handling.
https://bugzilla.gnome.org/show_bug.cgi?id=744106
2015-02-11 14:16:21 +01:00
Sebastian Dröge
69a37365f1
aggregator: Pause srcpad task on flow errors
...
Otherwise we will call the task function over and over again until
upstream finally handled the flow return and shuts us down.
2015-02-10 10:57:38 +01:00
Sebastian Dröge
a5002ea59d
aggregator: Streamline latency calculations
...
Min latency can never be invalid, latency property can never be invalid
either. So no need to check for all these things in various places.
2015-02-06 11:03:57 +01:00
Sebastian Dröge
65b1db2aa2
aggregator: If upstream has no max latency but the subclass has, take the subclass max latency
2015-02-06 11:03:56 +01:00
Sebastian Dröge
ea50bc1917
aggregator: Fix min>max latency error check
...
We have to include the upstream latency, our own latency and the subclass
latency in the calculations.
FIXME: This is still not entirely correct
2015-02-06 11:03:56 +01:00
Sebastian Dröge
ef8e5280d0
aggregator: Don't add the latency property to the max latency
...
It has no meaning for the max latency and is only used to increase the min
latency.
2015-02-06 11:03:56 +01:00
Thibault Saunier
71e4c485f0
aggregator: Cleanup locking around AggregatorPad flush related fields
...
And document the locking
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Mathieu Duponchelle
b27fb0dbac
aggregator: keep chain functions as dumb as possible.
...
+ A pad chain function has no business checking other pads,
that's what the aggregate thread is for.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Thibault Saunier
ccf329d527
aggregator: More fixes around locking when accessing protected private fields
...
In some more places we were accessing GstAggregator->segment
and GstAggregator->seqnum without holding the GST_OBJECT_LOCK
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Thibault Saunier
1a07467d5f
aggregator: Make the PAD_LOCK private
...
Instead of using the GST_OBJECT_LOCK we should have
a dedicated mutex for the pad as it is also associated
with the mutex on the EVENT_MUTEX on which we wait
in the _chain function of the pad.
The GstAggregatorPad.segment is still protected with the
GST_OBJECT_LOCK.
Remove the gst_aggregator_pad_peak_unlocked method as it does not make
sense anymore with a private lock.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Thibault Saunier
d8eef43123
aggregator: Hide GstAggregatorPad buffer and EOS fileds
...
And add a getter for the EOS.
The user should always use the various getters to access
those fields
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
93d0b51dba
aggregator: Document locking of GstAggregatorPrivate members
...
Most of them are protected by the object lock, specify
which ones use a different lock.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
ea76d39738
aggregator: Document how the segment is protected
...
Document that it can only be accessed with the object lock.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
9df8ac0a98
aggregator: Protect all latency related members with the object lock
...
The locking was not consistent, now consistently use the object lock.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
41d26673d6
aggregator: Document locking for gst_aggregator_get_latency_unlocked()
...
Renamed it to _unlocked() to make it clear.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
f7070dcfdc
aggregator: Protect the srcpad caps negotiation with the stream lock
...
Instead of adding another lock, use the srcpad stream lock, which is already
taken anyway to push out the new caps if needed.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
4a5882ee08
aggregator: Protect the tags with the object lock
...
The tags related variables were sometimes protected, sometimes not and
sometimes atomic. Put them all under the object lock.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
eddd5fd259
aggregator: Consistenly lock the flow_return state
...
Use the object's lock to protect it.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
cc605f4560
aggregator: Consistently lock some members
...
Some members sometimes used atomic access, sometimes where not locked at
all. Instead consistently use a mutex to protect them, also document
that.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
68ac6438f0
aggregator: Protect exported pad members with the pad's object lock
...
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
cc3f418516
aggregator: Replace event lock with pad's object lock
...
Reduce the number of locks simplify code, what is protects
is exposed, but the lock was not.
Also means adding an _unlocked version of gst_aggregator_pad_steal_buffer().
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
0a2dc1185c
aggregator: Protect data with the same mutex as GCond
...
Whenever a GCond is used, the safest paradigm is to protect
the variable which change is signalled by the GCond with the same
mutex that the GCond depends on.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:17 +01:00
Nirbheek Chauhan
4b9924557a
aggregator: Nitpick spacing/punctuation in debug logging
2015-01-14 19:21:31 +01:00
Olivier Crête
9ba9873b1f
aggregator: Remove pointless atomic
...
It is only modified from the streaming thread
2015-01-09 22:08:08 -05:00
Olivier Crête
22ea83e7fa
aggregator: Fix query leak
2015-01-09 22:02:53 -05:00
Sebastian Dröge
713205fbe6
aggregator: Print jitter from clock waiting in the debug logs
2015-01-09 16:43:58 +01:00
Tim-Philipp Müller
fbd4cf9810
aggregator: don't use iterator when setting flush pending on pads
2015-01-04 17:25:45 +00:00
Tim-Philipp Müller
4da01dadcc
aggregator: check if pads are ready more efficiently
...
No need to use an iterator for this which creates a temporary
structure every time and also involves taking and releasing the
object lock many times in the course of iterating. Not to mention
all that GList handling in gst_aggregator_iterate_sinkpads().
2015-01-04 17:07:43 +00:00
Tim-Philipp Müller
3e38003218
aggregator: name vfunc arguments consistently
2015-01-04 12:59:19 +00:00
Tim-Philipp Müller
10d5e878d8
aggregator: add g-i transfer and scope annotations
2015-01-01 15:48:08 +00:00
Tim-Philipp Müller
82f74cd9e0
aggregator: register names of iterate_sinkpads functions with debug system
2015-01-01 14:10:05 +00:00
Tim-Philipp Müller
22d4c7a5c5
aggregator: reduce debug messages for taking/releasing logs to TRACE level
...
Don't spam debug log with this stuff.
2015-01-01 14:04:24 +00:00
Tim-Philipp Müller
6e30a98fd5
aggregator: move property member into private structure
...
Our locking (or lack thereof) while accessing this also
looks generally quite dodgy.
2014-12-31 18:18:03 +00:00
Tim-Philipp Müller
b00ea0cc08
aggregator: remove empty dispose function
2014-12-31 14:50:58 +00:00
Tim-Philipp Müller
ad40a65a01
aggregator: give private functions namespace prefix
...
Especially the GST_DEBUG_FUNCPTR ones.
2014-12-31 12:36:08 +00:00