Commit graph

772 commits

Author SHA1 Message Date
Wim Taymans
2d8bce7479 names: add vulkan compute source factory name 2019-09-10 12:38:25 +02:00
Julian Bouzas
ddd2a97f7e bluez: set bluez profile property when emitting node
We need to expose the bluetooth profile in the nodes so that external
applications know how to handle them.
2019-09-10 10:42:11 +02:00
Wim Taymans
729dd1360a alsa: don't set rate, it's set by the app 2019-09-05 17:05:20 +02:00
Wim Taymans
4a4fa57efc alsa: handle target better
Rework how we handle the current device fill level and our desired
fill level so that we handle it more consistently.
2019-09-05 13:45:37 +02:00
Wim Taymans
88299ab225 alsa: add sync-id to properties 2019-09-05 13:18:56 +02:00
Wim Taymans
a232e67dd8 resample: completely fill resampler
start with a completely filled resampler so that the first
input byte immediately gives an output sample. When then have
n_taps/2 leading (almost) 0 samples.

Also make the passthrough resampler act like the real resampler
by introducing an n_taps/2 delay.
2019-09-05 13:13:20 +02:00
Wim Taymans
b1bfc900d6 improve: debug 2019-09-05 13:09:01 +02:00
Wim Taymans
0eb2705766 alsa: fix read of second part of ringbuffer 2019-09-05 09:17:14 +02:00
Wim Taymans
73628c91de audioconvert: refuse invalid channels and rate 2019-09-03 13:49:38 +02:00
Wim Taymans
1bbb144b59 alsa-utils: update the threshold also for capture 2019-08-30 17:32:56 +02:00
Wim Taymans
001c0a5217 alsa: don't compensate for rate match for very low latencies
For very small buffer sizes, don't try to attempt to compensate
for the rate matching because we would come dangerously close to
the read/write pointers and cause dropouts. Instead this latency
should be reported on the ports later.
2019-08-30 16:31:51 +02:00
Wim Taymans
8afa5b0ada node: move segment owner into the io area
This makes it easier to keep track of who is responsible for what.
Also remove the valid fields and move them to flags in the segment
info. That way, the owner can update the flags without having to
worry about concurrency.

Keep separate info for the reposition information. We need to do this
to make it possible to seek in other formats than the frame.

Clear out the owner field when the node is destroyed or removed from
the driver.
2019-08-29 18:24:09 +02:00
Wim Taymans
0d35f44fd9 tests: add channelmix test 2019-08-29 14:05:02 +02:00
Julian Bouzas
5363d3352c bluez: process available buffers in read_ready callback for a2dp-source and sco-source 2019-08-28 17:17:12 +02:00
Wim Taymans
7c865f5db0 io: add support for segment
Move fields from the io_position to io_segment. The segment contains
the mapping between raw clock time and stream time in various
formats. We keep an array of pending segments available in the
io_position field so clients can anticipate changes.

Make looping a flag in the segment instead of a state.

Prepare for segment masters. These will be registered clients that
are responsible for updating parts of the extended segment info.

Add namespace to some defines.
2019-08-27 21:36:15 +02:00
Wim Taymans
b356c83d32 node: add support for transport
Move some things around. Move the duration of the current cycle
to the clock. Also add the estimated next timeout to the clock.
Add a generic media specific counter to the clock.

Clean up the position_bar info. We can do with only a double beat
value and make the signature in floats.

Flesh out the io_position info. This has now the information needed
to convert a raw clock time into a stream time. It basically has
the same kind of features as GStreamer segments such as looping,
variable rate playback etc.. It also contains the state of the
timeline (paused/playing) and it can be used to update the position
and state from clients.

There is also extended information in the position field that
clients can update when they can.

Plugins basically only update the clock info they get (and use
the position info to check if they are slaved or not).

Before each cycle, check if there is a pending position update and
apply it.
2019-08-27 14:41:47 +02:00
Wim Taymans
6ad4adc194 node: add xrun callback
Let alsa emit xrun callbacks.
Write the xrun stats to the activation area of the node so all
clients can read it.
2019-08-22 13:25:38 +02:00
Julian Bouzas
3a43fac0c2 sco-sink: fix several timeout issues 2019-08-22 00:07:04 +02:00
Wim Taymans
8ed3cfe679 audioconvert: be more careful when clearing buffers
clean_convert() removes the internally negotiated formats but
it does not set the format (or buffers) of the externally visible
ports. Therefore, don't clear the buffers_set flags.

Instead, clear the buffers_set flag when we explicitly reconfigure
the ports, when we also clear the format.

Also clear the port buffers when we set a NULL format.

