createAudioHardware的流程

99 篇文章 0 订阅
80 篇文章 0 订阅

AudioHardwareInterface.h中定义了C语言接口来获取一个AudioHardwareInterface类型的指针
extern "C" AudioHardwareInterface* createAudioHardware(void);

class AudioHardwareBase : public AudioHardwareInterface

class AudioHardwareALSA : public AudioHardwareBase

在AudioHardwareInterface类中定义了一个static AudioHardwareInterface* create();

第一步:在AudioHardwareALSA.cpp中createAudioHardware方法的实现:

extern "C"
{
    //
    // Function for dlsym() to look up for creating a new AudioHardwareInterface.
    //
    android_audio_legacy::AudioHardwareInterface *createAudioHardware(void) {
        return android_audio_legacy::AudioHardwareALSA::create();
    }
#ifdef QCOM_ACDB_ENABLED
    static int (*acdb_init)();
    static void (*acdb_deallocate)();
#endif
#ifdef QCOM_CSDCLIENT_ENABLED
    static int (*csd_client_init)();
    static int (*csd_client_deinit)();
    static int (*csd_start_playback)(uint32_t);
    static int (*csd_stop_playback)(uint32_t);
    static int (*csd_standby_voice)(uint32_t);
    static int (*csd_resume_voice)(uint32_t);
#endif
}         // extern "C"
第二步:在AudioHardwareALSA.cpp中实现AudioHardwareALSA类方法create()

AudioHardwareInterface *AudioHardwareALSA::create() {

    AudioHardwareInterface * hardwareInterface = new AudioHardwareALSA();
    if(hardwareInterface->initCheck() != OK) {
        ALOGE("NULL - AHAL creation failed");
        delete hardwareInterface;
        hardwareInterface = NULL;
    }
    return hardwareInterface;
}

第三步:在AudioHardwareALSA.cpp中实现AudioHardwareALSA类的构造方法AudioHardwareALSA()的实现

AudioHardwareALSA::AudioHardwareALSA() :mALSADevice(0),mVoipStreamCount(0),mVoipMicMute(false),mVoipBitRate(0) ,mCallState(0),mAcdbHandle(NULL),mCsdHandle(NULL),mMicMute(0){ }

第四步:Audio_hw_hal.cpp 中方法static int qcom_adev_open(const hw_module_t* module, const char* name,hw_device_t** device)会执行qadev->hwif = createAudioHardware();方法,进而创建AudioHardwareALSA对象

---- create Matches (4 in 1 files) ----
AudioHardwareALSA.cpp (hardware\qcom\audio\alsa_sound):        return android_audio_legacy::AudioHardwareALSA::create();
AudioHardwareALSA.cpp (hardware\qcom\audio\alsa_sound):AudioHardwareInterface *AudioHardwareALSA::create() {
---- createAudioHardware Matches (3 in 3 files) ----
AudioHardwareALSA.cpp (hardware\qcom\audio\alsa_sound):    android_audio_legacy::AudioHardwareInterface *createAudioHardware(void) {
Audio_hw_hal.cpp (hardware\libhardware_legacy\audio):    ladev->hwif = createAudioHardware();
Audio_hw_hal.cpp (hardware\qcom\audio\alsa_sound):    qadev->hwif = createAudioHardware();

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值