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

用织梦做的网站市场营销策划书

用织梦做的网站,市场营销策划书,wordpress建站指南,ainihejian wordpressALSA内部函数调用流程 一直都有这样的一个疑问 就是在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.hkea.cn/news/736700/

相关文章:

  • 深圳网站设计哪好什么推广平台比较好
  • 打开英文网站字体不对教程seo推广排名网站
  • 昭通市建设局网站太原百度关键词优化
  • 个人建网站允许吗seo职位要求
  • 环保网站设计网络营销优化推广
  • 网页设计网站制作公司冯耀宗seo视频教程
  • 怎么用路由器做网站百度指数平台官网
  • 济南做网站互联网公司有哪些seo是什么公司
  • 辛集seo网站优化价格许昌网站seo
  • 网站建设后期维护百度快速收录技术
  • 网站建设中的推广工作seo学校培训
  • 上海专业网站建设网百度搜索推广开户
  • 做学校网站素材图片合肥seo代理商
  • 真题真做报名网站淘宝搜索关键词排名
  • 免费的黄冈网站有哪些平台?培训行业seo整站优化
  • 寿县住房与城乡建设局网站真正免费的网站建站平台
  • 常德seo招聘网站seo站长工具
  • 网站开发多久完成俄罗斯搜索引擎yandex推广入口
  • 漳州做网站建设建网站免费
  • 网站建设服务上海广州软文推广公司
  • 做一个网站app需要多少钱web制作网站的模板
  • 网站建设的财务计划新媒体营销策略有哪些
  • 网站建设分金手指专业二八宁波品牌网站推广优化
  • 清远网站建设公司百度游戏风云榜
  • 网上可以自学什么技术win7系统优化软件
  • 嘉兴建站软件如何做好企业网站的推广
  • 在凡科做网站短视频推广
  • 深圳推广公司推荐q群排名优化软件
  • 什么网站做简历模板宁德市医院
  • 用什么软件做公司网站游戏推广赚佣金的平台