]> git.alsa-project.org Git - alsa-utils.git/log
alsa-utils.git
4 years agotopology: pre-process-object: Add support for processing Manifest object
Ranjani Sridharan [Mon, 26 Apr 2021 18:19:31 +0000 (11:19 -0700)]
topology: pre-process-object: Add support for processing Manifest object

The pre-processor converts the Topology2.0 objects into
the relevant sections by looking for attributes defined
in the template config for the section and reading the
attribute values from the object instance config.

The structure struct build_function_map contains the
mapping of the build function to use for each object
based on the type and name for the class that the object
belongs to. The manifest object is the simplest with
no attributes. So, the build function simply creates
a new Section called SectionManifest which will be
populated with the data section in the following patches.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-object: construct object name from its constructor attributes
Ranjani Sridharan [Mon, 26 Apr 2021 17:10:03 +0000 (10:10 -0700)]
topology: pre-process-object: construct object name from its constructor attributes

An object's name is derived from its constructor attribute
values separated by '.'. For example, the name for the
host widget objects is derived from its index and direction
attribute values as follows:
Object.Widget.host."playback" {
index 2
}

The name for the host widget object would be host.2.playback.

Alternatively, if the object has a name attribute, the class
definition may skip the constructor attributes and the name attribute
value will be used instead.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-object: check attribute validity
Ranjani Sridharan [Mon, 26 Apr 2021 17:04:54 +0000 (10:04 -0700)]
topology: pre-process-object: check attribute validity

Attributes can have constraints set for valid values, min
or max values. If the attribute value is set in an object,
the value must be validated against the set constraints.

An example for attribute constraint would be:
DefineAttribute."direction" {
constraints {
valid_values [
"playback"
"capture"
]
tuple_values [
0
1
]
}
}

where the tuple_values array would translate the valid_values of
playback as 0 and capture as 1.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology/pre-process-object: update object config with attributes
Ranjani Sridharan [Mon, 26 Apr 2021 16:58:44 +0000 (09:58 -0700)]
topology/pre-process-object: update object config with attributes

Object attributes can be set in multiple places. Search for
the attribute value in the following order:
1. Value set in object instance
2. Default value set in the object's class definition
3. Inherited value from the parent object
4. Value set in the object instance embedded in the parent object
5. Value set in the object instance embedded in the parent class definition

Mandatory attributes must be found in one of the above, resulting
in an error if not found.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-object: Add support for pre-processing Objects
Ranjani Sridharan [Mon, 26 Apr 2021 16:34:48 +0000 (09:34 -0700)]
topology: pre-process-object: Add support for pre-processing Objects

Add support for pre-processing object instances in the input
config. An object's attributes can be set in multiple places
such as, within the object instance, default values in the class
defnition, inherited from a parent object or explicitly set
in a parent object. Before converting the object config into
the relevant section in the existing syntax, all the attribute
values must be consolidated into one place so that it is easy
to verify if all mandatory attributes are set.
Also, the name of the object will be constructed from the
attributes defined in the attributes.constructor[] config
in the class definition and the unique attribute's value
must be set from the value passed in the object instance.

This patch create a temporary config for each object instance
and populates its unique attribute value. The rest of the steps
will be added in the following patches.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: add function to convert valid attribute values to intege...
Ranjani Sridharan [Fri, 23 Apr 2021 20:46:24 +0000 (13:46 -0700)]
topology: pre-process-class: add function to convert valid attribute values to integer tuple values

Some attributes have valid values that need to be converted
to integer tuple values before it is appended to the
object's private data:

For ex, the buffer widget object's "caps" attribute has the
following definition:
DefineAttribute."caps" {
type "string"
# Token reference and type
token_ref "sof_tkn_buffer.word"
constraints {
value_ref "sof_tkn_mem"
valid_values [
"dai"
"host"
"pass"
"comp"
]
tuple_values [
113
113
113
65
]
}
}

Depending on the user input, the value string values for "caps"
will be converted to the appropriate tuple values.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: add function to look up token_ref for an attribute in...
Ranjani Sridharan [Fri, 23 Apr 2021 20:41:45 +0000 (13:41 -0700)]
topology: pre-process-class: add function to look up token_ref for an attribute in class

Some attributes may have the token_ref set which is
used to look up the token value for the tuple data
that is appended to the object's private data.

For example, in the buffer widget object:
DefineAttribute."size" {
# Token reference and type
token_ref "sof_tkn_buffer.word"
}

The token_ref must include the reference to the vendor
token object name followed by the type of the tuple.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: function to get attribute type
Ranjani Sridharan [Fri, 23 Apr 2021 20:36:48 +0000 (13:36 -0700)]
topology: pre-process-class: function to get attribute type

