打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
android audio output来由
函数调用过程
从AudioTrack开始跟踪。

AudioTrack::set --> output = AudioSystem::getOutput         ---------AudioTrack.cpp
--> aps->getOutput                                                               ---------AudioSystem.cpp
--> ( mpAudioPolicy->get_output                                          --------AudioPolicyService.cpp
 <==> ap_get_output ) -->  ( lap->apm->getOutput              ---------audio_policy_hal.cpp
 <== >AudioPolicyManagerBase::getOutput ) 
           -->  ( mpClientInterface->openOutput                 ------AudioPolicyManagerBase.cpp
<==> aps_open_output ) --> af->openOutput                      ----------AudioPolicyService.cpp
-->AudioFlinger::openOutput 
       -->hwDevHal->open_output_stream                            -----------AudioFlinger.cpp
<==> adev_open_output_stream) --> 在此最终获得到了 *stream_out = &out->stream 。
                                                                                             -----------tinyalsa_hal.c  

这里会返回到AudioFlinger,这里最终看到AudioFlinger::openOutput函数的结尾你会发现output其实是通过audio_io_handle_t id = nextUniqueId();获得的一个整数,在
 if (status == NO_ERROR && outStream != NULL)条件成立后会走以下关键几步:
AudioStreamOut *output = new AudioStreamOut(outHwDev, outStream, flags);
thread = new MixerThread(this, output, id, *pDevices); 
mPlaybackThreads.add(id, thread);
return id;
其实就是将从hal层获取到的stream_out作为参数new一个AudioStreamOut 对象指针,再将output指针作为参数new一个mixer  thread,最终将id 和 thread以键值对的关系保存。这个最终会在
AudioFlinger::createTrack()函数中用到调用语句:PlaybackThread *thread = checkPlaybackThread_l(output);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于AudioEffect使用过程中的构造以及处理流程遇到的几个问题
Android 音频系统:从 AudioTrack 到 AudioFlinger
Android音频系统之AudioFlinger(二)
Android Audio 数据流详解 - forest的日志 - 网易博客
Android Audio System 之二:AudioFlinger
ANDROID音频系统散记之四:4.0音频系统HAL初探
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服