Sebastian Dröge
3c9ae895b0
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
Tim-Philipp Müller
68515c4439
audiomixer: remove now-unused base_time field in object structure
2015-02-06 10:47:20 +00:00
Tim-Philipp Müller
e54829aa4f
tests: audiomixer: add unit test for proper segment.base handling
...
As adjusted by gst_pad_set_offset(), or when doing segment seeks
or looping for example. See previous audiomixer commit.
2015-02-05 15:23:04 +00:00
Sebastian Dröge
6d6c693254
audiomixer: Remove weird and wrong segment handling
...
There's no reason why audiomixer should override the segment
base of upstream with whatever value it got from a SEEK event,
or even worse... with 0 if there was no SEEK event yet. This
broke synchronization if upstream provided a segment base other
than 0, e.g. when using pad offsets.
Also that this code did things conditional on the element's state
should've been a big warning already that something is just wrong.
If this breaks anything else now, let's fix it properly :)
Also don't do fancy segment position trickery when receiving a
segment event. It's just not correct.
2015-02-05 16:02:54 +01:00
Thibault Saunier
b1eef4f436
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
198b16c563
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
660ddd40c2
audiomixer: Make flush start/stop test non-racy
...
The flush stop could have happened between the source trying
to push the segment event and the buffer, this would cause a warning.
Prevent that by taking the source's stream lock while flushing.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
0955a39a3d
audiomixer: Replace racy timeout based tested with drain query
...
Using the drain query, we can be certain that the buffer has done going
through the aggregator by taking the stream locks.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
402c0d4c5c
audiomixer: Avoid race in caps negotiation
...
With the current audiomixer, the input caps need to be the same,
otherwise there is an unavoidable race in the caps negotiation. So
enforce that using capsfilters
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
9afd2b3339
audiomixer: Clear GstAudioInfo the the caps
...
When clearing the caps, also clear the matching GstAudioInfo
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
33f412d6db
audiomixer: Don't reset caps on flush
...
A flush event doesn't invalidate the previous caps event.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
2015-01-29 10:24:18 +01:00
Olivier Crête
9071b8487c
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
Tim-Philipp Müller
d7880f217e
audiomixer: update for aggregator start/stop vfunc change
2014-12-30 18:01:34 +00:00
Tim-Philipp Müller
5cf0b8c445
audiomixer: fix output-block-size property description
2014-12-30 15:32:46 +00:00
Nirbheek Chauhan
ecc709be31
audiomixer: Document the pad properties
2014-12-27 11:02:36 +00:00
Sebastian Dröge
cd256acf03
audiomixer: If getting a timeout before having caps, just advance our position
...
This can happen if this is a live pipeline and no source produced any buffer
and sent no caps until the an output buffer should've been produced according
to the latency.
2014-12-23 12:24:48 +01:00
Sebastian Dröge
eefea80dae
audiomixer: Make sure to release the current buffer in reset()
...
If we didn't output the last one in aggregate because we were shutting down
earlier we might otherwise leak it.
2014-12-23 12:15:50 +01:00
Sebastian Dröge
8465c0915e
audiomixer: Change blocksize property to output-buffer-duration in time format
...
This makes the interface of audiomixer independent of the actual caps.
2014-12-23 11:45:50 +01:00
Sebastian Dröge
20a79bda49
audiomixer: Use the src query implementation of aggregator as the default case
2014-12-22 22:12:02 +01:00
Stefan Sauer
b2fef1f9d2
audiomixer: fix build flag order
...
Have the libraries/inlcudes from plugins-bad first to avoid picking up the installed version.
Fixes the build when the local api changed.
2014-12-21 07:47:25 -05:00
Sebastian Dröge
bf3896b2bd
audiomixer: Track discont-time per pad instead of globally
...
We do discont handling per pad, not per element!
2014-12-19 14:40:33 +01:00
Sebastian Dröge
bc418c7a85
audiomixer: We're only EOS if all our pads are actually EOS
...
Having a buffer or not on the pad is irrelevant.
2014-12-18 23:33:58 +01:00
Sebastian Dröge
eff64c7ddc
audiomixer: The pad's size is always supposed to be the whole buffer size
...
And the offset the offset into that buffer. Changing the size will
cause all kinds of assumptions to fail and cause crashes.
2014-12-18 22:42:14 +01:00
Sebastian Dröge
06f6d3c65c
aggregator: Add function to allow subclasses to set their own latency
...
For audiomixer this is one blocksize, for videoaggregator this should
be the duration of one output frame.
2014-12-17 19:51:32 +01:00
Sebastian Dröge
46f713c598
audiomixer: Make sure to not have pads being behind the current offset
...
We would break sync between the different streams then.
2014-12-17 19:37:22 +01:00
Sebastian Dröge
d508b39952
aggregator: Add a timeout parameter to ::aggregate()
...
When this is TRUE, we really have to produce output. This happens
in live mixing mode when we have to output something for the current
time, no matter if we have enough input or not.
2014-12-17 18:41:41 +01:00
Sebastian Dröge
67ef96c82d
audiomixer: Add queues after the (live) sources in the unit test
2014-12-17 18:41:41 +01:00
Sebastian Dröge
cf90f534f1
audiomixer: Implement get_next_time()
2014-12-16 17:37:12 +01:00
Thibault Saunier
d5a171cae9
audiomixer: Do not try to resize a buffer to a negative size on EOS
2014-11-27 19:10:58 +01:00
Tim-Philipp Müller
7e75f21a41
tests: fix audiomixer test on big endian systems
2014-10-25 21:09:30 +01:00
Vineeth T M
d38e242a72
audiomixer: critical error for blocksize, timeout min/max values
...
Audiomixer blocksize, cant be 0, hence adjusting the minimum value to 1
timeout value of aggregator is defined with MAX of MAXINT64,
but it cannot cross G_MAXLONG * GST_SECOND - 1
Hence changed the max value of the same
https://bugzilla.gnome.org/show_bug.cgi?id=738845
2014-10-21 10:58:48 +02:00
Aurélien Zanelli
c5224553c4
test: use G_GSIZE_FORMAT in audiomixer test
...
https://bugzilla.gnome.org/show_bug.cgi?id=738227
2014-10-09 16:20:07 +03:00
Matthew Waters
57c8272c75
aggregator: add latency query handling
2014-10-09 23:52:11 +11:00
Thibault Saunier
22da31f42a
audiomixer: Handle seek event in READY state
2014-10-06 18:57:28 +02:00
Thibault Saunier
c158e019c1
audiomixer: Set the sinkpad segments basetime after seeking
...
Otherwise stream offset and running time comparison will not be
correct, leading to segfaults after seeks
2014-10-06 18:57:28 +02:00
Thibault Saunier
183f4b3227
audiomixer: Port to GstAggregator
...
https://bugzilla.gnome.org/show_bug.cgi?id=737183
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-06 18:57:28 +02:00
Sebastian Dröge
2ddbaaf866
Release 1.3.1
2014-05-03 19:57:57 +02:00
Stefan Sauer
ec17e33f64
audiomixer: set a group-id on the stream-start event
...
Set a default group-id to fix a warning printed by the sink.
2014-03-11 22:36:44 +01:00
Sebastian Dröge
ee15c8fd1f
audiomixer: Remove some useless assignments and skip the current part of the buffer if the pad is muted
2014-01-16 12:19:57 +01:00
Sebastian Dröge
c29e04674a
audiomixer: Fix and simplify overlap calculation
2014-01-15 23:30:57 +01:00
Sebastian Dröge
a1f95f5625
audiomixer: Also resync timestamps on the RESYNC flag
2013-12-19 21:59:09 +01:00
Sebastian Dröge
5fcc53e552
audiomixer: Add unit test for handling unaligned buffers
...
That is, buffers that start or end in the middle of an output block.
2013-11-07 14:12:17 +01:00
Sebastian Dröge
9fa3fb9434
audiomixer: Fix EOS handling if we have some pending data
2013-11-07 14:12:00 +01:00
Sebastian Dröge
6e48dcfe47
audiomixer: Add test for the discont handling
2013-11-07 13:57:35 +01:00
Sebastian Dröge
73854f8c02
audiomixer: Refactor sync test to be more reusable
2013-11-07 13:55:32 +01:00
Sebastian Dröge
b78316dc06
audiomixer: Remove some racy-ness from the unit test
...
We might already be EOS when we start the mainloop, so only
set the pipeline to PLAYING from the main loop.
2013-11-07 13:48:06 +01:00
Sebastian Dröge
4cf0fc0054
audiomixer: Don't take channel mask in consideration in mono or stereo
...
This could cause negotiation to fail.
https://bugzilla.gnome.org/show_bug.cgi?id=708633
2013-11-06 15:50:08 +01:00
Sebastian Dröge
e368bee1a9
audiomixer: Add simply synchronization test
2013-11-06 15:35:45 +01:00
Sebastian Dröge
39459b2f30
audiomixer: Add new element based on adder that does synchronized audio mixing
2013-11-06 15:35:38 +01:00