1.1.1 AudioMixer
每一个MixerThread都有一个唯一对应的AudioMixer(在MixerThread中用mAudioMixer表示),它的作用如其名所表示的,就是为了完成音频的混音操作。

图 13‑14 MixerThread示意图
如上图,MixerThread对外开放的接口主要涉及到Parameter(比如setParameter)、Resampler(比如setResampler)、Volume(比如adjustVolumeRamp)、Buffer(比如setBufferProvider)及Track(比如getTrackName)五个部分。
在内部的实现中,MixerThread的核心是一个mState变量(state_t类型),所有的混音工作都会在这个变量中体现出来——特别是其中的tracks数组,如下所示:
struct state_t {
uint32_t enabledTracks;
uint32_t needsChanged;
size_t frameCount;
void (*hook)(state_t* state, int64_tpts); // one of process__*, never NULL
int32_t *outputTemp;
int32_t *resampleTemp;
int32_t reserved[2];
track_t tracks[

本文深入探讨了Android音频系统中的AudioFlinger,重点在于AudioMixer的结构和工作原理。AudioMixer负责音频混音操作,与MixerThread紧密协作。文章详细分析了MixerThread的接口、内部状态结构以及混音过程,包括不同情况下的hook函数选择,如process__validate、process__nop等。AudioMixer通过调整hook指针指向不同的处理函数,实现对不同音频流的混音处理。
最低0.47元/天 解锁文章
1412

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



