Commit graph

467 commits

Author SHA1 Message Date
Wim Taymans
f372de8608 resample: refactor rate match code
Use the same code to start rate matching so that we get the same
results for passthrough.
2021-03-14 20:06:45 +01:00
Wim Taymans
17fd38c3a5 channelmix: use front-center matrix values
Use the front-center matrix values to mix left and right.
2021-03-14 15:42:53 +01:00
Wim Taymans
a9bf93030e resample: limit input size to max size of empty space
When flushing use the max size of the empty space, not the
max size of the input buffers, which might be larger.
2021-03-13 13:53:41 +01:00
Wim Taymans
801bd98233 audioconvert: use preallocated empty buffer to drain
Avoid calling memset on a large piece of memory when draining
the resampler because it might use up all the allocated time in
our realtime thread. Instead use a prealloced empty buffer.
2021-03-13 12:54:41 +01:00
Wim Taymans
86cf4ad5a5 audioconvert: keep better track of changed params
Keep all the children param flags around and use those to decide
if something changed. Also don't change the param flag serial when
we are simply adding a listener.

This should reduce the number of param updates, most notably the
PropInfo that was updated along with the Props on volume changes.
2021-03-12 11:10:43 +01:00
Wim Taymans
6562a2ab79 channelmix: clean up param handling
Use defines to access the different params.
Fix the name of the function to emit properties.
2021-03-12 10:36:08 +01:00
Wim Taymans
d63f4234ae channelmix: remap volumes
The volumes set with the properties need to be reordered to match
the volumes of our internal layout.
2021-03-11 11:26:26 +01:00
Wim Taymans
fc044a37af resample: don't copy too much
When we are in passthrough mode, copy only the min of input and
output size or else we might overread/overwrite.

See #875
2021-03-09 12:47:38 +01:00
Wim Taymans
e095105e57 resample: fix passthrough check
Only in passthrough we need to just copy input to output. Otherwise
we need to ask the resampler for the conversion size.
2021-03-09 08:52:43 +01:00
Wim Taymans
99b2973c31 resample: disable when not used. 2021-03-08 16:55:56 +01:00
Wim Taymans
6324298bc5 channelmix: add more generic upmixing
Add options to enable lfe filtering and upmix.
Enable upmix by default, lfe is disabled because we don't actually
do a lowpass filter yet.
2021-03-06 21:31:18 +01:00
Wim Taymans
c7309f0248 channelmix: small cleanups
Fix indent
Rename DUAL/QUAD to REAR and SIDE and use it for checking availability
of stereo pairs.
2021-03-06 21:29:36 +01:00
fdev31
4d21b5f8bd Simple upmix of stereo inputs up to 7.1 output 2021-03-06 20:22:09 +00:00
Wim Taymans
3af768f124 resample: take into account the number of queued input samples
Take the queued input samples into account when calculating the
required input size. This can be 0 when there is still enough
data queued in the input for another period.

Handle 0 read_size in alsa-source and make it push out a 0 buffer,
this will then drain the resampler and make it ask for a new buffer
size. This makes the transition from one period to another more
seamless for the resampler.

Fixes #805
2021-03-04 10:27:44 +01:00
Wim Taymans
00d8d1472d channelmix: fix 7.1 to quad downmix 2021-03-01 19:51:14 +01:00
Wim Taymans
00e52ec167 resample: in drain, feed silence in all channels 2021-03-01 18:09:24 +01:00
Wim Taymans
5ae286702e audioconvert: make sure we update the flags
When we get a param update, update with the new flags.
2021-03-01 17:01:46 +01:00
Wim Taymans
d5d8150e05 fmtconvert: prefer planar formats when possible
It's easier to convert to and from.
2021-02-26 21:14:35 +01:00
Wim Taymans
50437029a3 channelmix: improve debug, add passthrough state 2021-02-26 21:12:11 +01:00
Wim Taymans
e2181c582d audioconvert: fix channel remapping some more
See #461
2021-02-26 18:40:04 +01:00
Wim Taymans
6ce3705f5e fmtconvert: fix channel remapping 2021-02-25 17:41:50 +01:00
Wim Taymans
d080cd4819 channelmix: fix 7.1 to stereo and 3.1 downmix 2021-02-25 16:18:40 +01:00
Wim Taymans
44919c83fc audioconvert: keep better track of param changes
Keep track of the param changes with the user counter. Make sure to
flip the serial switch whenever a change is pending. Previously
we copied the param from the channelmixer or follower but that
did not always result in a serial change.

Fixes #764
2021-02-19 09:57:59 +01:00
Wim Taymans
c7b7afa664 audioadapter: fix enum of properties
Keep track of the subelement we're iterating in the result index upper
bits. Use enum_sync to iterate each param and switch to the next
element when we run out of params.

