当前位置: 首页 > news >正文

温州网站制作推广自己怎么样做游戏网站

温州网站制作推广,自己怎么样做游戏网站,校园门户网站系统建设,智能模板网站建设收费ALSA内部函数调用流程 一直都有这样的一个疑问 就是在linux系统中我们调用snd_pcm_open后,就不知道alsa内部是怎么运行的了 用户的pcm_open()相当于先对ASoC各个驱动模块startup(),再做hw_params()。 pcm_open()pcm->fd open("/dev/snd/pcm…

ALSA内部函数调用流程

一直都有这样的一个疑问

就是在linux系统中我们调用snd_pcm_open后,就不知道alsa内部是怎么运行的了

用户的pcm_open()相当于先对ASoC各个驱动模块startup(),再做hw_params()。

pcm_open()pcm->fd = open("/dev/snd/pcmC0D0c")snd_pcm_capture_open()snd_pcm_open(SNDRV_PCM_STREAM_CAPTURE)snd_pcm_open_file()snd_pcm_open_substream()substream->ops->open()soc_pcm_open()cpu_dai->driver->ops->startup()platform->driver->ops->open()codec_dai->driver->ops->startup()rtd->dai_link->ops->startup()ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)snd_pcm_hw_params_user()snd_pcm_hw_params()substream->ops->hw_params()soc_pcm_hw_params()rtd->dai_link->ops->hw_params()dai->driver->ops->hw_params()platform->driver->ops->hw_params()ioctl(pcm->fd, SNDRV_PCM_IOCTL_SW_PARAMS, &sparams)

用户的pcm_read()相当于做从内核缓冲区到用户缓冲区的copy_to_user()。即把硬件写到内核缓冲区的数据拷贝到用户缓冲区。(mmap模式例外,其没有数据拷贝的动作,性能更好。)

pcm_read()if (!pcm->running)pcm_start()pcm->running = 1ioctl(pcm->fd, SNDRV_PCM_IOCTL_READI_FRAMES, &x)snd_pcm_lib_read()snd_pcm_lib_read1(transfer)transfer(substream, appl_ofs, data, offset, frames)snd_pcm_lib_read_transfer()substream->ops->copy() *or* copy_to_user()

用户的pcm_start()相当于对ASoC的各个驱动模块做prepare()和trigger(START)动作。

pcm_start()ioctl(pcm->fd, SNDRV_PCM_IOCTL_PREPARE)snd_pcm_prepare()snd_pcm_do_prepare()substream->ops->prepare()soc_pcm_prepare()rtd->dai_link->ops->prepare()platform->driver->ops->prepare()codec_dai->driver->ops->prepare()cpu_dai->driver->ops->prepare()ioctl(pcm->fd, SNDRV_PCM_IOCTL_START)snd_pcm_action_lock_irq()snd_pcm_do_start()substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_START)soc_pcm_trigger()codec_dai->driver->ops->trigger()platform->driver->ops->trigger()cpu_dai->driver->ops->trigger()rtd->dai_link->ops->trigger()

用户的pcm_close()相当于对ASoC的各个驱动模块做trigger(STOP), hw_free()和shutdown()动作。

pcm_close()close(pcm->fd)snd_pcm_release()snd_pcm_release_substream()snd_pcm_drop(substream)snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP)snd_pcm_do_stop()substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_STOP)soc_pcm_trigger()codec_dai->driver->ops->trigger()platform->driver->ops->trigger()cpu_dai->driver->ops->trigger()rtd->dai_link->ops->trigger()if (substream->hw_opened)if (substream->ops->hw_free != NULL)substream->ops->hw_free(substream)substream->ops->close(substream)soc_pcm_close()cpu_dai->driver->ops->shutdown()codec_dai->driver->ops->shutdown()rtd->dai_link->ops->shutdown()platform->driver->ops->close()substream->hw_opened = 0

以snd开头的函数都是在alsa-core中提供的

以soc开头的函数都是在asoc-core中提供的

总结:

1.一般情况下,系统中移植了alsa,音频我们只需要修改底层asoc core 中的dai link ,让asoc core 能匹配到我们的codec,配置好iis 通信格式和时序就可以了

而alsa core 一般是不用动的,上层alsa-lib alsa-utils 也是不用动的

2.当使用了不同版本的alsa lib,会导致amixer有一些区别

http://www.yayakq.cn/news/549473/

相关文章:

  • 旅游电子商务网站开发项目进度表制作软件网站
  • 站长工具永久更新服务器租用网站自动划分空间
  • 展示网站模版源码电子商务网站建设产品
  • 网站优化排名软件网站河南网站建设详细流程
  • 佛山微网站建设 天博永兴城乡住房建设部网站
  • 无锡网站公司哪家好看到网站的第一印象
  • 电脑网站 源码免费建域名网站
  • 在南宁做家教兼职的网站上传wordpress到空间
  • 合肥市建设网站Wordpress设置Ip不开放
  • 上海网站开发哪里有如何在手机上做自己的网站
  • 云南省建设厅网站首页开发板有什么用
  • 成都机械网站制作wordpress模板秘钥
  • 网约车平台app网站建设青岛开发区网站
  • 360免费建站网页链接php搭建一个简单的网站
  • 张家港网站包年网站模板网站
  • 各类电子商务网站建设wordpress pckr
  • 二十一冶建设有限公司网站网站支付界面怎么做
  • 青岛做网站公司电话怎么用阿帕奇做网站
  • 建设网站 托管 费用asp 网站 源码
  • 一个网站建设都需要什么长沙百度快速优化
  • 网页建站点网站建设与管理自考重点
  • 如何建一个营销网站网站开发者所有权归属
  • 用什么工具做网站视图网站空间购买哪家好
  • 商务网站建设策划书html5高端装修公司网站源码
  • 行业门户网站 建站做网站帮京东卖东西怎么合作
  • 营销型网站建设好不好大秦wordpress微信支付
  • 网站备案时间多久电商网站建设基本流程
  • iphone手机网站建设网站重定向怎么做
  • wordpress移动端加底部导航栏企业网站pc优化
  • 响应式网站和普通网站wordpress滑动相册