Commit graph

1134 commits

Author SHA1 Message Date
Clemens Ladisch
fb3a4e8b70 pcm dmix plugin: fix generic direct remixing
In the case of the sum buffer being uninitialized, the source sample
must be negated not only when writing to the sum but also when writing
to the destination.
2008-01-14 08:52:16 +01:00
Clemens Ladisch
0e8a259914 check availability of CLOCK_MONOTONIC
Use monotonic timestamps only after checking that CLOCK_MONOTONIC is
actually supported by the C library.
2008-01-14 08:51:45 +01:00
Clemens Ladisch
07e1341548 pcm hw plugin: use TSTAMP only with old drivers
There is no need to call the TSTAMP ioctl with newer driver versions.
2008-01-14 08:50:46 +01:00
Clemens Ladisch
6f751a923d pcm hw plugin: fix TTSTAMP version check
Fix the version check that determines the availability of the TTSTAMP
ioctl.
2008-01-14 08:50:18 +01:00
Clemens Ladisch
cf822aceef pcm plug plugin: remove duplicated expression
Remove a needlessly duplicated expression.
2008-01-14 08:49:35 +01:00
Jaroslav Kysela
ab8331c882 Added possibility to disable also channel and format conversions + softvol.
Unified disable option using mode bits in snd_pcm_open().
2008-01-11 17:21:44 +01:00
Jaroslav Kysela
6814d23d29 SND_PCM_TSTAMP_MMAP -> SND_PCM_TSTAMP_ENABLE change 2008-01-11 08:54:07 +01:00
Jaroslav Kysela
70b11d614d Implemented snd_pcm_rewind() for the dmix plugin 2008-01-10 10:01:14 +01:00
Takashi Iwai
8f16428f9c Don't use deprecated functions inside
Use the new functions in snd_pcm_sw_params_dump().
2008-01-09 17:21:09 +01:00
Takashi Iwai
3e35983f95 Avoid (null) in printf
Show '[builtin]' when the library name is NULL in error messages.
2008-01-09 17:17:58 +01:00
Jaroslav Kysela
2c1318803f Impemented snd_pcm_htimestamp() function. 2008-01-09 13:50:45 +01:00
Jaroslav Kysela
309a274454 Add support for monotonic timestamps 2008-01-09 11:13:34 +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
Jaroslav Kysela
7562320e3b Added SNDRV_PCM_IOCTL_TTSTAMP and updated PCM API version to 2.0.9 2007-12-17 09:04:42 +01:00
Takashi Iwai
ce64f433a6 Add snd_pcm_ioplug_set_state() function
Added an exported function snd_pcm_ioplug_set_state() to change
the PCM state of ioplug from the plugin side (e.g. from another
thread).
2007-12-14 15:19:03 +01:00
Clemens Ladisch
86456d21e0 revert revision 2264:23c4c0f5de40
The rounding done when converting to smaller sample widths fails for
saturated positive samples; in this case, the sample value overflows and
becomes negative.  We are better off without rounding, even if we then
have quantization noise (of at most half the resolution of the least
significant bit).

ALSA bug#3360; Debian #437827; GNOME #436192; LP #116990; Mandriva #33908
2007-12-14 09:11:01 +01:00
Takashi Iwai
74880110c3 Fix segfault with strdup(NULL) in softvol
The last change to fix the slave name may cause a segfault when
name=NULL is passed.  Fixed now.
2007-12-13 15:49:50 +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
Clemens Ladisch
a3fe1f7800 dmix: simplify mix_areas()
The code for the three supported sample widths is almost the same, so it
makes sense to merge the three cases.
2007-12-10 12:32:36 +01:00
Clemens Ladisch
79db4a6bfa dmix: rename mix_areas*
Rename all mix_areas* symbols so that they contain the sample width
instead of some meaningless number.
2007-12-10 12:31:29 +01:00
Takashi Iwai
7dca3ab1ea Make local functions really local
Rename the local functions to snd1_* so that they won't be exported
out of alsa-lib.

Some functions are still kept because aserver requires them.  Sigh.
2007-11-30 18:26:13 +01:00
Takashi Iwai
2ae2bbf190 softvol - add missing name
softvol can be also a pass-thru when the given control already exists
as a hardware control, and the name isn't set properly because of
slave creation.  This patch fixes it.
2007-11-28 14:24:26 +01:00
Takashi Iwai
72ede8a12d Set PCM name properly in empty and asym plugins
The PCM name isn't set properly on empty and asym plugins due to its call
of snd_pcm_open_slave().  Now a new function snd_pcm_open_named_slave()
is created and make snd_pcm_open_slave() an inline function calling the
new one with name=NULL.
2007-11-26 12:29:37 +01:00
Takashi Iwai
0b66de95a9 Fix mmap with multi plugin
The mmap of multi plugin seems broken (for a long time!) due to its
creation of local buffer via snd_pcm_mmap().  Since the multi plugin
just needs to shadow the mmap buffer of each slave, it now has
mmap_shadow=1 and its own mmap/unmap method to do shadowing.
2007-11-23 15:46:48 +01:00
Takashi Iwai
683c8bc4a2 Clean up using gettimestamp()
Introduce a new local function gettimestamp() to get the current timestamp.
2007-11-21 12:19:43 +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
b0b7d0280f pcm - Limit the avail_min minimum size
Fix avail_min if it's less than period_size.  The too small avail_min
is simply useless and the cause of CPU hog with rate plugin.
2007-11-20 15:29:10 +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
Stas Sergeev
c13b8dc986 Remove ugly hack in rate plugin poll_descriptors callback
The rate plugin has ugly hacks in poll_descriptors callback to adjust
avail_min when partial read/write occurs.  This causes often unexpected
problems like XRUNs, especially with two-period cases.

