目录
5 AudioFlinger和AudioPolicyServer
5 AudioFlinger和AudioPolicyServer
AudioPolicyService是Android音频系统的两大服务之一,另一个服务是AudioFlinger,这两大服务都在系统启动时有 MediaSever加载,加载的代码位于:frameworks\base\media\mediaserver \main_mediaserver.cpp。AudioFlinger主要负责管理音频数据处理以及和硬件抽象层相关的工作。AudioPolicyService主要完成以下任务:JAVA应用层通过JNI,经由IAudioPolicyService接口,访问AudioPolicyService提供的服务;输入输出设备的连接状态;系统的音频策略(strategy)的切换;音量/音频参数的设置。
1. AudioPolicyService继承了IAudioPolicyService接口,这样AudioPolicyService就可以基于Android的Binder机制,向外部提供服务;
2. AudioPolicyService同时也继承了AudioPolicyClientInterface类,他有一个AudioPolicyInterface类的成员指针mpPolicyManager,实际上就是指向了AudioPolicyManager;
3. AudioPolicyManager类继承了AudioPolicyInterface类以便向AudioPolicyService提供服务,反过来 同时还有一个AudioPolicyClientInterface指针,该指针在构造函数中被初始化,指向了AudioPolicyService,实 际上,AudioPolicyService是通过成员指针mpPolicyManager访问AudioPolicyManager,而 AudioPolicyManager则通过AudioPolicyClientInterface(mpClientInterface)访问 AudioPolicyService;
4. AudioPolicyService有一个内部线程类AudioCommandThread,顾名思义,所有的命令(音量控制,输入、输出的切换等)最终都会在该线程中排队执行;
5.AudioFlinger 类是代表整个AudioFlinger 服务的类,其余所有的工作类都是通过内部类的方式在其中定义的。你把它当做一个壳子也行吧。
class AudioFlinger : public BnAudioFlinger, public IBinder::DeathRecipient
6. Client 是描述C/S结构的C端的代表,也就算是一个AT 在AF 端的对等物吧。不过可不是Binder 机制中的BpXXX 喔。因为AF 是用不到AT 的功能的。
class Client : public RefBase {
public:
Client(const sp<AudioFlinger>& audioFlinger, pid_t pid);
virtual ~Client();
const sp<MemoryDealer&g