Add a helper function to get attribute type from the
attribute definition and convert them to SND_CONFIG_TYPE_*
values. When no type if provided for an attribute, type
defaults to integer.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: add funcion to get the name of the unique attribute...
Ranjani Sridharan [Fri, 23 Apr 2021 20:32:26 +0000 (13:32 -0700)]
topology: pre-process-class: add funcion to get the name of the unique attribute in a class

Every class must have a unique attribute that will be used
to instantiate the object. The value provided for this
attribute must be unique within the same alsaconf node for
objects of the same class. Add a helper function to get the
name of the attribute that must have a unique value in the
object instance.

For example, when instantiating 2 buffer widgets within a pipeline,
they must be given unique instance attribute values as:
Object.Widget.buffer.0{} and Object.Widget.buffer.1{}.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: Add functions to check attribute constraints
Ranjani Sridharan [Fri, 23 Apr 2021 20:13:01 +0000 (13:13 -0700)]
topology: pre-process-class: Add functions to check attribute constraints

Add helper functions to check if an attribute is
mandatory, immutable or unique in the class definition.
ex: for a host widget component, these are defined
as follows:

attributes {
#
# host objects instantiated within the same alsaconf node must have unique
# direction attribute
#
unique "direction"
mandatory [
"type"
"stream_name"
]
immutable [
"uuid"
]
}

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: Add function to look up attribute definition in class
Ranjani Sridharan [Fri, 23 Apr 2021 19:35:56 +0000 (12:35 -0700)]
topology: pre-process-class: Add function to look up attribute definition in class

Add a helper function look up attribute definition in the
"DefineAttribute" config in the class definition.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-process-class: Add helper function to look up class definition
Ranjani Sridharan [Fri, 23 Apr 2021 19:23:19 +0000 (12:23 -0700)]
topology: pre-process-class: Add helper function to look up class definition

Add a helper function to look up the class definition for
an object. ex: for an object instance, Object.Widget.pga.0{}, the
function returns the config pointing to Class.Widget.pga{} in
the input conf.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-processor: Add a helper function to concat strings
Ranjani Sridharan [Fri, 23 Apr 2021 18:15:59 +0000 (11:15 -0700)]
topology: pre-processor: Add a helper function to concat strings

The pre-processor needs to concatinate strings separated
by '.' for building object names from constructor attribute
values and searching for configs with ID's containing strings
separate by '.'. Add a helper function to concat strings in
the specified input format.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-processor: Add a couple of config helpers
Ranjani Sridharan [Fri, 23 Apr 2021 18:06:29 +0000 (11:06 -0700)]
topology: pre-processor: Add a couple of config helpers

Add a couple of helper functions for searching config by ID and
creating and adding configs to a parent config.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: pre-processor: Add debug print helpers
Ranjani Sridharan [Sat, 27 Mar 2021 19:33:33 +0000 (12:33 -0700)]
topology: pre-processor: Add debug print helpers

Add a couple of helper functions to print debug messages
and the generated config.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: Add support for pre-processing Topology2.0 syntax
Ranjani Sridharan [Fri, 26 Mar 2021 21:44:13 +0000 (14:44 -0700)]
topology: Add support for pre-processing Topology2.0 syntax

This patch adds support for pre-processing the Topology2.0.
The '-p' switch add pre-processing support during compilation
and the '-P' switch is for converting the Topology2.0
configuration file into the existing syntax.

Topology2.0 is a high level keyword extension on top of the existing ALSA
conf topology format designed to:

1) Simplify the ALSA conf topology definitions by providing high level
   "classes" so topology designers need to write less config for common
   object definitions.

2) Allow simple reuse of objects. Define once and reuse (like M4) with
   the ability to alter objects configuration attributes from defaults.

3) Allow data type and value verification. This is not done today and
   frequently crops up in FW bug reports.

Common Topology Classes
-----------------------

Topology today has some common classes that are often reused throughout
with slightly altered configurations. i.e. widgets (components),
pipelines, dais and controls.

Topology2.0 introduces the high level concept of reusable "class" like
definition for that can be used to create topology objects.

Common Topology Attributes
--------------------------
Topology defines a lot of attributes per object with different types
and constraints. Today there is no easy way to validate type or
constraints and this can lead to many hard to find problems in FW at
runtime.

A new keyword "DefineAttribute" has been added to define attribute
constraints such as min value, max value, enum_values etc. This
then allows alsatplg to validate each topology object attribute.

Topology Classes define the list of attributes that they use and
whether the attribute is mandatory, can be overridden by parent users
or is immutable. This also helps alsatplg emit the appropriate errors
for attribute misuse.

