AudioPolicyService启动过程分析(android_audio)

此文章部分参考  https://blog.youkuaiyun.com/marshal_zsx/article/details/81060100

AudioPolicyService是策略的制定者,
AudioFlinger是策略的执行者,
所以: AudioPolicyService根据配置文件使唤AudioFlinger来创建Thread

管理输入输出设备,包括设备的连接、断开状态,设备的选择和切换等

管理系统的音频策略,比如通话时播放音乐、或者播放音乐时来电话的一系列处理

管理系统的音量

上层的一些音频参数也可以通过AudioPolicyService设置到底层去

godv@godv-OptiPlex-7070:/dev/snd$ ls -la
总用量 0
drwxr-xr-x   3 root root      320 7月   1 21:26 .
drwxr-xr-x  21 root root     4320 7月   1 21:41 ..
drwxr-xr-x   2 root root       60 7月   1 21:26 by-path
crw-rw----+  1 root audio 116,  2 7月   1 21:26 controlC0
crw-rw----+  1 root audio 116, 11 7月   1 21:26 hwC0D0
crw-rw----+  1 root audio 116, 12 7月   1 21:26 hwC0D2
crw-rw----+  1 root audio 116,  4 7月   1 21:26 pcmC0D0c
crw-rw----+  1 root audio 116,  3 7月   1 21:39 pcmC0D0p
crw-rw----+  1 root audio 116, 10 7月   1 21:26 pcmC0D10p
crw-rw----+  1 root audio 116,  5 7月   1 21:26 pcmC0D2c
crw-rw----+  1 root audio 116,  6 7月   1 21:26 pcmC0D3p
crw-rw----+  1 root audio 116,  7 7月   1 21:26 pcmC0D7p
crw-rw----+  1 root audio 116,  8 7月   1 21:26 pcmC0D8p
crw-rw----+  1 root audio 116,  9 7月   1 21:26 pcmC0D9p
crw-rw----+  1 root audio 116,  1 7月   1 21:26 seq
crw-rw----+  1 root audio 116, 33 7月   1 21:26 timer

默认声卡  &  声卡上存在何种硬件资源(耳机孔/喇叭)  厂家通过配置文件声明

1.读取、解析配置文件

2.AudioPolicyService根据配置文件调用AudioFlinger服务创建线程,打开output


audioserver.rc    frameworks/av/media/audioserver/audioserver.rc

service audioserver /system/bin/audioserver
    class main
    user audioserver
    # media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
    group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
    onrestart restart audio-hal-2-0

on property:vts.native_server.on=1
    stop audioserver
on property:vts.native_server.on=0
    start audioserver

main_audioserver.cpp    frameworks/av/media/audioserver/main_audioserver.cpp

int main(int argc __unused, char **argv)
{
    signal(SIGPIPE, SIG_IGN);
    ...
        sp<ProcessState> proc(ProcessState::self());
        sp<IServiceManager> sm = defaultServiceManager();
        ALOGI("ServiceManager: %p", sm.get());
        AudioFlinger::instantiate();
        AudioPolicyService::instantiate();

...
        SoundTriggerHwService::instantiate();
        ProcessState::self()->startThreadPool();

// FIXME: remove when BUG 31748996 is fixed
        android::hardware::ProcessState::self()->startThreadPool();

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

frameworks/av/services/audiopolicy/service/AudioPolicyService.cpp

void AudioPolicyService::onFirstRef()
{
    {
        Mutex::Autolock _l(mLock);

        // start tone playback thread
        mTonePlaybackThread = new AudioCommandThread(String8("ApmTone"), this);
        // start audio commands thread
        mAudioCommandThread = new AudioCommandThread(String8("ApmAudio"), this);
        // start output activity command thread
        mOutputCommandThread = new AudioCommandThread(String8("ApmOutput"), this);

        mAudioPolicyClient = new AudioPolicyClient(this);
        mAudioPolicyManager = createAudioPolicyManager(mAudioPolicyClient);
    }
    // load audio processing modules
    sp<AudioPolicyEffects>audioPolicyEffects = new AudioPolicyEffects();
    {
        Mutex::Autolock _l(mLock);
        mAudioPolicyEffects = audioPolicyEffects;
    }
}

frameworks/av/services/audiopolicy/service/AudioPolicyService.h

class AudioPolicyClient : public AudioPolicyClientInterface
    {
     ...
     private:
        AudioPolicyService *mAudioPolicyService;
    };

AudioPolicyClient的实现文件frameworks/av/services/audiopolicy/service/AudioPolicyClientImpl.cpp


createAudioPolicyManager  frameworks/av/services/audiopolicy/AudioPolicyInterface.h

// Audio Policy client Interface
class AudioPolicyClientInterface
{
...
extern "C" AudioPolicyInterface* createAudioPolicyManager(AudioPolicyClientInterface *clientInterface);
extern "C" void destroyAudi
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值