AudioPolicyService启动做了什么

文章开始,我们需要明白AudioPolicyService在audio中扮演者什么角色?
顾名思义,AudioPolicyService是音频策略的制定者,如获取音频配置信息、决定打开音频设备时机、不同音频类型对应的播放设备、不同音频类型的音量调节等等,一方面是获取底层音频设备配置信息,另一方面驱使AudioFlinger执行策略功能,充当HAL和AudioFlinger的桥梁。
frameworks\av\services\audioflinger\AudioPolicyService.cpp
先介绍大致的启动过程:
启动AudioPolicyService 服务–audio_policy_module模块(HAL层注册)–打开audio_policy_device设备(会和AudioFlinger建立联系)–创建audio_policy

启动服务就不用说了,创建AudioPolicyService 单例对象,执行构造函数
然后构造函数就有了以下内容:

在frameworks\av\media\mediaserver\main_mediaserver.cpp
中的main函数中启动了 AudioPolicyService 服务:

AudioPolicyService::instantiate();

导致下面一系列事件的发生:

AudioPolicyService::AudioPolicyService():
...
const struct hw_module_t *module;//定义module,获取hal层信息
....
 rc = hw_get_module(AUDIO_POLICY_HARDWARE_MODULE_ID, &module);
    if (rc)
        return;

    rc = audio_policy_dev_open(module, &mpAudioPolicyDev); //打开audio_policy_dev设备

	rc = mpAudioPolicyDev->create_audio_policy(mpAudioPolicyDev, &aps_ops, this, //创建audio policy
                                               &mpAudioPolicy);



//
static inline int audio_policy_dev_open(const hw_module_t* module,
                                    struct audio_policy_device** device)
{
   
    return module->methods->open(module, AUDIO_POLICY_INTERFACE,  //使用获取的module的open方法打开dev
                                 (hw_device_t**)device);
}

methods->open定义在如下文件: HAL层
hardware\libhardware_legacy\audio\ audio_policy_hal.cpp

static struct hw_module_methods_t legacy_ap_module_methods = {
   
        open: legacy_ap_dev_open  //定义open函数
};

struct legacy_ap_module HAL_MODULE_INFO_SYM = {
   
    module: {
   
        common: {
   
            tag: HARDWARE_MODULE_TAG,
            version_major: 1,
            version_minor: 0,
            id: AUDIO_POLICY_HARDWARE_MODULE_ID,
            name: "LEGACY Audio Policy HAL",
            author: "The Android Open Source Project",
            methods: &legacy_ap_module_methods,   //初始化methods,
            dso : NULL,
            reserved : {
   0},
        },
    },
};

static int legacy_ap_dev_open(const hw_module_t* module, const char* name,
                                    hw_device_t*<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值