阅读:1422回复:0
alsa驱动问题
在alsa驱动源码pcm部分,有一个对pcm操作的函数指针列表,其中的内容如下:
struct file_operations snd_pcm_f_ops[2] = { { .owner = THIS_MODULE, .write = snd_pcm_write, .writev = snd_pcm_writev, .open = snd_pcm_playback_open, .release = snd_pcm_release, .poll = snd_pcm_playback_poll, .unlocked_ioctl = snd_pcm_playback_ioctl, .compat_ioctl = snd_pcm_ioctl_compat, .mmap = snd_pcm_mmap, .fasync = snd_pcm_fasync, }, { .owner = THIS_MODULE, .read = snd_pcm_read, .readv = snd_pcm_readv, .open = snd_pcm_capture_open, .release = snd_pcm_release, .poll = snd_pcm_capture_poll, .unlocked_ioctl = snd_pcm_capture_ioctl, .compat_ioctl = snd_pcm_ioctl_compat, .mmap = snd_pcm_mmap, .fasync = snd_pcm_fasync, } }; 其中的放音部分,是否是先用snd_pcm_playback_open打开音频设备,再用snd_pcm_write向声卡中写数据就可以放音了呢?(在标准的alsa中对于应用层的编程是通过alsa-lib封装上述部分以实现的) 现在我不用alsa-lib就直接采用上述方法能行吗? 如果回答是肯定的,在我测试的过程中snd_pcm_playback_open是成功了的返回为0,substream->runtime->status->state的状态是打开的(SNDRV_PCM_STATE_OPEN).但是在snd_pcm_write中却出现了问题,如下: if (runtime->status->state == SNDRV_PCM_STATE_OPEN) { result = -EBADFD; goto end; } 运行这段代码后就退出了程序,不能向设备里面写入音频流.请问各位牛人这是怎么回事?能指教下小弟吗? |
|