Commit graph

92 commits

Author SHA1 Message Date
Takashi Iwai
3c4a22ea49 Implement the channel mapping API
Added new channel-mapping API functions.
Not all plugins are covered, especially the route, multi and external
plugins don't work yet.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-09-11 11:34:50 +02:00
Jaroslav Kysela
b9dbee694a pcm direct plugins: drain() call might be blocked when threads are used
Add SETUP state checks and do modifications according latest ALSA driver
(passing wrong event identification).

ALSA bug#4914

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-03-03 10:58:53 +01:00
Jaroslav Kysela
7fd0d9f423 pcm_dmix: add support for S24_LE format
From: Bart De Vos <bart_dv@eia.be>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-03-02 14:01:32 +01:00
Takashi Iwai
da237814e7 dmix - Fix snd_pcm_info()
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.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-09-28 12:02:13 +02:00
Diego E. 'Flameeyes' Pettenò
8ed98db259 Make some static tables and strings constants.
By doing this we move them from the .data section to .rodata setion,
or from .data.rel to .data.rel.ro.

The .rodata section is mapped directly from the on-disk file, which is
always a save, while .data.rel.ro is mapped directly when using
prelink, which is a save in a lot of cases.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 13:04:41 +01:00
Takashi Iwai
ddf063f499 Fix non-tread mode with PCM direct plugins
tread=0 wasn't set properly for very old ALSA drivers with no timer
tread support.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-31 12:18:08 +02:00
Takashi Iwai
118fedb90a Fix interleave check in pcm_direct.c
Fix the check of interleaved format.  It checked a totally bogus value
as PCM format.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-29 14:41:51 +02:00
Takashi Iwai
35d4f9b8d7 dmix - Enable auto format detection as default
The direct plugins have the automatic format-detection feature but it
wasn't enabled properly in the interface.  Now you can pass the format
"unchanged" to make the plugin detect a proper format.