Class constructor attributes
----------------------------
Some attributes in the class definition are declared as constructor
attributes and these will be used to construct the name of the object.
For ex: for the host widget, the index and direction are constructor
attributes and the name for the widget is derived as follows:
host.1.playback or host.2.capture etc.

Attribute Inheritance:
----------------------
One of the key features of Topology2.0 is how the attribute values are
propagated from a parent object to a child object. For ex: a pipeline
object can pass down the pipeline_id attribute to all its widgets.
Inheritance is implicit when an object and its embedded child objects
have matching names for a attribute/argument. Attribute values
set explicitly in an object instance always has precedence over
the values inherited from the parent object.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
1

1

1

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer: link volume_mapping.c from alsamixer to amixer
Jaroslav Kysela [Mon, 17 May 2021 14:07:39 +0000 (16:07 +0200)]
amixer: link volume_mapping.c from alsamixer to amixer

... otherwise automake complains

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: fix regression of timeout in timer-based scheduling model
Takashi Sakamoto [Thu, 13 May 2021 13:48:28 +0000 (22:48 +0900)]
axfer: fix regression of timeout in timer-based scheduling model

In timer-based scheduling model, event waiting is just to measure time
elapse since no event is expected to occur. However, as a result to
applying commit e5e6a7838b06, -ETIMEDOUT returns in the case and
the caller handles it as error. This results in disorder of the
scheduling model.

This commit fixes the regression so that the -ETIMEDOUT case is expected.

Reported-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Link: https://lore.kernel.org/alsa-devel/687f9871-7484-1370-04d1-9c968e86f72b@linux.intel.com/
Fixes: e5e6a7838b06 ("axfer: return ETIMEDOUT when no event occurs after waiter expiration")
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsaucm: add 'getval' and 'getival' commands
Jaroslav Kysela [Thu, 13 May 2021 09:54:13 +0000 (11:54 +0200)]
alsaucm: add 'getval' and 'getival' commands

Print the value only without the variable name prefix

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer: don't show help on argument parsing error
Jaroslav Kysela [Mon, 10 May 2021 14:31:06 +0000 (16:31 +0200)]
amixer: don't show help on argument parsing error

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: increase control device name buffer (sysdefault)
Jaroslav Kysela [Thu, 15 Apr 2021 09:27:25 +0000 (11:27 +0200)]
alsamixer: increase control device name buffer (sysdefault)

card_select.c:129:28: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 5 [-Wformat-overflow=]
 129 |   sprintf(buf, "sysdefault:%d", number);

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsaloop: man page - correct "rate" option
nootc [Mon, 22 Mar 2021 22:02:24 +0000 (18:02 -0400)]
alsaloop: man page - correct "rate" option

Change "rate" option from "-c" to "-r".

BugLink: https://github.com/alsa-project/alsa-utils/pull/83
From: nootc
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: ucm - try both fixed boot and boot sequences
Jaroslav Kysela [Tue, 13 Apr 2021 17:18:38 +0000 (19:18 +0200)]
alsactl: ucm - try both fixed boot and boot sequences

The -ENOENT error means that there's no special configuration.
Try to fall-back to the legacy config.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: clean the boot / hotplug card specific configuration directory
Jaroslav Kysela [Tue, 13 Apr 2021 09:15:55 +0000 (11:15 +0200)]
alsactl: clean the boot / hotplug card specific configuration directory

The /var/lib/alsa/card<NUMBER>.conf.d directories should be emptied
when the card is initialized. Implement this functionality directly
to alsactl.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer/alsamixer: use sysdefault:<CARD> devices instead hw:<CARD>
Jaroslav Kysela [Tue, 6 Apr 2021 16:38:18 +0000 (18:38 +0200)]
amixer/alsamixer: use sysdefault:<CARD> devices instead hw:<CARD>

The alsa-lib 1.2.5 introduced a new scheme for the default control
devices.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsaloop: samplerate - fix the wrong pointer operation
Jaroslav Kysela [Wed, 31 Mar 2021 14:38:37 +0000 (16:38 +0200)]
alsaloop: samplerate - fix the wrong pointer operation

It seems that the warnings fix introduced a regression.

BugLink: https://github.com/alsa-project/alsa-utils/issues/85
Fixes: cc46d02 ("alsaloop: pcmjob - fix few warnings")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer: cleanups for valgrind
Jaroslav Kysela [Tue, 30 Mar 2021 11:31:13 +0000 (13:31 +0200)]
amixer: cleanups for valgrind

Call snd_config_update_free_global() to check the memory
leaks and wrong memory access.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer: print error when snd_hctl_handle_events() fails
Jaroslav Kysela [Mon, 29 Mar 2021 09:36:17 +0000 (11:36 +0200)]
amixer: print error when snd_hctl_handle_events() fails

