AAudioService 提供了很多供我们使用它的方法,接下来就是对其中几个重要的方法进行剖析,了解其工作原理。
一、流程解析
打开流的过程如主要会分两种情况:
共享模式:多个音频流可以同时访问该音频设备,该模式下音频的延迟略高。
独占模式:只有该音频流能访问该音频设备,其它音频流拒绝访问,该模式下音频的性能高 , 延迟低。
注意:独占模式下如果不再使用该音频设备,需要马上释放音频流,以免影响其它音频流访问该音频设备。
1、打开音频流
AAudioService.cpp
源码位置:/frameworks/av/services/oboeservice/AAudioService.cpp
aaudio_handle_t AAudioService::openStream(const aaudio::AAudioStreamRequest &request, aaudio::AAudioStreamConfiguration &configurationOutput) {
// 当EXCLUSIVE端点被盗时,锁用于命令打开端点。我们希望顺序是:
// 1) 线程A打开独占的MMAP端点
// 2) 线程B想要打开一个独占的MMAP端点,所以它在此锁下从A窃取一个
// 3) 线程B打开共享的MMAP端点
// 4) 线程A可以获得锁并打开共享流.
// 没有锁。线程A可能在B打开共享流之前潜入并重新分配独占流
std::unique_lock<std::recursive_mutex> lock(mOpen