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, &params) ->
                        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设置流程小结相关推荐

  1. [RK3288][Android6.0] Audio的音量设置流程小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 说明一: AudioManager提供了两个调节音量接口 adjustSuggestedStrea ...

  2. 声道切换 android,[RK3288][Android6.0] Audio中的单声道到双声道的转换处理过程

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 播放音乐是单声道,硬件用的是双声道. AudioFlinger::PlaybackThread:: ...

  3. [RK3288][Android6.0] Audio中的单声道到双声道的转换处理过程

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 播放音乐是单声道,硬件用的是双声道. AudioFlinger::PlaybackThread:: ...

  4. [RK3288][Android6.0] AT24C02驱动分析及功能增加小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Spec: 网上很多,如 https://wenku.baidu.com/view/0020131 ...

  5. [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Settings -> Display有个选项控制旋转屏幕时内容是否跟着旋转 这个功能是通过 ...

  6. [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: RK3288 Android6.0平台对AP6356S的支持不是很完善,直接修改wifi ch ...

  7. [RK3288][Android6.0] 调试笔记 --- touch无法获取坐标点

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有网友遇到调试touch的时候能触发中断,但无法获取坐标点 具体可参考文章 [RK3288][An ...

  8. [RK3288][Android6.0] 调试笔记 --- AndroidTool低格无效问题

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 现象: 之前文章 [RK3288][Android6.0] 调试笔记 - AndroidTool两 ...

  9. [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...

最新文章

  1. OpenRASP xss算法的几种绕过方法
  2. HarmonyOS应用开发者门户,HarmonyOS 手机应用开发者 Beta 版到来,对开发者意味着什么...
  3. CodeForces999E 双dfs // 标记覆盖 // tarjan缩点
  4. win10操作技巧介绍,很实用!
  5. vantUI应用(Tabbar标签页)返回上一页的失效问题
  6. openGauss 分区表索引
  7. 女友晚安之后依然在线:python男友用20行代码写了个小工具
  8. python网络编程讲解_详解Python Socket网络编程
  9. Android源码编译FFmpeg4.0.2单独so库for Android(验证可用)
  10. 二叉链表java_二叉树的二叉链表存储(java实现)
  11. python cox模型_python Cox比例风险假设检验-基于lifelines库
  12. 程序猿 那些值得收藏的网站
  13. css样式选择器的种类及区别
  14. 使用SPSS进行曲线估算分析
  15. 腾讯游戏天美工作室实习感悟
  16. 软件运行的好好的,突然黑屏啥也进不去了
  17. css实现的图片列表切换轮播特效html页面前端源码
  18. 用java实现输入一行字符,分别统计出其中中文汉字、英文字母、空格、数字和其它字符的个数
  19. MySQL数据库常见错误与解决方法总结
  20. PS修图台式机装机方案

热门文章

  1. UBUNTU ROS 编译后无法rosrun package文件(已解决)
  2. 搭建量化交易系统接口的步骤是什么?
  3. 什么是Apple Music 杜比全景声?如何设置开启?
  4. python爬取古诗文网站诗文一栏的所有诗词
  5. BNUOJ 26474 Bread Sorting
  6. 一文理解分布式常见的一致性算法
  7. 01-【istio】-【服务网格概述】服务网格的优势
  8. 成为优秀Java开发者,这本书值得反复研读
  9. HR 开发技术(abap 转载)
  10. mac使用git管理Github