It may be possible that the controls are quickly added and
removed, thus the "hard" fail is not optimal here.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: snd_ctl_elem_id_compare was renamed to snd_ctl_elem_id_compare_set
Jaroslav Kysela [Tue, 23 Mar 2021 16:52:09 +0000 (17:52 +0100)]
alsactl: snd_ctl_elem_id_compare was renamed to snd_ctl_elem_id_compare_set

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: avoid any further PCM writing if in abort
Andreas Pape [Fri, 19 Mar 2021 10:57:13 +0000 (11:57 +0100)]
aplay: avoid any further PCM writing if in abort

Terminating stream with CTRL-C will set in_aborting flag which is used to leave any
write/read loop on the ALSA device.
After ending the read/write loop aplay tries to drain the stream which is not required and can also lead to malfunctions:
-If user interrupts a blocked/non responsive PCM (e.g. usb uac2 gadget which does not consume data
due to stream stopped by host) it will successfully terminate the write loop but will hang again in drain call.
This would require to hit CTRL-C again to unblock which should be avoided.
Aplay currently anyhow allows signal handler to get invoked only once.

Signed-off-by: Andreas Pape <apape@de.adit-jv.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agospeaker-test: add support for S24_LE and S24_BE
Pierre-Louis Bossart [Fri, 12 Mar 2021 17:03:16 +0000 (11:03 -0600)]
speaker-test: add support for S24_LE and S24_BE

These formats are sometimes advertised by drivers, e.g. SOF.
The format is 3 bytes packed in 32-bit container, with the MSB zeroed
out.

sample: 0x00123456

S24_LE format:
b0 56
b1 34
b2 12
b3 00

S24_BE format:
b0 00
b1 12
b2 34
b3 56

I only tested the S24_LE format with the SOF driver, S24_BE was added
for symmetry only.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoaxfer: test: reduce test case for maximum number of samples per frame
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:45 +0000 (14:21 +0900)]
axfer: test: reduce test case for maximum number of samples per frame

This commit reduces test case for maximum number of samples per frame so
that overall time is shortened. The count of total iteration is also
reduced by one quarter.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoRevert "axfer: test - add run-test-in-tmpdir.sh script"
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:44 +0000 (14:21 +0900)]
Revert "axfer: test - add run-test-in-tmpdir.sh script"

This reverts commit e1551de8dd28c3a63f8d7c146952a8d2649ac9de since tests
run for in-memory files now.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test: reduce test case for maximum number of frame count
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:43 +0000 (14:21 +0900)]
axfer: test: reduce test case for maximum number of frame count

This commit reduces test case for maximum number of frame count so that
overall time is shortened. The count of total iteration is still the same.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test: use memfd_create() for mapper-test
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:42 +0000 (14:21 +0900)]
axfer: test: use memfd_create() for mapper-test

The mapper test program writes audio data frame to files, and read
them from the files, then validate them. For the operations, usage of
any in-memory file is good to shorten time of overall operations.

This commit uses shm by memfd_create().

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test: minor code arrangement to use the same file descriptor for mappter-test
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:41 +0000 (14:21 +0900)]
axfer: test: minor code arrangement to use the same file descriptor for mappter-test

In mapper test program, two set of file descriptors open to the same files
for container builder and parser contexts, however the same file descriptor
is available for the case.

This commit arranges to use the same file descriptor for the contexts.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test: use memfd_create() for container-test
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:40 +0000 (14:21 +0900)]
axfer: test: use memfd_create() for container-test

The container test program writes audio data frame to file, and read
them from the file, then validate them. For the operations, usage of
any in-memory file is good to shorten time of overall operations.

This commit uses shm via memfd_create(). As a result, overall time to
run is shorten one half of before, depending on machine environment.

I note that we can achieve the same result by using O_TMPFILE flag in
open(2) system call, however the implementation of O_TMPFILE is to add
i-node without name on underling file system, thus it has overhead
depending on implementation in each file system. On the other hand,
memfd_create() is directly relevant to shm and expected to be less
overhead.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test: minor code arrangement to use the same file descriptor for container...
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:39 +0000 (14:21 +0900)]
axfer: test: minor code arrangement to use the same file descriptor for container-test

In container test program, two file descriptors open to the same file
for builder and parser contexts, however the same file descriptor is
available for the case.

This commit arranges to use the same file descriptor for the contexts.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoautotools: preparation to use memfd_create(2)
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:38 +0000 (14:21 +0900)]
autotools: preparation to use memfd_create(2)

This is a preparation to use memfd_create(2) system call for test programs
of axfer. The system call was introduced at Linux kernel v3.17 and
relatively new.

