Commit graph

698 commits

Author SHA1 Message Date
Wim Taymans
0f62d3442c alsa: handle driver bugs better
Use the NEAREST flag when setting a format. This only works for raw
formats and will update the format with the nearest accepted rate
or channels. We can then query the real configured format and use that
for the converter.

This makes things work when a driver tells us it can do 44100Hz but then
refuses and changes the rate to 48000.

See #2197, #2457, #2455, rhbz#2096193
2022-06-23 10:20:49 +02:00
Wim Taymans
a427e602bd audioconvert: in merge mode, flush input
In merge mode we handle 1 quantum and then flush the input and
output. Fixes a case were samples were cut at the start.
2022-06-22 15:48:09 +02:00
Wim Taymans
d13a206866 audioconvert: fix resampler in_offset
Only advance the in_offset with the number of samples that were consumed
by the resampler. In case when the resampler is filling up an old
buffer, this can be less than n_samples.

Fixes a2dp source and possibly others.
2022-06-20 12:33:52 +02:00
Lucas Holt
6a15a02ec2 Add support for MidnightBSD
Fix build issue

Fix build issue
2022-06-19 18:22:47 +00:00
Barnabás Pőcze
492a328227 spa: audioconvert: free resampler
resample::free() needs to be called in `impl_clear()` otherwise the
resampler's private data is leaked when the audioconvert instance is destroyed.
2022-06-16 19:49:50 +02:00
Wim Taymans
3cb5fab176 audioconvert: rework the control loop
Use the offset to skip entries in the sequence array.
Use one loop to handle intermediate and trailing samples.
Fixes an issue where the last chunk of a sequence would be ignored.
2022-06-16 16:45:32 +02:00
Wim Taymans
de2e819fec audioconvert2: rename to audioconvert 2022-06-16 09:19:05 +02:00
Wim Taymans
cf04bb573c audioconvert: remove old plugins 2022-06-16 09:16:49 +02:00
Wim Taymans
c160cd0176 audioconvert2: implement control port
Add a control port when requested in the PortConfig.
Fix the sequence loop.
Make a copy of the sample pointers before changing them.
2022-06-16 09:09:27 +02:00
Wim Taymans
5a60fd7041 audioconvert2: remove unused monitor field 2022-06-16 09:09:27 +02:00
Wim Taymans
194b8e2d97 audioconvert2: emit param change when volume changes 2022-06-16 09:09:27 +02:00
Wim Taymans
0ec41e60ef audioconvert2: fix for quantum changes
Use the offset as the buffer size.
Use the amount of requested - amount of used samples as queued samples.
2022-06-16 09:09:27 +02:00
Wim Taymans
fa9baa6488 examples: fix up adapter-control
Negotiate format, then buffers.
Give quantum-limit as a property when making nodes.
Set clock and position io and fill in rate and duration.
2022-06-16 09:09:27 +02:00
Wim Taymans
db49021104 audioconvert2: add control port processing 2022-06-16 09:09:27 +02:00
Wim Taymans
d5c28149f1 audioconvert2: fix in/out queued samples 2022-06-16 09:09:27 +02:00
Wim Taymans
7fe15ee5db audioconvert2: add beginnings of control ports 2022-06-16 09:09:27 +02:00
Wim Taymans
d3baa16559 audioconvert2: reset node in Flush/Suspend 2022-06-16 09:09:27 +02:00
Wim Taymans
8e6a8a705b audioconvert2: clamp in and output samples
Make sure we don't read or write more samples than available in the
buffers.
2022-06-16 09:09:27 +02:00
Wim Taymans
9e93fe3c36 audioconvert2: remap volumes to right channels
We get the volumes with a channelmap of the input/output, remap this to
the channelmixer internal layout.
2022-06-16 09:09:27 +02:00
Wim Taymans
50c37cc801 audioconvert2: rearrange some code
Move some code around so that we don't have to prepare the output
buffers when there is no input to process.
2022-06-16 09:09:27 +02:00
Wim Taymans
d5e333eea7 audioconvert2: in merge mode, always process quant samples 2022-06-16 09:09:27 +02:00
Wim Taymans
c4d77d421a audioconver2: process monitor ports immediately 2022-06-16 09:09:27 +02:00
Wim Taymans
f45f1acd82 audioconvert2: use the position rate as resampler rate
For the DSP inputs, use the position rate.
2022-06-16 09:09:27 +02:00
Wim Taymans
58abc1ec15 audioconvert2: Improvements
Suggest 2 buffers by default.
Improve rate match flow.
monitor does not need the out_offset
Update rate match when we know the queued samples.
2022-06-16 09:09:27 +02:00
Wim Taymans
2352ae33c3 audioconvert2: add queueing
Use in and out offset to read/write partial input/output.
2022-06-16 09:09:27 +02:00
Wim Taymans
d728076d33 audioconvert2: handle drain 2022-06-16 09:09:27 +02:00
Wim Taymans
1c4058b947 audioconvert2: clamp offset and size 2022-06-16 09:09:27 +02:00
Wim Taymans
229a7b6019 audioconvert2: fix default settings 2022-06-16 09:09:27 +02:00
Wim Taymans
f2c1fe106d audioconvert2: more fixes 2022-06-16 09:09:27 +02:00
Wim Taymans
3806cdaa6f audioconvert2: more improvements
Use a wildcard rate for DSP ports.
Handle wildcards for rate and channels.
Calculate required in/out samples using quantum
Limit monitor and output number of samples.
2022-06-16 09:09:27 +02:00
Wim Taymans
c0f34e9d9d audioconvert2: set blocks a stride for DSP ports
They might not get connected and negotiated but we still need to
use empty buffers in that case.
2022-06-16 09:09:27 +02:00
Wim Taymans
2d6bf00acc audioconvert2: add options 2022-06-16 09:09:27 +02:00
Wim Taymans
75ebdbdfa0 audioconvert2: start working on monitor ports 2022-06-16 09:09:27 +02:00
Wim Taymans
db2cbdf906 audioconvert2: DSP mode without format gives no ports 2022-06-16 09:09:27 +02:00
Wim Taymans
d53311099f audioconvert2: format is optional for convert mode 2022-06-16 09:09:27 +02:00
Wim Taymans
e78a93d358 audioconvert2: fix audio rate property 2022-06-16 09:09:27 +02:00
Wim Taymans
9babdee6cd audioconvert2: do input and output remapping
We remap the input channels to our cannonical layout and then remap it
to the target layout.
2022-06-16 09:09:27 +02:00
Wim Taymans
922a088129 audioconvert2: handle volume 2022-06-16 09:09:27 +02:00
Wim Taymans
0099b80098 audioconvert2: add properties 2022-06-16 09:09:27 +02:00
Wim Taymans
8cb0d9fd7b audioconvert: add channelmix and resample 2022-06-16 09:09:27 +02:00
Wim Taymans
399f638eb1 audioconvert: more work 2022-06-16 09:09:27 +02:00
Wim Taymans
7f9ddd0f15 Add audioconvert2 2022-06-16 09:09:27 +02:00
Ole Salscheider
3695611b20 channelmix: Assign slev in mixing matrix when generating side/rear from front
This way, PSD upmixing sounds much more natural and is in line with the
original publication.
2022-06-14 10:58:25 +00:00
Wim Taymans
8e1f0628f7 channelmix: add 3p1_2 and use this for quad conversions
Simplify some SSE versions
2022-06-13 20:35:00 +02:00
Ole Salscheider
5dc4434dc7 channelmix: Implement PSD upmixing for stereo -> quad
Fixes #2436.
2022-06-13 14:19:23 +00:00
Ole Salscheider
354a04c91d Channel mixer: Remove channelmix_f32_2_4_sse
It does not have PSD upmixing implemented and does not allow to disable
the simple upmixing algorithm either.

Fixes #2438.
2022-06-13 14:19:23 +00:00
Wim Taymans
a1d4b41c34 channelmix: fix control handling
We need to use the control type of the control we're actually going
to use.
2022-06-13 16:17:53 +02:00
Pauli Virtanen
fc4f831afa audioconvert: forward follower node errors
If the follower of the adapter emits an error event, the adapter needs
to forward it to upper levels so that they know the node has errored,
and handle the situation.
2022-06-05 18:10:01 +00:00
Wim Taymans
752643c295 spa: debug memcpy 2022-05-31 10:31:26 +02:00
Wim Taymans
411b12f59e audioadapter: improve error reporting
Improve the debug_params output.
Always either print the failed filter or that there was no filter.
Print the index of the enumerated failed param or a message when
there are no params.

See #2383
2022-05-17 09:52:48 +02:00