AudioFlinger启动过程分析(android_audio)

参考 https://blog.csdn.net/zyuanyun/article/details/60890534#t4


首先来分析一下AudioFlinger

  里面存在一个数组mPlaybackThreads里面的每一个线程都对应一个output

1.加载哪个so文件? 文件名是什么? 文件名从何而来? 

参考上一篇https://blog.csdn.net/we1less/article/details/118424539

openDevice  hardware/interfaces/audio/2.0/default/DevicesFactory.cpp  环节

  audio.primary.xxx.so

  audio.primary.goldfish.so


 2.该so文件由什么源文件组成?    (此部分有待验证)

    audio.primary.$(TARGET_DEVICE) : device/friendly-arm/common/libaudio/AudioHardware.cpp
                                     libhardware_legacy
    libhardware_legacy :     hardware/libhardware_legacy/audio/audio_hw_hal.cpp


 3.对硬件的封装:

AudioHwDevice  frameworks/av/services/audioflinger/AudioHwDevice.cpp

  每一个AudioHwDevice对应一个.so动态库所支持的设备

  再把这些支持的硬件加入到mAudioHwDevs里面

audio_module_handle_t AudioFlinger::loadHwModule_l(const char *name){
    ...
    sp<DeviceHalInterface> dev;
    int rc = mDevicesFactoryHal->openDevice(name, &dev);
    ...
    mAudioHwDevs.add(handle, new AudioHwDevice(handle, name, dev, flags));
}

loadAudioInterface  hardware/interfaces/audio/2.0/default/DevicesFactory.cpp 

   audio_hw_device_t 结构体在 

   libhardware  hardware/libhardware/include/hardware/audio.h

int DevicesFactory::loadAudioInterface(const char *if_name, audio_hw_device_t **dev)
{
    const hw_module_t *mod;
    int rc;
    rc = hw_get_module_by_class(AUDIO_HARDWARE_MODULE_ID, if_name, &mod);
    ...
    rc = audio_hw_device_open(mod, dev);
    ...
out:
    *dev = NULL;
    return rc;
}

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

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

    AudioFlinger::instantiate();

    AudioPolicyService::instantiate();
    ProcessState::self()->startThreadPool();
    android::hardware::ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值