For safe, this commit adds detection of memfd_create() in autotools side
so that application can handle the case not to detect.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: maintain lifetime of file descriptor outside of container module
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:37 +0000 (14:21 +0900)]
axfer: maintain lifetime of file descriptor outside of container module

This commit closes file descriptor outside of container module so
that maintenance of lifetime for the descriptor is delegated to container
user.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: open file descriptor outside of container module
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:36 +0000 (14:21 +0900)]
axfer: open file descriptor outside of container module

Internal container module operates file descriptor to media file. For
this purpose, the structure has fd member and any file operation is done
internally. However, the case to use special file descriptor such as
memfd requires to maintain file descriptor externally.

This commit opens file descriptor outside of container module. The
internal APIs to initialize container get an argument for the file
descriptor instead of file path.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: minor code arrangement to allocate containers
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:35 +0000 (14:21 +0900)]
axfer: minor code arrangement to allocate containers

This commit unifies duplicated code to allocate for container structure.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: minor code arrangement in a point of opened file descriptor
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:34 +0000 (14:21 +0900)]
axfer: minor code arrangement in a point of opened file descriptor

This commit arranges assignment to fd member after checking file
descriptor.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: minor code arrangement in a point of stdio detection
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:33 +0000 (14:21 +0900)]
axfer: minor code arrangement in a point of stdio detection

Current implementation sets stdio member in a condition branch, however
it's convenient to set it always regardless of any condition.

This commit arranges assignment to the member.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: minor code arrangement for container module in a point of nonblocking flag
Takashi Sakamoto [Thu, 11 Mar 2021 05:21:32 +0000 (14:21 +0900)]
axfer: minor code arrangement for container module in a point of nonblocking flag

In internal container module, any file descriptor is expected as
non-blocking mode. Current implementation distinguish the case of
standard input and output from the case to open actual file since
O_NONBLOCK is used for the latter case. However, in both cases,
fcntl(2) is available to set non-blocking mode to the file descriptor.

This commit arranges to use fcntl(2) for both cases.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: use card iterator functions for all card loops
Jaroslav Kysela [Wed, 10 Mar 2021 19:06:24 +0000 (20:06 +0100)]
alsactl: use card iterator functions for all card loops

Take the card iterator idea from the monitor code and
use it for all card loops. It reduces the code duplications
and makes things easy to review.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: Add ucm support for the FixedBootSequence
Jaroslav Kysela [Wed, 10 Mar 2021 18:26:51 +0000 (19:26 +0100)]
alsactl: Add ucm support for the FixedBootSequence

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: fix possible memory leak for dump-cfg
Jaroslav Kysela [Wed, 10 Mar 2021 17:12:09 +0000 (18:12 +0100)]
alsactl: fix possible memory leak for dump-cfg

Also remove extra snd_config_update_free_global() call for dump-state.
There's a global call in the main() function.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: add 'clean' cmd to help, improve man page
Jaroslav Kysela [Sun, 7 Mar 2021 19:18:12 +0000 (20:18 +0100)]
alsactl: add 'clean' cmd to help, improve man page

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: fix the compiler warning (uninitialized variable res)
Jaroslav Kysela [Sun, 7 Mar 2021 19:00:15 +0000 (20:00 +0100)]
alsactl: fix the compiler warning (uninitialized variable res)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: add dump-cfg and dump-state commands
Jaroslav Kysela [Sun, 7 Mar 2021 18:58:33 +0000 (19:58 +0100)]
alsactl: add dump-cfg and dump-state commands

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: init command now honors -g flag as well
MichaIng [Sat, 6 Mar 2021 15:19:49 +0000 (16:19 +0100)]
alsactl: init command now honors -g flag as well

BugLink: https://github.com/alsa-project/alsa-utils/issues/75
Signed-off-by: MichaIng <micha@dietpi.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: honor ignore_nocards flag in init()
Jaroslav Kysela [Sat, 6 Mar 2021 11:40:54 +0000 (12:40 +0100)]
alsactl: honor ignore_nocards flag in init()

BugLink: https://github.com/alsa-project/alsa-utils/issues/75
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaxfer: test - add run-test-in-tmpdir.sh script
Jaroslav Kysela [Sat, 6 Mar 2021 07:37:08 +0000 (08:37 +0100)]
axfer: test - add run-test-in-tmpdir.sh script

BugLink: https://github.com/alsa-project/alsa-utils/issues/19
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamidi, aseqnet: handle write errors
Jaroslav Kysela [Fri, 5 Mar 2021 20:50:28 +0000 (21:50 +0100)]
amidi, aseqnet: handle write errors

