高桥电缆:AudioFlinger

来源:百度文库 编辑:中财网 时间:2024/04/24 23:27:15
                                    AudioFlinger----AudioPolicyService 简述 分类: Android 2011-03-21 08:59 260人阅读 评论(0) 收藏 举报

Main_mediaServer.cpp

Android代码如下

int main(int argc, char** argv)

{

    sp proc(ProcessState::self());

    sp sm = defaultServiceManager();

    LOGI("ServiceManager: %p", sm.get());

    AudioFlinger::instantiate();

    MediaPlayerService::instantiate();

    CameraService::instantiate();

    AudioPolicyService::instantiate();

    ProcessState::self()->startThreadPool();

    IPCThreadState::self()->joinThreadPool();

}

个服务:

1(核 读者可以仔细分析一下,上述四个服务的建立过程,对于你理解音频系统很有帮助。

:生成mTonePlayThread生成AudioCommandThread:生成mpPolicyManger),并最终生成一个DirectorOutput录音:

 AudioRecord <---------------------IAudioRecord----------------------> RecordHandle

 中并没有记录input线程ID放音:

AudioTrack<---------------------------IAudioTrack------------------->TrackHandle

中记录了output(Playback句柄

 

 

Input

" p="" class="MsoNormal" style="MARGIN: 0cm 0cm 10pt" span="" lang="EN-US" font="" face="Tahoma" size="2" 2:audiosystem---="" gt="" audiopolicyservice="" font="" span="" p="" p="" class="MsoNormal" style="MARGIN: 0cm 0cm 10pt" span="" style="FONT-SIZE:13px" span="" lang="EN-US" font="" face="Tahoma" span="" style="mso-tab-count: 1" nbsp="" nbsp="" nbsp="" nbsp="" nbsp="" span="" aps-="" gt="" getinput="" span="" style="mso-spacerun: yes" nbsp="" span="" aps="" font="" span="" font="" face="">在这里是一个IPC这里的mpPolicymanager时创建的AudioPolicyManager这里的mpclientInterface服务对象也是在上述main():AudioPolicyService-->AudioFlinger

 

      AudioPolicyService.getInput(…)调用执行AudioFlinger方法。

6:AudioFlinger

      会创建input线程,并返回其ID相对于input初始化过程简单的多了:

 

1调用

3通过IAudioRecord链接建立起来后,之后对AudioRecord对服务器AudioFlinger放音和录音区别:

1并注册到服务器中,但是放音只会构造一个对象但不会注册。

2句柄会记录在AudioSystem在AudioRecord/AudioTrack通信的时候也会创建对应的AudioPolicyServiceClient,但不注册。这是两个服务的区别(AudioFlinger/AudioPolicySerivce).