高桥电缆:AudioFlinger
来源:百度文库 编辑:中财网 时间:2024/04/24 23:27:15
Main_mediaServer.cpp
Android代码如下
int main(int argc, char** argv)
{
sp
sp
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).