BugLink: https://github.com/alsa-project/alsa-utils/issues/17
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: fix some compiler warnings
Jaroslav Kysela [Fri, 5 Mar 2021 20:43:45 +0000 (21:43 +0100)]
alsactl: fix some compiler warnings

BugLink: https://github.com/alsa-project/alsa-utils/issues/17
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: fix the wrong pointer dereference in playbackv_go()
Jaroslav Kysela [Fri, 5 Mar 2021 20:29:29 +0000 (21:29 +0100)]
aplay: fix the wrong pointer dereference in playbackv_go()

BugLink: https://github.com/alsa-project/alsa-utils/issues/70
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: use background color instead of COLOR_BLACK
Ryan Burns [Sat, 6 Feb 2021 22:16:55 +0000 (14:16 -0800)]
alsamixer: use background color instead of COLOR_BLACK

BugLink: https://github.com/alsa-project/alsa-utils/pull/77
Signed-off-by: Ryan Burns <rtburns@protonmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: Add jack2 (jackdbus) detection
bengan [Wed, 20 Jan 2021 11:13:44 +0000 (12:13 +0100)]
alsa-info.sh: Add jack2 (jackdbus) detection

BugLink: https://github.com/alsa-project/alsa-utils/pull/74
Signed-off-by: bengan <bengan@bag.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoamixer: Expand on channel docs in man page
Matt Campbell [Sun, 14 Feb 2021 16:47:19 +0000 (11:47 -0500)]
amixer: Expand on channel docs in man page

Add missing channel params to the amixer man page. Also call out that
the channel param must come before the value to take effect.

signed-off-by: Matthew Campbell <mcampbell@izotope.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: Use HTTPS instead of HTTP
Bruno Vernay [Fri, 5 Mar 2021 20:10:28 +0000 (21:10 +0100)]
alsa-info.sh: Use HTTPS instead of HTTP

Signed-off-by: Bruno Vernay <brunovern.a@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: add PipeWire daemon detection
Jaroslav Kysela [Fri, 5 Mar 2021 17:20:55 +0000 (18:20 +0100)]
alsa-info.sh: add PipeWire daemon detection

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: bumb version to 0.5.0
Jaroslav Kysela [Fri, 5 Mar 2021 17:09:47 +0000 (18:09 +0100)]
alsa-info.sh: bumb version to 0.5.0

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: add 'clean' command to remove the application controls
Jaroslav Kysela [Fri, 26 Feb 2021 18:28:03 +0000 (19:28 +0100)]
alsactl: add 'clean' command to remove the application controls

It is handy to remove all card controls created by applications.

This change allows to remove those controls for all cards, selected
card or selected card with a control id filter list like:

   alsactl clean 0 "name='PCM'" "name='Mic Phantom'"

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: add sysfs card info section
Jaroslav Kysela [Mon, 22 Feb 2021 09:56:31 +0000 (10:56 +0100)]
alsa-info.sh: add sysfs card info section

It may be useful to dump the sysfs tree to gather
more runtime information.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: add card number to the ALSA module list section
Jaroslav Kysela [Mon, 22 Feb 2021 09:53:12 +0000 (10:53 +0100)]
alsa-info.sh: add card number to the ALSA module list section

Previous output:

  !!Loaded ALSA modules
  !!-------------------

  snd_hda_intel
  snd_usb_audio

New output:

  !!Loaded ALSA modules
  !!-------------------

  snd_hda_intel (card 0)
  snd_usb_audio (card 1)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsa-info.sh: add audio keyword to the dmesg filter
Jaroslav Kysela [Tue, 26 Jan 2021 18:30:19 +0000 (19:30 +0100)]
alsa-info.sh: add audio keyword to the dmesg filter

Example:

sof-audio-pci 0000:00:1f.3: SoundWire enabled on CannonLake+ platform, using SOF driver

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: fix the test position test for playback (avail > delay)
Jaroslav Kysela [Tue, 19 Jan 2021 11:36:28 +0000 (12:36 +0100)]
aplay: fix the test position test for playback (avail > delay)

