6.5 pcm_prepare
在tinyalsa中,写数据之前需要调用到pcm_prepare,需要向内核发送一条SNDRV_PCM_IOCTL_PREPARE命令。来看一下,在内核中的具体实现,这段代码集中在一块,集中看一下。
static int snd_pcm_pre_prepare(struct snd_pcm_substream *substream,
snd_pcm_state_t state)
{
struct snd_pcm_runtime *runtime = substream->runtime;
int f_flags = (__force int)state;
if (runtime->status->state == SNDRV_PCM_STATE_OPEN ||
runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED)
return -EBADFD;
if (snd_pcm_running(substream))
return -EBUSY;
substream->f_flags = f_flags;
return 0;
}
实际动作前的预处理,这段代码的其实就是判断当前的状态,用来确定是否可以进行prepare操作。
static int snd_pcm_do_prepare(struct snd_pcm_substream *substream,
snd_pcm_state_t state)
{
int err;
snd_pcm