Fixes #178
2019-08-21 19:52:53 +02:00
Wim Taymans
f746c29768 jack: more improvements
Fill in the position and clock fields with jack values.
Advertize PARAMS correctly.
2019-08-21 15:20:57 +02:00
Wim Taymans
dd69b1dd7d alsa: advertize node params correctly 2019-08-21 13:05:52 +02:00
Wim Taymans
5b9869200f jack: add jack source and sink
Makes a device with a source and sink that automatically
proxies all physical ports from jack. Jack then drives our
PipeWire pipeline from its own thread.
2019-08-20 20:35:41 +02:00
Julian Bouzas
4b202b9656 a2dp-sink: fix infinite loop when buffer could not be encoded 2019-08-20 00:22:40 +02:00
Wim Taymans
4f31ca5383 vulkan: only send out buffers when ready
Keep track of the buffer that is rendering and when it finishes,
move it to the ready queue.
2019-08-19 18:16:32 +02:00
Wim Taymans
38169ec5db vulkan: update some properties 2019-08-19 16:47:02 +02:00
Wim Taymans
9799b0e679 vulkan: add vulkan compute source
Add a source that runs a compute shader and exports the GPU buffer
as a DmaBuf to the clients.
2019-08-19 16:32:22 +02:00
Wim Taymans
09eb121099 videotestsrc: fix format description 2019-08-19 16:21:11 +02:00
Wim Taymans
774e11bc10 keys: rename device.id to device.bus-id 2019-08-16 21:52:32 +02:00
Wim Taymans
47f0f1f9a3 loop: flush items in invoke from thread
When we do invoke from the loop thread, first process the pending
invoke items before handling ours. This can be used to sync the
invoke queue before cleanup.
2019-08-16 15:04:27 +02:00
Wim Taymans
954c96632c channelmix: try to handle 1 channel as MONO/FC 2019-08-16 15:03:16 +02:00
Wim Taymans
78765e8d82 v4l2: set port ref to implementation 2019-08-15 18:40:22 +02:00
Wim Taymans
37b57caf11 loop: pass loop as first argument in function 2019-08-15 18:38:32 +02:00
Wim Taymans
0af87d2685 client-node: keep port buffers in special location
Keep the output port buffers in a special mix info. They should
stay there even when the mix is removed and should only be cleared
explicitly with a NULL Format or 0 use_buffers.
2019-08-15 11:49:32 +02:00
Wim Taymans
87ae7a8011 channelmix: apply channel volumes correctly 2019-08-14 14:56:16 +02:00
Wim Taymans
fa792a91a0 fmtconvert: always prefer just 1 buffer 2019-08-13 18:42:40 +02:00
Wim Taymans
697976f416 audioconvert: only emit node_info once in add_listener 2019-08-13 18:42:21 +02:00
Wim Taymans
c6a7b3eedb channelmix: implement per channel volume
Implement per channel volume on channelmix. Extend control on stream to
take an array of values when possible.

Remove name argument from pw_node_new and pw_device_new. We can pass
this as a property instead.

Improve properties on nodes to more closely match what pulseaudio does.
Don't let the monitor do too much with the udev properties but let the
session manager set the description and icon-names.

Remove some change_mask flags for things that don't change in
introspect. Use the flags to mark changes in -cli and -monitor.
2019-08-12 15:14:39 +02:00
Wim Taymans
b8b2e494bd audioconvert: improve proxy of internal params 2019-08-12 15:14:39 +02:00
Wim Taymans
4449cf61ad audioadapter: filter filtering 2019-08-12 15:14:39 +02:00
Wim Taymans
6f8268df40 audioconvert: remove speex resampler
It's slower and less accurate then the native one.
2019-08-07 13:06:14 +02:00
Wim Taymans
06446e0d64 port: simplify buffer allocation
Use just one function to do buffer allocation on a port.

Remove some unused variables.
2019-08-07 12:56:57 +02:00
Wim Taymans
a319ec55ea remove some unused code 2019-08-07 12:56:04 +02:00
Wim Taymans
003076ffc7 splitter: always fill up all dst pointers 2019-08-06 17:03:53 +02:00
Wim Taymans
f41720e7db Add PortConfig parameter
Add a new PortConfig parameter to configure ports of elements that
are marked with the SPA_NODE_FLAG_*_PORT_CONFIG. This is used to
configure the operation of the audioconver/audioadapter nodes and
how it should convert the internal format. We want to use the
Profile parameter only for cases where there is an enumeration of
values, like with device configuration.

Add unit tests for audioconvert and adapter to check if they handle
PortConfig correctly.

Make the media session use the PortConfig to dynamically configure
the device nodes.

Remove audio-dsp, it is not used anymore and can/should be implemented
with a simple audioconvert spa node now and some PortConfig.
2019-08-06 12:45:20 +02:00
Julian Bouzas
de031b42b1 bluez: add sco-sink and sco-source nodes 2019-08-01 15:31:54 +02:00
Julian Bouzas
d274497e3c bluez: unset sco and rfcomm fd when destroying transport 2019-08-01 15:31:54 +02:00
Wim Taymans
29d73e3437 fix compilation 2019-08-01 15:28:54 +02:00
Wim Taymans
acf931abc5 audioadapter: Format param is write only 2019-08-01 10:57:25 +02:00
Wim Taymans
2772c9f554 bluez: clean up nodes 2019-07-31 18:30:19 +02:00
George Kiagiadakis
30576fcff8 audioconvert/fmtconvert: assume F32 on the other port when listing formats
This allows picking F32LE as the default format on links that have
no restriction and it avoids failing negotiation when the restricted
end cannot handle S16/F32/F32P

For instance this pipeline would previously fail:

  audio-dsp mode=merge ! audio-dsp mode=convert ! alsa-sink
old negotiation:     S16LE                   S24_32LE
new negotiation:     F32LE                   S24_32LE

The link between the audio-dsp nodes has no restriction, so previously
it would negotiate S16LE, which would then fail to negotiate with alsa-sink
because fmtconvert does not know how to convert S16LE to S24_32LE directly.

With this change, the middle link negotiates to F32LE, which can be
converted to anything.
2019-07-30 11:11:57 +02:00