[RK3288][Android6.0] Audio录音frame rate设置流程小结
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
HAL:
默认的配置在
hardware/rockchip/audio/tinyalsa_hal/audio_hw.h:
struct pcm_config pcm_config_in = {
.channels = 2,
.rate =44100, //配置的是44100Hz.
.period_size = 16,
.period_count = 32,
.format = PCM_FORMAT_S16_LE,
};
流程:
adev_open_input_stream -> audio_hw.c
in->stream.read ->
in_read ->
start_input_stream ->
pcm_open -> pcm.c //使用tinyalsa库标准接口
open -> //设备格式是/dev/snd/pcmC%uD%u%c
ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, ¶ms) ->
snd_pcm_capture_ioctl -> pcm_native.c //进入kernel
snd_pcm_capture_ioctl1 ->
snd_pcm_common_ioctl1 ->
snd_pcm_hw_params_user -> //cmd: SNDRV_PCM_IOCTL_HW_PARAMS
snd_pcm_hw_params ->
substream->ops->hw_params ->
soc_pcm_hw_params ->
rtd->dai_link->ops->hw_params -> //machine
rk29_hw_params rk_rt5631.c
codec_dai->driver->ops->hw_params -> //codec dai
rt5631_hifi_pcm_params -> rt5631.c
get_coeff_in_slave_mode
rt5631_write //寄存器:RT5631_STEREO_AD_DA_CLK_CTRL
cpu_dai->driver->ops->hw_params -> //platform dai,即cpu dai
rockchip_i2s_hw_params //i2s设置,由于前面cpu已经设置好频率,这里就不用设置了.
platform->driver->ops->hw_params //platform driver
dmaengine_pcm_hw_params //只是配置dma,和framerate无关
从framerate的设置也可以了解到了hw_params的调用流程, 其他参数如format, channel也是一样的过程.
摘自: http://blog.csdn.net/droidphone/article/details/7165482
ASOC重要概念:
Machine
是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,Machine为CPU、Codec、输入输出设备提供了一个载体。
Platform
一般是指某一个SoC平台,比如pxaxxx,s3cxxxx,omapxxx等等,与音频相关的通常包含该SoC中的时钟、DMA、I2S、PCM等等,只要指定了SoC,那么我们可以认为它会有一个对应的Platform,它只与SoC相关,与Machine无关,这样我们就可以把Platform抽象出来,使得同一款SoC不用做任何的改动,就可以用在不同的Machine中。实际上,把Platform认为是某个SoC更好理解。
Codec
字面上的意思就是编解码器,Codec里面包含了I2S接口、D/A、A/D、Mixer、PA(功放),通常包含多种输入(Mic、Line-in、I2S、PCM)和多个输出(耳机、喇叭、听筒,Line-out),Codec和Platform一样,是可重用的部件,同一个Codec可以被不同的Machine使用。嵌入式Codec通常通过I2C对内部的寄存器进行控制。
摘自: http://blog.csdn.net/droidphone/article/details/7316061
软件部分
Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,dai_driver则主要完成cpu一侧的dai的参数配置,同时也会通过一定的途径把必要的dma等参数与snd_soc_platform_driver进行交互。
[RK3288][Android6.0] Audio录音frame rate设置流程小结相关推荐
- [RK3288][Android6.0] Audio的音量设置流程小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 说明一: AudioManager提供了两个调节音量接口 adjustSuggestedStrea ...
- 声道切换 android,[RK3288][Android6.0] Audio中的单声道到双声道的转换处理过程
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 播放音乐是单声道,硬件用的是双声道. AudioFlinger::PlaybackThread:: ...
- [RK3288][Android6.0] Audio中的单声道到双声道的转换处理过程
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 播放音乐是单声道,硬件用的是双声道. AudioFlinger::PlaybackThread:: ...
- [RK3288][Android6.0] AT24C02驱动分析及功能增加小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Spec: 网上很多,如 https://wenku.baidu.com/view/0020131 ...
- [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Settings -> Display有个选项控制旋转屏幕时内容是否跟着旋转 这个功能是通过 ...
- [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: RK3288 Android6.0平台对AP6356S的支持不是很完善,直接修改wifi ch ...
- [RK3288][Android6.0] 调试笔记 --- touch无法获取坐标点
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有网友遇到调试touch的时候能触发中断,但无法获取坐标点 具体可参考文章 [RK3288][An ...
- [RK3288][Android6.0] 调试笔记 --- AndroidTool低格无效问题
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 现象: 之前文章 [RK3288][Android6.0] 调试笔记 - AndroidTool两 ...
- [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...
最新文章
- OpenRASP xss算法的几种绕过方法
- HarmonyOS应用开发者门户,HarmonyOS 手机应用开发者 Beta 版到来,对开发者意味着什么...
- CodeForces999E 双dfs // 标记覆盖 // tarjan缩点
- win10操作技巧介绍,很实用!
- vantUI应用(Tabbar标签页)返回上一页的失效问题
- openGauss 分区表索引
- 女友晚安之后依然在线:python男友用20行代码写了个小工具
- python网络编程讲解_详解Python Socket网络编程
- Android源码编译FFmpeg4.0.2单独so库for Android(验证可用)
- 二叉链表java_二叉树的二叉链表存储(java实现)
- python cox模型_python Cox比例风险假设检验-基于lifelines库
- 程序猿 那些值得收藏的网站
- css样式选择器的种类及区别
- 使用SPSS进行曲线估算分析
- 腾讯游戏天美工作室实习感悟
- 软件运行的好好的,突然黑屏啥也进不去了
- css实现的图片列表切换轮播特效html页面前端源码
- 用java实现输入一行字符,分别统计出其中中文汉字、英文字母、空格、数字和其它字符的个数
- MySQL数据库常见错误与解决方法总结
- PS修图台式机装机方案