Sebastian Dröge
1208d4e635
audioaggregator: Reset offset if the output rate is renegotiated
...
On next aggregation the new offset will be calculated based on the
segment position.
Without this a rate change would cause a jump forwards or backwards in
the output timeline.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/794 >
2020-09-09 09:09:17 +00:00
Sebastian Dröge
6b14080941
audioaggregator: Add support for new sample selection API
...
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/805
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/780 >
2020-08-07 19:23:50 +03:00
Sebastian Dröge
f5a02639e1
audioaggregator: Only check downstream caps when handling CAPS events if we didn't negotiate with downstream yet
...
If we already negotiated with downstream there is not point in checking
if the caps are supported. We already know that this is the case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/768 >
2020-07-28 10:59:25 +03:00
Sebastian Dröge
607dc1d135
audioaggregator: Check all downstream allowed caps structures if they support the upstream rate
...
Otherwise it might happen that downstream prefers a different rate (i.e.
puts it into the first structure) and also supports other rates, but
audioaggregator would then fail negotiation.
Also this now correctly handles downstream returning a range of
supported rates.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/795
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/768 >
2020-07-27 18:49:48 +03:00
Sebastian Dröge
f94c7ae3c9
audioaggregator: Fix negotiation with downstream if there is no peer yet
...
get_allowed_caps() will return NULL, which is not a problem in itself.
Just take the template caps for negotiation in that case instead of
erroring out.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/744 >
2020-07-09 16:48:02 +00:00
Thibault Saunier
909baa2360
Pass the code through codespell
2019-08-30 13:05:36 +00:00
Mathieu Duponchelle
f65145371b
audioaggregator: add missing Since tag
2019-08-12 19:11:06 +02:00
Sebastian Dröge
1ec1123178
audioaggregator: Split getcaps() function into two
...
One for convert pads and one for normal sink pads.
2019-07-18 08:46:42 +03:00
Sebastian Dröge
0a21c28484
audioaggregator: Always take first configure pad's rate and downstream caps into account when calculating allow sink caps
...
While we can convert between all formats apart from the rate, we
actually need to make sure that we comply with a) the rate of the first
configured pad and b) also all the allowed rates from downstream.
2019-07-18 08:43:14 +03:00
Sebastian Dröge
7080d216a8
audioaggregator: If we don't have a GstAudioAggregatorConvertPad, don't assume that we can actually convert
2019-07-18 08:43:14 +03:00
Mathieu Duponchelle
bced52d2e8
audioaggregator: always use downstream's rate requirements
...
We were previously only fixating the rate in the getcaps
implementation when downstream was requiring a discrete value,
causing negotiation to fail when upstream was capable of rate
conversion, but not made aware that it had to occur.
Instead of fixating the rate, we can simply update our sink
template caps with whatever GValue the downstream caps are holding
as their rate field.
Allows negotiation to successfully complete with pipelines such as:
audiotestsrc ! audio/x-raw, rate=48000 ! audioresample ! audiomixer name=m ! \
audio/x-raw, rate={800, 1000} ! autoaudiosink \
audiotestsrc ! audio/x-raw, rate=44100 ! audioresample ! m.
2019-07-18 08:43:14 +03:00
Mathieu Duponchelle
31ac4f4665
gstaudioaggregator: expose output-buffer-duration-fraction
...
The code for this is mostly lifted from audiobuffersplit, it
allows use cases such as keeping the buffers output by compositor
on one branch and audiomixer on another perfectly aligned, by
requiring the compositor to output a n/d frame rate, and setting
output-buffer-duration to d/n on the audiomixer.
The old output-buffer-duration property now simply maps to its
fractional counterpart, the last set property wins.
2019-05-16 02:55:14 +02:00
Sebastian Dröge
0bf207aa53
audioaggregator: Also run the audio-specific caps fixation for audio aggregator subclasses that can't convert
2018-08-16 18:03:37 +03:00
Sebastian Dröge
320243050b
audioaggregator: Fixate to some meaningful values if no sinkpad is configured yet
...
The default caps fixation code would select a rate of 1 for example,
which is not really ideal.
2018-08-16 18:00:24 +03:00
Sebastian Dröge
1b6eed694c
audioaggregator: Properly propagate caps negotiation failures
...
Otherwise we'll end up doing a division by zero when clipping buffers,
and might even accept buffers for which we don't know the caps.
https://bugzilla.gnome.org/show_bug.cgi?id=796951
2018-08-14 10:24:33 +03:00
Tim-Philipp Müller
fae8c24590
audio: Update for g_type_class_add_private() deprecation in recent GLib
...
https://gitlab.gnome.org/GNOME/glib/merge_requests/7
2018-06-23 21:49:48 +02:00
Olivier Crête
8583f17e62
audioaggregator: Remove custom get_next_time implementation
...
GstAggregator now offers same thing in a common implementation.
https://bugzilla.gnome.org/show_bug.cgi?id=795486
2018-05-16 22:22:29 +02:00
Sebastian Dröge
5b736d2c7a
audioaggregator: Update converters after updating with the new audioinfo/caps
...
Otherwise subclasses might accidentially use the old audioinfo/caps.
None of the subclasses currently uses the audioinfo/caps, but future
subclasses might.
https://bugzilla.gnome.org/show_bug.cgi?id=795827
2018-05-05 16:40:32 +02:00
Mathieu Duponchelle
83939c81e7
audioaggregator: fix filtered getcaps
...
In the situation described in
https://bugzilla.gnome.org/show_bug.cgi?id=795397 ,
downstream_caps consists of two structures, the first with
the preferred rate, if at all possible (44100), the second
containing the full range of allowed rates, as audioresample
correctly tries to negotiate passthrough caps.
As audioaggregator cannot perform rate conversion, it wants
to return a fixated rate in its getcaps implementation,
however it previously directly used the first structure in
the caps allowed downstream, without taking the filter into
consideration, to determine the rate to fixate to.
With this, we first intersect our downstream caps with the
filter, in order not to fixate to an unsupported rate.
2018-04-23 17:13:22 +02:00
Mathieu Duponchelle
a59fbba141
audioaggregator: unref converted buffer after gst_buffer_replace
2018-04-13 01:07:21 +02:00
Edward Hervey
22c9e5f7c1
libs: Documentation cleanup
...
* Fix wrong naming, wrong types and typos
* Add missing sections
* Add missing documentation for entries
* Explicitely mark private structure entries
* Remove items that never existed
2018-04-02 08:53:28 +02:00
Edward Hervey
a034018a75
audio-aggregator: Check return values
...
And copy over already-parsed information
CID #1427140
2018-03-23 14:25:21 +01:00
Mathieu Duponchelle
e9be107e4a
audioaggregator: fix channel-mask negotiation
...
When outputting more than two channels, a channel-mask has to be
specified in the output caps.
We follow the same heuristic as other cases, when downstream
does not specify a channel-mask, we use that of the first
configured pad, and if there was none we generate a fallback
mask.
https://bugzilla.gnome.org/show_bug.cgi?id=794257
2018-03-12 17:35:53 +01:00
Mathieu Duponchelle
22981e8a42
Port to latest GstAggregator segment API
...
The aggregator segment is now exposed on the src pad
https://bugzilla.gnome.org/show_bug.cgi?id=793944
2018-03-01 15:33:25 +01:00
Mathieu Duponchelle
318eb61e23
audioaggregator: remove GstAudioAggregator->info
...
As we now require subclasses to use a subclass of
GstAudioAggregatorPad, we can reuse its info field
https://bugzilla.gnome.org/show_bug.cgi?id=793943
2018-03-01 15:33:25 +01:00
Mathieu Duponchelle
10835e9919
audioaggregator: refactor conversion API
...
For the rationale, see:
https://bugzilla.gnome.org/show_bug.cgi?id=793917
Also test audiomixer conversion of current output buffer
2018-03-01 00:40:24 +01:00
Tim-Philipp Müller
4984c84505
docs: add GstAudioAggregator to docs
2018-02-13 17:10:42 +00:00
Tim-Philipp Müller
29534c3829
Update for renamed aggregator pad API
...
https://bugzilla.gnome.org/show_bug.cgi?id=791204
2018-01-23 09:01:00 +00:00
Edward Hervey
558b37d889
audioaggregator: Don't leak pads
...
all audioaggregator subclasses were leaking the first sink pad :)
2017-12-20 15:03:44 +01:00
Mathieu Duponchelle
164b5a7f94
audioaggregator: implement input conversion
...
https://bugzilla.gnome.org/show_bug.cgi?id=786344
2017-12-19 23:39:37 +01:00
Tim-Philipp Müller
fc94627778
audioaggregator: use new gst_element_foreach_sink_pad()
...
Instead of gst_aggregator_iterate_sinkpads() which will
soon be removed.
https://bugzilla.gnome.org/show_bug.cgi?id=785679
2017-11-02 13:02:07 +00:00
Olivier Crête
c2b462837b
audioaggregator: Accept buffer with no data, but duration and gap flag
...
These are produced from GAP events by the base class.
https://bugzilla.gnome.org/show_bug.cgi?id=784846
2017-10-21 12:06:08 +02:00
Stefan Sauer
023170e2f8
audioaggregator: improve readability in offset calculation
...
Don't reuse the offset variables will contain a sample offset for an
intermediate time value. Instead add a segment_pos variable of type
GstClockTime for this. Use The clock-time macros to check if we got
a valid time.
2017-10-15 10:29:20 +02:00
Stefan Sauer
bd34243177
audioaggregator: move comment to the place it is meant to be
...
This probably got shifted after some changes.
2017-10-14 18:20:30 +02:00
Stefan Sauer
1b84283396
audioaggregator: remove buffer!=NULL check
...
Acording to the logic this cannot happen (we already check this before). So
add a assert like we do above and remove the check. This make it clearer that
we check for the offset range.
Also remove a dead assignment since we reassign this a few lines below.
2017-10-05 18:12:29 +02:00
Stefan Sauer
f46d80f07d
audioaggreator: update docs
...
Remove wrote references to collectpads. Document the units.
2017-10-05 17:57:35 +02:00
Stefan Sauer
6ecfd599a5
audioaggregator: pass blocksize to mix_buffer()
...
No need to recalc the value twice per run. Establishes that it is the same
value.
2017-10-05 08:57:09 +02:00
Stefan Sauer
926fed92e9
audioaggregator: rename _fill_buffer() to _queue_new_buffer()
...
It does not fill a buffer. Rename it and add a short comment.
2017-10-05 08:57:09 +02:00
Stefan Sauer
5fd4e71da3
audioaggregator: reduce variable scope
...
This is a non-functional change that makes the code more alike to the previous
check. I should be more obvious when we drop a buffer.
2017-10-02 17:01:36 +02:00
Stefan Sauer
17848d7c0c
audioaggregator: update comment for aggregate
...
Replace collect-pads left-over. Remove first paragraph, we're not doing this.
Remove 3), 4) since this is not per pad.
2017-10-02 17:01:36 +02:00
Stefan Sauer
ceee4db9d0
audioaggregator: fix typo in comment
2017-09-17 21:06:48 -07:00
Stefan Sauer
4080b844c0
audioaggregator: use local var
...
Instead of the self->priv-> deref use the local var we created already.
2017-07-26 09:43:52 +02:00
Stefan Sauer
35a4149caf
aggregator: code cleanups
...
Fix comment typos, some copy'n'paste in logging. Add more doc comments.
2017-07-13 22:02:17 +02:00
Olivier Crête
930c3cea40
audioaggregate: Don't hold object locks across calls to aggregate_one
...
https://bugzilla.gnome.org/show_bug.cgi?id=782878
2017-05-21 18:44:53 +02:00
Olivier Crête
55ab23cc30
audioaggregator: Use downstream allocator and params if available
...
https://bugzilla.gnome.org/show_bug.cgi?id=746529
2017-05-21 13:24:29 +02:00
Matthew Waters
57673e608e
aggregator: add simple support for caps handling
...
Modelled off the videoaggregator caps handling as that seems the most
mature aggregtor-using implementation that has caps handling there is.
https://bugzilla.gnome.org/show_bug.cgi?id=776931
2017-05-20 16:21:17 +02:00
Olivier Crête
26819ba296
aggregator: Delay clipping to output thread
...
This is required because the synchronized events like caps or segments
may only be processed on the output thread.
https://bugzilla.gnome.org/show_bug.cgi?id=781673
2017-05-20 16:21:16 +02:00
Olivier Crête
1e7aaf775f
aggregator: Simplify clip function
...
The return value was ignored anyway
https://bugzilla.gnome.org/show_bug.cgi?id=781673
2017-05-20 16:21:16 +02:00
Nirbheek Chauhan
20ced51df2
Fix incorrect return type in several functions
...
All these should return GstFlowReturn, not gboolean
2016-10-27 23:06:26 +05:30
Guillaume Desmottes
937a42247a
audioaggregator: fix buffer leak
...
If the pad was still owning a buffer when being destroyed it was leaked.
Fix a leak with the test_flush_start_flush_stop test.
https://bugzilla.gnome.org/show_bug.cgi?id=766663
2016-06-21 10:52:47 +03:00