Android Audio开发——AAudio流程(十六)

        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

猜你喜欢

转载自blog.csdn.net/c19344881x/article/details/131165386
今日推荐