Commit graph

209 commits

Author SHA1 Message Date
Mathieu Duponchelle
1edb2c4242 audio-converter: add API to determine passthrough mode
audioconvert's passthrough status can no longer be determined
strictly from input / output caps equality, as a mix-matrix can
now be specified.

We now call gst_base_transform_set_passthrough dynamically, based
on the return from the new gst_audio_converter_is_passthrough()
API, which takes the mix matrix into account.
2018-12-17 14:23:49 +00:00
Mathieu Duponchelle
98386927ee audioconvert: disable passthrough_on_same_caps
Now that audioconvert exposes a mix-matrix property, input and
output caps may be equal, but the mix-matrix still needs to be
applied.

Fixes #521
2018-12-17 14:23:49 +00:00
Matej Knopp
18f082a0d8 audioconvert: remove layout from structure when fixating caps
otherwise caps intersection always fails when converting non-interleaved to interleaved audio

https://bugzilla.gnome.org/show_bug.cgi?id=797225
2018-10-05 15:40:13 +03:00
George Kiagiadakis
0eda002cfd audioconvert: implement support for converting between interleaved and non-interleaved layouts
https://bugzilla.gnome.org/show_bug.cgi?id=705986
2018-07-11 16:26:13 +03:00
Vivia Nikolaidou
b2be4169ee audioconvert: Fix empty mix matrix documentation typo 2017-10-27 18:29:40 +03:00
Mathieu Duponchelle
b0c184e189 audioconvert: document passing an empty mix-matrix 2017-10-26 18:05:46 +02:00
Mathieu Duponchelle
d4db88772b audioconvert: allow empty mix matrix
When an empty mix matrix is passed, audio-channel-mixer
will now generate a (potentially truncated) identity matrix,
this replicates the behaviour of audiomixmatrix in first-channels
mode.

https://bugzilla.gnome.org/show_bug.cgi?id=788833
2017-10-11 22:57:38 +02:00
Mathieu Duponchelle
8d52a107a4 audioconvert: [API]: expose mix-matrix property.
This obsoletes audiomixmatrix

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 20:17:48 +02:00
Mathieu Duponchelle
7a407b69e1 audioconvert: refactor format removal.
remove_format_info was a bit confusing to read, this removes
it in favor of standard gst_caps_map_in_place calls.

This no longer simplifies the resulting caps, but I
consider this should be the job of basetransform.

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 15:03:41 +02:00
Thibault Saunier
ffd4c990c1 audioconvert: Consider channel=1, channel-mask=0x0 as mono
channels=1 is always mono, having it 'unpositioned' does not make
sense.

This fixes pipeline such as:

  gst-validate-1.0 audiotestsrc ! audio/x-raw,channels=2,rate=44100,layout=interleaved ! audioconvert ! audioresample ! audio/x-raw, rate=44100, channels=1 ! avenc_mp2 ! fakesink

https://bugzilla.gnome.org/show_bug.cgi?id=785407
2017-07-26 09:26:39 -04:00
Wim Taymans
16b8851440 audioconvert: resize output buffer to correct size
If we are using a downstream bufferpool we need to set the size of the
buffer to our output size.
2017-06-02 09:44:19 +02:00
Thibault Saunier
099ac9faf2 docs: Convert gtkdoc comments to markdown
Modernizing the documentation, making it simpler to read an
modify and allowing us to possibly switch to hotdoc in the
future.
2017-03-10 18:19:17 -03:00
Arun Raghavan
e112a78826 audioconvert: Relocate a NULL check before accessing converter
CID 1396745
2017-01-02 17:56:36 +05:30
Sebastian Dröge
52d7441942 audioconvert: Error out if mapping input/output buffer failed 2016-11-30 10:55:16 +02:00
Sebastian Dröge
1e64800278 audioconvert: Don't map the input buffer in in-place mode
Input and output buffer are the same, let's not do unnecessary work.

https://bugzilla.gnome.org/show_bug.cgi?id=775369
2016-11-30 10:49:58 +02:00
Sebastian Dröge
1631a38640 audioconvert: Don't call transform_ip() in passthrough mode
https://bugzilla.gnome.org/show_bug.cgi?id=775369
2016-11-30 10:36:14 +02:00
Petr Kulhavy
010b9547d3 audio-converter: optimize endian conversion
Optimize LE<->BE conversion by adding a dedicated fast path instead of
using the generic converter. Implement transform_ip function in order to do the
endian swap in place.

