Commit graph

1046 commits

Author SHA1 Message Date
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
Takashi Iwai
36cc1daad8 Remove _snd_pcm_link_descriptors() and more comments
Removed the obsoleted _snd_pcm_link_descriptors() from pcm_local.h.
Added more comments on multi plugin.
2007-03-13 10:44:28 +01:00
Takashi Iwai
8048321c76 More better fix for linked start/stop
Instead of link_fd, more generic callback link_slaves is introduced.
This is called for linking the slave streams as the source to the
given master stream.
2007-03-13 02:52:33 +01:00
Takashi Iwai
1753ae794f Fix start/stop of multi plugin
The start/stop of sync'ed stream of multi plugin.
This should make some JACK users with multiple devices happier.
2007-03-13 00:40:22 +01:00
Clemens Ladisch
ffcffac13d fix a signedness warning 2007-03-12 08:27:15 +01:00
Takashi Iwai
6329db3af1 Improve the sample conversion in plug layer
Improve the sample conversion in plug layer for the sample bits
reduction.  Use round instead of truncating, which introduces
more quantization noise.

Original patch by Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
2007-03-09 17:06:23 +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
Jaroslav Kysela
4a1cefd24d pcm_ladspa - fix none policy
In some configurations, channel samples were not copied correctly.
Also, fix memory leaks and remove extra end-of-line chars from SNDERR
strings.
2006-12-20 16:01:27 +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
Takashi Iwai
c9610c024d Fix build of static library
- Add missing pcm_empty entry
- Return the array pointer instead of the first array member.
  Otherwise only the first entry is linked to the binary.
2006-10-27 16:08:21 +02: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
a185898230 added pcm_empty plugin and .hgignore additions 2006-10-13 18:01:27 +02:00
Jaroslav Kysela
10cca7c03b pcm direct plugins - fix memory leak (sconf must be deleted) 2006-10-12 14:42:45 +02:00
Jaroslav Kysela
1300e70573 more name hint interace updates
- add long card name to device description
- create empty PCM plugin to allow right hint description parsing
- reorder devices in alsa.conf
- make namehint more configurable (using default.namehint.showall switch)
- add two levels basic and exteded for hints to default configuration files
- do not show direct device aliases
- removed all known memory leaks
2006-10-12 14:34:23 +02:00
Jaroslav Kysela
13fdc41785 add snd_device_name_hint() function and initial implementation
- add snd_device_name_hint() and snd_device_name_free_hint() functions
- add snd_ctl_iface_conf_name() functions
- do not accept parameters for the plugin definition without @args section
- add defaults.pcm.dmix.card/device and dsnoop.card/device definitions
- add hints for HDA-Intel.conf, pcm/dmix.conf, pcm/dsnoop.conf and alsa.conf
- add test/namehint test utility
- doxygen related cleanups
2006-10-11 13:18:57 +02:00
Jaroslav Kysela
57eb3145b8 fix various warnings
See also ALSA bug#1689
2006-10-06 13:18:34 +02:00
Takashi Iwai
1827d9ccff Fix snd_pcm_open_noupdate() to refer alias
Fixed snd_pcm_open_noupdate() to refer alias.  This fixes the call like

	% aplay -Dplug:bah

where bah is an alias of a certain definition.
2006-10-04 17:32:22 +02:00
Clemens Ladisch
436b003173 rate plugin: fix boundary calculations
Make sure that the rate plugin does not try to change the slave's
boundary value when setting software parameters; such a change wouldn't
affect the slave pcm.

Furthermore, the stop_threshold conversion code used the wrong boundary
value, and the silence_size conversion code did not take into account
the boundary value at all.
2006-09-27 11:11:29 +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
5c71dd3ee7 Add dB range information to PCM softvol plugin
Added the dB range information to PCM softvol plugin.
Also, fixed the coefficient table to match with the
accurate dB step 0.20dB.
2006-08-25 11:46:19 +02:00
Tobin Davis
da076c868c Fix build issue on earler x86_64 based distributions
This patch fixes a build issue on systems with Gnu assembler
prior to 2.15.92.  Instead of having the inline assembler
translate the leal function on a 32 bit register, it is byte encoded.

Signed-off-by: Tobin Davis <tobinx.b.davis@intel.com>
2006-08-21 19:12:33 +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
Jaroslav Kysela
91273c228f Fix examples for PCM API. Fix dogygen warnings. 2006-07-11 21:48:51 +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
9984a0a4b4 Fix division-by-zero in snd_pcm_dump_hw_setup()
Fixed division-by-zero error in snd_pcm_dump_hw_setup().
2006-06-16 18:53:32 +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
Pierre Ossman
3fd9369990 Allow ioplugins to override snd_pcm_delay()
Some io plug-ins might want to adjust the reported delay value and not
strictly follow the current buffer usage (that's why we have two calls
after all).

Allow them to specify a delay() callback and use the previous behaviour
if they don't.

Signed-off-by: Pierre Ossman <ossman@cendio.se>
2006-05-26 17:08:18 +02:00
Juan Carlos Castro y Castro
1d80c5b901 Addition of "infile" parameter (virtual mic) to the file plugin
When this new parameter is specified, the behavior of opening a file PCM
for input is changed to the following: reads from the device, instead of
being passed down to the slave PCM, will read the raw data from the
specified file. No file writes will take place in this case. In the
absence of this parameter, previous behavior is unchanged.

The input file name and descriptor are kept in the snd_pcm_file_t struct
in a manner analogous to the already existing output file parameter.

TODO:

(1) Only interleaved reads (snd_pcm_file_readi) have been implemented
for now.

(2) File read()'s that return a number of bytes that's not a multiple of
the frame size will result in data loss (choppiness). The rbuf,
rbuf_size_bytes, and rbuf_used_bytes members of the snd_pcm_file_t
struct will be used to address this problem in the future.

(3) Mind whether the PCM was opened in blocking mode. If so, we'll have
to loop until the buffer has been filled with read()'s.

Signed-off-by: Juan Carlos Castro y Castro <jcastro@vialink.com.br>
2006-05-19 18:26:41 +02:00
Takashi Iwai
ffebf01d61 Correction for fixing alsa-lib static build
Added the missing _snd_module_pcm_* definitions for static alsa-lib.

From: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
2006-05-12 14:43:26 +02:00
Takashi Iwai
308f52e65a Fix a typo in pcm_file.c
Fix a typo in snd_pcm_file_readn().
2006-05-12 12:09:33 +02:00
Takashi Iwai
f9e0c56c46 Fix hwptr update in rate plugin
Fixed the update of hwptr in rate plugin.
This caused bad sounds on rate expansion and invalid memory access.
2006-05-03 19:18:28 +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
194ff97ea6 Fix delayed start with rate plugin
Add the internal start_pending state in the rate plugin for supporting
delayed start in the case no data is committed to slave PCM.

This fixes the problem of CPU hog with artsd.
2006-04-27 15:46:30 +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
4632e0f637 Fix segfault with dshare plugin
Fixed the segfault with dshare plugin at the second open.
2006-04-25 18:53:17 +02:00
Takashi Iwai
fc7bd60f0d Add missing snd_dlclose() in pcm_meter.c
Added the missing snd_dlclose() in snd_pcm_meter_close().
2006-04-25 17:32:48 +02:00
Takashi Iwai
9123203f8d Fix the error path of snd_pcm_hook_add_conf()
Fixed the segfault in the error path of snd_pcm_hook_add_conf()
(calling invalid install_func pointer).
Also, added the missing snd_dlclose() to release the handle properly.
2006-04-25 17:32:23 +02:00