Commit graph

2750 commits

Author SHA1 Message Date
Wim Taymans
39bfc0cb56 test: add more 5p1 to 6p1 tests
See #2809
2022-11-09 09:24:03 +01:00
Wim Taymans
25e3144887 audioconvert: skip upmix when moving channels
When we use SIDE for REAR, don't try to upmix REAR channels and vice
versa.
2022-11-09 09:24:03 +01:00
Wim Taymans
a500abaf90 tests: add some more 6p1 conversion tests
Also add a 6p1 to 5p1 downmix test.

See #2809
2022-11-08 18:10:11 +01:00
Wim Taymans
cadb7b4910 audioconvert: set SSE flag on SSE function
Or else it might be selected even when we don't run on an SSE capable
machine.
2022-11-08 18:09:02 +01:00
Wim Taymans
c8e2c4fcd6 audioconvert: debug the conversion matrix with info level 2022-11-08 17:39:16 +01:00
Wim Taymans
9cfc0eff48 audioconvert: upmix RC 2022-11-08 17:38:55 +01:00
Wim Taymans
f6d7d4372b libcamera: add Format to node params as well 2022-11-08 16:24:27 +01:00
Wim Taymans
67dcb72295 loop: don't assert in cleanup
Just issue a warning instead of asserting. Firefox does strange things
to the fds that make things crash otherwise.
2022-11-08 15:45:55 +01:00
Wim Taymans
cb18c5877b libcamera: check for item in map correctly
Fixes #2817
2022-11-08 10:41:18 +01:00
Pauli Virtanen
e96b0ed4a8 alsa: minor fixes in seq code
port_enum_params should use right param id for SPA_PARAM_Format.

Fix typoed , instead of ; at end of line. Pop frame before putting
state.offset, in case there would be padding added (apparently usually
no).
2022-11-08 09:33:56 +00:00
Pauli Virtanen
e381a26de9 bluez5: don't put side effects into spa_log_* arguments
spa_log_* are macros such that their arguments don't get executed if the
log topic is not enabled.
2022-11-07 20:22:45 +02:00
Dmitry Sharshakov
02a4758043 bluez5: aac, lc3plus: report bitpool changes
Behavior similar to SBC. This makes return value useful for media-sink logger.
2022-11-07 16:32:53 +00:00
Dmitry Sharshakov
1bea58c20b bluez5: media-sink: fix bitpool increase
The free buffer check must happen before writing to check for leftover data in buffers. In case data is left over from previous submission, bitpool mustn't be increased.
Also improved logging by adding bitpool to the log message.
2022-11-07 16:32:53 +00:00
Dmitry Sharshakov
79b95e083a bluez5: backend-native: report HFP AG battery indicator to UPower 2022-11-07 16:32:17 +00:00
Wim Taymans
492920ca35 test: add another 6.1 channelmix test
Reorder the bitmask in the natural channel order to avoid confusion.
Add another test with RL/RR/RC channels.

See #2809
2022-11-06 10:57:25 +01:00
Wim Taymans
ccec687104 test: add unit test for 6.1 up and downmix
See #2809
2022-11-05 17:12:35 +01:00
Wim Taymans
503bb94645 v4l2: we can request just 1 buffer perfectly fine 2022-11-04 15:21:32 +01:00
Wim Taymans
ccf2891070 v4l2: fix buffer amount check
When we get buffers from the driver, check if we have at least as many
as we requested. If we have more, that's ok, we will simply not queue
them.

Previously we would ignore the input number of buffers and use the
allocated amount to fill up the buffer array, which might be too small
and then we crash.
2022-11-04 13:10:55 +01:00
Wim Taymans
ec5f2d7337 v4l2: add Format on the node as well
So that we can see the format in pw-top
2022-11-04 13:10:17 +01:00
Wim Taymans
44d743ed95 spa: make all format parsing fields optional
Just like the optional build, make all field parsing optional. This
will leave the fields with their default values if they are not parsed
from the param.

