Age | Commit message (Collapse) | Author | Files | Lines |
|
During the initialisation of 4a-softmixer, when the function
'ProcessOneAvirtSubdev' fails, the function 'AttachOneLoop'
was crashing because it tried to call 'snd_ctl_close' with
a NULL pointer.
This change fixes it. A test is introduced because depending
on the kind of loop, the order of initialization of control
versus subdevs differs.
At the same time, some gotos are improved to avoid a dummy
test -this are also virtual fixes-.
Also a tiny refactor of the 3 times declared variable 'subdev'
is expected to improve the readability.
Bug-AGL: SPEC-2287
Change-Id: Ie5231a1064090d772ea0ea7d86ad8c8d79b38d72
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
|
|
avirt needs a backup of loops, before creating the streams.
However, this breaks software dynamic streams such as those of
of type bluez-alsa, because the logic was re-calling the loop creation
at each call of the 'attach' verb.
The fix simply consists in forgetting the saved loops once they are created
Change-Id: I63f492b89233bed12de583de6e1077ac1c9c3ccf
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Adds (mainly for debug purpose) a calculation on the actual number
of physical channels that are used by the created ttable
Change-Id: I5717046003851ebe297a494dcdd97c4d67e34d0b
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Fixed some incomplete log messages
Change-Id: Ib620905043b6ae3628d886cd8b4b3155005e6862
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Recent tries on the minnow board have show that the setting of channels
on a PCM must be done -after- the setting of the rate.
When not doing that, there can be issues (really, complicated to find)
around the boundaries values (open intervals) on the period bytes.
Additionally, the number of channels can now be forced in the json file.
Change-Id: I2c20853daadf9ccab06be6e04d1a185440f57780
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Reading sound frames relies on usage of poll before calling snd_pcm_writei
Recent seeks for bugs and CPU load issues have shown that the same thing
must be done on the write side.
Thus this commit uses the same mechanism, including the dedicated event
pipe for the thread termination.
Change-Id: Ifd5407c9e27da7801623583a6f7d4a2e845b43ea
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
The alsa config (for softvol, routes, rate conversion ...) was cleaned up
by the owner stream or zone, at their deletion time. This was a mistake,
because when the stream or zone creation was not complete, the cleanup of
the configuration was not done.
Instead of doing that, the config is attached to the plug
objects as private data (in the AlsaPcmCtlT structure).
Since the AlsaPcmCtlT are always recorded in the creation transaction,
it is easy to call the cleaning callback (when it exists) when the
transaction is deleted.
Change-Id: I952871518a20bfe0be6398887bc747338cf574fb
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
This adds a boolean 'optional' parameter for both playback and
capture devices. When the device is not detected, the stream(s)
that use is are not created, without leading to the exit of the
softmixer.
Change-Id: I3effbd61bfe1d1d4a7cde573354b9db791f759cc
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
This simplifies the invocation of cleanup, by only using
AlsaMixerTransactionDelete that performs the 3 actions
of cleanup, removal from list, and memory freeing.
Fixes a bug at MixerExit, because the first transaction was not
removed from the list and led to a double free error.
Also added a boolean parameter to AlsaMixerTransactionObjectDelete
(was AlsaMixerTransactionObjectForget before), that decides
wether or not the found object must be destroyed with its destructor
(for most of the cases) or simply freed in memory (which is needed
for loop device).
Change-Id: I2eacbf80a22e3d556dc432d393a1807fcd7c47fb
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Adds an optional array of quirks in the parameters of playback
and captures.
For now, the only known quirk is a needed workarround for writing
sound output on the minnow board.
Change-Id: I6c65d110a1f9333ccb77cd8f4eeb9c088d0d2eca
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
|
|
For some reason, snd_pcm_hw_params_dump does not
add a null char at the end of the dumped string.
This made weird chars appear in the console
Change-Id: I6f2895e730e9bbd0f78139505f9b9e68dd164f2e
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
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 snd-avirt drivers are installed in AGL by default as of 6.99.2.
The existing snd-aloop configuration is not broken by this change.
Change-Id: I827636656c109a7393ad77997e05069a2462ea46
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
|
|
- Replace controller binder functions definition with the binder ones.
and remove the last used submodules to use the separated libraries.
- Add liburcu as a project dependency in addition to the others ones.
Bug-AGL: SPEC-2139
Change-Id: If46eed24018e28e58d1e62397f4355d2aa46a58e
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
|
|
|
|
Prevents setting of ALSA control values out-of-range
for INTEGER type controls.
Change-Id: I7f1ef24b50022df844f6916489e0f45680de6126
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
Send back the real applied value when a stream volume changed.
Change-Id: If11e11271080c1f1710775b120f26e1cf34f0a67
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
This fixes #SPEC-2125.
The fix consists in specifying the number of channels
in the softvol pcm configuration.
When it is not set, the libasound detects a configuration
mismatch (the default number of channels being 2), and
attempts to remove the sotfvol control, which for unknown reason,
(broken support on kernel side ?) randomly fails.
Change-Id: I816b623715e413452e6793ee519e97fac6fdde43
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
A bug in bluez-alsa was preventing to perform
the PCM close, it was leading to a crash.
There is a fix for this already,
in bluez-alsa (as a patch in meta-agl-devel:
https://gerrit.automotivelinux.org/gerrit/#/c/19365),
that allows to get rid of the current limitation
(4a had to be restarted between 2 phone calls).
Now that the fix is available, (even if it is still no
mainlined), it is now safe to perform the PCM close,
without having a a crash.
Change-Id: I6654e8e5b308985c4b0842001bc11eef22724deb
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
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>
|
|
Fixes the "syntax-error" to something more explicit
(SPEC-1906)
Change-Id: I9d4c81ee1d62dcfb99799480c6dc910e2019a791
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
In the writing thread, handle the case when 'writing threshold'
was smaller than ALSA sound card's PCM buffer (defined in the driver).
This avoids waiting indefinitely for a buffer to contain a wanted number
of frames that it cannot contain.
Change-Id: Ie1aa69ea1a93471ed46d571c669ec08a1b827476
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
Replace some 'printf' by application framework debug functions.
Improve 'ALSA_PCM_UID' macro.
Correct minor errors in debug prints.
Change-Id: I49899fd904d42b5b3bec46017eb319ed7d321dc5
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
|
|
This fixes the mute/unmute logic. This was broken due to
a forgotten push for a commit
Change-Id: I6cbdedefc11ebd508d30ece71df364d9b69c74f0
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
There were too many things printed in notice mode.
Change-Id: Ia7841e219cb2e9ca71e0c4436a2048a812ef6b07
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
This fixes the compilation for hosts (Ubuntu, fedora, opensuse),
that do not have alsalib-1.1.6
Notice that this fix needed another one in app-template, since
the OS detection was broken.
These are the changes brought by the bump of app-templates:
(3dc85ec - Thierry Bultel) common.cmake: fixed erroneous search path for os-release
(7fa5e5a - Romain Forlot) Fix: missing gcov symbol in compiled binaries
(76e12e7 - CorentinLGS) app-templates doc: Changed doc to fit new format.
(02f45f1 - Romain Forlot) Update Docs
(52ae181 - Romain Forlot) Fix: typo
(f0b24b0 - Romain Forlot) Rollback about TEST build type
(e841a77 - Romain Forlot) Adding a TEST build type
(994ebc1 - Romain Forlot) Change default compilation options.
(85d5ffd - Romain Forlot) Test widget only if there are test materials
(d14bdce - Romain Forlot) Handles more test LABELS.
(70cf8fd - Romain Forlot) Missing flag for COVERAGE build type
(3c99b8a - Romain Forlot) Create a test widget
Change-Id: I788d8d0bf110dd9cdc11aac256bd535db0d90e4d
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>
|
|
When a sound card has multiple devices, it is invalid to set
the slave name of the dmix as "hw:cardname" because alsa does
not know which device to use.
The fix consists in using the device number, when it is given.
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>
|
|
Moves the log level of the message from info to debug.
Change-Id: I348421a17875b9061255c3b353e27070b0068c3b
Signed-off-by: Stephane Desneux <stephane.desneux@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>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Uses the same logic as 'aplay' to set the start & stop
thresholds. With this fix, there are no more
periodic EPIPE errors when writing to playback
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>
|
|
Changes of app-controller-submodule:
(0f3063b - Romain Forlot) Be able to dispatch required api at the wanted time
(1ff524b - Romain Forlot) Change LUA package path at LUA interpreter load
(738ae54 - Romain Forlot) Don't load two times a plugin even for LUA
(c04f029 - Sebastien Douheret) Fixed hidden bound variable (apiHandle)
(cfe3919 - Sebastien Douheret) Fixed null value when push Lua arguments
(69c0585 - José Bollo) Adjust to compile with incoming bindings v3
(d7e260c - José Bollo) Remove declaration to not existing functions
(8ac6625 - Romain Forlot) Add 2 lua utilities function
(d3504bb - Jonathan Aillet) Update README.md for new metadata keys.
Change-Id: I794ed0ca3a054e7baf11769207007ef733854474
Signed-off-by: Loïc Collignon <loic.collignon@iot.bzh>
|
|
- removed the systemd polling usage
- uses a while loop for reading
- improved the write loop, leveraging the available space
at each iteration
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
|
|
This fixes the numerous XRUN issues seen on some cards.
The trick is to set the buffer_size & period size in
hw parameters. These ones are calculated from an expected
maximum latency.
Also, the writei is done in a loop to be robust to overruns
and partial writes.
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Also sets the right number of channels.
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
The value set was wrong, and attempting to bump
to an higher value later seems to be forbidden
by the alsalib (led to EINVAL when getting parameters
of PCM)
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|
|
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
|