Clemens Ladisch [Mon, 23 Nov 2009 09:56:46 +0000 (10:56 +0100)]
mixer: fix enum check
The recent CHECK_ENUM fix uncovered a bug in snd_mixer_selem_is_enumerated()
which would now return -EINVAL for any non-enum control, which would be
interpreted as 'true' by callers like amixer or alsamixer.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Michael Olbrich [Mon, 16 Nov 2009 10:31:49 +0000 (11:31 +0100)]
simple_none.c uses HAVE_SOFT_FLOAT it has to include config.h
for this to work properly.
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Takashi Iwai [Sun, 8 Nov 2009 08:26:23 +0000 (09:26 +0100)]
Fix CHECK_ENUM() in simple.c
simple.c: In function ‘snd_mixer_selem_is_enumerated’:
simple.c:881: warning: suggest parentheses around operand of ‘!’ or change ‘&’ to ‘&&’ or ‘!’ to ‘~’
Jaroslav Kysela [Tue, 3 Nov 2009 15:36:55 +0000 (16:36 +0100)]
namehint: add missing list->card initialization
list->card is wrongly assumed to be initialized, but the previous
initialization is within a conditional that is false when only
card-independent devices are found. (This is the case when searching
for mixers on my system; the end result is that the "pulse" mixer is
listed three times.)
Signed-off-by: John Lindgren <john.lindgren@tds.net> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Jaroslav Kysela [Tue, 3 Nov 2009 15:34:34 +0000 (16:34 +0100)]
Cache libasound.so access in snd_dlopen
Speed up repeated calls to snd_dlopen by caching the path to
libasound.so; this reduces the instructions executed by
snd_device_name_hint by 40 percent.
Signed-off-by: John Lindgren <john.lindgren@tds.net> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Takashi Iwai [Tue, 3 Nov 2009 07:57:10 +0000 (08:57 +0100)]
Fix corruption after snd_device_name_hint()
snd_device_name_hint() corrupts the config name space after its call.
This results in the error from the suceeding calls of snd_pcm_open()
after snd_device_name_hint().
The bug is in try_config() in namehint.c; it calls snd_config_delete(res)
but res can be two different objects in the function. One is the object
obtained via snd_config_search_definition(), and another is the one from
snd_config_search_alias_hooks(). The former is the expanded objects,
thus it should be freed. But, the latter is a reference, and must not be
freed.
This patch adds the check to free or not.
Reported-by: John Lindgren <john.lindgren@tds.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Stefan Schmidt [Tue, 29 Sep 2009 21:48:20 +0000 (23:48 +0200)]
configure.in: Add m4 check for new AM_SILENT_RULES
Kbuild like output for automake (>=1.11). It's no hard dependency as it needs
the newest automake, but enable it by default if it is available. To turn it off
you can either use --disable-silent-rules at configure time or make V=0 at
compile time.
Signed-off-by: Stefan Schmidt <stefan@slimlogic.co.uk> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Call the slave snd_pcm_info() as long as possible in the direct plugins
(i.e. when the PCM device could be opened with O_APPEND mode).
This allows dmix/dsnoop as a salve for PCM hook controls.
Kai Vehmanen [Thu, 10 Sep 2009 22:07:21 +0000 (01:07 +0300)]
pcm_hw: Always use delay ioctl in snd_pcm_delay()
As the result of snd_pcm_delay() is affected not only by hw_ptr
and appl_ptr, but also by 'runtime->delay' property,
either SNDRV_PCM_IOCTL_DELAY or SNDRV_PCM_IOCTL_STATUS ioctl
must be used to get the correct result.
Previously 'runtime->delay' was ignored in case 'hw->sync_ptr'
was used.
Signed-off-by: Kai Vehmanen <kvehmanen@eca.cx> Signed-off-by: Takashi Iwai <tiwai@suse.de>
In snd_pcm_hw_params_choose(), set the buffer size before the period
size and time as default. This will give more useful configuration for
most of apps, i.e. larger buffer size.
For apps that require the old behavior, now the function checks the
environment variable $LIBASOUND_COMPAT. If this variable is set to
non-empty, the hw_params is determined in the old way, first period
then buffer sizes.
Takashi Iwai [Thu, 20 Aug 2009 23:18:00 +0000 (01:18 +0200)]
pcm: workaround for avoiding automatic start in mmap mode
In the normal mmap mode, the stream isn't started automatically even after
the data >= start_threshold has been written. However, in the
mmap-emulation mode, the stream is started because it uses
snd_pcm_write_areas() internally.
As a workaround for this inconsistency, start_threshold value is changed
dynamically in sw_parmams and mmap_commit callbacks in mmap-emul plugin.
Meanwhile, start_threshold for slave PCM is set to boundary so that only
this plugin (or the one over it) can control the start of the stream.
This will fix problems in some apps using pulse plugin in the mmap mode.
Takashi Iwai [Mon, 10 Aug 2009 12:11:57 +0000 (14:11 +0200)]
Fix driver conf parsing in snd_config_hook_load_for_all_cards()
Reported by Kevin Goodsell.
Summary: load_for_all_cards fails with existing configuration elements
In snd_config_hook_load_for_all_cards, the first call to
snd_config_search attempts to locate an existing configuration node with
the name of the driver. Typically none is found, and everything is
good. However, if such a node is located, the next line assumes it is a
leaf node with type 'string' and calls snd_config_get_string to fetch
the string value. If this fails, the entire hook is abandoned.
Because of this, setting something like the following in asoundrc:
cards.<driver name>.foo 0
is sufficient to disable the entire card-specific configuration.
As a concrete example, I have a HDA-Intel sound card. dmix.conf includes
a way to set period_size, period_time, and periods by using
configuration elements of the form cards.<driver name>.pcm.dmix.<var>.
In ~/.asoundrc I add
cards.HDA-Intel.pcm.dmix.period_size 1024
This will cause HDA-Intel.conf to fail to load, and the pcm defined in
default.conf will fail to find the device-specific pcm
cards.HDA-Intel.pcm.default, and fall back on the default pcm using
plughw. By attempting to configure dmix, I have disabled it.
Clemens Ladisch [Mon, 10 Aug 2009 08:09:02 +0000 (10:09 +0200)]
timer_query: make ops structure constant
The contents of the snd_timer_query_ops structure are not going to be
changed, so we might as well declare is as constant. This change avoids
a warning if some ops structure is actually defined as const.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Mon, 10 Aug 2009 08:08:25 +0000 (10:08 +0200)]
snd_pcm_scope_set_ops: make ops parameter const
The contents of the snd_pcm_scope_ops structure are not going to be
changed, so we might as well declare is as constant. This change is
backwards compatible, and avoids warnings if some ops structure is
actually defined as const.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Tue, 4 Aug 2009 07:15:40 +0000 (09:15 +0200)]
doc: hide structs with typedefs
In the documentation, hide structure types that have a corresponding
typedef. Since doxygen 1.5.4, this is no longer the default when
OPTIMIZE_OUTPUT_FOR_C is set.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Wed, 15 Jul 2009 09:20:29 +0000 (11:20 +0200)]
conf.c: snd_config_add: prevent adopting a non-orphan
When adding a configuration node to another, check that the child node
does not already have a parent. Otherwise, the old parent's children
list would become corrupted.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Mon, 13 Jul 2009 11:53:16 +0000 (13:53 +0200)]
sound: rawmidi: disable active-sensing-on-close by default
Sending an Active Sensing message when closing a port can interfere with
the following data if the port is reopened and a note-on is sent before
the device's timeout has elapsed. Therefore, it is better to disable
this setting by default.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Fri, 10 Jul 2009 05:25:50 +0000 (07:25 +0200)]
conf.c: snd_config_set_id: prevent duplicate ids
snd_config_add() checks for duplicate ids, but it was possible to create
duplicates by adding a note and changing the id afterwards with
snd_config_set_id(); so we have to add a check there, too.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Thu, 9 Jul 2009 05:38:26 +0000 (07:38 +0200)]
conf.c: fix handling of NULL ids
Make sure that we do not crash when encountering configuration nodes
with a NULL id. Furthermore, since we cannot avoid having NULL ids
anyway, allow the id of a top-level node to be reset to NULL.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Takashi Iwai [Tue, 30 Jun 2009 09:11:34 +0000 (11:11 +0200)]
Manage dlobj lifetime in pcm_hooks.c
The shared object may be still needed depending on the implementation
of hook-installation functions. When any hooks are registered in the
installation function, the dlobj has to be kept opened until closing
the PCM instance.
Clemens Ladisch [Mon, 22 Jun 2009 08:00:46 +0000 (10:00 +0200)]
seq_midi_event: fix decoding of (N)RPN events
When decoding (N)RPN sequencer events into raw MIDI commands, the
extra_decode_xrpn() function had accidentally swapped the MSB and LSB
controller values of both the parameter number and the data value.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch [Mon, 22 Jun 2009 08:00:03 +0000 (10:00 +0200)]
MIDI event decoder: prevent running status after sysex
Running status cannot be using in the command immediately following
a system exclusive command, so we have to reset the running status
state in that case.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Takashi Iwai [Tue, 2 Jun 2009 14:13:01 +0000 (16:13 +0200)]
Query the supported rate ranges from rate plugins
Extend the PCM-rate plugin protocol to allow the host to query the
supported sample rates. The protocol version is bumped to 0x010002,
and the version number negotiaion is slightly changed.
Now the plugin is supposed to fill the version it supports in return.
The old versioned plugins are still supported, but they may spew
version-mismatch warning prints.
Takashi Iwai [Mon, 23 Mar 2009 08:06:23 +0000 (09:06 +0100)]
Add route_policy copy to HDA-Intel.conf for capture
Since some digital mics have the phase-inversion problem in one channel,
adding both channels for mono stream results in the noise.
Use route_policy copy to avoid that situation.
Takashi Iwai [Tue, 17 Feb 2009 15:58:12 +0000 (16:58 +0100)]
Change numid properly with external ctl plugins
So far, external ctl plugins don't change numid. Some apps expect the
non-zero numids with list, and the plugin doesn't work for them.
This patch adds a fake numid to each control based on the offset
number. The lookup with non-zero numid is supported but is pretty
inefficient. Eventually the plugin side may be optimized to look
at the numid, too.
Takashi Iwai [Fri, 13 Feb 2009 16:14:51 +0000 (17:14 +0100)]
Add hint.device = 0 to pcm.default of HDA-Intel.conf
The hd-audio driver may have no analog stream but only a digital one
which has usually non-zero device number. To avoid the bogus namehint,
set hint.device 0 for pcm.default (it wasn't handled properly due to
asym).
Clemens Ladisch [Wed, 11 Feb 2009 08:53:29 +0000 (09:53 +0100)]
fix pcm_set_params() documentation
The documentation for the latency parameter of pcm_set_params() says
that the value 0 uses an optimal value. This is wrong, as there is no
special handling for 0, and the result will be a buffer of minimal size.
Therefore, remove that incorrect statement.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Takashi Iwai [Mon, 2 Feb 2009 15:11:39 +0000 (16:11 +0100)]
Fix misc compile warnings
Shut up misc compile warnings from gcc:
pcm_plug.c: In function ‘snd_pcm_plug_change_mmap’:
pcm_plug.c:608: warning: enumeration value ‘SND_PCM_ACCESS_MMAP_INTERLEAVED’ not handled in switch
pcm_plug.c:608: warning: enumeration value ‘SND_PCM_ACCESS_MMAP_NONINTERLEAVED’ not handled in switch
pcm_plug.c:608: warning: enumeration value ‘SND_PCM_ACCESS_MMAP_COMPLEX’ not handled in switch
Pavel Hofman [Thu, 29 Jan 2009 10:59:27 +0000 (11:59 +0100)]
PCM parameters in file plugin
* added support for including pcm stream params in the output filename
* added support for piping the stream to a shell command if the filename
string starts with a pipe char
Signed-off-by: Pavel Hofman <pavel.hofman@insite.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai [Wed, 28 Jan 2009 14:00:35 +0000 (15:00 +0100)]
Fix off_t in kernel struct
The off_t in kernel struct (for ioctls) is actually different from the
definition of user-space off_t. The kernel off_t is equial with long
while user-space off_t depends on the large-file support.
Takashi Iwai [Tue, 27 Jan 2009 16:21:34 +0000 (17:21 +0100)]
Fix plug conversion with mmap emulation
If the slave PCM supports only another type of interleaved format,
plug did convert it wrongly and resulted in an unused access type
error. For example, if a slave PCM supporst only RW_NONINTERLEAVE
access and you try to play an interleaved format file, it resulted
in an error.
Takashi Iwai [Wed, 10 Dec 2008 17:20:50 +0000 (18:20 +0100)]
Don't accept an empty string for $ALSA_CONFIG_PATH
The variable $ALSA_CONFIG_PATH specifies the config path, but the current
code accepts the empty string and results in a mysterious error because
no config file is found.
This patch fixes the check of the variable and takes the default value
if the string is empty.