mirror of
https://gitee.com/openharmony/third_party_alsa-lib
synced 2024-11-27 09:40:32 +00:00
54931e5a54
Traditionally, many of ALSA library functions are supposed to be thread-unsafe, and applications are required to take care of thread safety by themselves. However, people never be careful enough, and almost all applications fail in this regard. This patch is an attempt to harden the thread safety in exported PCM functions in a simplistic way: just wrap some of exported functions with the pthread mutex of each PCM object. Not all API functions are wrapped by the mutex since it doesn't make sense. Instead, the patchset covers only the functions that may be likely called concurrently. The supposedly thread-safe API functions are marked in the document. For achieving the feature, two new fields are added snd_pcm_t when the option is enabled: thread_safe and lock. The former indicates that the plugin is thread-safe that doesn't need this workaround and the latter is the pthread mutex. Currently only hw plugin have thread_safe=1. So, the most of real-time sensitive apps won't be influenced by this patchset. Although the patch covers most of PCM ops, a few snd_pcm_fast_ops are left without the extra mutex locking: namely, the ones that may have blocking behavior, i.e. resume, drain, readi, writei, readn and writen. These are supposed to handle own locking in the callbacks. Also, if anyone wants to disable this new thread-safe API feature, it can be still turned off via --disable-thread-safety configure option. Signed-off-by: Takashi Iwai <tiwai@suse.de>
134 lines
3.8 KiB
Plaintext
134 lines
3.8 KiB
Plaintext
|
|
ALSA library installation
|
|
=========================
|
|
|
|
Installation from tarball
|
|
-------------------------
|
|
|
|
For installation you can use these commands:
|
|
|
|
./configure
|
|
make install
|
|
|
|
|
|
Compilation from Git-sources
|
|
---------------------------
|
|
|
|
Requirements:
|
|
* automake
|
|
* libtool
|
|
|
|
To compile alsa-lib from source:
|
|
|
|
./gitcompile
|
|
|
|
If you do not want to use the supplied gitcompile-script, you can
|
|
compile alsa-lib manually by using these steps:
|
|
|
|
libtoolize --force --copy --automake
|
|
aclocal
|
|
autoheader
|
|
automake --foreign --copy --add-missing
|
|
autoconf
|
|
./configure
|
|
make
|
|
|
|
|
|
Note: Some automake packages have missing aclocal program. Use newer version
|
|
in the case.
|
|
|
|
|
|
Compilation of static library
|
|
-----------------------------
|
|
|
|
If you would like to use the static ALSA library, you need to use these
|
|
options for the configure script:
|
|
|
|
./configure --enable-shared=no --enable-static=yes
|
|
|
|
Unfortunately, due to bug in the libtool script, the shared and static
|
|
library cannot be built together.
|
|
|
|
|
|
Partial Builds
|
|
--------------
|
|
|
|
You can choose the core components to build via --enable-* or --disable-*
|
|
configure option for reducing the size of libasound. The selectable
|
|
components are: pcm, mixer, rawmidi, hwdep, seq and instr.
|
|
For example, --disable-rawmidi will prevent to build the stuff related
|
|
with raw MIDI. As default, all components are enabled.
|
|
|
|
The PCM plugins to build can be selected via --with-pcm-plugins
|
|
configure option. Multiple plugins can be passed by separation with
|
|
comma. For example, to select _only_ rate and linear plugins (and
|
|
disable other plugins), pass
|
|
--with-pcm-plugins=rate,linear
|
|
Note that "hw" plugin is always enabled.
|
|
Passing "all" will select all available plugins (which is the default
|
|
behavior).
|
|
|
|
When you select "plug" plugin, copy and linear plugins will be
|
|
automatically selected, too. That is, the linear-format and
|
|
access-type conversions are always available with plug layer.
|
|
The other conversions of plug (channel shrink/expansion, rate,
|
|
non-linear and float conversions) are enabled when the corresponding
|
|
plugin is selected, too.
|
|
|
|
|
|
Configuration for cross-compilation
|
|
-----------------------------------
|
|
|
|
When you would like to cross-compile ALSA library (e.g. compile on
|
|
i686 host but for arm architecture) you will need to call ./configure
|
|
script with additional parameters:
|
|
|
|
CC=arm-linux-gcc ./configure --host=arm-linux
|
|
|
|
You can omit setting 'CC' variable and cross-compiler will be guessed too.
|
|
|
|
So simplest version would be:
|
|
|
|
./configure --host=arm-linux
|
|
|
|
For platform names in the form cpu-vendor-os (or aliases for this)
|
|
you should look in 'config.guess' script. Target and all paths
|
|
used here are only examples and should not be directly applicable to
|
|
your system.
|
|
|
|
Configuration for machines without FPU
|
|
--------------------------------------
|
|
|
|
If your machine does not have FP unit, you should use '--with-softfloat'
|
|
option. This option disables usage of float numbers in PCM route plugin.
|
|
ALSA could then leave much more CPU cycles for your applications, but you
|
|
could still need some floating point emulator.
|
|
|
|
Thread-safety option
|
|
--------------------
|
|
|
|
As default, major PCM functions of alsa-lib are built to be
|
|
thread-safe with pthread mutex (while this wasn't present in the
|
|
versions earlier than 1.1.2). If you want to build without this
|
|
thread-safety support but reduce the overhead, pass
|
|
--disable-thread-safety configure option.
|
|
|
|
Jack plugin
|
|
-----------
|
|
|
|
JACK plugin is moved to alsa-plugins package.
|
|
|
|
Trouble Shooting
|
|
----------------
|
|
|
|
* Install path on Fedora Core 3
|
|
|
|
FC3 installs its system ALSA library to /lib instead of /usr/lib.
|
|
Specify --libdir=/lib to configure to overwrite it with the new library,
|
|
or run like
|
|
|
|
# ln -sf /usr/lib/libasound.so.2.0.0 /lib/libasound.so.2.0.0
|
|
|
|
to make symlink to the new path.
|
|
Note that /lib might be /lib64 on 64bit architecture.
|