The avail > delay condition is invalid only for capture, of course.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: fix shift in parse_words()
Jaroslav Kysela [Mon, 11 Jan 2021 09:44:38 +0000 (10:44 +0100)]
alsamixer: fix shift in parse_words()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: remove unused variable y in display_scroll_indicators()
Jaroslav Kysela [Mon, 11 Jan 2021 09:41:32 +0000 (10:41 +0100)]
alsamixer: remove unused variable y in display_scroll_indicators()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: remove dead fcn widget_handle_key() in widget.c
Jaroslav Kysela [Mon, 11 Jan 2021 09:40:53 +0000 (10:40 +0100)]
alsamixer: remove dead fcn widget_handle_key() in widget.c

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotopology: fix possible double free in load()
Jaroslav Kysela [Fri, 8 Jan 2021 17:33:28 +0000 (18:33 +0100)]
topology: fix possible double free in load()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsaloop: get_queued_playback_samples() - simplify code
Jaroslav Kysela [Fri, 8 Jan 2021 17:29:56 +0000 (18:29 +0100)]
alsaloop: get_queued_playback_samples() - simplify code

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsaloop: fix possible memory leak in create_loopback_handle()
Jaroslav Kysela [Fri, 8 Jan 2021 17:21:39 +0000 (18:21 +0100)]
alsaloop: fix possible memory leak in create_loopback_handle()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: init - parse() - fix possible double free
Jaroslav Kysela [Fri, 8 Jan 2021 17:18:53 +0000 (18:18 +0100)]
alsactl: init - parse() - fix possible double free

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: init - set_ctl_value() - fix bytes parsing
Jaroslav Kysela [Fri, 8 Jan 2021 17:15:43 +0000 (18:15 +0100)]
alsactl: init - set_ctl_value() - fix bytes parsing

Use the correct error value handling from hextodigit().

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: daemon - read_pid_file() fix the returned code on read error
Jaroslav Kysela [Fri, 8 Jan 2021 17:07:57 +0000 (18:07 +0100)]
alsactl: daemon - read_pid_file() fix the returned code on read error

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: add avail > delay checks to --test-position
Jaroslav Kysela [Mon, 4 Jan 2021 11:13:03 +0000 (12:13 +0100)]
aplay: add avail > delay checks to --test-position

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoucm: fix typo in docs
Curtis Malainey [Thu, 7 Jan 2021 00:23:23 +0000 (16:23 -0800)]
ucm: fix typo in docs

Do you know the tstaus of this fix?

Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoaplay: add test code for snd_pcm_status() to --test-position
Jaroslav Kysela [Sun, 3 Jan 2021 16:19:03 +0000 (17:19 +0100)]
aplay: add test code for snd_pcm_status() to --test-position

We need to test also snd_pcm_status() values.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: Remove asound.state file check from alsa-restore.service again
Takashi Iwai [Fri, 11 Dec 2020 22:55:34 +0000 (23:55 +0100)]
alsactl: Remove asound.state file check from alsa-restore.service again

We added the check of asound.state file presence some time ago to
assure that alsactl gets called only if the state file is already
present.  Since then, the situation has changed significantly:
e.g. now alsactl does initialize if the state file isn't present, and
the same alsa-restore.service is used to save the state.  This means
that we should start this service no matter the state file exists at
the boot time or not.  So, revert the old change again.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoalsactl: Fix race at creating a lock file
Takashi Iwai [Fri, 11 Dec 2020 22:46:23 +0000 (23:46 +0100)]
alsactl: Fix race at creating a lock file

A race at creating a lock file in state_lock() was discovered
recently: namely, between the first open(O_RDWR) and the second
open(O_RDWR|O_CREAT|O_EXCL) calls, another alsactl invocation may
already create a lock file, then the second open() will return EEXIST,
which isn't handled properly and treated as a fatal error.

In this patch, we check EEXIST case and try again open() with O_RDWR.
This must succeed usually, and if it fails, handle finally as the
fatal error.

BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1179904
Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoalsactl: Fix double decrease of lock timeout
Takashi Iwai [Fri, 11 Dec 2020 22:41:59 +0000 (23:41 +0100)]
alsactl: Fix double decrease of lock timeout

The state_lock() has a loop to wait for the lock file creation, and
the timeout value gets decremented twice mistakenly, which leads to a
half timeout (5 seconds) than expected 10 seconds.  Fix it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoAdd more files to .gitignore
Takashi Iwai [Thu, 10 Dec 2020 09:34:40 +0000 (10:34 +0100)]
Add more files to .gitignore

4 years agoalsa-info: Add lsusb and stream outputs
Takashi Iwai [Wed, 9 Dec 2020 17:35:49 +0000 (18:35 +0100)]
alsa-info: Add lsusb and stream outputs

We need more detailed information for USB-audio devices, at least the
lsusb -v output and the contents of stream* proc files.
Let's add them to alsa-info.sh output.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoaplay: fix the CPU busy loop in the pause handler
Jaroslav Kysela [Sun, 8 Nov 2020 18:11:12 +0000 (19:11 +0100)]
aplay: fix the CPU busy loop in the pause handler

