aboutsummaryrefslogtreecommitdiff
path: root/src/pcm.c
AgeCommit message (Collapse)Author
2020-12-02fix build breakageDavid Li
1. Add a missing field and a function 2. Disable the deprecated attribute in Android temporarily to allow us to use "pcm_read/write" which are deprecated upstream 3. Remove an unused define and an include in mixer.h 4. Add mixer_ctl_event and copy the snd_ctl_event to mixer_ctl_event 5. Add pcm_ioctl function and mark as deprecated function
2020-11-04Merge pull request #189 from wksuper/masterdvdli
Backward compatible for pcm_write() pcm_read()
2020-11-01Backward compatible for pcm_write() pcm_read()Kui Wang
Current return value of pcm_write()/pcm_read() comes from pcm_writei()/pcm_readi() which is the actual frames written/read. But the old pcm_write() /pcm_read() just returns 0 on success and a nagative value on error. This change will keep the pcm_write()/pcm_read() as the old behavior which has been already used by many applications, and is also matching the comment above each function. Signed-off-by: Kui Wang <wangkuisuper@hotmail.com>
2020-10-29AOSP CL "tinyalsa: check for NULL mmap_status"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/62644f7a3c4cfa18d7935f731cf59b675669d17a commit 62644f7a3c4cfa18d7935f731cf59b675669d17a author Phil Burk <philburk@google.com> tinyalsa: check for NULL mmap_status pcm_mmap_get_hw_ptr() was not checking pcm->mmap_status and crashed when it was NULL. Bug: 64346189 Test: input_monitor.cpp, see bug report for repro steps Change-Id: I8436686a231eb01a82dd28ca2cce561d5460bcd6
2020-10-29AOSP CL "pcm: Fix usage of oops() function for use of strerror."dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/50028cd233f8cf8a084e950c951eefc01e1cd15c commit 50028cd233f8cf8a084e950c951eefc01e1cd15c author John Muir <muirj@google.com> pcm: Fix usage of oops() function for use of strerror. The oops() function expected errno to be passed in, but at some point it was broken to look at errno itself, and ignore the passed-in value. Fix the oops() function to check the passed-in value, and modify uses of oops() to actually pass in errno and not -errno or the return value from the errored function call. Bug: None Test: pcm error code printed correctly. Change-Id: I555e1eda0cdd0cc9b94e05423d341f1c08f8e485 (cherry picked from commit 2c1d902ace5f78dcff0c39740642d269b2e17dff) Note: the oops in pcm_mmap_transfer was removed.
2020-10-28AOSP CL "pcm: add API for MMAP NO IRQ mode"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/5b15b4cbd9e779a4ecd87e0f757fb0f8f6b9bcb8 commit 5b15b4cbd9e779a4ecd87e0f757fb0f8f6b9bcb8 author Eric Laurent <elaurent@google.com> pcm: add API for MMAP NO IRQ mode Bug: 33398120 Test: build Change-Id: Iecb47f76337d98ceb01044ca488a04e1f350c6bc
2020-10-28AOSP CL "Add pcm_get_poll_fd"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/b42510d55bafc96805a44bd6ac40faac28ebd219 commit b42510d55bafc96805a44bd6ac40faac28ebd219 author Dylan Reid <dgreid@chromium.org> Add pcm_get_poll_fd Similar to ALSA snd_pcm_get_poll_fd, this will allow a user to wait for a sound device to have data in a poll(2) call. The hotword thread will use this to wait for a message on its socket or for audio data to become ready. Change-Id: I61375a73d7a842b00362fc707c12f99aa18e0bdf Signed-off-by: Dylan Reid <dgreid@chromium.org>
2020-10-28AOSP CL "Export pcm_mmap_avail"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/9074cfc4127cb841f0633b35895141f90da3f0d6 commit 9074cfc4127cb841f0633b35895141f90da3f0d6 author Dylan Reid <dgreid@chromium.org> Export pcm_mmap_avail This is useful for timer based wakeups and for checking how much data has been captured by a hotwording device. Change-Id: I409201a5c9ce73abc807a9dd767beb3a32810f06 Signed-off-by: Dylan Reid <dgreid@chromium.org>
2020-10-28AOSP CL "pcm: add support to set silence_size"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/e25fe0b50ea717a9f347dcb927d396e8772e6362 commit e25fe0b50ea717a9f347dcb927d396e8772e6362 author Maneet Singh <mmaneetsingh@nvidia.com> pcm: add support to set silence_size Tinyalsa always set silence_size to zero. Add support to set this pcm software parameter as required. Bug: 20226809 Bug: 20300203 Change-Id: I25de43623dc04bf5a3ad4c6573bc2b8dad1eec5e
2020-10-28AOSP CL "Add pcm_params string conversion and format checking"dvdli
https://android.googlesource.com/platform/external/tinyalsa/+/70530a69767a9a383c5bf546e6e803aac08a5a1e%5E!/ title: Add pcm_params string conversion and format checking commit 70530a69767a9a383c5bf546e6e803aac08a5a1e author Andy Hung <hunga@google.com>
2020-09-03tinyalsa: add plugin support for mmap/poll opsRohit kumar
2020-05-24src/pcm.c: remove MAP_FILE mmap flagEthan Sommer
MAP_FILE is a non-standard mmap flag, and has no effect on conformant systems.
2020-04-18pcm_hw_close: avoid SIGSEGV when pcm_hw_open failMiguel GAIO
Prevent the call to pcm->ops-close() if pcm->ops->open() fail. Fix memory leak in pcm_hw_open() in case of failure. * thread #1, name = 'ut', stop reason = signal SIGSEGV: invalid address (fault address: 0x8) frame #0: 0x00007ffff7f863e8 libtinyalsa.so.1`pcm_hw_close(data=0x0000000000000000) at pcm_hw.c:61:21 58 { 59 struct pcm_hw_data *hw_data = data; 60 -> 61 if (hw_data->fd > 0) 62 close(hw_data->fd); 63 64 free(hw_data); (lldb) bt * thread #1, name = 'ut', stop reason = signal SIGSEGV: invalid address (fault address: 0x8) * frame #0: 0x00007ffff7f863e8 libtinyalsa.so.1`pcm_hw_close(data=0x0000000000000000) at pcm_hw.c:61:21 frame #1: 0x00007ffff7f8491c libtinyalsa.so.1`pcm_close(pcm=0x0000000000a9eba0) at pcm.c:820:5 frame #2: 0x00007ffff7f84e0a libtinyalsa.so.1`pcm_open(card=128, device=0, flags=13, config=0x00007fffffffd000) at pcm.c:957:5 Signed-off-by: Miguel GAIO <mgaio35@gmail.com>
2020-04-10Merge pull request #148 from lkundrak/lr/double-freeTaylor Holberton
pcm: avoid calling pcm_hw->close() twice
2020-04-10pcm: do not negate errnoLubomir Rintel
sterror() surely doesn't appreciate that: cannot set hw params: Unknown error -22 where it should've been: cannot set hw params: Invalid argument
2020-04-10pcm: avoid calling pcm_hw->close() twiceLubomir Rintel
It would result in a double free: $ tinyplay example.wav failed to open for pcm 0,0 *** glibc detected *** ./utils/tinyplay: double free or corruption (fasttop): 0x402dc258 *** Aborted $ The crash happens here: Program received signal SIGABRT, Aborted. 0x40070e78 in raise () from /lib/libc.so.6 Missing separate debuginfos, use: debuginfo-install glibc-2.16-34.olpc.0.fc18.armv7hl libgcc-4.7.2-8.fc18.armv7hl (gdb) bt #0 0x40070e78 in raise () from /lib/libc.so.6 #1 0x400724b8 in abort () from /lib/libc.so.6 #2 0x400ad6e0 in ?? () from /lib/libc.so.6 #3 0x400b54e8 in ?? () from /lib/libc.so.6 #4 0x2a00486c in pcm_hw_close () #5 0x2a0032e0 in pcm_close () #6 0x2a0016b0 in ctx_init () #7 0x2a000c98 in main () (gdb) The previous free was done here: Breakpoint 1, 0x400b8b8c in free () from /lib/libc.so.6 (gdb) bt #0 0x400b8b8c in free () from /lib/libc.so.6 #1 0x2a00486c in pcm_hw_close () #2 0x2a003674 in pcm_open () #3 0x2a0015e8 in ctx_init () #4 0x2a000c98 in main () (gdb)
2020-02-11Merge pull request #137 from codeauroraforum/plugin-supportTaylor Holberton
Plugin support
2020-02-07tinyalsa: add support for PCM pluginsBhalchandra Gajare
Update the pcm framework to support plugins. Resolve the pcm device node to be either kernel device or virtual device and setup function pointers accordingly. Implement framework functionality for pcm_plugin.c for ease of plugin development. Plugin itself is compiled as shared object (.so) and dynamically linked from pcm_plugin.c. Signed-off-by: Bhalchandra Gajare <gajare@codeaurora.org> Signed-off-by: Rohit kumar <rohitkr@codeaurora.org>
2020-02-06pcm: Set SW params.avail_min to period sizeMiguel GAIO
Using MMAP APIs, this parameter wake up application when 'avail_min' samples are availables. When audio processing expects exactly a full period size samples, the default parameter to 1 burns CPU until the full period available. Fix SW params.avail parameter to period size value. Signed-off-by: Miguel GAIO <mgaio35@gmail.com>
2019-04-24pcm: Allow to wait if capture is not runningRicardo Biehl Pasquali
This allows starting capture from another thread. See the commit 932a81519572 ("ALSA: pcm: Comment why read blocks when PCM is not running") in Linux kernel. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-04-12pcm: Remove setting unnecessary parametersRicardo Biehl Pasquali
SUBFORMAT is always zero. SAMPLE_BITS and FRAME_BITS are refined by ALSA based on the already set FORMAT and CHANNELS. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Check for error after setting appl_ptrRicardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Cleanup control/status when setup failsRicardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Replace 'underruns' with 'xruns'Ricardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Create generic transferRicardo Biehl Pasquali
Group read/write transfer into pcm_rw_transfer(). Create pcm_generic_transfer() for read/write and mmap transfer modes. This recovers from xrun and suspended. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Put transfer functions togetherRicardo Biehl Pasquali
A generic transfer function will be created. Put together functions related to it. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove 'running' variable from pcm structureRicardo Biehl Pasquali
It is not needed. As the pcm structure is opaque to user it can be safely removed. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Rewrite pcm_mmap_transfer() for compatibilityRicardo Biehl Pasquali
Make pcm_mmap_transfer() compatible with read/write IO. start_threshold check was not valid for capture. pcm->running checks were removed. NOIRQ fallback was removed. Clocks of sound devices may differ from the system, leading to desynchronization. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Exit loop when there are no available framesRicardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Put mmap functions togetherRicardo Biehl Pasquali
pcm_mmap_transfer() will be rewritten. Put together functions related to mmap transfer. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Rewrite pcm_get_htimestamp()Ricardo Biehl Pasquali
Use pcm_avail_update(), check avail for timestamp coherence. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Move pcm_get_htimestamp()Ricardo Biehl Pasquali
pcm_get_htimestamp() will be rewritten. Place it after pcm_avail_update(), which will be used in the rewrite. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Get values from kernel in avail_updateRicardo Biehl Pasquali
Instead of sending appl_ptr and avail_min to the kernel, get them. This is the behavior of alsa-lib. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Call HWSYNC ioctl when status is mmapedRicardo Biehl Pasquali
When hardware pointer update is requested and status structure is mmaped, call HWSYNC ioctl. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove HWSYNC before available calculationRicardo Biehl Pasquali
Hardware pointer should not be updated in available calculation. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Do not set values after control/status mmapRicardo Biehl Pasquali
It's not necessary to send appl_ptr or avail_min to the kernel here. In prepare action, called later in pcm_open(), appl_ptr becomes zero. avail_min is already defined in software parameters. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Get appl_ptr and avail_min after prepareRicardo Biehl Pasquali
appl_ptr becomes zero in prepare action. avail_min is the same as when it was set in software parameters. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove 'prepared' variable from pcm structureRicardo Biehl Pasquali
It is not needed. As the pcm structure is opaque to user it can be safely removed. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove prepare before startRicardo Biehl Pasquali
Prepare is done in pcm_open(). Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove start before readRicardo Biehl Pasquali
Start is done by kernel when start_threshold or more frames are requested. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Prepare after overrunRicardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Remove code assuming start after writeRicardo Biehl Pasquali
The state cannot be assumed as RUNNING after a write because start_threshold may not have elapsed. Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Move prepare action to xrun handlingRicardo Biehl Pasquali
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2019-01-08pcm: Do prepare action in pcm_open()Ricardo Biehl Pasquali
This eliminates the need for prepare in transfer functions and pcm_start(). Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
2018-11-28Added ifndef around macrosTaylor Holberton
2018-11-28Checking for definition of __bitwise, __force, __userTaylor Holberton
2018-07-17Fixed pcm_start when pcm is linked to other pcm deviceMiguel Gaio
When pcm device is linked to other pcm device, the start call may be triggered by other pcm device. Handle this condition by checing pcm state before start call. Signed-off-by: Miguel Gaio <mgaio35@gmail.com>
2018-07-17Corrected pcm_sync_ptr() on dma mmap coherent architectureMiguel Gaio
It is valid to get null sync_ptr on dma mmap coherent architecture. In this case pcm_sync_ptr() is a nop. Signed-off-by: Miguel Gaio <mgaio35@gmail.com>
2018-04-10Fix pcm_writei return value if pcm is in not running state.Miguel GAIO
As per comment, on success, pcm_writei returns the number of frames written. Fix the case of pcm not running. Signed-off-by: Miguel GAIO <mgaio35@gmail.com>
2017-10-12added PCM_NONBLOCK macroTaylor Holberton