Commit graph

1602 commits

Author SHA1 Message Date
Jaroslav Kysela
a256766c10 pcm: Close event timer in pcm_hw plugin
Dan McCombs discovered that snd_pcm_close() invocations are not leading
to associated timers being closed, which results in successively more
timers being created but not freed.

Original patch from Daniel T Chen <crimsun@ubuntu.com>.

BugLink: https://bugs.launchpad.net/bugs/451893

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-12-21 09:09:42 +01:00
Mads Kiilerich
f75f1da1b7 Update pcm doc strings
This is information I needed and is based on my understanding of information
from Takashi Iwai.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-14 13:49:14 +01:00
Rémi Denis-Courmont
57ce918928 Remove old commented-out FD_CLOEXEC code
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-08 09:23:22 +01:00
Stefan Schmidt
19f703a774 pcm_rate_linear: Annotate unused function parameter to avoid compiler warnings.
Signed-off-by: Stefan Schmidt <stefan@slimlogic.co.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-09-30 12:45:35 +02: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
Kai Vehmanen
ecf4b5af86 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>
2009-09-11 09:18:36 +02:00
Takashi Iwai
cd7070bf4b PCM - Change the hw_params determination order
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.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-09-09 14:16:06 +02:00
Takashi Iwai
cbf5675eef pcm/ioplug: fix error code in start callback
When snd_pcm_start() is called in the invalid state, it should return
-EBADFD.  But ioplug plugin returns -EAGAIN.  Let's fix it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-08-21 01:34:29 +02:00
Takashi Iwai
bd5389278c 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.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-08-21 01:23:08 +02:00
Clemens Ladisch
2905af225f 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>
2009-08-10 10:08:25 +02:00
Takashi Iwai
79345b523e Fix zero-division in pcm_rate.c
Patch from Debian bug#539454

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-08-10 09:53:18 +02:00
Clemens Ladisch
5332d74a67 fix doc errors
Fix various errors in the documentation that make doxygen complain.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-08-04 09:17:20 +02:00
Paul Fertser
5a70411d6c pcm_hooks: cosmetic removal of unused variables
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-30 14:53:42 +02:00
Takashi Iwai
2a77d217a6 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.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-30 11:11:34 +02:00
Jaroslav Kysela
e94f3cfdf9 pcm dmix plugin: fix MIX_AREAS_24 routine for i386 & x86_64 platforms
The code was copied from ALSA bug#4577 from CannibalZerg.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-06-16 20:10:19 +02:00
Takashi Iwai
1929c55d2e 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.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-02 16:26:03 +02:00
Jaroslav Kysela
0de385109a pcm: more better documentation for snd_pcm_poll_descriptors
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-04-21 14:36:33 +02:00
Jaroslav Kysela
a987a692bf pcm_hw plugin: show appl_ptr and hw_ptr in dump() callback
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-04-09 10:49:57 +02:00
Jaroslav Kysela
fb12b89453 pcm_hw plugin: preserve monotonic flag also after snd_pcm_hw_params() call
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-04-08 09:29:35 +02:00
Pavel Hofman
0fe807dedd Change "%b" to represent bits instead of bytes in PCM file plugin
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-03-03 17:07:55 +01:00
Clemens Ladisch
1009f9859c 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>
2009-02-11 09:53:29 +01:00
Takashi Iwai
548dd9be90 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

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-02 16:11:39 +01:00
Takashi Iwai
cb66600dd3 Fix handling of revents in snd_pcm_poll_descriptors_revents()
The revents parameter is ambiguously defined whether it's a pointer
to a single event or an arary.

This patch defines the behavior of revents more strictly (in the
function description): it's a pointer of a single event.

Also fixed snd_pcm_wait_nocheck() to follow that rule.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-02 16:10:08 +01:00
Pavel Hofman
59ebaa8e9d 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>
2009-01-29 11:59:27 +01:00
Takashi Iwai
d3a8e853fb 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.