We can then remove our custom functions and use the generic ones in
various places.
2022-11-03 13:13:07 +01:00
Wim Taymans
74447acedb Add some more format checks
The format parse functions don't really check if the parsed values
make any sense so we need to to this ourselves.
2022-11-03 13:10:32 +01:00
Wim Taymans
e0c0d9806f libcamera: clear format info
Or else we end up with invalid data for the fields that did not get
initialized when parsing the format param.
2022-11-02 17:14:01 +01:00
Wim Taymans
51e8ff7d8e libcamera: add EnumFormat param to the node 2022-11-02 10:35:48 +01:00
Wim Taymans
ef4b9745b2 libcamera: handle canceled requests
When a request is canceled, recycle it so we don't run out of buffers.
Implement getting and setting controls.
2022-10-31 19:03:55 +01:00
Wim Taymans
71d58e6445 v4l2: implement setting controls 2022-10-31 11:33:45 +01:00
Jaroslav Kysela
a2278a5f70 spa: support the speakers (output) only case in report_jack_state()
The Realtek ALC4080 USB audio device (integrated in the
motherboards) can detect the presence on all I/O jacks.

If user connects only speakers, it's a valid case.

BugLink: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/2744
2022-10-29 20:22:06 +02:00
Wim Taymans
855bebf0ea audioconvert: update started field better
Set up the adapter and then set the started field to true before we
Start the follower and converter. It is possible that the follower will
start processing immediately so the started state needs to be set
correctly.

Similarly, first perform the Pause and Suspend calls on the follower
and converter before clearing our buffers and format so that things
are stopped properly.

See #2764
2022-10-27 10:29:15 +02:00
Pauli Virtanen
cc4e5a89b4 bluez5: fix BAP codec sink flag usage
MEDIA_CODEC_FLAG_SINK means the local endpoint is sink. Have this the
same way for BAP, no need to invert it.
2022-10-26 20:14:34 +03:00
Pauli Virtanen
d0d783541d bluez5: reduce the number of registered Opus endpoints
The different source modes can share the same endpoint.
2022-10-26 18:59:26 +03:00
Pauli Virtanen
d94832942e bluez5: allow codecs to share endpoints
AVDTP in principle allows 62 endpoints, but in practice it appears some
devices (Samsung Galaxy Buds2 Pro, Redmi Buds 3 Lite, probably others)
fail to connect A2DP when the number is somewhere above 24.  A2DP
connection works when initiated from the Central, but not when the
device itself does it, so these devices are not fully broken.  We should
reduce the number of registered A2DP endpoints to avoid running into
problems with such broken devices.

Some of our source codecs are the same actual codec with the same
configuration, and don't need separate source endpoints.

Allow codecs to not have a registered endpoint (fill_caps == NULL), and
tolerate codecs with the same endpoint name.  In codec switch, keep
track separately which of the codecs with the same endpoint name the
local endpoint is currently associated with.
2022-10-26 18:59:26 +03:00
Pauli Virtanen
99406aefea bluez5: deal with missing endpoint path in selectproperties 2022-10-26 18:59:26 +03:00
Wim Taymans
0396ca4931 libcamera: let the session manager set pause-on-idle 2022-10-25 20:27:14 +02:00
Wim Taymans
7182145435 libcamera: pick better default format
Pick the first format in the list of supported as something closest
to 640x480 instead of the lowest possible resolution.

Applications that don't suggest a default size will then get something
more sensible than a poster frame.
2022-10-25 12:10:42 +02:00
Wim Taymans
2086fa5ad2 libcamera: recycle buffers when no io area 2022-10-24 15:40:13 +02:00
Wim Taymans
df094b3649 v4l2: recycle buffers when no io area
When there is no io area to place our buffers, recycle them immediately.
Otherwise we would run out of buffers and stall.
2022-10-24 13:16:08 +02:00
Wim Taymans
a57602cc4d v4l2: remove unused forward declaration 2022-10-24 13:15:42 +02:00
Wim Taymans
2c4e1b8537 node: check if active when ready event is emited
Add a check that the node is actually started when we get the ready
callback.
2022-10-24 12:33:56 +02:00
Pauli Virtanen
2fa3120486 bluez5: driver should produce buffers before ready
The graph cycle goes: driver timeout -> process output nodes -> process
driver node.  Hence, driver should produce buffers in the timeout,
otherwise there's one quantum extra latency.

