AudioSystem和AudioFlinger以及AudioPolicyService的双向通信机制
AudioSystem是Audio子系统面向framework的接口,这里面有很多一竿子戳到底的函数。同样,Audio子系统内部也往往使用AudioSystem进行通信,比如AF和APM。
SystemServer添加AudioService到SM中,在AudioService的构造函数中,创建一个线程AudioSystemThread,名字就叫“AudioService”,它通过handler不停的接收消息。AudioManager里含有一个IAudioService类型的sService,它通过Binder让AudioService做事情。
AudioSystem.cpp第一次获取AF时,注册一个AF的死亡通知,对于APS同理。
const sp<IAudioFlinger>&AudioSystem::get_audio_flinger()
{
binder =sm->getService(String16("media.audio_flinger"));
gAudioFlingerClient = new AudioFlingerClient();
binder->linkToDeath(gAudioFlingerClient);
}
const sp<IAudioPolicyService>& AudioSystem::get_audio_policy_service()
{

本文详细介绍了Android多媒体框架中AudioSystem与AudioFlinger、AudioPolicyService的通信机制。AudioService在SystemServer中启动,通过AudioSystemThread处理消息,AudioManager借助IAudioService与AudioService跨进程通信。当MediaServer进程被杀死时,AudioService会处理MSG_MEDIA_SERVER_DIED消息并重新建立连接。
最低0.47元/天 解锁文章
644

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