This patch fixes the conversion rule.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-01-27 17:21:34 +01:00
Takashi Iwai
48e4d089dc Fix softvol access refine
The commit a13707da6b

    pcm_softvol plugin: remove access type change for refine

breaks the softvol in the case of RW -> MMAP.  The slave of softvol
must be an mmap although the previous fix forces RW access.

This patch reverts the commit, and the fixed access refine method
to hanle non-interleaved <-> interleaved changes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-12-04 16:01:22 +01:00
Diego E. 'Flameeyes' Pettenò
03388ca6d3 Mark static tables as constant when possible.
This makes it possible to write them to .data.rel.ro or to .rodata if
there is no relocation involved (arrays of character arrays).

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 22:39:38 +01:00
Diego E. 'Flameeyes' Pettenò
fc8d8bb2e6 Make string arrays as constant as possible.
Use "const char *const []" as type for string arrays, or convert to
"const char [][x]" when it makes sense.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 22:14:52 +01:00
Diego E. 'Flameeyes' Pettenò
8b14625cc3 Make all the PCM plugins ops structure constant.
This ensures they are emitted in .data.rel.ro rather than .data.rel,
which should make a nice difference when using prelink.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 20:38:49 +01:00
Diego E. 'Flameeyes' Pettenò
1f734e3058 Make snd_pcm_hw_params_names static to pcm_params.c .
Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 20:28:56 +01: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
73ddcda842 Fix segfault with invalid meter plugin option
snd_pcm_meter_add_scope_conf() may cause a segfault when pcm_scope_type
isn't defined.

Initialize type_conf properly to avoid it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-11-19 16:14:27 +01:00
Jaroslav Kysela
1dd1ba94a3 Fix comment typos for snd_pcm_read[in]()
From: William Estrada <MrUmunhum@popdial.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-09-09 19:58:59 +02:00
Jaroslav Kysela
a13707da6b pcm_softvol plugin: remove access type change for refine
The softvol plugin does in-place sample recalculation. The access type
cannot be changed like in linear plugins. Remove access type change
in refine functions.

This bug was detected with PulseAudio on Sony PS3 platform.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-09-09 13:10:55 +02:00
Jaroslav Kysela
fe5391c9da Add snd_pcm_avail() and snd_pcm_avail_delay() functions. Make snd_pcm_hwsync() deprecated.
As proposed in http://mailman.alsa-project.org/pipermail/alsa-devel/2008-June/008558.html
the snd_pcm_avail() and snd_pcm_avail_delay() functions are now available
to get accurate stream position in a straight way. The snd_pcm_avail_delay()
function was added to ensure full sync between avail and delay values. It's
actually implemented using delay() + avail_update() calls but it might be
changed in future.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-09-01 11:38:53 +02:00
Lennart Poettering
bd7b73a621 alsa-lib: Reword doxygen doc for snd_pcm_delay()
snd_pcm_delay() is for synchronization purposes, it returns the overall latency
of the stream, not just the latency induced by the hardware playback buffer.
The documentation is a bit misleading about this fact, and some people already
misunderstood it. So let's reword this to make the explanation clearer and
explicit.

This is a result of the discussions of the thread this mail belongs to:

http://mailman.alsa-project.org/pipermail/alsa-devel/2008-June/008456.html

From: Lennart Poettering <mznyfn@0pointer.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-08-31 15:46:22 +02:00
Lennart Poettering
73d20069e0 alsa-lib: Make sure SND_PCM_NO_xxx flags don't get lost when nonblocking mode is enabled
The plug PCM copies the 'mode' field from the slave PCM. If blocking mode is
enabled for the plug PCM the mode is subsequently overwritten with the original
requested 'mode'. If non-blocking mode is requested this does not happen.

