日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 音频加载hal so调试

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 音频加载hal so调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 整個加載流程圖

2. 加載hal so的代碼位置

2.1 在audiopolicymanager中的加載位置

diff --git a/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index 632290a933..54ead728ea 100644 --- a/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -4110,6 +4110,7 @@ status_t AudioPolicyManager::initialize() {audio_devices_t inputDeviceTypes = mAvailableInputDevices.types() & ~AUDIO_DEVICE_BIT_IN;for (const auto& hwModule : mHwModulesAll) {hwModule->setHandle(mpClientInterface->loadHwModule(hwModule->getName())); + ALOGW("===weiqifa=== loadHwModule() %s", hwModule->getName());if (hwModule->getHandle() == AUDIO_MODULE_HANDLE_NONE) {ALOGW("could not open HW module %s", hwModule->getName());continue;

2.2 在audioflinger中加載

AudioFlinger.cpp

audio_module_handle_t AudioFlinger::loadHwModule(const char *name) {if (name == NULL) {return AUDIO_MODULE_HANDLE_NONE;}if (!settingsAllowed()) {return AUDIO_MODULE_HANDLE_NONE;}Mutex::Autolock _l(mLock);return loadHwModule_l(name); }// loadHwModule_l() must be called with AudioFlinger::mLock held audio_module_handle_t AudioFlinger::loadHwModule_l(const char *name) {for (size_t i = 0; i < mAudioHwDevs.size(); i++) {if (strncmp(mAudioHwDevs.valueAt(i)->moduleName(), name, strlen(name)) == 0) {ALOGW("loadHwModule() module %s already loaded", name);return mAudioHwDevs.keyAt(i);}}sp<DeviceHalInterface> dev;int rc = mDevicesFactoryHal->openDevice(name, &dev);if (rc) {ALOGE("loadHwModule() error %d loading module %s", rc, name);return AUDIO_MODULE_HANDLE_NONE;}mHardwareStatus = AUDIO_HW_INIT;rc = dev->initCheck();mHardwareStatus = AUDIO_HW_IDLE;if (rc) {ALOGE("loadHwModule() init check error %d for module %s", rc, name);return AUDIO_MODULE_HANDLE_NONE;}// Check and cache this HAL's level of support for master mute and master// volume. If this is the first HAL opened, and it supports the get// methods, use the initial values provided by the HAL as the current// master mute and volume settings.AudioHwDevice::Flags flags = static_cast<AudioHwDevice::Flags>(0);{ // scope for auto-lock patternAutoMutex lock(mHardwareLock);if (0 == mAudioHwDevs.size()) {mHardwareStatus = AUDIO_HW_GET_MASTER_VOLUME;float mv;if (OK == dev->getMasterVolume(&mv)) {mMasterVolume = mv;}mHardwareStatus = AUDIO_HW_GET_MASTER_MUTE;bool mm;if (OK == dev->getMasterMute(&mm)) {mMasterMute = mm;}}mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;if (OK == dev->setMasterVolume(mMasterVolume)) {flags = static_cast<AudioHwDevice::Flags>(flags |AudioHwDevice::AHWD_CAN_SET_MASTER_VOLUME);}mHardwareStatus = AUDIO_HW_SET_MASTER_MUTE;if (OK == dev->setMasterMute(mMasterMute)) {flags = static_cast<AudioHwDevice::Flags>(flags |AudioHwDevice::AHWD_CAN_SET_MASTER_MUTE);}mHardwareStatus = AUDIO_HW_IDLE;}audio_module_handle_t handle = (audio_module_handle_t) nextUniqueId(AUDIO_UNIQUE_ID_USE_MODULE);mAudioHwDevs.add(handle, new AudioHwDevice(handle, name, dev, flags));ALOGI("loadHwModule() Loaded %s audio interface, handle %d", name, handle);return handle;}

3. 開機日志

# logcat |grep loadHwModule278 278 I AudioFlinger: loadHwModule() Loaded primary audio interface, handle 10278 278 I AudioFlinger: loadHwModule() Loaded a2dp audio interface, handle 18278 278 I AudioFlinger: loadHwModule() Loaded r_submix audio interface, handle 26

4. so 在系統的位置

0:/ # find / -iname *primary*.so 2>/dev/nul /vendor/lib/hw/audio.primary.default.so /vendor/lib/hw/audio.primary.mt8167.so /vendor/lib/libaudioprimarydevicehalifclient.so 1|Knowin inSight10:/ #

總結

以上是生活随笔為你收集整理的android 音频加载hal so调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。