Wim Taymans
170c3e4d6c
small cleanups
2019-07-01 09:31:15 +02:00
Wim Taymans
6720ded529
names: add standard factory name definitions
...
Define a set of standard factory names and document what they
contain. This makes it possible to change the implementation by
mapping the factory-name to a different shared library.
2019-06-21 13:31:34 +02:00
Wim Taymans
8cda0dd962
test: clear resample struct before use
2019-06-07 17:25:28 +02:00
Wim Taymans
497a8364c5
printf format fixes
2019-06-07 17:16:02 +02:00
Wim Taymans
d46c239ab0
some printf fixes
2019-06-07 16:37:08 +02:00
Wim Taymans
49ef8f9b5f
spa: add keys for properties
...
Define and document property keys
2019-06-03 16:48:01 +02:00
Wim Taymans
bf677d55da
spa: implement node sync
2019-05-28 14:01:18 +02:00
Wim Taymans
857b2a0cfb
spa: add result type
...
We need this to know the type of result, especially when serializing.
2019-05-28 13:59:48 +02:00
Wim Taymans
a680f434d2
port: use right properties
...
Use format.dsp as a key to mark the dsp format on a port
Use audio.channel as the key to set the audio channel on a port
2019-05-24 16:14:19 +02:00
Wim Taymans
ff946e3d4b
interface: add an interface struct
...
The interface struct has the type,version and methods of the
interface.
Make spa interfaces extend from spa_interface and make a
separate structure for the methods.
Pass a generic void* as the first argument of methods, like
we don in PipeWire.
Bundle the methods + implementation in a versioned inteface
and use that to invoke methods. This way we can do version
checks on the methods.
Make resource and proxy interfaces that we can can call. We
can then make the core interfaces independent on proxy/resource and
hide them in the lower layers.
Add add_listener method to methods of core interfaces, just
like SPA.
2019-05-23 12:59:24 +02:00
Wim Taymans
eb6481efb3
fmtconvert: also return all formats when not negotiated
...
Also return all possible formats if the other port was not
negotiated.
2019-05-23 10:27:54 +02:00
Wim Taymans
a564d9f3f1
Move implementation helpers to utils
2019-05-20 10:14:00 +02:00
Wim Taymans
3cb400bb61
audioconvert: don't use range
...
Use the spa_io_position->size to decide how many samples to output
from the resampler.
2019-05-17 10:31:20 +02:00
Wim Taymans
e009fead09
io: remove unused range
2019-05-16 16:42:49 +02:00
Wim Taymans
5858c992ef
audioconvert: improve debug
2019-05-14 18:05:51 +02:00
Wim Taymans
a70fd80c2d
fmtconvert: fix format enumeration
...
Rework the format enumeration so that it also return the other
rate/channels, even when using a canonical format.
2019-05-10 11:39:51 +02:00
Wim Taymans
1a7fcaf9c6
Fix cleanup
2019-05-10 11:15:48 +02:00
Wim Taymans
41ab051b68
fmtconvert: fix format enumeration
...
Even if the other pad is already negotiated, we can convert all
formats to F32.
2019-05-09 09:35:03 +02:00
Wim Taymans
636c02d38b
audioconvert: fix native variable rate resampler
2019-04-30 15:14:05 +02:00
Wim Taymans
cd779a1c93
splitter: disable passthrough in more cases
...
Also disable passthrough when we first negotiate output format/buffers
and passthrough is not possible because the output buffer does not
have the dynamic data flag set..
2019-04-25 12:54:03 +02:00
Wim Taymans
2912d2506f
audioconvert: improve resampler
...
Also emit port info the the merger monitor ports.
Proxy params and buffers to the right monitor ports.
fmtconvert does not always have dsp ports
Increase resampler output buffer sizes so that we can up and downsample.
Fix little off by one in native resampler.
Fix passthrough in speex resampler.
2019-04-23 17:34:27 +02:00
Wim Taymans
092a0c660d
make bitfields unsigned
...
Remove driver property from client-node of client-stream.
2019-04-10 17:52:42 +02:00
Wim Taymans
ae3e5787af
audioconvert: unroll some loop
2019-04-10 12:53:25 +02:00
Wim Taymans
dc01b294a2
resample: return the number of consumed samples
...
We need to return the number of consumed samples, even when we don't
start from the first sample in the buffer.
Add some more logging.
2019-04-02 23:06:46 +02:00
Wim Taymans
56158fbb62
channelmix: do passthrough if identity
2019-03-29 21:00:31 +01:00
Wim Taymans
d8e399dee9
audioconvert: pass state to functions
...
Pass some state to convert and channelmix functions. This makes it
possible to select per channel optimized convert functions but
also makes it possible to implement noise shaping later.
Pass the channelmix matrix and volume in the state.
Handle specialized 2 channel s16 -> f32 conversion
2019-03-29 17:39:59 +01:00
Wim Taymans
d47353c0e6
resample-native: small tweaks
2019-03-29 12:08:45 +01:00
Wim Taymans
d260cb19be
audioconvert: compile c version separately
...
Also compile the c versions in a separate module with their own
flags.
2019-03-28 21:07:53 +01:00
Wim Taymans
fe6ebd0e8a
bench: add avx resampler to benchmark
2019-03-28 16:53:26 +01:00
Wim Taymans
e7ef13e310
audioconvert: add avx optimizations
2019-03-28 16:45:57 +01:00
Wim Taymans
7f041f4098
audioconvert: improve benchmark
...
Also include the simd versions in the benchmark
Fix some issues found by new test
2019-03-28 13:26:06 +01:00
Wim Taymans
c8d3d475bb
audioconvert: handle more optimizations
...
Compile an optimized library for the given CPU with the right flags,
then link it with the main library.
2019-03-27 17:58:48 +01:00
Wim Taymans
eaffb25cc2
resample-native: optimize equal input and output sample rates
2019-03-27 13:38:34 +01:00
Wim Taymans
4fafd10a89
resample-native: cleanups
...
Add some comments, reorganize for better readability
More alignment of filter and history
Add some more test
2019-03-27 11:23:52 +01:00
Wim Taymans
555fe2f9f5
resample-native: implement variable rate
2019-03-26 17:25:14 +01:00
Wim Taymans
ecc3e78ad4
fmt-ops: use faster f32 -> s32 conversion
2019-03-26 17:24:14 +01:00
Wim Taymans
9c8913437b
audioconvert: add simple and faster resampler
...
Add a sinc based resampler that, unlike speex, avoids memcpy and
works directly on the source data. It also allows for ssse3
optimizations and aligned loads. It will later switch to table
interpolation when doing variable rate.
2019-03-26 12:58:26 +01:00
Wim Taymans
f29d14fcc8
resample: Let the resampler object handle all channels
...
Move the code to loop over all channels in the resampler itself.
This is better because the resampler can reuse its state for
each channel.
2019-03-22 16:48:35 +01:00
Wim Taymans
5a2ccee1ff
Add FASTPATH trace log
...
Add a trace_fp that can be optimized away when FASTPATH is defined.
2019-03-21 11:31:53 +01:00
Wim Taymans
036ca89c0e
audioconvert: mark ports and buffers as DYNAMIC
...
Only passthrough buffer data when the buffer and ports are
marked as DYNAMIC.
Use extra buffer for nodes that keep a ref on buffers (resample).
2019-03-21 10:45:24 +01:00
Wim Taymans
0505f2dc98
audioconvert: implement passthrough
...
Add some const and SPA_RESTRICT to methods
When the input and output is the same, work in passthrough mode
where we simply copy place the input pointer onto the output buffer
without doing a memcpy.
Do memcpy when the resampler is not active.
2019-03-20 19:29:14 +01:00
Wim Taymans
74cf412f47
utils: add debugable spa_memcpy
2019-03-20 19:27:46 +01:00
Wim Taymans
c9bd95ae5b
audioconvert: small optimization
2019-03-20 15:57:13 +01:00
Wim Taymans
b265081d6d
audioconvert: use macro to transpose
2019-03-20 13:37:20 +01:00
Wim Taymans
fa3bcabbca
audioconvert: some more optimizations
2019-03-20 13:04:44 +01:00
Wim Taymans
67f26c9caf
peaks: small optimization
2019-03-19 17:19:44 +01:00
Wim Taymans
a8e9e17159
audioconvert: enumerate propinfo correctly
2019-03-18 11:18:27 +01:00
Wim Taymans
1ab00fae6d
client-stream: make PropInfo visible
2019-03-15 20:25:21 +01:00
Wim Taymans
3fb9fa06a9
client-stream: emit property change events
...
Emit a property (param) change event when the volume or mute is
changed on a stream.
2019-03-14 16:40:17 +01:00
Wim Taymans
09c4683ef1
interfaces: make events return void
...
Events are dispatched with hooks and have no return value.
Make it possible to get the last resource and proxy sender value
for where we need it.
2019-03-01 14:04:05 +01:00