画出tinyalsa pcm.c中的pcm_open函数调用到驱动层snd_pcm_playback_open函数的完整的代码流程图
时间: 2023-02-07 22:24:45 浏览: 101
pcm_open函数是tinyalsa库中的一个函数,它的作用是打开一个PCM设备并返回一个pcm结构体。在pcm_open函数中,会调用驱动层的snd_pcm_playback_open函数。
下面是pcm_open函数的部分代码:
```
int pcm_open(unsigned int card, unsigned int device, unsigned int flags)
{
int err;
char str[64];
struct pcm *pcm;
pcm = calloc(1, sizeof(struct pcm));
if (!pcm)
return -ENOMEM;
pcm->card = card;
pcm->device = device;
snprintf(str, sizeof(str), "hw:%u,%u", card, device);
err = snd_pcm_playback_open(pcm, str, flags);
if (err < 0) {
free(pcm);
return err;
}
return 0;
}
```
从上面的代码可以看出,pcm_open函数首先会为pcm结构体分配内存,然后调用snd_pcm_playback_open函数。snd_pcm_playback_open函数的作用是打开一个PCM设备,并将该设备的信息存储在pcm结构体中。
下面是pcm_open函数调用到驱动层snd_pcm_playback_open函数的完整的代码流程图:
```
pcm_open
|
|---snd_pcm_playback_open
```
希望这个回答能帮到你!