免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2257 | 回复: 0
打印 上一主题 下一主题

alsa声卡驱动问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-24 21:56 |只看该作者 |倒序浏览
在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;
}

运行这段代码后就退出了程序,不能向设备里面写入音频流.请问各位牛人这是怎么回事?能指教下小弟吗?

[ 本帖最后由 zzhhzr 于 2008-10-6 14:57 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP