Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
Android12之OpenSL ES通过StreamPlayer和AudioToCbRenderer播放流程(二十二)
和StreamPlayer一样,AudioToCbRenderer最终通过GenericPlayer实现,不过这种是传URL或者打开的文件,需要用到软解码操作。StreamPlayer是使用的bufferqueue的buffer数据,最终通过GenericPlayer实现。原创 2023-04-06 22:33:18 · 564 阅读 · 0 评论 -
Android12之OpenSL ES获取AudioService服务(二十一)
Android12之OpenSL ES获取AudioService服务(二十一)原创 2023-04-06 22:03:15 · 395 阅读 · 0 评论 -
Android12之OpenSL ES通过MediaPlayer播放流程(二十)
android_audioPlayer_realize的第二个case:分析一下OpenSL ES如何通过Android的MediaPlayer播放音频的。原创 2023-04-06 21:32:13 · 365 阅读 · 0 评论 -
Android12之OpenSL ES通过AudioTrack播放流程(十九)
【代码】Android12之OpenSL ES如何通过AudioTrack选择设备(十九)原创 2023-04-06 15:24:58 · 337 阅读 · 0 评论 -
Android12之OpenSL ES通路hidl flag与hal flag转换原理(十八)
【代码】Android12之OpenSL ES通路hidl flag与hal flag转换原理(十八)原创 2023-04-03 23:32:08 · 582 阅读 · 0 评论 -
Android12之OpenSL ES设置android侧Performance Mode(十七)
通过上一节了解OpenSL ES在应对不同的音频文件的播放,有不同的模式,本节来分享下,OpenSL ES在创建播放器时,是如何设置高性能模式的。因为其操作繁琐和复杂,力图没一个章节能单线讲清楚一个知识点。原创 2023-03-24 00:04:20 · 455 阅读 · 0 评论 -
Android12之OpenSL ES衔接android侧播放器(十六)
中的thiz即是CAudioPlayer的对象,android_audioPlayer_create()函数中初始化CAudioPlayer的参数。步骤可知,在类加载的时候使用的是CAudioPlayer_class,所以Realize注册的回调函数是CAudioPlayer_Realize实现。android平台走android_audioPlayer_realize(thiz, async);. 定位Realize对应的回调函数。原创 2023-03-21 22:23:13 · 305 阅读 · 0 评论 -
Android12之OpenSL ES中IObject_GetInterface获取引擎接口(十五)
前面章节介绍如何获取OpenSL ES引擎对象,以及如何实现引擎对象,从而得到引擎对象中的功能函数,本节分析下引擎对象如何获取引擎接口SLEngineItf。原创 2023-03-20 23:33:26 · 256 阅读 · 0 评论 -
Android12之OpenSL ES中IObject_Realize和CEngine_Realize区别(十四)
前言:OpenSL ES API用起来确实很复杂,在使用中发现有很多接口有相似的用法,如果不根据代码分析,马上会晕菜,接下来看两个接口的用法区别,虽然调用方法的参数是一模一样,但是调用的却是两个不同的接口。原创 2023-03-17 23:05:56 · 298 阅读 · 0 评论 -
Android12之OpenSL ES中objectIDtoClass分析拆解(十三)
通过ClassTable结构体数组得知,slClasses[0]的0号元素是CEngine_class,然而CEngine_class又是一个结构体,接下来看下CEngine_class中mSLObjectID成员变量。接下来着重看下objectIDtoClass里的实现,在objectIDtoClass传递的参数是SL_OBJECTID_ENGINE,看下它的定义,它的值为0x1001.mSLObjectID成员变量,因为以上是ClassTable结构体的初始化,查看下ClassTable的定义。原创 2023-03-17 16:26:10 · 265 阅读 · 0 评论 -
Android12之OpenSL ES中Realize实例化AudioManager(十二)
Android12之OpenSL ES设置sync模式Realize(十二)原创 2023-03-16 23:34:55 · 430 阅读 · 0 评论 -
Android12之OpenSL ES创建引擎对象slCreateEngine(十一)
Android引入OpenSL ES是为了提高音频性能,可以让音频能使用硬件资源,帮助分担CPU的负担,很多芯片厂商会有自己独立的ADSP芯片,如高通、MTK等。此系列深入分析OpenSL ES/AAudio/OBOE和Android深层次的关系及原理.。原创 2023-03-15 22:19:48 · 486 阅读 · 0 评论 -
Android12之OpenSL ES基础数据结构总结(十)
2.Android的数据格式映射到OpenSLES 1.1中的pcm表示和数据格式3.Android数据结构、设备For OpenSL ES1.1版本SLAndroidDataFormat_PCM_EX保存格式、通道、采样率等信息。OpenSL ES对应Android的speaker通道掩码4.Android音效接口6.Andrid音效能力接口7.Android缓冲队列接口8.声学处理之回声消除(AEC)接口9.声学处理之自动增益控制(ACC)接口原创 2023-03-14 14:46:29 · 248 阅读 · 0 评论 -
Android12之Opensl es中CreateOutputMix回调分解(九)
CreateOutputMix定义frameworks/wilhelm/include/SLES/OpenSLES.hCreateOutputMix回调初始化.frameworks/wilhelm/src/sl_entry.cpp.frameworks/wilhelm/src/entry.cpp.frameworks/wilhelm/src/sles.cpp.frameworks/wilhelm/src/itf/IEngine.cpp接着看IEngine_Itf定义,其实是回调函数的原创 2023-03-09 00:20:29 · 191 阅读 · 0 评论 -
Android高性能音频之关键数据结构(八)
SLObjectItf关键结构体SLEngineItf关键结构体SLSeekItf关键结构体。原创 2023-03-07 00:22:43 · 189 阅读 · 0 评论 -
Android高性能音频之opensl es播放流程(七)
Android高性能音频之opensl es播放流程(七)原创 2023-03-06 22:37:48 · 228 阅读 · 0 评论 -
Android高性能音频之AudioFlingerService宏展开DECLARE_META_INTERFACE(六)
Android高性能音频之AudioFlinger宏展开DECLARE_META_INTERFACE(六)原创 2022-12-18 23:39:26 · 369 阅读 · 0 评论 -
Android高性能音频之理清Binder结构(五)
Android高性能音频之理清Binder结构(五)原创 2022-12-18 21:53:26 · 640 阅读 · 0 评论 -
Android高性能音频之AAudio创建线程过程(四)
【代码】Android12之AAudio创建过程。原创 2022-12-10 16:21:49 · 345 阅读 · 0 评论 -
Android高性能音频之AAudio AAudioStreamBuilder之谜(三)
使用时可以再转换为AudioStreamBuilder类型,调用自己的成员函数和成员变量,AAudioStreamBuilder的作用就是一个类型转换和全局变量,感觉就是脱裤子放屁。从AAudioStreamStruct和AAudioStreamStruct定义可以看出,这两个类根本没有实现,其实就是上边的说的做一个全部变量和类型转换的作用而已。第二中方式使用共享内存的方式来录音和播放,这里先不展开,今天的目的是看下AAudioStreamBuilder的用发。原创 2022-12-11 00:07:33 · 668 阅读 · 0 评论 -
Android高性能音频之OpenSL ES、AAudio、Oboe介绍(二)
【代码】Android音频框架之OpenSL ES、AAudio、Oboe介绍(二)原创 2022-11-02 16:52:14 · 941 阅读 · 0 评论 -
Android高性能音频之OpenSL ES录音流程(一)
一、栗子static XAEngineItf engineEngine = NULL;//创建引擎对象,获取引擎接口(*pEngine)->Realize(pEngine, SL_BOOLEAN_FALSE);(*pEngine)->GetInterface(pEngine, SL_IID_ENGINE, &engineEngine);//获取source SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODE.原创 2021-04-08 17:08:10 · 818 阅读 · 0 评论