Age | Commit message (Collapse) | Author |
|
memcpy() is arguably wrong when copying these string constants.
The string constants will usually just be as long as necessary,
so we might copy some random memory behind it and eventually crash.
Use strncpy() instead to avoid copying characters after the null
terminator. For some reason the strings in snd_ctl_card_info use
unsigned chars, so we need a cast to char* to make it compile
unfortunately...
This fixes the following compile error on ppc64le:
In function 'mixer_plug_get_card_info',
inlined from 'mixer_plug_ioctl' at mixer_plugin.c:371:15:
mixer_plugin.c:333:5: error: 'memcpy' forming offset [9, 16] is out of the bounds [0, 8] [-Werror=array-bounds]
333 | memcpy(card_info->id, "card_id", sizeof(card_info->id));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Not sure why that warning does not exist on other architectures.
|
|
tinyalsa: include <sys/types.h> for ssize_t
|
|
ssize_t is defined in <sys/types.h>, see
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html
Add an include for it to avoid a compile error when building with musl:
../include/tinyalsa/plugin.h:184:5: error: expected specifier-qualifier-list before 'ssize_t'
184 | ssize_t (*read_event) (struct mixer_plugin *plugin,
| ^~~~~~~
|
|
pcm_hw_close: avoid SIGSEGV when pcm_hw_open fail
|
|
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>
|
|
tinyalsa: add plugin.h to install path
|
|
Export plugin.h so that it can be used by tinyalsa
clients.
Signed-off-by: Rohit kumar <rohitkr@codeaurora.org>
|
|
pcm: avoid calling pcm_hw->close() twice
|
|
pcm: do not negate errno
|
|
sterror() surely doesn't appreciate that:
cannot set hw params: Unknown error -22
where it should've been:
cannot set hw params: Invalid argument
|
|
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)
|
|
|
|
Fix cross-compilation
|
|
Cross-compilation failing due to make library resolution.
|
|
Plugin support
|
|
Update the mixer framework to support plugins. Add ability for physical
card to have either kernel registered mixer controls or plugin
registered mixer control or both. Split mixer controls into two groups,
one for kernel registered (hw_grp) and the other for plugin registered
(virtual_grp).
Signed-off-by: Rohit kumar <rohitkr@codeaurora.org>
Signed-off-by: Bhalchandra Gajare <gajare@codeaurora.org>
|
|
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>
|
|
pcm: Set SW params.avail_min to period size
|
|
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>
|
|
Use CMAKE_INSTALL_<path> instead of hardcoding bin/lib/ install paths
|
|
Helps fix build/packaging issues on machines where default libdir is not
lib but say lib64
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
utils: Fix spelling in help text
|
|
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
|
|
pcm: Allow to wait if capture is not running
|
|
|
|
Fix typo in -D and -d options descriptions
|
|
|
|
makefile: Don't overwrite CROSS_COMPILE variable
|
|
Signed-off-by: Lucas Tanure <tanure@linux.com>
|
|
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>
|
|
Easier Version Specification
|
|
pcm: Remove setting unnecessary parameters
|
|
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>
|
|
Fix integer division issue in int_to_percent function
|
|
Changed order of operations to preserve the precision during the division.
|
|
This commit moves the changelog version check to the CI instead of the build
systems. Rationale is: the failure to update the changelog is not a build
failure / issue but rather an integration failure and it should be detected at
integration testing. The closest to integration testing is the CI testing which
is mandatory before pull requests and new features integration.
Additionally, the old version.py script is removed because it is relying on the
old version of include/tinyalsa/version.h where the TINYALSA_VERSION_STRING
macro is defiend as an explicit string literal. Since now the version string is
defined piece-wise and based on the individual version numbers, and since the
introduction of version.sh and its use within meson build system to get the
version from the version file, the old version.py script is obsolete.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tinymix: fix use of -D with set command
|
|
Signed-off-by: Andrew Ford <aford@opensource.cirrus.com>
|
|
|
|
|
|
|
|
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
|
|
Signed-off-by: Ricardo Biehl Pasquali <pasqualirb@gmail.com>
|