This will change the default format of some drivers, such as, HD-audio.
2008-01-18 13:42:51 +01:00
Jaroslav Kysela
77849672cd Allow pcm slave string references for direct plugins (bug#2893). 2008-01-15 14:07:19 +01:00
Jaroslav Kysela
6814d23d29 SND_PCM_TSTAMP_MMAP -> SND_PCM_TSTAMP_ENABLE change 2008-01-11 08:54:07 +01:00
Takashi Iwai
679cea4125 Remove sleep_min and tick
The sleep_min and tick are removed features from the kernel.
This patch cleans the corresponding part in alsa-lib.
2008-01-08 18:36:18 +01:00
Takashi Iwai
cf15e49d84 Remove PCM xfer_align
The PCM xfer_align is a removed feature from the kernel.
This patch cleans up the corresponding part in alsa-lib.
2008-01-08 18:35:29 +01:00
Clemens Ladisch
6e6f4b9c93 dmix: add U8 support
Add support for direct mixing of U8 samples (for devices like some USB
headsets or the Tux Droid).
2007-12-10 12:35:08 +01:00
Takashi Iwai
7379b061eb Fix timestamp in status in PCM direct plugins
PCM direct plugins didn't update the timestamp properly.
Now it always starts the slave PCM with MMAP tstamp_mode so that the
timestamp will be being updated.  When a client is set up as MMAP
tstamp_mode as well, simply copy this slave timestamp.  Otherwise
status callback calculates the current timestamp as usual.
2007-11-21 12:10:35 +01:00
Takashi Iwai
408af4b675 Fix wrong return values in direct plugins
Fixed the codes returning error values that are not set properly
via errno.
2007-11-16 12:06:43 +01:00
Jaroslav Kysela
d25e281230 Changed Jaroslav Kysela's e-mail from perex@suse.cz to perex@perex.cz 2007-10-15 10:24:55 +02:00
Clemens Ladisch
a03ddea415 dmix/dshare/dsnoop plugin: enable slowptr by default
Enabling the slowptr options does not make snd_pcm_delay() and related
functions much slower than they would have been with a hw device, while
disabling this option greatly reduces the accuracy of those functions,
thus creating more jitter in any media player application that
synchronizes its output to the sound device.

Therefore, it is preferrable to have this option enabled by default.
2007-05-21 09:13:19 +02:00
Clemens Ladisch
ffcffac13d fix a signedness warning 2007-03-12 08:27:15 +01:00
Clemens Ladisch
f54f03bfc4 fix SNDERR() format strings/arguments 2007-02-12 13:45:57 +01:00
Takashi Iwai
c818bab2e3 Fix compile warning with internal function
Fixed the compile warning refering to the internal function
snd_pcm_hw_params_set_format_first.
2007-01-08 16:39:26 +01:00
Clemens Ladisch
8a36b67b9f direct pcm plugins: fix format selection
The old format tried to do something when the requested format was not
supported by the hardware, but did not actually select any other format.
Now we try to switch to any format supported by dmix, or any other
format when the plugin is not dmix.
2006-12-04 18:20:40 +01:00
Clemens Ladisch
9819099e0e direct pcm plugins: fix channel number selection
The code to set the number of channels did not work when the requested
channel count was not available and when the min/max channel counts were
not identical.

Replacing the entire selection code with
snd_pcm_hw_params_set_channels_near() gives the same result in the cases
where it previously worked, and works in all other cases.
2006-12-04 18:14:13 +01:00
Jaroslav Kysela
ddf9599542 pcm: fix ipc offset calculation for direct plugins
Also add more accurate description to x24 formats.
2006-10-23 11:34:00 +02:00
Jaroslav Kysela
57eb3145b8 fix various warnings
See also ALSA bug#1689
2006-10-06 13:18:34 +02:00
Clemens Ladisch
0211bc3b68 fix parsing of non-decimal integers in configuration files
safe_strtoll() now accepts numbers in any base. It formerly assumed that
its input was a decimal number, which had the consequence that
hexadecimal or octal numbers would be parsed as strings when occurring
outside of parameter lists.

This obsoletes some workarounds in the file permission parsing code that
relied on this bug.
2006-09-18 17:57:58 +02:00
Takashi Iwai
982786e9eb Fix bogus pause flag on dmix
Fix bogus PCM pause flag on dmix.  It doesn't support pause properly.
2006-07-25 15:36:13 +02:00
Takashi Iwai
f725af9987 Fix segfault with bindings parameters of dmix/dshare
Fix segfault with bindings parameters of dmix/dshare (bug#2235).
2006-06-27 12:08:38 +02:00
Takashi Iwai
b3c3e355d9 Initialize all fields of slave PCM instance of direct plugins
Initialize all fields of slave PCM instance of direct plugins.
Some fields were not initialized properly.
2006-06-16 18:52:12 +02:00
Takashi Iwai
eafb7ae5d8 Use O_APPEND mode with dmix & co plugins
Use O_APPEND mode (only if available) with dmix, dsnoop and dshare
plugins.  Using this mode, the plugin requires no resource server
any more.
2006-04-28 15:55:32 +02:00
Takashi Iwai
6ff727bb7f Add check of binding ranges in direct plugins
Add checks of slave channel numbers in bindings of dmix/dsnoop/dshare
plugins to avoid segfault.
Also, fix a possible memory leaks in the error path.
2006-04-26 18:30:44 +02:00
Takashi Iwai
701557db26 Fix compile error
Fix the declarations and code.
2006-04-18 13:00:57 +02:00
Takashi Iwai
1128efc7d4 Fix buffer size handling of direct plugins
Introduce "max_periods" option to specify the max number of periods
per buffer to each plugin.

- When max_periods = -1, the fixed buffer size as the slave size is
  used (old behavior).
- When max_periods = 0 (or 1), the number of periods is variable
  between 2 and the slave buffer size.
- When max_periods greater than 2 is given, it specifies the max
  periods of that pcm explicitly.

When no option is given in the PCM defintion, the value
"defaults.pcm.dmix_max_periods" is referred as default.
The default value is 0, as defined in alsa.conf.
You can override this in ~/.asoundrc or /etc/asound.conf as you like.
2006-04-06 18:49:11 +02:00
Takashi Iwai
09c5db44a4 Fix noisy output of dmix with two periods
Fixed the noisy output of dmix with two (or less) periods.
The dmix tends to give noise or XRUN when running with two periods
because of its implementation nature.  To avoid this, the start
position is aligned to the period size, so that the updates are synced
with interrupts of slave PCM.
2006-03-24 14:53:41 +00:00
Takashi Iwai
91066a98b9 Fix timer read from 32bit user-space on 64bit kernel
snd_timer_tread struct is a bad design for 32/64bit compatibility,
and reading this struct on 32bit program returns zero.  This results
in tight poll looping (bug#1938, #1945).

For avoiding this bug, now more bigger buffer is read to cover the
64bit tread struct, too.  Also this optimizes the read without
checking -EAGAIN in the case both user-space and kernel have the same
tread size.
2006-03-21 10:39:49 +00:00
Takashi Iwai
7e6c920836 dmix - Allow more flexible buffer sizes
With the patch, dmix allows apps to use more flexible buffer sizes.
The max buffer size is unlimited, and the minimal buffer size is
(period size * 2).  The buffer size is aligned to period size.

The period size is still bound to the period size of slave PCM.

To back to the old behavior (the fixed buffer size), you can set

   defaults.pcm.dmix_variable_buffer false

in your configuration.
2006-03-21 10:27:35 +00:00
Takashi Iwai
f9c7321670 Fix infinite loop in snd_pcm_wait()
Fix possible infinite loop in snd_pcm_wait() with direct plugins
when XRUN occurs during poll.
2006-02-20 19:34:45 +00:00
Takashi Iwai
c002c69d52 Fix fullduplex with dmix/dsnoop
Fixed the fullduplex of dmix and dsnoop plugins due to confliction of
ipc keys.
2006-02-17 20:50:00 +00:00
Takashi Iwai
eccc92a34d Fix infinite parse of recursive definitions
Fixed the infinite parse (and eventually segfault) of recursive definitions.
Also fixed the parse of a string slave PCM of direct plugins.
2006-01-30 14:41:51 +00:00
Takashi Iwai
7eff603576 Support multi-card/device for direct plugins
- Support multi-card/device for dmix/dsnoop/dshare plugins
  The unique ipc key is calculated based on card/device/sub index

- Clean up and share the code among all d* plugins

- Refer the defaults.pcm.* configuration
  The base ipc_key number, ipc_gid and ipc_perm are referred.
2006-01-16 13:15:32 +00:00
Clemens Ladisch
2a438a6eec dmix: fix interleaved check
When checking that samples are properly interleaved, use the actual
sample size instead of always assuming 16 bits.
2005-12-19 07:40:15 +00:00
Clemens Ladisch
45f63a8735 dmix: add S24_3LE support
Add to the dmix plugin support for the S24_3LE sample format which is
used by 24-bit USB devices.

The optimized assembler version uses only 23 bits for sample data so
that the lowest bit can be used for synchronization because there is no
24-bit cmpxchg instruction.
2005-12-19 07:39:03 +00:00
Takashi Iwai
76f7af823b Fix compile warnings
Fix trivial compile warnings.
2005-12-16 18:43:49 +00:00
Takashi Iwai
5bf3b31cf1 Fix endianess with dmix plugin
Allow different endianess with the generic dmix code, mainly for
big-endian architectures.
2005-09-19 12:37:08 +00:00
Takashi Iwai
d45d5a1470 Don't return error if chown() fails
Don't take serious even if chown() fails in the creation of direct server.
It happens if a user doesn't belong to the group specified in the config.
2005-09-12 17:50:16 +00:00
Jaroslav Kysela
19284bd325 direct plugins - change group according ipc_gid for the socket file
This patch fixes problem when ipc_perm are 0660 and you want to share dmix
with more users in the specified group.
2005-09-08 06:48:30 +00:00
Takashi Iwai
e62ecc876a Workaround for crash with knotify
Workaround for crash with knotify and KDEMM.
2005-09-01 17:31:52 +00:00
Takashi Iwai
6f938b1cc3 Fix call of semctl IPC_RMID
semctl IPC_RMID removes all semaphore set, so we need to call this only once.
2005-08-29 17:07:41 +00:00
Jaroslav Kysela
f1acd7726c PCM direct plugins - handle EINTR in the resource server
The poll() call in the resource server for PCM direct plugins might be
interrupted with an signal. Handle the case gracefuly and don't exit
the server (which brings another problems - cannot connect to socket -
later).
2005-08-18 10:42:22 +00:00
Takashi Iwai
ea77e08cc6 Misc fixes
Fixes of spots found via valgrind

- non-freed chunks after snd_config_get_ascii()
- zero-fill records (to make valgrind happy)
- compile warning fixes
2005-08-17 17:27:16 +00:00
Jaroslav Kysela
4bb0721a83 direct plugins - added graceful shutdown for the resource server
- direct plugins
  - added graceful shutdown for the resource server
  - fixed error paths (unclosed socket) in the make_local_socket() function
2005-08-17 14:00:32 +00:00