Let's remove that beast, it's rather harmful than useful.

Signed-off-by: Stas Sergeev <stsp@aknet.ru>
2007-11-12 12:01:16 +01:00
Takashi Iwai
07137c0267 ioplug - Fix the refinement of period_* after periods
When changing only PERIODS after BUFFER_*, ioplug doesn't update
the corresponding PERIOD_* parameters properly.  This should fix
ALSA bug#2601.
2007-11-05 12:46:46 +01:00
Takashi Iwai
9eb272c753 Fix gcc compile warnings
Fix gcc compile warnings with nasty const cast.  Let's use simply macros
instead of inline functions.  It's just an array access after all...
2007-10-25 15:34:43 +02:00
Takashi Iwai
d6093c58f3 snd_pcm_dmix_close: raise semaphore if unable to discard
This patch causes snd_pcm_dmix_close() to up a semaphore after downing it
if it is unable to discard it.  It prevents some deadlock that I am
getting when a couple of applications interact and one of them closes the
device and later re-opens it.

From: Mike Gorse <mgorse@mgorse.dhs.org>
2007-10-18 11:10:35 +02: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
Jaroslav Kysela
4f70a301ac release 1.0.15rc3
Patch-level: Merged
2007-09-21 10:40:55 +02:00
Takashi Iwai
67399e35ff Fix wrong offset calculation in snd_pcm_{read|write}_mmap()
The offset used in snd_pcm_{read|write}_mmap() is not the linear offset
but the offset in a ring buffer.  It has to be rounded.
2007-09-20 13:20:03 +02:00
Takashi Iwai
c7e1676dcd Don't set PCM pointer at error in snd_pcm_hw_open()
snd_pcm_hw_open() may set a non-NULL to pcmp even if it returns an error.
Some codes like dmix expects it's NULL, and cause the double free().
2007-08-06 16:09:27 +02:00
Clemens Ladisch
fca29a6172 remove unused variables
Remove some unused variables that the compiler warned about.
2007-07-13 12:44:43 +02:00
Takashi Iwai
4cdb17c601 Split mmap-emulation code from hw layer
Move out mmap-emulation code from hw layer to its own plugin.
This cleans up the mess in pcm_hw.c.
2007-07-11 17:44:09 +02:00
Takashi Iwai
845d9222b2 fix mmap emulation bug of recording doesn't work
From: Roy Huang <royhuang9@gmail.com>

Record doesn't work if enabling mmap emulation and rate conversion
needed, this patch fix this bug.
2007-07-05 12:15:16 +02:00
Takashi Iwai
267d7c7281 Add support of little-endian on i386/x86_64 dmix
i386/x86_64 alsa-lib may need to handle big-endian formats, e.g.
when running via qemu on PPC.  The generic dmix code already has
both endian support, so let's use it as fallback.
2007-07-03 19:52:33 +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
Steve Longerbeam
63e4c591f9 Add support for gain in softvol plugin
This patch allows for gain in the softvol plugin, in addition to attenuation.
The plugin now has a "max_dB" parameter (up to 50 dB) as well as the
original "min_dB" parameter (down to -51 dB). max_dB defaults to 0 dB, so
unless max_dB is specified in a device conf, the behavior of the plugin will
be the same as before (attenuation only).

HDA-Intel.conf is also modified to use softvol for its default capture.
So now, capture is filtered through softvol (range -30 to +30 dB) before
being passed on to dsnoop as before.

The softvol plugin allows a range of -51 to +50 dB, so max_dB could be
increased to 50. But eventually samples are going to get clipped. At 40
dB I was beginning to get clipping when recording a sample sound at a
"reasonably soft" volume using a digital mic on the stac9205 HDA codec.

The motivation for this work is that some HDA codecs have no hardware gain
control for some paths. For instance, the stac9205 has support for digital
mics, but there is no gain control widget for this signal before it is placed
on the Azalia link (only a mute). Therefore gain can only be accomplished
via software.

Signed-off-by: Steve Longerbeam <stevel@embeddedalley.com>
2007-05-18 15:04:12 +02:00
Takashi Iwai
577959ec87 Revert the wrong change in src/pcm/Makefile.am
Reverted the wrong change in src/pcm/Makefile.am, accidentally merged
from my own development version...
2007-05-15 15:58:58 +02:00
Takashi Iwai
21888c5f50 Add config and plugin directory options to configure
Added --with-configdir and --with-plugindir options to configure
which specify the directories for config files and plugin objects
respectively.  The default paths when these options are not
specified are unchanged.
2007-05-03 20:55:54 +02:00
Takashi Iwai
7f9dd4ac65 Fixed an access to uninitialized variable in pcm_rate.c
Fixed an access to uninitialized variable in pcm_rate.c (in error message).
2007-03-28 14:31:46 +02:00
Takashi Iwai
c16111516f Define an array of default rate plugins
Define an array of default rate plugins, set speexrate as the first
entry.  The linear is used as a fallback.
2007-03-28 12:38:27 +02:00
Takashi Iwai
c6bebac05e Trivial fix of compile warning
Fix unused variable j.
2007-03-22 01:17:22 +01:00
Takashi Iwai
36987b02c0 String array for default rate plugin list
Change the rate converter type to allow string arrays in addition to
a string.  When a string array is given, the rate plugin probes each
string and try to load the converter plugin in the order of the list.

For example, you can set
	defaults.pcm.rate_converter	[ "samplerate" "linear" ]
so that samplerate plugin is preferred to linear plugin if it's
installed.
2007-03-22 00:58:42 +01:00
Takashi Iwai
70e4ec9d08 Allow build without libdl and libpthread
Allow building alsa-lib without libdl and libpthread.
Added new options to configure, --with-libdl and --with-pthread.
2007-03-22 00:48:18 +01:00