ALSA: introduce the snd-aloop module for the PCM loopback

The snd-aloop module allows redirecting of the PCM playback in the
kernel back to the user space using the standard ALSA PCM capture API.

The module also allows time synchronization with another timing source
and notifications of playback stream parameter changes.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2010-08-09 14:21:11 +02:00
parent 9fe6206f40
commit 597603d615
3 changed files with 1076 additions and 0 deletions

View file

@ -74,6 +74,25 @@ config SND_DUMMY
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called snd-dummy. will be called snd-dummy.
config SND_ALOOP
tristate "Generic loopback driver (PCM)"
select SND_PCM
help
Say 'Y' or 'M' to include support for the PCM loopback device.
This module returns played samples back to the user space using
the standard ALSA PCM device. The devices are routed 0->1 and
1->0, where first number is the playback PCM device and second
number is the capture device. Module creates two PCM devices and
configured number of substreams (see the pcm_substreams module
parameter).
The looback device allow time sychronization with an external
timing source using the time shift universal control (+-20%
of system time).
To compile this driver as a module, choose M here: the module
will be called snd-aloop.
config SND_VIRMIDI config SND_VIRMIDI
tristate "Virtual MIDI soundcard" tristate "Virtual MIDI soundcard"
depends on SND_SEQUENCER depends on SND_SEQUENCER

View file

@ -4,6 +4,7 @@
# #
snd-dummy-objs := dummy.o snd-dummy-objs := dummy.o
snd-aloop-objs := aloop.o
snd-mtpav-objs := mtpav.o snd-mtpav-objs := mtpav.o
snd-mts64-objs := mts64.o snd-mts64-objs := mts64.o
snd-portman2x4-objs := portman2x4.o snd-portman2x4-objs := portman2x4.o
@ -13,6 +14,7 @@ snd-ml403-ac97cr-objs := ml403-ac97cr.o pcm-indirect2.o
# Toplevel Module Dependency # Toplevel Module Dependency
obj-$(CONFIG_SND_DUMMY) += snd-dummy.o obj-$(CONFIG_SND_DUMMY) += snd-dummy.o
obj-$(CONFIG_SND_ALOOP) += snd-aloop.o
obj-$(CONFIG_SND_VIRMIDI) += snd-virmidi.o obj-$(CONFIG_SND_VIRMIDI) += snd-virmidi.o
obj-$(CONFIG_SND_SERIAL_U16550) += snd-serial-u16550.o obj-$(CONFIG_SND_SERIAL_U16550) += snd-serial-u16550.o
obj-$(CONFIG_SND_MTPAV) += snd-mtpav.o obj-$(CONFIG_SND_MTPAV) += snd-mtpav.o

1055
sound/drivers/aloop.c Normal file

File diff suppressed because it is too large Load diff