summaryrefslogtreecommitdiffstats
path: root/plugins/alsa
AgeCommit message (Collapse)AuthorFilesLines
2019-01-03bluetooth: fixes the cleanup at SCO hangupThierry Bultel1-6/+0
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>
2018-12-22Implemented the bug cleanup at application exitStephane Desneux15-132/+312
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>
2018-12-19Add support for bluetooth telephonyguppy_6.99.3guppy/6.99.36.99.3Thierry Bultel24-1056/+2166
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>
2018-11-13remove dead code and renamed unobvious variables6.9.0Thierry Bultel6-51/+41
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>
2018-11-08Fix the error string of attach actionsThierry Bultel6-17/+21
Fixes the "syntax-error" to something more explicit (SPEC-1906) Change-Id: I9d4c81ee1d62dcfb99799480c6dc910e2019a791 Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-11-07Handle too small card PCM buffer when writingJonathan Aillet1-1/+15
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>
2018-11-07Tweaking debug printsJonathan Aillet3-13/+13
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>
2018-11-07alsa-core-pcm: fixed the mute logicThierry Bultel1-4/+6
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>
2018-10-16Lower the verbosity when not in debug levelThierry Bultel2-17/+17
There were too many things printed in notice mode. Change-Id: Ia7841e219cb2e9ca71e0c4436a2048a812ef6b07 Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-09-20removed the dependency to alsalib-1.1.6 for hostThierry Bultel1-0/+4
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>
2018-09-20Remove an unfilled response json objectJonathan Aillet1-3/+1
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>
2018-09-10bluez-alsa: fixed the null device logicThierry Bultel1-2/+1
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-09-07fixed crash upon misconfiguration of capture/playback devicesThierry Bultel6-16/+24
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>
2018-09-07dmix: used device when in name of slaveThierry Bultel1-5/+27
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>
2018-08-31Added bluez sound playback supportThierry Bultel10-42/+254
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>
2018-07-26Reduce verbosity of message "readThreadEntry..."Stephane Desneux1-6/+6
Moves the log level of the message from info to debug. Change-Id: I348421a17875b9061255c3b353e27070b0068c3b Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
2018-07-20rework the sound capture & playback modelThierry Bultel4-254/+324
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>
2018-07-20added ringbuffer and time utilsThierry Bultel7-1/+694
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-07-17alsa-core-pcm: sets sw start & stop thresholdsThierry Bultel1-12/+90
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>
2018-07-11stops the read/write loop when the stream is mutedThierry Bultel8-107/+286
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>
2018-07-03Uses the APIv3 compatibility to vdynThierry Bultel1-12/+0
Uses the new compatibility for vdyn based on V3 Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-29Update version of app-controller-submodule submodule.Loïc Collignon1-1/+1
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>
2018-06-26Rework the pcm copy loop and save a lot of CPUeelThierry Bultel2-142/+188
- 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>
2018-06-22plugins: code & log cleanupThierry Bultel7-20/+21
2018-06-22pcm core: fixed spurious XRUN issuesThierry Bultel2-95/+257
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>
2018-06-22route plugin:fixed mismatch with several sound cardsThierry Bultel1-16/+40
Also sets the right number of channels. Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22set the correct number of channels in dmixThierry Bultel1-9/+40
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>
2018-06-22alsa-plug-vol: code & log cleanupThierry Bultel1-5/+11
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22alsa-utils-bypath: code & log cleanupThierry Bultel1-6/+15
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22alsa-utils-dump: added log upon failing parameters retrievalThierry Bultel1-5/+9
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22zones: fixed index mismatch when multiple sound cards are declaredThierry Bultel1-12/+19
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22alsa-api-mixer: code & log cleanupThierry Bultel1-14/+42
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22alsa-api-streams: code & log cleanupThierry Bultel1-27/+103
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22sinks: fixed index mismatch when multiple sound cards are declaredThierry Bultel1-6/+6
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-22pcm: return volume value with null set requestThierry Bultel1-4/+18
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-16Use correct chanel number when creating PCMhal-rc2-sandboxJonathan Aillet1-2/+2
Use correct chanel number when creating PCM. Change-Id: I17ac0273f9a6eec1d3b49845f579495f2cdcf9d7 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
2018-06-13Replace verb prefix separatorJonathan Aillet1-2/+2
When adding a stream , instead of using a ':' to separate prefix and verb, use a '#'. Change-Id: I2cbb467a85c52dddd4714cfe644dcdf3a35df5d3 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
2018-06-11Correct issues when calling info verbJonathan Aillet1-7/+4
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>
2018-06-11Fixed latest commitThierry Bultel1-2/+2
Wrong test on asprintf return code broke the app Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-11Fixed compilation warning with _FORTIFY_SOURCE=2Thierry Bultel6-37/+84
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
2018-06-11Remove yocto compilation errorsJonathan Aillet2-2/+2
Remove yocto compilation errors concerning : - An unitialized variable in 'alsa-api-pcm.c' - A wrong use of asprintf in 'alsa-api-streams.c' Change-Id: I170993d060a7a1d1a1c20979da0645c5ef2b1b91 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
2018-06-11Correct a conversion into ramp processingJonathan Aillet1-1/+1
The conversion from ms to us wasn't done correctly, it is fixed now. Change-Id: I004e2e42c9b6d9da4f7089d34406bef57ab21d9e Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
2018-06-11Autorize direct zone to point on sndcardfulup4-29/+56
2018-06-10Authorize new section at mixer initializationJonathan Aillet1-1/+2
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>
2018-06-10Correct a warning when using snd_output_printf functionJonathan Aillet1-1/+1
Instead of passing directly a 'const char *' to snd_output_printf function use a "%s" format. Change-Id: I46cd0fc6e5d139a6241dc3aa224b707d97a68125 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
2018-06-10Documentation/cleanupfulup1-1/+2
2018-06-10Added cardid+verb return for capture+playback sndcardfulup3-73/+267
2018-06-10Added stream/ramp return to fit HAL attach requestfulup2-90/+155
2018-06-10Cleanup and added return of previous volume when setting new valuefulup14-147/+364
2018-06-07Added log for card lookup diagnosticThierry Bultel2-2/+7
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>