一. 以A2DP为例, 并仅分析SBC情况

lib库中的MusicConnectAudio函数

  1. 申请local_config内存, 初始化local_config参数

  2. InitMultiChannelParams(&(local_config->mch_params));
    决定采样频率

  3. DECODER->sink_type: A2DP音乐时参数是 AUDIO_SINK_AV

  4. audioDecoderConnectInputSources(DECODER->sink_type, local_config)
    //目标是连接所有的input source到合适的DSP port.
    {
    sources_t sources;

    sources = audioDecoderGetSources(sink_type);
    //sources.source[0] = StreamSourceFromSink(decoder->media_sink); //A2DP 时候, 实际上只得到source[0], 并且来源于空中A2DP的media_sink.

    generalConfiguration(localConfig);

    configureSources(&sources);
    audioDecodeConnectSources(&sources, sink_type, localConfig->content_protection);
    VmalTransformRtpSbcDecode(sources->source[0], StreamKalimbaSink(GetDspPort(0)));
    //创建A2DP 空中source端到KalimbaSink端的实时流媒体转换.GetDspPort(0)=0;
    connectBackChannel(sink_type, localConfig->codec_data);
    }

以上, 主要是连接 A2DP空中的数据到StreamKalimbaSink(0), 并实时转换.
**
6. // Connect up DSP output ports to hardware sinks
audioDecodeConnectDspOutputs(&(local_config->mch_params));
函数实现:

{AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_PRI_LEFT), audio_output_primary_left);
//StreamKalimbaSource(port)意义为StreamSourceFromSink(StreamKalimbaSink(port));
//        DSP_OUTPUT_PORT_PRI_LEFT 宏定义值为4, 后面的基本依次加1
//        audio_output_primary_left 宏定义值为0
//        AudioOutputAddSourceOrPanic(source, output)的意义是: state.sources[output] = source;AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_PRI_RIGHT), audio_output_primary_right);AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_SEC_LEFT), audio_output_secondary_left);   AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_SEC_RIGHT), audio_output_secondary_right);  AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_AUX_LEFT), audio_output_aux_left);    AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_AUX_RIGHT), audio_output_aux_right);    AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_SUB_WIRED), audio_output_wired_sub);      AudioOutputConnectOrPanic(params);
}
bool AudioOutputConnectOrPanic(audio_output_params_t* params)
{forEachOutput(audio_out) //audio_out范围是 audio_output_primary_left ~ audio_output_max.{audio_sink = StreamAudioSink(getAudioHardwareType(audio_out),getAudioHardwareInstance(audio_out),getAudioHardwareChannel(audio_out));configureSink(audio_sink, audio_out, params); //设置sink采样率之类的参数.if (last_valid_sink){PanicFalse(SinkSynchronise(last_valid_sink, audio_sink)); //同步上次的sink}    last_valid_sink = audio_sink;}/* Connect up each valid sink to its source and un-mute. Must happen after* synchronisation, hence the need for a second loop and duplicate checks.*/forEachOutput(audio_out){audio_sink = StreamAudioSink(getAudioHardwareType(audio_out),getAudioHardwareInstance(audio_out),getAudioHardwareChannel(audio_out));StreamConnect(state.sources[audio_out], audio_sink);//这里是关键代码                       }
}

通过以上分析, 得知可以实现I2S和CODEC选择输出. 具体方法是通过发送不同的串口指令,更新配置,最后对应到以上audio_sink的变更, 就可以切换选择I2S输出或者是DAC codec输出了.

