alsa-plugins에서는 pulseaudio plugin을 지원한다.
alsa-lib을 이용하여 parameter 설정 및 open/start/write(i)를 수행하면
alsa-plugins에서는 관련된 동작을 pulseaudio 함수로 연결해주어서 open/start/writei 가 이루어지게 된다.
files
pulse 폴더에 pulseaudio 관련 file 들이 존재한다.
kwangshik.kim@:~/sources/alsa/alsa-plugins-x.x.x/pulse$ ls -al
total 108
drwxrwxrwx 2 kwangshik.kim users 4096 Dec 23 15:40 .
drwxrwxrwx 17 kwangshik.kim users 4096 Jan 7 2019 ..
-rwxrwxrwx 1 kwangshik.kim users 242 Jan 7 2019 50-pulseaudio.conf
-rwxrwxrwx 1 kwangshik.kim users 201 Jan 7 2019 99-pulseaudio-default.conf.example
-rwxrwxrwx 1 kwangshik.kim users 2222 Jan 7 2019 conf_pulse.c
-rwxrwxrwx 1 kwangshik.kim users 16590 Jan 7 2019 ctl_pulse.c
-rwxrwxrwx 1 kwangshik.kim users 1343 Jan 7 2019 Makefile.am
-rwxrwxrwx 1 kwangshik.kim users 28664 Jan 7 2019 Makefile.in
-rwxrwxrwx 1 kwangshik.kim users 23480 Jan 7 2019 pcm_pulse.c
-rwxrwxrwx 1 kwangshik.kim users 5111 Jan 7 2019 pulse.c
-rwxrwxrwx 1 kwangshik.kim users 1512 Jan 7 2019 pulse.h
pcm_pulse.c
playback 만 예를 들면 아래와 같이 ops를 통해 start/stop/drain/.../pause 각각의 함수가 pulseaudio 용으로 mapping 되어 있다.
// alsa-plugins-x.x.x/pulse/pcm_pulse.c
static const snd_pcm_ioplug_callback_t pulse_playback_callback = {
.start = pulse_start,
.stop = pulse_stop,
.drain = pulse_drain,
.pointer = pulse_pointer,
.transfer = pulse_write,
.delay = pulse_delay,
.poll_revents = pulse_pcm_poll_revents,
.prepare = pulse_prepare,
.hw_params = pulse_hw_params,
.sw_params = pulse_sw_params,
.close = pulse_close,
.pause = pulse_pause
};
pulse_start
pulse_stop
pulse_drain
pulse_pointer
pulse_write
pulse_delay
pulse_pcm_poll_revents
pulse_prepare
pulse_hw_params (*)
pulse_sw_params
pulse_close
pulse_pause
sequence
detail