Detailed changes v1.1.4 v1.1.5

From AlsaProject
Jump to: navigation, search

Contents

Detailed changelog between 1.1.3 and 1.1.5 releases

Changelog between 1.1.4 and 1.1.5 releases

alsa-tools

Core

- Release v1.1.5

Digigram Echo Mixer

- echomixer: obsolete usage of dimension information
In current implementation for a series of echoaudio drivers, some control
element set delivers information to use element values for
multi-dimensional array. Essentially, ALSA control interface of asound.h
has no common way to parse the information. As a result, the drivers
forces 'echomixer' application to parse the information by several ways.
This issue was reported by a commit 51db452df07b ('Revert "ALSA: echoaudio:
purge contradictions between dimension matrix members and total number of
members"') to Linux kernel. As a result of discussion at Linux
miniconference 2017, usage of 'dimen' member of 'struct snd_ctl_elem_info'
is going to be deprecated for future removal.
According to the above decision, this commit obsoletes usage of 'dimen'
information in 'echomixer' application. In a series of echoaudio drivers,
a control element set named as 'Channels info' includes duplicated
information of the dimension information on value array. Additionally,
some of dimension information have fixed values. This commit utilizes them
to obsolete usage of dimension information.
This patch is tested with Echo Gina 3G.

as10k1 (EMU10K1+ DSP Assembler)

- as10k1: Drop superfluous inline prefix
output_tram_line() has a superfluous inline prefix and this interferes
the build with clang. Let's drop it.

Detailed changelog between 1.1.4 and 1.1.5 releases

Changelog between 1.1.4 and 1.1.5 releases

alsa-lib

Core

- Release v1.1.5
- conf/ucm: rt5651: Add UCM config for bytcr-rt5651
Add a UCM configuration for the rt5651 codec on Intel's Cherry-Trail
platform. Adapted from [0].
[0] https://github.com/plbossart/UCM/tree/master/bytcr-rt5651
- snd_user_file: avoid use wordexp
As suggested in POSIX[1], wordexp might execute the shell. If the libc
implementation does so, it will break the firefox sandbox which does
not allow exec. This happened on Alpine Linux with musl libc[2].
Since we cannot guarantee that the system wordexp implementation does
not execute shell, we cannot really use it, and need to implement the
~/ expansion ourselves.
We provide a configure option --with-wordexp for users that still may
need it, but we leave this off by default because wordexp is a large
attack vector and it is better to avoid it.
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/wordexp.html#tag_16_684_08
[2]: http://bugs.alpinelinux.org/issues/7454#note-2
- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~
- Release v1.1.4.1
- conf: Check the availability of PTHREAD_MUTEX_RECURSIVE
Check the availability of PTHREAD_MUTEX_RECURSIVE in configure script
and use it only when possible. A fairly old version of glibc still
seems working, but just to be sure.

Control API

- ctl: deprecate APIs of dimensional information
In ALSA control interface in asound.h, 'struct snd_ctl_elem_info' has
'dimen' member to deliver information for multi-dimensional array, however
there's no common way to handle the member. As a result, drivers can
force userspace applications to handle the information by inconsistent
ways.
This issue was reported by a commit 51db452df07b ('Revert "ALSA: echoaudio:
purge contradictions between dimension matrix members and total number of
members"') to Linux kernel. As a result of discussion at Linux
miniconference 2017, usage of 'dimen' member of 'struct snd_ctl_elem_info'
is going to be deprecated for future removal.
A removal of kernel interface can cause regression issues. However no ALSA
driver in kernel land except for 'echoaudio' series utilizes this feature.
Actually it's reasonable to assume that 'echomixer' program is an unique
consumer of the interface in user land and the removal rarely brings any
impact to user land.
This commit deprecates some APIs corresponding to the kernel interface. The
kernel interface is kept till Linux kernel v4.20 at least, but actual
timing of removal is not fixed yet. After that, these APIs may also be
removed at a reasonable timing.
- ctl: ext: Fail with error code if snd_ctl_ext_callback::read_event() callback is not defined
The snd_ctl_ext_callback::read_event() callback is only optional
if no poll descriptor was given via
snd_ctl_ext_t::poll_fd
or
snd_ctl_ext_callback::snd_ctl_ext_poll_descriptors().
If a poll descriptor is given the
snd_ctl_ext_callback::read_event()
callback has also to be defined
because there is no minigful default behavior.
This callback will be called when ever the poll() on
the file descriptor indicates that there is an event pending.
Therefore returning a 0 which indicates that there is no event makes no
sense.
- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~

PCM API

- pcm: softvol: add support for S24_LE
Tested with the Wolfson WM8524 DAC on a i.MX6UL board and the following
ALSA configuration file using the pcm test utility from alsa-lib:
"""
$ cat /etc/asound.conf
pcm.!default {
type plug
slave.pcm "softvol"
}
pcm.softvol {
type softvol
slave {
pcm "hw:0"
}
control {
name "Master"
card 0
}
}
ctl.!default {
type hw
card 0
}
ctl.softvol {
type hw
card 0
}
$ pcm -D softvol -o S24_LE -c 2 -r 48000
"""
The data in the Synchronous Audio Interface (SAI) of the i.MX6UL is
aligned the following way:
"""
31 30 29 28 | 27 26 25 24 | 23 22 21 20 | .. | 3 2 1 0
## ## ## ## ## ## ## ## [ DATA[23:0] ]
"""
- cleanup: Use uint*_t instead of u_int*_t everythwere
Use the standard uint{8,16,32,64}_t everywhere instead of the
non-standard u_int{8,16,32,64}_t.
This changes the types in the public headers and removes the u_int*_t
defines. This may break things. However, indentifiers ending with _t are
reserved by POSIX[1]; defining those can lead to undefined behavior.
So if you rely on alsa-lib defining those for you, then you want the
compiler to error so things can be fixed properly.
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02
- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~
- pcm: hw: remove superfluous code to call of SNDRV_PCM_IOCTL_SYNC_PTR in snd_pcm_hw_forward()
SNDRV_PCM_IOCTL_SYNC_PTR command was introduced to PCM protocol/interface
in its version 2.0.7, however this command is used in a branch for the
newer version protocol/interface in snd_pcm_hw_forward().
This commit removes the superfluous code as a part of work for code
refactoring.
Fixes: eafb4925124b ("- added SYNC_PTR ioctl support for pcm_hw plugin")
- pcm: hw: add a helper function to issue avail_min without side-effects
At present, applications can change avail_min parameter of PCM substream
by two ways; via mapped control data, and by executing ioctl(2) with
SNDRV_PCM_IOCTL_SYNC_PTR. The former is available in a case that the
applications map the data successfully.
When utilizing alsa-lib API, the above is done by a call of
'snd_pcm_sw_params()' to hw PCM plugin. In current implementation, this
call has an side-effect to issue appl_ptr unexpectedly.
This commit adds a helper function to issue avail_min without the
side-effect.
- pcm: hw: add a helper function to issue appl_ptr without side-effects
After starting, PCM substream shift its state to running and applications
can move appl_ptr by several ways. When status and control data of runtime
of the PCM substream is not mapped, the applications should issue appl_ptr
to kernel land. In this case, when any PCM frames is handled by mmap
operation, the applications should issue appl_ptr to update.
This commit adds a helper function for this purpose. To avoid unexpected
change of avail_min, this commit uses a flag just to update appl_ptr.
- pcm: hw: add a helper function to request hwsync without side-effects
SNDRV_PCM_IOCTL_SYNC_PTR command for ioctl(2) with
SNDRV_PCM_SYNC_PTR_HWSYNC flag has an effect to update hw_ptr.
This is an alternative of SNDRV_PCM_IOCTL_HWSYNC but caller can get
current status simultaneously.
This commit adds a helper function just to issue hwsync. To avoid
side-effect to change appl_ptr and avail_min, this commit uses
SNDRV_PCM_SYNC_PTR_APPL and SNDRV_PCM_SYNC_PTR_AVAIL_MIN flags.
- pcm: hw: add a helper function just to query status data
When mapping status data successfully, mapped page includes status data
for applications. In this case, applications have no need to call ioctl(2)
with SNDRV_PCM_IOCTL_SYNC_PTR. However, in current implementation, when
map of control data is unavailable, applications execute the ioctl(2).
This is inconvenient for some cases that applications require to query
status only.
This commit adds a helper function to query status data without issuing
the control in fallback mode from failure of status mmap.
- pcm: hw: add a helper function to query status/control data
When executing ioctl(2) with some commands, applications can request
ALSA PCM core to change appl_ptr in kernel space. Below is a list of
such operations:
- SNDRV_PCM_IOCTL_PREPARE
- SNDRV_PCM_IOCTL_RESET
- SNDRV_PCM_IOCTL_REWIND
- SNDRV_PCM_IOCTL_FORWARD
- SNDRV_PCM_IOCTL_WRITEI_FRAMES
- SNDRV_PCM_IOCTL_WRITEN_FRAMES
- SNDRV_PCM_IOCTL_READI_FRAMES
- SNDRV_PCM_IOCTL_READN_FRAMES
After these operations, the value of appl_ptr should be synchronized
between kernel/user spaces.
This commit adds a helper function to query status and control data
without issuing the control data just in fallback from failure of control
mapping.
- pcm: hw: minor refactoring for initialization of control data
At failure of control data mapping, alsa-lib goes to fallback mode. In
this mode, a buffer is kept in user space and executes ioctl(2) with
SNDRV_PCM_IOCTL_SYNC_PTR for the buffer to synchronize the control data.
In current implementation, no helper function is used for initialize
the control data. This commit use an proper helper function instead of
a direct call of ioctl(2).
- pcm: hw: fix to initialize function local variable
This commit is to fix below warning.
pcm_hw.c: In function ‘snd1_pcm_hw_open_fd’:
pcm_hw.c:955:33: warning: ‘mmap_control’ may be used uninitialized in this function [-Wmaybe-uninitialized]
if (mmap_control == MAP_FAILED || mmap_control == NULL) {
^
pcm_hw.c:946:31: note: ‘mmap_control’ was declared here
struct snd_pcm_mmap_control *mmap_control;
^~~~~~~~~~~~
- pcm: hw: Call USER_PVERSION ioctl at open
Up from the new PCM protocol 2.0.14, user-space can inform the
protocol version it supports to kernel, so that the kernel may switch
its behavior depending on it. Add this ioctl call in the PCM hw
plugin at opening.
The patch contains also the addition of SNDRV_PCM_INFO_SYNC_APPLPTR
carried from the upstream kernel commit 42f945970af9 ("ALSA: pcm: Add
the explicit appl_ptr sync support"), as well as the trivial change
(an addition of comma) to sync with the kernel asound.h.
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Tested-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
- pcm: hw: maintain fallback mode for control data mapping independently
Currently, failures of status/control data mapping are handled dependently.
However, it's not sure that one of the operations is failed when another
is failed.
This commit adds a member into private data structure to maintain fallback
mode for control data mapping, independently of status data mapping. As a
result, we have four cases to handle status/control data:
1. both of status/control data are mapped.
Nothing changed. A structure with alias of 'snd_pcm_hw_t' already has two
members to point the mapped area and in application runtime they're used
to refer/set status/control data. No need to call ioctl(2) with
SNDRV_PCM_IOCTL_SYNC_PTR to issue/query the data.
2. both of status/control data are unmapped.
The two members point to allocated memory for fallback buffer. In
application runtime, the buffer is given as an argument for ioctl(2) with
SNDRV_PCM_IOCTL_SYNC_PTR to issue/query the data.
3. status data is mapped only.
One of the two members is used to point the mapped area. Another points to
allocated memory for fallback buffer. In application runtime, the buffer
is used as an argument to execute ioctl(2) with SNDRV_PCM_IOCTL_SYNC_PTR
for the latter data, but the former data is already synchronized.
4. control data is mapped only.
The same as the above.
In design of ALSA PCM interface, userspace applications are not expected
to map the status data as writable. On the other hand, expected to map
the control data as writable. In a focus on the differences, we could
achieve to reduce calls of the ioctl(2) in a case that one of the
status/control data is successfully mapped and another is failed (case 3
and 4). Especially, in current alsa-lib implementation, application
runtime queries state of runtime of PCM substream so often.
- pcm: hw: maintain fallback mode for status data mapping
In current implementation, results to map status/control data are not
maintained separately. It's handled as a fatal error that mapping of status
data is successful and mapping of control data is failed. However, it's
possible to handle this case by utilizing fallback buffer.
This commit adds a member into a local structure to maintain fallback mode
just for the mapping of status data as a preparation of later commit, in
which mapping results are maintained separately for each of status/control
data.
- pcm: hw: allocate fallback buffer in advance of trials of mapping
When allowing failure of map operation for both of status/control data
for runtime of PCM substream, applications need to use fallback buffer
for an alternative ioctl. However, in current implementation, status
mapping is dominant to the allocation.
This commit moves code for the allocation outside of the mapping
operation for status data.
- pcm: hw: deallocate fallback buffer when trials of unmapping finished
In current implementation, deallocation of fallback buffer is done at
several places.
This commit unifies these deallocations in one place.
- pcm: hw: add an arrangement for initialization of appl_ptr/avail_min
Regardless of success/failure mapping of control/status data for runtime of
PCM substream, appl_ptr/avail_min parameters are initialized. In current
implementation, they are initialized in case-dependent, different places.
It's possible to collect them to one place.
This commit unifies relevant code in a place after all of trials for the
mappings are finished.
- pcm: hw: add helper functions to map/unmap status/control data for runtime of PCM substream
Handling mapping operation for status/control data includes some
supplemental operations for fallback mode. It's better to have helper
functions for this purpose.
This commit adds the helper functions.
- pcm: hw: Remove superfluous call of snd_pcm_set_appl_ptr()
There is a call of snd_pcm_set_appl_ptr() in snd_pcm_hw_hw_params()
only for the capture direction. This must be a leftover from the
ancient code. Although it's harmless for now, it's superfluous and
confusing. Let's kill it.
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Tested-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
- pcm: minor code cleanup for ioctl call
When error occurs, return value from ioctl(2) is -1 and error code can
be got thread local variable, errno. It's OK just to check the return
value without any assignment.
- pcm: obsolete 'mmap_emulation' parameter of snd_pcm_hw_open_fd()
A function, snd_pcm_hw_open_fd(), is just for internal use. This function
has an obsoleted parameter and we can remove it without any compatibility
issue.
- pcm: dmix: Fix the inconsistent PCM state
The commit 38a2d2eda880 ("pcm: dmix: Do not discard slave reported
delay in...") changed the handling in snd_pcm_dmix_status() for taking
the actual delay from the slave PCM status. Along with it, the commit
removed the line to update its own state altogether, as it had been
done originally in the dshare patch (commit faf53c197cab "pcm_dshare:
Do not discard slave reported delay..."), supposing that the slave PCM
keeps this same state. However, for dmix/dshare, the PCM state may
differ from the slave, thus these changes resulted in the inconsistent
PCM state.
For dshare, the issue was already addressed by commit ad6957c61867
("plugin:dshare: wrong state reporting"), while the fix for dmix was
forgotten until now.
This patch restores the code to set the proper dmix PCM state again
like in the previous versions.
Fixes: 38a2d2eda880 ("pcm: dmix: Do not discard slave reported delay in...")
Reported-by: Cheng Sun <chengsun9@gmail.com>
- pcm: dshare: Call snd_pcm_dshare_state() directly
... otherwise it may be a deadlock if recursive lock isn't available.
- pcm: dmix: Workaround for binary incompatibility
The commit 1a9bd0f04481 ("pcm: direct: Fix for sync issue on xrun
recover") introduced a new field "recoveries" in
snd_pcm_direct_share_t. Unfortunately this caused two issues:
- It changed the size of the struct which is used as the magic key
- The struct size differs between 32bit and 64bit due to alignment
The former brought the incompatibility with the older alsa-lib,
e.g. when you run an app with an older alsa-lib via LD_PRELOAD, it
doesn't work any longer.
The latter is more serious, it disallows running 32bit apps dmix with
64bit together.
As a workaround, put recoveries field to the unused field
"s.xfer_align", so that the struct is in an old form. This makes the
dmix again binary-compatible with 1.1.3 and older versions, and also
fix the incompatibility between 32/64 bits.
This is a one-time workaround, and we may need to reconsider more
about a breakage in future...
Fixes: 1a9bd0f04481 ("pcm: direct: Fix for sync issue on xrun recover")
Reported-and-tested-by: Cheng Sun <chengsun9@gmail.com>
- conf: Check the availability of PTHREAD_MUTEX_RECURSIVE
Check the availability of PTHREAD_MUTEX_RECURSIVE in configure script
and use it only when possible. A fairly old version of glibc still
seems working, but just to be sure.
- build: Define __USE_UNIX98 for old glibc
Otherwise PTHREAD_MUTEX_RECURSIVE isn't defined and we get an error
with old glibc.

RawMidi API

- rawmidi: symbols: use rawmidi_virt only when available
src/rawmidi/Makefile.am only brings rawmidi_virt.c into the build when
BUILD_SEQ is defined (i.e when --enable-seq is passed). However,
rawmidi_symbols.c unconditionally refers to _snd_module_rawmidi_virt,
defined in rawmidi_virt.c.
This causes a link failure when BUILD_SEQ is disabled. For example
when linking ffmpeg against alsa-lib:
/home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libasound.a(pcm_dmix.o): In function `snd_pcm_dmix_sync_ptr':
pcm_dmix.c:(.text+0x83c): warning:
/home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libasound.a(rawmidi_symbols.o):(.data+0x4): undefined reference to `_snd_module_rawmidi_virt'
collect2: error: ld returned 1 exit status
To fix this, we make sure that rawmidi_symbols.c only uses
_snd_module_rawmidi_virt when available.

Sequencer API

- seq: fix snd_seq_set_queue_tempo() usage example in the documentation
snd_seq_set_queue_tempo() requires a queue id as the second argument,
fix the example in documentation to reflect that.
Also add the queue id as an argument of the set_tempo() function, just
to keep the whole example compilable.
- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~

Topology API

- alsa-lib: topology: fix DSP_B mode string
Use the correct string for DSP_B mode.
- topology: fix coverity issues
- topology: fix usage of SND_TPLG_INDEX_ALL when checking routes
Make sure SND_TPLG_INDEX_ALL is used correctly when checking routes so
that connecting routes of different indexes does not emit any warnings.
- topology: Fix private data for BEs
Private data was not being added to BEs. Fix this.
- topology: improve verbose output for block output.
Show index and full DAPm route in verbose output.
- topology: Add support for new widget types
Add topology support for new DSP widget types. This allows the new
widgets to be added to the driver and firmware DAPM graphs.
- topology: Add parsing for rates from conf
In alsa-lib topology parser, rate_min and rate_max are parsed currently.
Add support to parse rates also.
- topology: disable alsa-lib topology debug output by default.
- topology: Add support for missing fields parser.
The alsa-lib topology parser is missing some fields for certain objects that
are part of the ABI. This patch adds the missing fields to the parser.

ALSA Server

- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~

Compatibility routines

- cleanup: Use uint*_t instead of u_int*_t everythwere
Use the standard uint{8,16,32,64}_t everywhere instead of the
non-standard u_int{8,16,32,64}_t.
This changes the types in the public headers and removes the u_int*_t
defines. This may break things. However, indentifiers ending with _t are
reserved by POSIX[1]; defining those can lead to undefined behavior.
So if you rely on alsa-lib defining those for you, then you want the
compiler to error so things can be fixed properly.
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02

Configuration

- conf/ucm: rt5651: Mute speakers on boot
The UCM configuration is enabling the speakers in the SectionDefaults.
This is a problem when booting with an headset already connected since
the audio output is routed at the same time both on speakers and
heaphones until the jack is disconnected and reconnected again.
Fix this disabling all the outputs in the default mixer configuration.
- conf/ucm: rt5651: Add missing cdev
- conf/ucm: rt5651: Fix HiFi file name
The conf HiFi file name is HiFi.conf, fix the name in the main
configuration file.
- conf/ucm: rt5651: Add UCM config for bytcr-rt5651
Add a UCM configuration for the rt5651 codec on Intel's Cherry-Trail
platform. Adapted from [0].
[0] https://github.com/plbossart/UCM/tree/master/bytcr-rt5651
- conf: HdmiLpeAudio: remove the "front" pcm definition
PulseAudio assumes that the "front" pcm device always refers to an
analog device, not HDMI. While that assumption is not really valid, the
reality is that without that assumption PulseAudio can't know whether
"front" and "hdmi" refer to a different or the same device.
The HDMI LPE driver doesn't allow audio streaming while the HDMI cable
is unplugged, so PulseAudio has to know when it's plugged in and when
it's not. If both "front" and "hdmi" devices exist, PulseAudio will
notice that HDMI is unplugged, but it doesn't know that "front" refers
to the same device, and PulseAudio will try to use the "front" device
with bad consequences. The kernel driver's refusal to stream any audio
makes PulseAudio enter an infinite loop and then the kernel kills
PulseAudio, because it consumes too much CPU time in a realtime thread.
While the looping in PulseAudio could probably be fixed, that wouldn't
change the fact that PulseAudio thinks that there is an analog device. I
believe it's best to avoid having the same device as both "front" and
"hdmi" in alsa-lib.
I removed also the surround configuration includes. I don't think they
had any effect anyway, so I wonder why they were there in the first
place.
BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
- conf: HdmiLpeAudio: add support for 3 devices
The LPE Audio mode on BYT/CHT supports up to 3 devices, and also supports
IEC61937 passthrough. Add missing alsa-lib configurations so that
apps can use the usual -D'hdmi:CARD=X,DEV=Y,AES0=0x[4|6]' syntax, e.g.
aplay -D'hdmi:CARD=0,DEV=2,AES0=0x6' -c2 -r48000 -fs16_le
ac3_surround_test.spdif
Tested on Zotac PI330 with Onkyo receiver
- conf/ucm: DB410c-HiFi: add CIC selection
This patch adds CIC selection controls which have been added recently to
the kernel to select mic source.
Without this patch user has to manually select the control to record
from DMIC or AMIC.
- conf: USB-Audio: allow custom definitions for "default" devices
Fixes: a9b129955659 ("USB-Audio.conf: fix definition for M-Audio AudioP...")
- conf: USB-Audio: fix dsnoop args for Audiophile USB card
Fixes: a9b129955659 ("USB-Audio.conf: fix definition for M-Audio AudioP...")
- conf: Check the availability of PTHREAD_MUTEX_RECURSIVE
Check the availability of PTHREAD_MUTEX_RECURSIVE in configure script
and use it only when possible. A fairly old version of glibc still
seems working, but just to be sure.

Filename helpers

- snd_user_file: avoid use wordexp
As suggested in POSIX[1], wordexp might execute the shell. If the libc
implementation does so, it will break the firefox sandbox which does
not allow exec. This happened on Alpine Linux with musl libc[2].
Since we cannot guarantee that the system wordexp implementation does
not execute shell, we cannot really use it, and need to implement the
~/ expansion ourselves.
We provide a configure option --with-wordexp for users that still may
need it, but we leave this off by default because wordexp is a large
attack vector and it is better to avoid it.
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/wordexp.html#tag_16_684_08
[2]: http://bugs.alpinelinux.org/issues/7454#note-2

Kernel Headers

- topology: Add support for new widget types
Add topology support for new DSP widget types. This allows the new
widgets to be added to the driver and firmware DAPM graphs.
- pcm: hw: Call USER_PVERSION ioctl at open
Up from the new PCM protocol 2.0.14, user-space can inform the
protocol version it supports to kernel, so that the kernel may switch
its behavior depending on it. Add this ioctl call in the PCM hw
plugin at opening.
The patch contains also the addition of SNDRV_PCM_INFO_SYNC_APPLPTR
carried from the upstream kernel commit 42f945970af9 ("ALSA: pcm: Add
the explicit appl_ptr sync support"), as well as the trivial change
(an addition of comma) to sync with the kernel asound.h.
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Tested-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>

SHM helpers

- cleanup: fix poll.h includes
According POSIX[1] and linux manpage[2] the include is poll.h, not
sys/poll.h.
This fixes the he following compiler warning when build with musl libc:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~

Test/Example code

- test: obsolete usage of APIs of dimensional information
APIs of dimensional information are deprecated for future removal. This
commit removes test codes for user-defined element set in an aspect of
the feature.
- test/seq-decoder: enable timestamping for external subscribers
Events sent by external clients subscribed to the input port are not
timestamped.
This inconsistent behavior may surprise newbies who look at seq-decoder as
a reference example.
See the example below using "vkeybd --addr 128:0" to connect to seq-decoder,
the events sent by vkeybd are on a different queue with no timestamps:
...
EVENT>>> Type = 66, flags = 0x0, time = 0 ticks
Source = 0.1, dest = 128.0, queue = 253
Event = Port Subscribed; 129:0 -> 128:0
EVENT>>> Type = 66, flags = 0x1, time = 4.829712627
Source = 0.1, dest = 128.0, queue = 0
Event = Port Subscribed; 129:0 -> 128:0
EVENT>>> Type = 10, flags = 0x0, time = 0 ticks
Source = 129.0, dest = 128.0, queue = 253
Event = Controller; ch=0, param=0, value=0
EVENT>>> Type = 11, flags = 0x0, time = 0 ticks
Source = 129.0, dest = 128.0, queue = 253
Event = Program Change; ch=0, program=0
...
After the change events are on the main queue and are timestamped:
...
EVENT>>> Type = 66, flags = 0x1, time = 4.280907223
Source = 0.1, dest = 128.0, queue = 0
Event = Port Subscribed; 129:0 -> 128:0
EVENT>>> Type = 66, flags = 0x1, time = 4.280912063
Source = 0.1, dest = 128.0, queue = 0
Event = Port Subscribed; 129:0 -> 128:0
EVENT>>> Type = 10, flags = 0x1, time = 4.280990702
Source = 129.0, dest = 128.0, queue = 0
Event = Controller; ch=0, param=0, value=0
EVENT>>> Type = 11, flags = 0x1, time = 4.280994862
Source = 129.0, dest = 128.0, queue = 0
Event = Program Change; ch=0, program=0
...
- test: apply optimization for v4.14 kernel about changes for TLV data handling on user-defined element set
At kernel v4.14, in initial state, elements on user-defined sets have
write-only flag. When applications write TLV data, then the elements
get readable flag and the TLV data is available. Originally TLV data
is shared by elements in the same set, thus events are generated for
all of elements in the set by the write operation.
- test: add a test for list operation to user-defined element sets
Current implementation of test for user-defined element doesn't perform
list operation. This commit adds easy test for the operation.

alsa-utils

Core

- Release v1.1.5
- alsactl: Move systemd unit start-up from basic.target to sound.target
Ensures soundcard is ready before restoring state.
sound.target added to systemd in v18:
https://cgit.freedesktop.org/systemd/systemd/commit/?id=88dfa2938af
Simplify dependencies:
- After=alsa-state.service is not needed because both units test for
@daemonswitch@ with opposite outcomes.
- After=sysinit.target is automatically added by systemd.
First proposed by Tom Yan.

ALSA Control (alsactl)

- alsactl: Move systemd unit start-up from basic.target to sound.target
Ensures soundcard is ready before restoring state.
sound.target added to systemd in v18:
https://cgit.freedesktop.org/systemd/systemd/commit/?id=88dfa2938af
Simplify dependencies:
- After=alsa-state.service is not needed because both units test for
@daemonswitch@ with opposite outcomes.
- After=sysinit.target is automatically added by systemd.
First proposed by Tom Yan.

alsatplg (topology)

- alsatplg: fix topology compiler long option parsing
verbose, compile and output options all have a parameter.
- topology: delete output file if parsing fails.
Currently the binary output file is left when parsing fails. This confuses
GNU Make if the parsing fails and causes the compilation to partially
complete.

aplay/arecord

- aplay: Fix playback for small raw files
This fixes a bug when trying to play files with size
smaller than maximum supported header size.
Lets have a look at the following example:
$ aplay -s 2 sample.raw
-> playback_go(fd = 10, loaded = 26, count = 2, name="sample.raw")
--> l = loaded = 26
--> c = count - written = 2
--> c -= l = 2 - 26 = -24
---> r = safe_read(fd, audiobuf + 26, -24)
---> r = -1, EXIT_FAILURE
In this case we have already 'loaded' from the input file more
bytes that we need to send to pcm device. So, we need to adjust
the number of bytes loaded and avoid reading a negative number
of bytes.
- aplay: Refactor playback code
This introduces read_header function which tries
to read the header of an audio file in order to determine
its type.
This has the following effects:
(1) makes code easier to read
(2) don't abort if file size is less than expected header
(2), allows us to play small files with size smaller than any
supported audio file headers.
Suggested-by: Takashi Iwai <tiwai@suse.de>
- aplay: Add samples argument for playing/recording a given number of samples
-s --samples allows aplay to be used for playback/capture a given
number of samples per channel
- aplay: interrupt streaming via signal in voc_pcm_write
aplay/arecord (alsa-utils v1.1.2) cannot interrupt streaming
via CTRL-C. Fixed the issue by properly handling 'in_aborting'
flag in appropriate functions.
- aplay: Fix --max-file-time option 32 bits overflow
Fix bug in arecord --max-file-time where the file size could overflow
32 bits.

bat (basic audio tester)

- alsabat: fix one uninitialized warning issue
Fix a variable uninitialized issue, adding the initialized assignment to fix it.

alsa-plugins

Core

- Release v1.1.5

PulseAudio -> ALSA plugin

- pulse: prevent double-free when pulse_hw_constraint returns error
When pulse_hw_constraint returns error, snd_pcm_ioplug_delete() is called.
It will then call pulse_close() where "snd_pcm_pulse_t *pcm" will be free.
Then if goto the "error" label, the "snd_pcm_pulse_t *pcm" will be double-free.
To prevent this, just jump over the code which might cause double-free.

tinycompress

Core

- Release v1.1.5
- tinycompress: clarify dual-license wording
There were reports of confusion in legal circles introduced by the wording
"tinycompress is provided under LGPL and BSD dual license" in the README.
Clarify with the addition of the wording traditionally used for dual licenses:
"This file is provided under a dual BSD/LGPLv2.1 license. When using or
redistributing this file, you may do so under either license"

Header files

- tinycompress: clarify dual-license wording
There were reports of confusion in legal circles introduced by the wording
"tinycompress is provided under LGPL and BSD dual license" in the README.
Clarify with the addition of the wording traditionally used for dual licenses:
"This file is provided under a dual BSD/LGPLv2.1 license. When using or
redistributing this file, you may do so under either license"

Library

- tinycompress: clarify dual-license wording
There were reports of confusion in legal circles introduced by the wording
"tinycompress is provided under LGPL and BSD dual license" in the README.
Clarify with the addition of the wording traditionally used for dual licenses:
"This file is provided under a dual BSD/LGPLv2.1 license. When using or
redistributing this file, you may do so under either license"

Utilities

- tinycompress: clarify dual-license wording
There were reports of confusion in legal circles introduced by the wording
"tinycompress is provided under LGPL and BSD dual license" in the README.
Clarify with the addition of the wording traditionally used for dual licenses:
"This file is provided under a dual BSD/LGPLv2.1 license. When using or
redistributing this file, you may do so under either license"
Custom Search
Personal tools
Namespaces

Variants
Actions
Navigation
wiki
Toolbox