Android音频
丽萨的托马斯
这个作者很懒,什么都没留下…
展开
-
海思OMX代码分析---流程分析
一、引言:Omx是非常常用的开源媒体编解码组件,omx的整体架构比较复杂,通常有三个层,而绝大部分实现主要是其中的IL(集成层),因为omx的开发偏向底层,实际上是提供了一个可供上层调用的api,然后由标准组件调入进去实现与硬解的联通,因此,做omx IL层的基本会是各大芯片厂商,显然,现在的工作是不会做到这一块的,因为,本次omx学习的主要目的,是了解omx的框架,以及汲取海思在omx框架实现...原创 2019-11-07 17:45:12 · 1578 阅读 · 0 评论 -
海思OMX代码分析---技术片段
一、引言:海思stb产品omx框架中使用的一些不错的代码技术,这个博客分析这些代码片段。二、具体分析:1.字符串衔接:海思在通过组件名加载动态库的时候,将组件名与前后缀衔接使用的是strncat函数: strncpy(buf, prefix, sizeof(prefix)); strncat(buf, cComponentName, strlen(cComponentNam...原创 2019-11-08 16:01:39 · 661 阅读 · 0 评论 -
音频多声道数据的操作
一、前言:近期因为项目中没有和硬件沟通好,导致在Android的alsa中录制数据时,硬件给过来的数据参数和需要的不一样,没办法,需要进行重采样,故看了下网上的重采样介绍,这里简单记录下。二、重采样算法:首先对录制的数据,当两声道及以上时,需要确认一点就是是否交织,这将决定我们的算法如何剥离数据。这是网上找到的关于交织与非交织数据的图示,简单来说,交织的数据就是对每一个采样点都写上所有声道的数据之后才进行下一个采样点的数据写入,而非交织则是按到声道个数,一次性写入所有的采样数据。在我本次的项目中原创 2020-09-14 14:23:25 · 1009 阅读 · 0 评论 -
Android音频之多设备同时输出-cast通路分析
一、引言:有时候,我们在实际处理问题中会遇到这样的需求,播放一段音频或者播报一段语音希望同时从USB/蓝牙类设备和喇叭同时出声,按照Android的audiopolicy策略选择,这是不可行的,因为同一时间,audioflinger只会往一个hal层库里面写数据,而喇叭和USB/蓝牙都不是共用一个hal层的,这种情况下有些芯片厂商是怎么做的呢?最近,正好在公司遇到了这样一个需求,期望从USB的m...原创 2019-12-27 09:42:06 · 4638 阅读 · 2 评论 -
Android音频系统之USB设备通路(Android 5.1)
一、引言:输入/输出通路选择是Android音频中非常重要的一个内容,正常的一个Android系统,会支持喇叭,外放,USB设备或者蓝牙等等输出模组,所以,经常会有项目需要改变原有的策略选择,这类问题通常让人头大,在Android 5.1上面,策略选择是由audiopolicy来做的,audioflinger去执行下面的输入/输出设备的打开,所以,在实际处理中,一定要根据具体问题,多去分析aud...原创 2019-12-12 15:19:56 · 3823 阅读 · 0 评论 -
Android音频系统之AudioTrack起播线与underrun问题研究(Android 5.1)
一、引言:使用audiotrack进行pcm数据播放的时候,复杂场景下会遇到underrun问题,所谓underrun,是指生产者提供数据的速度跟不上消费者使用数据的速度。因为网上讲述这类问题的博客很少,所以这里分享一下自己的研究心得,但是由于underrun和audiotrack的buffer机制非常复杂,所以也会遗留一些问题,欢迎大神补充指正。二、代码分析:1.添加活跃track:首先...原创 2019-12-05 17:46:55 · 6164 阅读 · 7 评论 -
Android音频系统之音量控制详解(Android 5.1)
一、引言:Android的音量控制是典型的audiopolicy和audioflinger协作的例子,博文针对音量调节进行详细的解析.音量控制主要分成两大部分,一部分是java层完成的操作,用于响应音量调节,记录音量值,更新UI等操作,另一部分是native层完成,用于计算音量并执行。需要提一句的是,音量控制是设备厂商的适配重点,通常分为软音量和硬件音量,所谓软音量,就是Android原生针对a...原创 2019-12-03 18:22:54 · 4428 阅读 · 3 评论 -
Android音频系统之AudioTrack与AudioFlinger数据交互
一、前言:在前面的三篇博客中,分析了AP和AF,AT之间的初始化及流程,因为是按照代码逻辑分析的,所以相对比较按部就班,有些关键和需要串联的地方没有分析到,而这篇博客则是针对一些关键点,进行深入和串联,尽量能将三者的关系结合地更紧密。二、分析:1.native层audiotrack中,write操作是如何发起的?在代码调试中,我们看到,thread线程不停地读取audioflinger中共...原创 2019-11-27 15:52:48 · 4743 阅读 · 3 评论 -
Android音频系统之AudioTrack的创建及AudioPolicyService的策略选择(Android5.1)---下篇
一、引言:在上一篇中,我们着重分析了audiotrack创建过程中audiopolicyservice的表现,通过audiopolicyservice的策略选择,我们找到了一个适合的通路进行音频输出,在整个通路打通之后,我们似乎没有看到用于数据共享的buffer产生,而这个工作,就是由audioflinger来完成的。二、代码分析:上一篇,我们分析到,set@AudioTrack.cpp中,...原创 2019-11-19 14:54:50 · 820 阅读 · 0 评论 -
Android音频系统之AudioTrack的创建及AudioPolicyService的策略选择(Android5.1)--- 上篇
一、引言:Android音频的两大服务就是audiopolicyservice和audioflinger,前一篇文章已经分析了audiopolicyservice的启动,而audioflinger的启动并没有什么特别需要分析的地方,但是,如果和audiotrack进行数据交互,那要分析的地方就太多了,本博文就audiotrack的应用demo为例,分析audiotrack的创建过程中,audio...原创 2019-11-19 14:54:38 · 1550 阅读 · 0 评论 -
Android音频系统之AudioPolicyService的启动及audio_policy.conf的加载(Android5.1)
一、引入:,在Android中,应用进行音频回放或者录音,最终在hal层需要选择用哪个输入/输出设备,而设备的加载,就跟audio_policy.conf息息相关,本博文分析的内容就是Android原生音频audio_policy.conf加载的过程(Android5.1)。二、源码分析:1.AudioPolicyService服务的启动:与音频相关的服务AudioFlinger和Audi...原创 2019-11-12 10:44:43 · 1821 阅读 · 0 评论