Make the bluez5 media/sco sources as drivers put a buffer to io before
indicating ready, and as follower do it in process. Also make checks if
io == NULL, and don't set io->status to HAVE_DATA unless there really is
a buffer ready.
2022-10-22 15:23:06 +03:00
Barnabás Pőcze
95eeb7c2ec spa: bluez: dbus: add endpoint (un)registration helpers
Introduce `unregister_media_endpoint()` to unregister the specified
media endpoint object from dbus. Moreover, move the logic that decides
whether or not a particular codec should be registered for a given
direction into `endpoint_should_be_registered()` and use that in
both `(un)register_media_endpoint()`.
2022-10-21 13:39:31 +00:00
Wim Taymans
71879961db alsa-seq: avoid division by 0
Make sure the rate in the state is updated in all cases and make sure
that it never has anything with a 0 in it to avoid division by zero.
2022-10-21 13:15:36 +02:00
Pauli Virtanen
d388c206ef bluez5: reset timers when reassigning followers
Driver timeouts need to be started/stopped when we switch from follower
to driver or vice versa.

The BT sources fail to do this, so fix it. Sinks already do it right.
2022-10-21 07:09:36 +00:00
Wim Taymans
c0fc29494f bluez5: stop before freeing things
Make sure all timers are stopped before we clear our state.

See #2764
2022-10-20 21:52:49 +02:00
Wim Taymans
4c1115cf1d alsa-seq: attempt to get more data in timeout
Also emit the NEED_DATA status so that the graph will pull in new
midi data even when we don't output anything.

Fixes #2775
2022-10-20 17:44:42 +02:00
Wim Taymans
f7c4909243 udev: use devpath for the sysfs.path property
So that it matches what pulseaudio does.

Fixes #2779
2022-10-20 16:44:37 +02:00
Pauli Virtanen
9c4aab7508 bluez5: sco-sink: implement flushing the same way as in a2dp-sink
Use separate timers for driving graph and for flushing, since they don't
have the same period.

Flushing is done based on the time positions of the next sample to be
written, so it will stay in sync with the graph.  Because writing too
much data to SCO sockets generally only causes the device to skip ahead,
we don't need to handle the case where the writing has been lagging.

This fixes simultaneous playback to both ALSA and SCO sinks from the
same graph, with SCO as driver, which previously produces broken sound
(e.g. with pw-play --latency 512, linked to the two sinks) ALSA nodes
require regular driver intervals, which was not true previously.
2022-10-18 14:42:14 +00:00
Pauli Virtanen
9cfa66baa2 bluez5: media-sink: flush packets at time of first sample
Send encoded data packets at the time corresponding to their first
sample. This is simpler than what we did previously.

Use this scheme also for BAP.
2022-10-18 14:42:14 +00:00
Pauli Virtanen
d231e2a1b1 bluez5: media-sink: bigger socket buffer
Bigger buffer allows for more fluctuation in transmission rate without
sound glitches.

It doesn't matter much for latency, as under normal conditions we are
not producing data faster than the BT adapter can transmit, so the
buffer generally is almost always empty or full, and in the latter case
we have to reduce the bitrate.
2022-10-18 14:42:14 +00:00
Jonas Holmberg
22a1e5b848 alsa-pcm: Start playback when there is data
Do not start the playback device until there is data to play. Otherwise
time consuming configuration of other nodes (such as setting hw params
of a capture device) may be done after playback has been started, which
may cause xrun.
2022-10-17 15:21:49 +02:00
Wim Taymans
3a7d6b74f2 audioconvert: only reinit channelmix when params change
Don't reinitialize the channel mixer when only the volume changes.
2022-10-13 10:31:09 +02:00
Wim Taymans
9efb2e3463 audioconvert: optimize upmix functions with SSE 2022-10-13 10:19:04 +02:00