Commit graph

4210 commits

Author SHA1 Message Date
Jaroslav Kysela
d6adde0e32 ucm: top-level path - set directory from symlink
It is useful to read the top-level symlink and set the configuration
directory according this symlink for the relative paths.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-13 14:40:58 +01:00
Jaroslav Kysela
1454b5f118 Release v1.2.6.1
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-09 14:17:59 +01:00
Jaroslav Kysela
4b22871ee5 conf: fix the device parsing when arguments has no defaults
The commit bf528b90 sets the value to an empty string which causes
these errors:

   pcm_hw.c: Invalid type for device
   pcm_hw.c: Invalid type for subdevice

When device arguments (@args) have no default values set,
the field must be skipped to keep the compatibility.

BugLink: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1246
Fixes: https://github.com/alsa-project/alsa-lib/issues/199
Fixes: bf528b90 ("conf: add possibility to evaluate simple integer math expressions")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-09 10:15:47 +01:00
Jaroslav Kysela
f44c94f24c conf: accept '_' character in the variable name
Fixes: https://github.com/alsa-project/alsa-lib/issues/197
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-07 09:21:26 +01:00
Jaroslav Kysela
85b3c276d2 Release v1.2.6
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-06 11:17:27 +01:00
Jaroslav Kysela
2623e4bb76 ucm: add initial doxygen documenation
This is an attempt to explain the UCM in a more verbose way.

BugLink: https://github.com/alsa-project/alsa-ucm-conf/issues/103
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-01 10:33:44 +01:00
Jaroslav Kysela
ebb8a6c7a1 conf: introduce snd_config_load_string()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-01 10:18:58 +01:00
Jaroslav Kysela
a95942f1af conf: confeval - fix _to_integer error code
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 14:42:12 +01:00
Jaroslav Kysela
327bd5f28b conf: fix test/lsb/config.c
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 14:41:14 +01:00
Jaroslav Kysela
9b53b1f0fb conf: improve simple integer math expressions - brackets
Add brackets to the simple math expressions like:

  $[($a+($val+100))/2]

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 14:35:58 +01:00
Jaroslav Kysela
7b6da9ee6d ucm: add ${eval:EXPR} substitution (Syntax 5)
It is useful to do simple integer math in UCM configurations, too.
Use snd_config_evaluate_string() string for this job.

Example:

    ${eval:1+1}
    ${eval:100*$var1}
    ${eval:$[$var2+1]/5}

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 14:22:39 +01:00
Jaroslav Kysela
bf528b9066 conf: add possibility to evaluate simple integer math expressions
It is useful to use the math expressions for the values in configuration.
This patch adds a simple expression evaluation routines (integer only).
The syntax is simplified unix shell (bash) style.

Examples:

	$[1 + 1]
	$[$[2 + 2] / $var1]
	$[0xa0 | 0x05]

As a bonus, the variable substitutions were more abstracted.
The function snd_config_expand_custom() was introduced to be used
for example in the topology pre-precessor.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 11:33:35 +01:00
Jaroslav Kysela
32d332b786 conf: add safe_strtoll_base() like safe_strtol_base()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-29 15:01:32 +01:00
Jaroslav Kysela
7ffe3d4162 ucm: fix parsing of the internal hexadecimal card identifier (2)
I forgot to change the passed variable name.

Fixes: 050f18c5 ("ucm: fix parsing of the internal hexadecimal card identifier")
Fixes: https://github.com/alsa-project/alsa-lib/issues/188
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-12 17:27:39 +01:00
Jaroslav Kysela
050f18c525 ucm: fix parsing of the internal hexadecimal card identifier
Too many code was removed.

Fixes: f547b2e3 ("conf: introduce safe_strtol_base()")
Fixes: https://github.com/alsa-project/alsa-lib/issues/188
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-12 16:00:59 +01:00
Jaroslav Kysela
ea5481296f ucm: fix DeviceModifier parser
The bellow commit caused regression for the SectionModifier parser. Revert
the single line change.

Fixes: 251bc204 ("ucm: implement RenameDevice and RemoveDevice verb management")

Fixes: https://github.com/alsa-project/alsa-lib/issues/167
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-07 18:41:43 +01:00
Jaroslav Kysela
faee7f678d pcm: softvol - mark _snd_pcm_parse_control_id as static
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-02 11:04:43 +01:00
Jaroslav Kysela
f0d540f851 pcm: partially revert "pcm: softvol - make snd_pcm_parse_control_id private"
This reverts partially commit b9a4997e92.