高通CSR QCC300x i2s和AudioCodec 输出切换相关推荐

  1. 高通与安卓水火不容 Android音频系统缺陷测评

    导读:高通与安卓它们都存在同样的问题.是什么原因导致高通Snapdragon全系列都会存在如此问题?它会带来怎样的影响?与Android搭配的高通产品为什么问题会加重?我们来一一分析. Qualcom ...

  2. Qualcomm 高通芯片组与Android音频系统缺陷测评分析

    转自:http://www.soomal.com/doc/10100002164.htm Qualcomm高通公司是目前Android智能手机上最为知名的ARM架构的处理器和芯片方案硬件提供商,高通公 ...

  3. 卖给高通之后的CSR的现状和未来

    转眼之间,CSR已经嫁给高通两年了,养在深宫大院大小妾的CSR,到底过的怎么样呢? 从高通官网上查看的结果显示,CSR产品被分成了三类: A 传统的用在耳机音响的CSR86XX系列,这部分改动不大,就 ...

  4. 高通SDM450平台的LDO 输出与电压调节

    开始之前,首先我们要知道什么是LDO?有什么作用?LDO调试需要调哪些? 什么是LDO,有什么作用? LDO为 低压线性稳压器,高通平台有多路LDO电压输出,以SDM450 为例 共有 LDO1~LD ...

  5. 高通平台printk输出log到串口

    1.查看当前打印级别# cat /proc/sys/kernel/printk默认为:4 4 1 7注释:第一个参数表示控制台log Level,第二个参数表示printk默认的logLevel2.修 ...

  6. 数字音频接口(二) 高通平台MI2S总线调试

    硬件平台:高通SM6125 基线代码:LA.UM.8.11.1.c1 git clone https://git.codelinaro.org/clo/la/platform/vendor/opens ...

  7. 【转载】高通msm8996平台的ASOC音频路径分析(基于androidN及linux3.1x)

    高通msm8996平台的ASOC音频路径分析(基于androidN及linux3.1x) tags : msm8996 sound linux android 原文:高通msm8996平台的ASOC音 ...

  8. 一文讲懂图像处理中的低通、高通、带阻和带通滤波器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 空间域和频域滤波器通常分为四种类型的滤波器--低通.高通.带阻和带 ...

  9. 最后期限已至,高通收购恩智浦全剧终!中国一刀切断高通物联网全局梦!

    来源:物联网智库 摘要:没有一种商业模式可以永享特权.物联网时代,当专利和芯片两大支柱业务均受到剧烈冲击和威胁之下,如何创新以自救,正是考验高通全面战略能力的关键时刻,恩智浦是当前高通给出的最好答案. ...

最新文章

  1. 《数据库技术原理与应用教程》一3-5信息世界与逻辑模型
  2. 2018-03-02 Linux
  3. 计算机学业水平测试题及答案初中,初中信息技术学业水平考试试题30号试题.doc...
  4. C#下实现动态系统托盘图标
  5. java不同进程的相互唤醒_Java线程生命周期与状态切换
  6. iverilog命令选项解释
  7. vs2015移植linux编译,windows平台移植(原linux项目)时,用vs2015开发,碰到的问题及处理方案记录...
  8. 中兴java笔试_最新中兴Java语言笔试真题及答案
  9. 一份很棒的外设驱动库(基于STM32F4)
  10. 搜狗推微信公众平台搜索 可搜公众号与文章
  11. ps怎么清屏_学会ps这几个功能,刷屏朋友圈的照片随手捏来,创意无处不在
  12. 基于微信奶共享会议室预约小程序系统设计与实现 开题报告
  13. dnf剑魂buff等级上限_DNF体验服快讯—剑魂加入25开关/25仔变34仔/国庆版本内容前瞻...
  14. matlab复数开偶次方根,运用复数1的n次方根巧解一类复数方程
  15. 使用长焦镜头拍摄VR全景的技巧
  16. 国际会计准则IAS 和 IFRS
  17. source insight如何设置背景
  18. 毕业三年,快速升职加薪,带领数十人的技术团队,我是怎么做到的?
  19. 【牛客网面经整理】20200831小米一面
  20. 自动化测试之邮件模板

热门文章

  1. 文档订阅发布服务器,订阅服务器与发布服务器数据
  2. Google的十大信条
  3. 怎样关闭红米k40上滑搜索栏(步骤分享)
  4. 洁净室对讲电话机安装,一键免提洁净室sip对讲电话
  5. 微信编辑器文字格式如何设置?
  6. 基于ST 意法半导体IPS1025HF, STM32 Nucleo的智能负载管理解决方案
  7. apache atlas 2.0 详细安装手册
  8. split分词和tokenize的区别
  9. UI设计中三个重要的主题化区域,你知道吗?-优漫动游
  10. 用简单技术对老旧照片进行翻新上色