Because the hw PCM synthesizes the 'mode' from the actual file descriptor flags
no SND_PCM_NO_xxx will ever be set for it. This has the effect that the 'mode'
of the plug PCM will also not include those flags anymore -- unless they are
overwritten as mentioned above. This basically means SND_PCM_NO_xxx is ignored
for plug:hw:4711 style device strings opened in non-blocking mode.

You can easily test this with "aplay --channels 7 --disable-channels -f S16_LE
-r 44100 -D plug:hw:0" on a device that cannot do 7 channels. Normally this
call should fail, however if you add "-N" to the command line this call will
succeed.

This patch simply copies the SND_PCM_NO_xxx flags back into the 'mode' field in
case we don't overwrite it with the original anyway.

Probably closes bug 3571 for good.

From: Lennart Poettering <mznyfn@0pointer.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-08-31 15:45:18 +02: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
Lennart Poettering
8d3fb3102f fix return value of snd_pcm_rewind()/snd_pcm_forward() to return how much actually has been rewound, instead of what actually could have rewound
Make snd_pcm_plugin_rewind()/_forward() actually return how much has
been rewound/forwarded instead of how much could have been
rewounded/forwarded. This makes the code actually do what the
documentation of snd_pcm_rewind() suggests.

Signed-off-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-20 17:27:57 +02:00
Lennart Poettering
15769ead72 fix type of internally used sframes variable, to avoid unnecessary casts
This minor patch fixes the type of the sframes variable in
snd_pcm_plugin_forward(). With this fix we need to cast less and the
code is less confusing.

Signed-off-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-20 17:26:55 +02:00
Lennart Poettering
0fbfe2d8d6 clamp snd_pcm_rewind()/snd_pcm_forward() into the right direction
The clamping of the input parameter in snd_pcm_rewind()/_forward() is
in the wrong direction.

Signed-off-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-20 17:25:53 +02:00
Takashi Iwai
f78af4ab04 Add boolean (mute) functionality to softvol plugin
When the resolution is set to 2, a boolean control is created as a
mute switch instead of a volume control.
Also, fixed the possible zero-division error.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-07-16 12:37:51 +02:00
Jaroslav Kysela
5e91207586 pcm: fix comment for snd_pcm_avail_update()
In some cases, value might be used for r/w ops, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-06-16 13:23:22 +02:00
Josh Green
2076b88a77 Fix segfault with dmix of 3-bytes formats
The i386 and x86-64 dmix may cause segfaults when 3-bytes formats are used
due to btsl asm code, which may overcome the buffer end-boundary.
The patch changes btsl to btsw so that it doesn't happen.

ALSA bug#3341:
	https://bugtrack.alsa-project.org/alsa-bug/view.php?id=3341

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-07 10:10:49 +02:00
Takashi Iwai
1467f4e238 PCM: allow mmap-access conversion in plug
The plug plugin has a long-standing problem that it can handle only
slaves that support mmap because of format/rate/access conversions
(these corresponding plugins work only with mmap).

This patch adds the support of automatic mmap->rw conversion via
mmap_emul plugin.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 17:10:41 +02:00
Takashi Iwai
538726cc55 Export __snd_pcm_mmap_emul_open()
Export __snd_pcm_mmap_emul_open() for plug layer.  This isn't exported
globally, though.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 17:09:07 +02:00
Takashi Iwai
8843cf11e0 pcm_mmap_emul: clean up
A little bit of code clean up.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 17:07:45 +02:00
Takashi Iwai
2db108cc72 pcm_mmap_emul: Fix invalid check
The check in snd_pcm_mmap_emul_refine() is bogus and buggy.

Since the changed access type is took back at snd_pcm_mmap_emul_refine
again, it has to check the availability of mmap at each time.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 17:05:56 +02:00
Takashi Iwai
b6af5e1822 Fix compile warnings in pcm_hw.c
Two trivial compile warning fixes:

- Add a missing return to snd_pcm_hw_clear_timer_queue()
- params->info is no long but int

The second one might have hit already on 64bit machine, but alas,
no one didn't notice it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 16:59:47 +02:00