Age | Commit message (Collapse) | Author | Files | Lines |
|
Leverage the new AVIRT driver for a more secure, more dynamically
configurable loopback sound driver.
To use, replace the file smixer-4a-default.json with
smixer-4a-avirt.json, at /usr/libexec/agl/smixer/etc
The existing snd-aloop configuration is not broken by this change.
The submodule libavirt is temporary, and will be transformed into a library.
Change-Id: I827636656c109a7393ad77997e05069a2462ea46
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
|
|
Fixes most memory leaks in softmixer.
The concept of 'transaction' for dynamic streams has
been generalized to the objects created at startup.
The cleanup is done via a handle set through a atexit()
call.
Also added a missing strdup in alsa-api-loop, that fixes
a double free.
Warning, the bluez-alsa PCM are not closed in this
version. This is intentional due to a BUG in the
bluealsa ioplug PCM, that crashes upon close
(pthread_cancel is used to terminate the io_thread
and things get very bad. I have a pending fix for
that, relying on a cancellation pipe, but deeper
testing must be done).
As an effect, only one phone call can be made,
else 4a needs to be restarted
Change-Id: Idb84cafe15f17c0ef02fcc70296d541dc55a2dcf
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
|
|
This adds support for bluetooth telephony.
A big rework in the softmixer internals has been
mandatory, in order to support dynamic streams creation
and deletions.
Bluetooth telephony relies on the recent evolutions
of bluez-alsa, the most important one being the
support of HFP over Ofono. The softmixer opens
PCM ioplugs provided by bluez-alsa.
Bluetooth SCO needs 2 streams, one for listening
and the other for talking. These streams are created
upon requests sent by the hal-manager.
The hal manager subscribes for bluez-alsa events
and request the list of availalble transports.
For each "attach" transaction verb, the softmixer
maintains a list of the all created objects
(sources, sinks, zones, ramps, streams, and more)
Additionnally, it creates a new verb when the attach
succeeds, that verb is typically something like
"sco_XX:XX:XX:XX:XX:XX", and the only supported action
at the present time is {"action":"remove"}, that performs
all the cleanup of the registered objects.
Change-Id: I1b119e6c079e60daf771e63c083a1ef33a39f379
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Changed the ringbuffer "xxx_free" function to something
more explicit, because it does not free anything.
Changed "single letter" variables to nicer names
Change-Id: I000c57aa5cc684d387105441889e011a45a6ccf3
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Remove an unfilled response json object when a call is received
to change bluetooth streamed devbie.
Change-Id: I72ad4cd71c29e3cdf1427813228f6c7df63b3144
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
The null pcmplug case was not correctly handled in various places.
Also fixed some typos in the log
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
This adds sound playback for incoming sound from
connected bluetooth devices.
In this version, the softmixer relies on a modified
bluez-alsa version (https://github.com/iotbzh/bluez-alsa),
that provides an ioplug PCM bluezalsa connection proxy.
The softmixer api has a new verb to dynamically set the
device to listen to:
afb-client-demo ws://localhost:1234/api?token=\uuid=123 smixer bluezalsa_dev '{"interface":"hci0", "device":"F6:32:15:2A:80:70", "profile":"a2dp"}'
In this way it is possible to switch from a bluezalsa audio source to
another without any further configuration.
For now, only interface hci0 is supported.
This commit also migrates the softmixer binding to API v3
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Now uses two threads for in the playing loop
The first one reads from the capture device (ie, a phys. capture, or snd_aloop) and writes
data to a circular buffer. The second one gets data from the circular buffer and outputs
it to the playback. This model solves a lot of correlated timing bugs between read & write
tasks.
The read tasks only wakes up the write task when the buffer is 80% full.
The buffer size big enough to hold 2 seconds of sound.
The mute implementation has also been simplified, since it has been found out that it was possible
to recover from an interrupted read, by calling snd_pcm_start additionnally to snd_pcm_prepare.
Thus, the mute code consists in listening to an extra file descriptor in the read loop.
Reading from that descriptor gives the mute or unmute command sent at higher level (in the
PCM control event callback).
When a 'mute' order is get, the capture sound fd is simply backup and replaced by '-1' in the
set of the poll of the read task.
When a 'unmute' order is get, the fd is simply restored.
The start threshold is only computed for capture, and hardcoded to 1 for playback.
This removes most of the remaining EPIPE on playback.
The stop threshold has been removed. It had bad side effects on the amount of writeable
data returned by snd_pcm_avail_update (was returning too small chunks)
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
when the stream is muted (due to the configuration, or
due to a HAL request), the read/write loop is stopped.
The benefit is that muting will work with capture devices
that do not implement the mute in their driver.
The inconvenient of stopping the read loop is that it
has made appear an unexpected side-effect: the poll on
capture does not trig for further incoming frames.
The workaround is to completely close, then reopen
and configure the capture PCM.
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Uses the new compatibility for vdyn based on V3
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Correct issues when calling info verb :
- Two 'AFB_ReqFail' was called when an error was detected on
info call reqsuest json (generating an application framework error).
- The error messages wasn't up to date.
Change-Id: Ifbb94854bc8a9d13ddf702defa94eaa6cf87e9ba
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
Authorize the new section 'mixerapi' to be present into the json sent
to initialize mixer.
Change-Id: I7feed818f19f2d93566f6e1634933462828dbdf0
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
|
|
|
|
|
|
|
|
|
|
Make it robust to empty source, and set the source
when input is a direct capture device.
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
|
|
|
|
|
|
Fixed some warnings about uninitialized variables
|
|
|
|
|
|
|
|
|
|
|