This saves buffer allocation for the intermediate format, can be done in place
and also performs the conversion in one step instead of unpack-convert-pack.

For all bit widths the naive algorithm is implemented, which provides the best
performance when compiled with -O3. ORC was considered but eventually removed
as it requires a dedicated function for in-place conversion (due to the
"restrict" parameters).

A more complex algorithm for the 24-bit conversion with unrolled loop and
32-bit processing is implemented in the #if 0 section. It performs better if
compiled with -O2. With -O3 however the naive algorithm performs better.

https://bugzilla.gnome.org/show_bug.cgi?id=773073
2016-11-28 17:24:17 +02:00
Petr Kulhavy
ca7e31f80d audioconvert: optimize mask calculation
find_suitable_mask() had complexity O(n^2) on the number of bits.
For common case like 2-channel audio the mask was calculated in about 4k loop
cycles.

Optimize both n_bits_set() and find_suitable_mask() to O(n) where n is the
number of bits set in the mask.

https://bugzilla.gnome.org/show_bug.cgi?id=772864
2016-11-01 20:02:14 +02:00
Sebastian Dröge
5de9d5809b audioconvert: Handle fallback channel mask for mono correctly
It's 0 and no mask should be set for mono at all.

https://bugzilla.gnome.org/show_bug.cgi?id=757472
2016-06-29 18:14:51 +02:00
Vineeth TM
44b70ca3a1 base: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763075
2016-03-24 14:25:41 +02:00
Wim Taymans
85afad72ec audio-converter: small API tweaks
Pass flags in _converter_new() so that we can configure ourselves
differently depending on some options.
SOURCE_WRITABLE -> IN_WRITABLE because the array is called 'in'
2016-01-08 17:34:50 +01:00
Wim Taymans
980163457e audio-convert: simplify API
Simplify the API, we don't need the consumed and produced output
arguments. The caller needs to use the _get_in_frames/get_out_frames API
to check how much input is needed and how much output will be produced.
2016-01-08 17:19:58 +01:00
Sebastian Dröge
eb09889176 audioconvert: Pass pointer arrays instead of singleton pointers to gst_audio_converter_samples()
In this specific case it wouldn't cause problems as we only ever access the
first array element, but let's make explicit what is happening here.

CID 1346530 and 1346529
2015-12-29 18:14:54 +02:00
Wim Taymans
8bcf183c7f audioconvert: clear convert object 2015-12-16 11:13:15 +01:00
Wim Taymans
f5a3f70571 audio: adapt API for non-interleaved formats
Allow an array of sample blocks to be passed to the channel mix and
quantizer functions to support non-interleaved formats.
2015-12-14 09:16:08 +01:00
Wim Taymans
5e55968546 audio-convert: improve converter API
Improve the converter API to allow for an max input and output number of
samples and return the number of consumed/produced samples.
2015-12-09 17:16:26 +01:00
Wim Taymans
ff6d1a2a25 audio-converter: add output size argument
Make it possible to have a different number of output samples than input
samples when we, for example, want to add resampling later.
2015-11-10 09:53:59 +01:00
Wim Taymans
dfa25a40fc audio-channel-mix: move channel mixer to audio libs
Move the channel mixer code to the audio library
2015-11-06 17:39:33 +01:00
Wim Taymans
b8bea9d8be audio: add debug categories 2015-11-06 17:29:22 +01:00
Wim Taymans
1635bc0a45 audioconvert: cleanups and add some docs
Add docs for the internal audioconvert object before moving it to the
audio library.
Remove get_sizes and implement the trivial logic in the element.
Remove some unused orc functions
2015-11-06 12:46:36 +01:00
Wim Taymans
c36ac3ce45 audioconvert: move audio quantize code to libs
Move the audio quantize code from audioconvert to the audio library.
work on making an audio converter helper function similar to the video
converter.
Fold fastrandom directly into the quantizer, add some ORC code to
optimize this later.
2015-11-06 12:10:48 +01:00
Wim Taymans
a7789854d5 audio-channels: rename get_default_mask
Rename _get_default_mask() to _get_fallback_mask() to make it more
clear that the function only provides a fallback if nothing else can be
done. Also clarify this in the documentation.