See !468
2021-02-17 09:59:00 +01:00
Wim Taymans
ca10c6470f audioconvert: use sizeof for position size
And make the position field a little larger
2021-02-16 15:07:40 +01:00
Frédéric Danis
0061ddd6be audioconvert: Fix buffer overflow
This was introduced by commit c160a063b9
2021-02-16 14:56:17 +01:00
Wim Taymans
91610bd1a9 merger: emit params changed event when reconfiguring
The props param changes when the number of channels changes.
2021-02-16 12:34:59 +01:00
Wim Taymans
c160a063b9 audioconvert: handle unexpected channel positions 2021-02-16 12:34:59 +01:00
Wim Taymans
ef98361630 audioconvert: when we reconfigure, emit param changed event
When we reconfigure the node, the Props param changes with the
new number of channels.
2021-02-16 12:34:59 +01:00
Wim Taymans
d6afdda898 audioadapter: enumerate node params from follower as well
Enumerate the params from the follower as well.
Configure params on the follower and converter.
When follower params changes, emit event.

See !460
2021-02-15 15:43:03 +01:00
Wim Taymans
e7aa15e475 audioadapter: only check port params when changed 2021-02-15 15:39:39 +01:00
Wim Taymans
6c02fd663a merger: handle monitor mute as well 2021-02-05 17:41:56 +01:00
Wim Taymans
11900bbd67 audioconvert: add missing file 2021-02-05 17:29:43 +01:00
Wim Taymans
1511f19f70 audioconvert: handle monitor volumes
Implement monitor volumes in the merger. There are two volumes,
the channel volume and the monitor volume. The monitor volume
is always applied.

By default the monitor volume will now follow the main volume of
the node. This can be disabled with a monitor.channel-volumes
property.

See #674
2021-02-05 17:12:51 +01:00
Wim Taymans
6249b00b9a audioconvert: add volume ops
Add volume helpers and use this for the monitor output ports so
that we can add volumes to the monitor output signal as well.
2021-02-05 15:08:26 +01:00
Wim Taymans
972e740519 Don't advertize formats we don't yet support
We don't handle the reverse endian formats yet so make sure we
don't advertize them.
2021-02-05 12:12:44 +01:00
Wim Taymans
47b6ce84b2 channelmix: initialize with float 2021-02-02 11:01:01 +01:00
Wim Taymans
be6410909f audioadapter: remove some unused code 2021-02-01 15:16:39 +01:00
Wim Taymans
88727afbd2 resample: take already queued sample into account
When asking for samples, take into account the amount of samples
we already have converted.
2021-01-18 15:09:54 +01:00
Wim Taymans
51d44e9154 test: improve resampler test
Test with different amount of input samples.
2021-01-18 15:08:23 +01:00
Wim Taymans
19be555fa6 audioadapter: run the converter after follower drained
When the follower drained, rerun the converter again to let it drain
as well.
2021-01-18 10:29:50 +01:00
Wim Taymans
6b0abd2057 channelmix: Improve unknown channel layout handling
Clamp position to valid range. so that AUX becomes UNKNOWN.
If we have one mono source channel and unknown destination, copy it
to all destination channels.
If we have one mono destination channel and unknown source layout,
average all channels.
Otherwise, pair source and dest channels.

See #538
2021-01-15 17:51:07 +01:00
Wim Taymans
d7ff7d098b audioadapter: don't emit xrun when drained 2021-01-15 09:46:17 +01:00
Wim Taymans
a8faad9f17 fmt: support f32p -> s24s conversion
As used by MAudio Fasttrack Pro

See rhbz#916017
2021-01-14 17:58:54 +01:00
Wim Taymans
abe73c9146 meson: use global b_pie to build PIE executables 2021-01-14 16:29:32 +01:00
Wim Taymans
c9354c238f Add -fPIE to installed executables
Fixes #570
2021-01-13 19:40:37 +01:00
Wim Taymans
540011f1e3 test-resample: fix unit test
Caller should not have to resubmit old samples anymore.

Fixes #551
2021-01-09 10:55:51 +01:00
Wim Taymans
d1f9966a77 resample: implement methods we now call 2021-01-08 17:43:13 +01:00
Wim Taymans
7f007b6bca resample: tweak the resampler to keep delay number of samples
Instead of requiring the upstream node to resubmit the delayed
samples, keep the samples ourselves. The benefit is probably too
small to measure but it simplifies things a lot.
2021-01-08 16:35:26 +01:00
Wim Taymans
7e9ab8b457 resample: first resample the data, then apply the new rate
Else we might not have enough input samples for the new rate.
2021-01-08 13:17:06 +01:00