It seems that we have have some users for this very specific function.
Mark it deprecated and keep the softvol implementation separate,
so we can remove this function easily in future.

Fixes: https://github.com/alsa-project/alsa-lib/issues/186
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-02 11:00:35 +01:00
Jaroslav Kysela
5fab157a59 topology: do not call strtol directly
Introduce safe_strtol_base() function and redirects all
strtol calls there. Also, improve error and value handling
in callers.

BugLink: https://github.com/alsa-project/alsa-lib/issues/187
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-02 10:45:51 +01:00
Jaroslav Kysela
f547b2e35f conf: introduce safe_strtol_base()
It is useful to parse hexadecimal strings, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-02 10:41:11 +01:00
Jaroslav Kysela
0e2b167e93 configure: bumb version to 1.2.6pre1 (for alsactl/alsa-utils)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 12:13:44 +02:00
Jaroslav Kysela
23198a72cd ucm: suppress the no device (no UCM card) errors on request
It seems that users are confused when the UCM configuration
is not ready for the particular hardware. Actually, we don't
allow a fine grained message classification in alsa-lib and
UCM API. Allow suppression of this specific type of messages
on the application request (typically alsactl).

BugLink: https://github.com/alsa-project/alsa-utils/issues/111
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 11:52:08 +02:00
Jaroslav Kysela
a6a22d82a0 rawmidi: allocate the read buffer in the params call
It is better to allocate the read buffer for the framing stream
in the params setup call.

Suggested-by: David Henningsson <coding@diwic.se>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
392d5b06f8 rawmidi: free framing read bufffer when the framing mode becomes inactive
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
c932c1e7ab rawmidi: add support for SNDRV_RAWMIDI_IOCTL_USER_PVERSION
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
c578e80d6f rawmidi: return ENOTSUP when timestamp reads are not supported by plugins
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
5ac6198376 rawmidi: allow timestamp reads only for the appropriate read mode
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
11f54c2774 rawmidi: doc - fix the framing / read mode section
Follow the previous changes and describe the current API.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
d3c5e9e009 rawmidi: rename enum snd_rawmidi_framing to snd_rawmidi_read_mode
We hide the internal data transfers using the data frames. Rename
the snd_rawmidi_framing enum to snd_rawmidi_read_mode to make
API more straight and understandable.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Jaroslav Kysela
5a5c2953ea rawmidi: define more abstract API for the timestamp reads
The frame structure is a bit internal thing for the kernel
data transfer implementation. Introduce snd_rawmidi_tread()
function which is straight for the application usage and hides
the framing data transfers (kernel space API).

The current code implements the read cache and does the merging
of the frame reads with the similar timestamps (opposite
to the kernel data split for big chunks).

If the application wants to use super-duper-lighting-fast reads,
the snd_rawmidi_read() may be used, but the structure must be
defined on it's own, because this mechanism is not preferred
and unsupported.

BugLink: https://github.com/alsa-project/alsa-lib/issues/172
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-28 08:40:20 +02:00
Johan Adolfsson
42eeb5eca0 dlmisc.c: Avoid double unlock in snd_dlobj_cache_get0()
Remove call to snd_dlobj_unlock() in snd_dlobj_cache_get0()
All lock/unlock is done by callers of the function.

Buglink: https://github.com/alsa-project/alsa-lib/issues/181
Fixes: https://github.com/alsa-project/alsa-lib/pull/182
Signed-off-by: Johan Adolfsson <johana@axis.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-10-07 16:52:56 +02:00
Jaroslav Kysela
a1e91720cc rawmidi: initialize the reserved space in snd_rawmidi_params_default()
BugLink: https://github.com/alsa-project/alsa-lib/issues/178
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-09-19 21:04:21 +02:00
Sava Jakovljev
1aeea94ce8 pcm: multi plugin - adjust appl_ptr on rewind/forward operations
When doing rewind or forward operations, application pointer needs to
be properly adjusted, in the same way when doing commit/write
operations.

Fixes: https://github.com/alsa-project/alsa-lib/pull/161
Signed-off-by: Sava Jakovljev <sava.jakovljev@teufel.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-09-03 08:54:56 +02:00
Henrik Enquist
c4972cb154 pcm: add a note about return values of snd_pcm_state()
Fixes: https://github.com/alsa-project/alsa-lib/pull/162
Signed-off-by: Henrik Enquist <henrik.enquist@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-09-03 08:41:40 +02:00
Jaroslav Kysela
aa04023565 ucm: substitute the before/after identifiers
This allows to handle correctly declarations like:
  Before.SectionDevice "${var:DeviceMic}"

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-09-01 11:05:51 +02:00
Jaroslav Kysela
4a52ae4c32 ucm: fix the parsing of the hexadecimal prefix
The safe_strtol() function use strtol() which expects
to have the '0x' prefix for the hexadecimal number (when
base argument is zero).