API: gst_audio_channel_get_fallback_mask()
2015-11-05 12:50:18 +01:00
Wim Taymans
f86ed8cdf6 audio-channels: make method to get default channel-mask
Add a new method to get the default channel-mask.
Use the new method on audiodecoder and audioconvert.

API: gst_audio_channel_get_default_mask()
2015-11-05 10:52:53 +01:00
Sebastian Dröge
000c424835 audioconvert: Clip input buffers to the segment before handling them
https://bugzilla.gnome.org/show_bug.cgi?id=757068
2015-11-02 10:20:37 +02:00
Wim Taymans
cd6c29e071 audioconvert: make the quantizer a reusable object
Turn the quantizer into a reusable object.
2015-10-28 11:36:18 +01:00
Sebastian Dröge
010e35afa7 audioconvert: Also copy metas if their API has no tags attached to it
This is the default basetransform behaviour, being more strict than that
is not really useful.
2015-06-29 13:06:49 +02:00
Mathieu Duponchelle
88484399c5 audioconvert: copy metadata that only has the "audio" tag.
https://bugzilla.gnome.org/show_bug.cgi?id=750406
2015-06-04 19:16:40 +02:00
Tim-Philipp Müller
ec5c93f169 docs: update element example pipelines
- gst-launch -> gst-launch-1.0
- use autoaudiosink and audiovideosink more often
- review pipeline examples and descriptions
2015-05-10 11:38:19 +01:00
Luis de Bethencourt
69f66aff9e Rename property enums from ARG_ to PROP_
Property enum items should be named PROP_ for consistency and readability.
2015-04-27 11:27:00 +01:00
Tim-Philipp Müller
bcb8068e27 docs: remove outdated and pointless 'Last reviewed' lines from docs
They are very confusing for people, and more often than not
also just not very accurate. Seeing 'last reviewed: 2005' in
your docs is not very confidence-inspiring. Let's just remove
those comments.
2014-04-26 23:28:57 +01:00
Matej Knopp
12f85c325d audioconvert: Map buffer as READWRITE if the buffer and memory is writable
and only use the input buffer as temporary buffer in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=709408
2013-10-04 14:02:06 +02:00
Tim-Philipp Müller
0715e73725 audioconvert: improve fixate_format function readability even more
Do the flags comparisons only once and re-use the result.
2013-08-23 19:47:57 +01:00
Tim-Philipp Müller
f317061b9c audioconvert: simplify fixate_format function some more
If we have no output format yet, any format will do. The
!out_info condition existed in every path, so just split
it our for clarity. KISS.
2013-08-23 19:43:14 +01:00
Tim-Philipp Müller
7a481c13ae audioconvert: make fixate function more readable
Use some variables to replace accessor macros to make code
a little bit mor readable.
2013-08-23 19:11:17 +01:00
Tim-Philipp Müller
f448977dbd audioconvert: remove unnecessary deep nesting in fixate function
Makes it easier to read and removes two levels of indentation.
2013-08-23 18:53:48 +01:00
Sebastian Dröge
cebae4514a audioconvert: If we have to lose precision, try to lose as less precision as possible
https://bugzilla.gnome.org/show_bug.cgi?id=706624
2013-08-23 18:52:50 +02:00
Tim-Philipp Müller
5f59b4f7ee Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-03 23:05:09 +00:00
Sebastian Dröge
9e6021fe4b audioconvert: Always prefer the input format if possible
Previously we could've chosen another format with the same
depth even if the input format was possible.

Also make sure to chose according to the order in the
caps.
2012-11-01 16:44:05 +01:00
Sebastian Dröge
bc4389806d audioconvert: Also ignore the SIGNED flag when matching an output format 2012-11-01 14:31:29 +01:00
Rasmus Rohde
c286f8ffa2 audioconvert: Prefer output formats with the same depth or at least a higher depth
Enhance current code to prefer an exact match on sample depth if
possible. Also ignore GST_AUDIO_FORMAT_FLAG_UNPACK when checking
equality on the flags.
2012-11-01 14:29:43 +01:00