2024年4月28日发(作者:)

alsa声卡/dev/snd/pcmC0D0p的open打开流程

原文地址:

/?uid=20564848&do=blog&cuid=2116725

aplay.c

==> main

==> snd_pcm_open(&handle, pcm_name, stream, open_mode); // 打开一路pcm,刷新

config配置

如果是"default",同时type等于SND_CONFIG_TYPE_COMPOUND那么这里对应"empty"

static const char *const build_in_pcms[] = {

"adpcm", "alaw", "copy", "dmix", "file", "hooks", "hw", "ladspa", "lfloat",

"linear", "meter", "mulaw", "multi", "null", "empty", "plug", "rate", "route", "share",

"shm", "dsnoop", "dshare", "asym", "iec958", "softvol", "mmap_emul",

NULL

};

_snd_pcm_empty_open和snd_pcm_open_named_slave

==> snd_pcm_open_conf(pcmp, name, root, conf, stream, mode);

==> open_func = snd_dlobj_cache_lookup(open_name);将获得lib库中

_snd_pcm_empty_open函数

所以open_func将等于_snd_pcm_empty_open

_snd_pcm_empty_open

_snd_pcm_asym_open

_snd_pcm_plug_open

_snd_pcm_softvol_open

_snd_pcm_dmix_open

_snd_pcm_hw_open

==> snd_pcm_hw_open(pcmp, name, card, device, subdevice, stream,

mode | (nonblock ? SND_PCM_NONBLOCK : 0),