简单回顾下,Audio write数据流程,
AudioTrack->write
AudioFlinger::PlaybackThread::threadLoop_write()
mNormalSink->write
而mNormalSink其实是NBAIO_Sink,实现类是:AudioStreamOutSink
那我们直接看
frameworks/av/media/libnbaio/AudioStreamOutSink.cpp
//AudioStreamOutSink::write节选
status_t ret = mStream->write(buffer, count * mFrameSize, &written);
//AudioStreamOutSink.h
sp<StreamOutHalInterface> mStream;
果然,mStream类型变成了StreamOutHalInterface(Android 5.1上是audio_stream_out类型)
然后,我们发现frameworks/av/media/底下多了个文件夹
libaudiohal
Android.mk DeviceHalLocal.h DevicesFactoryHalLocal.h EffectHalHidl.h EffectsFactoryHalLocal.h StreamHalLocal.h
ConversionHelperHidl.cpp DevicesFactoryHalHidl.cpp EffectBufferHalHidl.cpp EffectHalLocal

本文介绍了Android O(8.0)中音频write数据流程的变化,重点在于HIDL(Hardware Interface Definition Language)的引入。在新流程中,AudioStreamOutSink变为StreamOutHalInterface,通过WriteCommand在Fast Message Queue (FMQ)中实现跨进程调用。这一变化使得音频HAL层实现了Binder化,增加了系统的模块化和解耦合。文章简述了HIDL接口定义、版本管理和系统级service启动过程,展示了Android系统中FW与HW开发的分离。
最低0.47元/天 解锁文章
3043

被折叠的 条评论
为什么被折叠?