BugLink: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1553
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-08-31 09:42:02 +02:00
Jaroslav Kysela
7d40a76ef5 ucm: avoid zero card instance number
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-08-31 09:25:12 +02:00
Takashi Iwai
754c696aef rawmidi: Use the standard types for snd_rawmidi_framing_tstamp_t definition
Using the kernel-specific types like __u8 breaks the compilation of
applications.  Also we need the packed attribute.

Although we may want to move to an opaque type later, let's put the
workaround at first.

Fixes: https://github.com/alsa-project/alsa-lib/issues/172
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-08-24 10:40:14 +02:00
Jaroslav Kysela
b97dec9502 asound.h: fix the __packed use for the out-of-kernel code
Also, move __kernel_long_t to type_compat.h for the consistency.

Fixes: https://github.com/alsa-project/alsa-lib/issues/171
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-08-20 21:15:01 +02:00
David Henningsson
868ecd509d test: rawmidi: Add test for rawmidi framing API
Adds a "clock type" parameter to the "rawmidi" test program, that when
used and combined with -i (and -v to be useful), activates tstamp type
framing with the specified clock type.

Signed-off-by: David Henningsson <coding@diwic.se>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-08-20 08:47:23 +02:00
David Henningsson
95eb312fad rawmidi: Add rawmidi framing API
Optionally, incoming rawmidi bytes can be put inside a frame of type
snd_rawmidi_framing_tstamp_t.
The main current benefit is that can enable in-kernel timestamping of
incoming bytes, and that timestamp is likely to be more precise than
what userspace can offer.

Tstamp type framing requires a kernel >= 5.14 and a buffer size that
is a multiple of sizeof(snd_rawmidi_framing_tstamp_t). It is only
available on input streams.

Signed-off-by: David Henningsson <coding@diwic.se>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-08-20 08:46:26 +02:00
Jaroslav Kysela
23a191a82c control: remap - assign right name to the child handle for no-op (2nd case)
Fixes: https://github.com/alsa-project/alsa-utils/issues/100
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-29 19:31:35 +02:00
Jaroslav Kysela
e47c11822d control: remap - assign right name to the child handle for no-op
Fixes: https://github.com/alsa-project/alsa-utils/issues/100
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-29 18:02:30 +02:00
Jaroslav Kysela
1a1f0fb244 pcm: rate - fix some gcc warnings
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-28 12:13:56 +02:00
Jaroslav Kysela
f4f29d42be fix build with --disable-ucm
Link: https://mailman.alsa-project.org/pipermail/alsa-devel/2021-June/186729.html
Reported-by: Michael Forney <mforney@mforney.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-28 12:13:56 +02:00
Tanjeff-N. Moos
7ba3f888d0 control: Minor documentation fixes.
Signed-off-by: Tanjeff-N. Moos <tanjeff@cccmz.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-21 17:13:26 +02:00
Tanjeff-N. Moos
ccc14ae897 control: Add documentation for snd_ctl_card_* and friends.
In this patch series, I added a description about control interface
handling and how control interfaces are identified.

In addition, I added/improved Doxygen documentation for the
snd_ctl_card_info_t type and related corresponding functions,
e.g. snd_ctl_card_info(). I also documented other card-related like
snd_card_next().

Along the way I did minor documentation improvements.

Signed-off-by: Tanjeff-N. Moos <tanjeff@cccmz.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-21 17:12:53 +02:00
Jaroslav Kysela
e0e0846590 pcm: direct plugins - fix bad memory access when channel bindings do not match hw
Fix and cleanup snd_pcm_direct_check_interleave() function.
Add requested / hardware channel check and use goto when the interleaved

Fixes: https://github.com/alsa-project/alsa-lib/issues/117
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-21 15:18:28 +02:00
Takashi Iwai
a5e11f9a81 pcm: Move snd_pcm_channel_area_addr() and _step() to public header
Used in the rate plugins commonly.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-21 14:22:36 +02:00
Jaroslav Kysela
dd609ef968 pcm: direct plugins - fix hw_ptr in the status callback
The parent hw_ptr may be in another range (boundary limit).
Set the correct value for the caller.

BugLink: https://github.com/alsa-project/alsa-lib/issues/155
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-21 09:28:43 +02:00