Use the standard poll mechanism to ensure that there's
something in the input to avoid busy loop on the file
descriptor with the non-block mode set.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: cosmetic code fix in xrun()
Jaroslav Kysela [Fri, 23 Oct 2020 10:05:56 +0000 (12:05 +0200)]
aplay: cosmetic code fix in xrun()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoUpdate French translation
Olivier Humbert [Wed, 8 Jul 2020 14:04:30 +0000 (16:04 +0200)]
Update French translation

- fixes spaces
- improvements
- min/MAJ
- update
- new translations
- typo fixes

From: Olivier Humbert <trebmuh@users.noreply.github.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoAdd Basque translation
Porrumentzio [Fri, 10 Jul 2020 13:49:50 +0000 (15:49 +0200)]
Add Basque translation

From: Porrumentzio <porrumentzio@riseup.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoAdd Slovak translation
Jose Riha [Sun, 18 Oct 2020 13:25:14 +0000 (15:25 +0200)]
Add Slovak translation

From: Jose Riha <jose1711@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsamixer: Fix the mixer views description in man page
積丹尼 Dan Jacobson [Sun, 18 Oct 2020 10:33:54 +0000 (18:33 +0800)]
alsamixer: Fix the mixer views description in man page

Fix grammar mess.

From: Dan Jacobson <jidanni@jidanni.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: try to use 16-bit format to increase capture quality
Hui Wang [Fri, 23 Oct 2020 08:47:10 +0000 (16:47 +0800)]
aplay: try to use 16-bit format to increase capture quality

Recently users reported a bug, I tested it and found it is a common
issue on Laptop or Desktop machines.

The issue is users plug a headset and use "arecord test.wav" to
record a sound with default input volume, the recorded sound has
poor quality and nearly can't distinguish it is the sound we want
to record.

This is because the input volume is low and the default format is U8.
The driver records sound with 16bit, because the input volume is low,
most of samples are within (-256,+256), when converting 16bit to U8,
those samples will be 0x7f. This is called quantization noise and we
could only workaround it by increase the input volume or adding -f to
arecord.

But users want to record a better quality sound with default input
volume (after installing a new OS, the volume is the default volume),
and they don't want to add parameters to the arecord because most of
new linux users just use "arecord test.wav".

So this patch tries to change the default format from U8 to S16_LE/BE.
If the machine doesn't support S16_LE/BE, it still uses U8 as default
format.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoRelease v1.2.4 v1.2.4
Jaroslav Kysela [Thu, 15 Oct 2020 11:32:33 +0000 (13:32 +0200)]
Release v1.2.4

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: fix the wrong count in compute_max_peak() for 16bit+ sample widths
Jaroslav Kysela [Thu, 15 Oct 2020 11:12:37 +0000 (13:12 +0200)]
aplay: fix the wrong count in compute_max_peak() for 16bit+ sample widths

The count argument was renamed to samples to correctly represent
the value meaning. Also, remove the wrong count recalculation lines
for 16-bit, 24-bit and 32-bit samples.

BugLink: https://github.com/alsa-project/alsa-utils/issues/57
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: 00main - fix typo in goto label
Jaroslav Kysela [Tue, 13 Oct 2020 15:30:11 +0000 (17:30 +0200)]
alsactl: 00main - fix typo in goto label

BugLink: https://github.com/alsa-project/alsa-utils/issues/52
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agominor aplay man page correction
YetAnotherNerd [Tue, 11 Feb 2020 16:14:28 +0000 (17:14 +0100)]
minor aplay man page correction

Fix a minor typo for the '-f cdr' description.

Fixes: 55cd025f18e3 ("aplay -- update the man file")
BugLink: https://github.com/alsa-project/alsa-utils/pull/34
From: YetAnotherNerd <YetAnotherNerd@users.noreply.github.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoaplay: Fix typo in error message
Olivier Humbert [Wed, 8 Jul 2020 17:31:14 +0000 (19:31 +0200)]
aplay: Fix typo in error message

BugLink: https://github.com/alsa-project/alsa-utils/pull/44
From: Olivier Humbert <trebmuh@users.noreply.github.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agotreewide: fix typos in manual pages
Samanta Navarro [Sat, 3 Oct 2020 11:54:02 +0000 (11:54 +0000)]
treewide: fix typos in manual pages

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: add new -U argument text to man page
Jaroslav Kysela [Tue, 6 Oct 2020 11:05:12 +0000 (13:05 +0200)]
alsactl: add new -U argument text to man page

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoalsactl: init - add -U option to disable UCM based init
Andrew Hlynskyi [Fri, 2 Oct 2020 03:45:43 +0000 (06:45 +0300)]
alsactl: init - add -U option to disable UCM based init

The reason is to use it with internal init extra commands like:
  alsactl -U -E CMD=info init

Signed-off-by: Jaroslav Kysela <perex@perex.cz>