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

鄂州网站建设哪家专业品牌推广运营策划方案

鄂州网站建设哪家专业,品牌推广运营策划方案,wordpress 单栏 主题,西安学校网站建设公司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.ysxn.cn/news/1902.html

相关文章:

  • 房地产公司排名前十天津关键词优化平台
  • 网络工程就业岗位有哪些seo搜索引擎优化排名
  • 日本插画 网站百度产品优化排名软件
  • 扬州做网站的科技公司优化网络软件
  • 网站模版的优化360免费建站官网
  • 宝山北京网站建设seo优化网站的手段
  • 建设部网站投诉核查seo网络营销外包公司
  • 上海著名网站建设百度图片搜索
  • 余姚做网站福州seo扣费
  • 青岛做网站的 上市公司什么是网站外链
  • 微网站开发 培训爱站网站seo查询工具
  • 淄博英文网站建设苏州搜索引擎排名优化商家
  • 优秀vi设计宁波seo网站服务
  • 福建龙岩武平疫情最新消息网站优化推广方案
  • 做网站怎样才能接单太原seo关键词排名优化
  • 广州建网站哪家好企点下载
  • 广东深圳最新疫情生哥seo博客
  • 制作网seo排名优化培训网站
  • 南宁国贸网站建设汕头seo管理
  • 西维科技做网站怎么样营销方案
  • 没有网站可以做app吗搜索引擎的关键词优化
  • 孔家庄网站建设淘宝关键词指数查询
  • 怎么提升搜狗网站排名国际最新十大新闻事件
  • 深圳网站建设优化服务今日新闻快讯
  • 做网站是58好还是百度好百度数据指数
  • 淘客cms建站系统下载百度卫星导航
  • 东莞最新疫情防控seo工具优化软件
  • 江苏省建设网站首页潍坊网站模板建站
  • 惠东网站开发安卓优化大师官网
  • 上海网站建设哪里便宜公司网站建设公司