探究AudioPolicyManager中可用设备集合的初始化

2024-09-23 10:29:48.792   286-445   APM-AudioPolicyEngine   pid-286                              W  frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp:getDeviceForStrategyInt:278
2024-09-23 10:29:48.792   286-445   AudioFlinger            pid-286                              V  invalidateStream() stream 10

由此可以看到,好像是AudioFlinger拦截下来了

2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #00 pc 00017911  /system/lib/libaudioflinger.so (android::AudioFlinger::invalidateStream(audio_stream_type_t)+32)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #01 pc 0000e7f3  /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::AudioPolicyClient::invalidateStream(audio_stream_type_t)+66)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #02 pc 0002004d  /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::setPhoneState(audio_mode_t)+1424)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #03 pc 0000c2d1  /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::setPhoneState(audio_mode_t)+82)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #04 pc 0003e7c7  /system/lib/libaudioclient.so (android::BnAudioPolicyService::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+598)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #05 pc 0003613f  /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+70)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #06 pc 0003d99f  /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+410)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #07 pc 0003d72b  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+106)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #08 pc 0003dc53  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+38)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #09 pc 000546dd  /system/lib/libbinder.so (android::PoolThread::threadLoop()+12)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #10 pc 0000c0c7  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+166)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #11 pc 000639f5  /system/lib/libc.so (__pthread_start(void*)+22)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  D  #12 pc 0001df75  /system/lib/libc.so (__start_thread+22)
2024-09-23 11:03:05.640   301-472   AudioFlinger            and....hardware.sensors@1.0-service  V  invalidateStream() stream 10

可以看到,拦截的地方是frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
AudioPolicyManager.cpp:582

搞错了,不是这里被拦截,因为Handset正常时也有这个

真正出问题的是

2024-09-23 10:29:49.628   286-286   AudioFlinger            pid-286                              E  createTrack() getOutputForAttr() return error -38 or invalid output handle
2024-09-23 10:29:49.628  1152-1523  IAudioFlinger           vdroid.server                        E  createTrack returned error -38

55:56.253 304-475 AudioFlinger audioserver I createTrack() getOutputForAttr result lStatus: -38, outputId: 0, streamType: 0
AudioSystem::getOutputForAttr()函数返回负

AudioPolicyManager.cpp:4725-4728

SortedVector<audio_io_handle_t> AudioPolicyManager::getOutputsForDevice中有这一段报错


frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
里的

SortedVector<audio_io_handle_t> AudioPolicyManager::getOutputsForDevice(
audio_devices_t device,
const SwAudioOutputCollection& openOutputs)
{
SortedVector<audio_io_handle_t> outputs;

ALOGVV("getOutputsForDevice() device %04x", device);
for (size_t i = 0; i < openOutputs.size(); i++) {
    ALOGVV("output %zu isDuplicated=%d device=%04x",
            i, openOutputs.valueAt(i)->isDuplicated(),
            openOutputs.valueAt(i)->supportedDevices());
    if ((device & openOutputs.valueAt(i)->supportedDevices()) == device) {
        ALOGVV("getOutputsForDevice() found output %d", openOutputs.keyAt(i));
        outputs.add(openOutputs.keyAt(i));
    }
}
return outputs;

}

循环里的if条件没过去一次,推断出openOutputs.valueAt(i)->supportedDevices()一直都是2208043E,LINE_OUT一直是20000

下一步,查看supportedDevices是怎么设定的

include <utils/CallStack.h>

CallStack stack;

stack.update();

stack.log(LOG_TAG); 
LOCAL_SHARED_LIBRARIES := \
libutils \
libutilscallstack \

可以从这里看到当前是否在通话中。
AudioService.java:3218-3221:getMode()

/** @see AudioManager#getMode() */
public int getMode() {
    return mMode;
}

查看Handset修改列表,学习仿照。

frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp中使用了
frameworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp来进行解析audio_policy_configuration.xml
现在要看是否被解析出来

frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
audio_devices_t Engine::getDeviceForStrategy(routing_strategy strategy) const
{
DeviceVector availableOutputDevices = mApmObserver->getAvailableOutputDevices();
DeviceVector availableInputDevices = mApmObserver->getAvailableInputDevices();//在策略选择函数中,availableInputDevices是这么来的

const SwAudioOutputCollection &outputs = mApmObserver->getOutputs();

return getDeviceForStrategyInt(strategy, availableOutputDevices,
                               availableInputDevices, outputs, (uint32_t)AUDIO_DEVICE_NONE);

}

该成员定义如下
AudioPolicyManagerObserver *mApmObserver;

改动入口仅有这一个
void Engine::setObserver(AudioPolicyManagerObserver *observer)
{
ALOG_ASSERT(observer != NULL, "Invalid Audio Policy Manager observer");
mApmObserver = observer;
}

在这里打印调用栈,看看情况

2024-09-26 10:26:09.675 3357-3357 APM-AudioPolicyEngine pid-3357 D #00 pc 00007de9 /system/lib/libaudiopolicyenginedefault.so (android::audio_policy::Engine::setObserver(android::AudioPolicyManagerObserver)+32)
2024-09-26 10:26:09.675 3357-3357 APM-AudioPolicyEngine pid-3357 D #01 pc 00028e53 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::initialize()+66)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #02 pc 00028cb1 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::AudioPolicyManager(android::AudioPolicyClientInterface
)+16)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #03 pc 0000075f /system/lib/libaudiopolicymanager.so (createAudioPolicyManager+14)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #04 pc 00006615 /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::onFirstRef()+280)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #05 pc 000038b5 /system/bin/audioserver (android::BinderServiceandroid::AudioPolicyService::publish(bool, int)+72)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #06 pc 00003543 /system/bin/audioserver (main+494)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #07 pc 00088da5 /system/lib/libc.so (__libc_init+48)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #08 pc 00003313 /system/bin/audioserver (_start_main+46)
2024-09-26 10:26:09.676 3357-3357 APM-AudioPolicyEngine pid-3357 D #09 pc 00000306 anonymous:f73c5000

看出是由AudioPolicyManager::initialize()这个在调用

mEngine->setObserver(this);

class AudioPolicyManager : public AudioPolicyInterface, public AudioPolicyManagerObserver
使用多态,是他自己
AudioPolicyManager其中重写了虚函数
virtual const DeviceVector &getAvailableOutputDevices() const
{
return mAvailableOutputDevices;
}

mAvailableOutputDevices类型是DeviceVector

DeviceVector类型的代码看来改变内部变量mDeviceTypes的函数是 void refreshTypes();
在add内调用。

可以看到

APM_AudioPolicyManager pid-3026 V output 0 isDuplicated=0 device=220a043e 这里是有看到20000(audio_out_line)的,但要搞清楚为什么没进mAvailableOutputDevices

mAvailableOutputDevices仅仅是getDeviceForStrategy() - availableOutputDevices: 22000002
确定修改的入口是这里了,该函数是私有函数,是被共有函数add调用。
打印调用栈看看情况
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #00 pc 0002f8dd /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::refreshTypes()+80)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #01 pc 0002f9cf /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::add(android::spandroid::DeviceDescriptor const&)+58)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #02 pc 0002fc1b /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::getDevicesFromType(unsigned int) const+122)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #03 pc 0000867f /system/lib/libaudiopolicyenginedefault.so (android::audio_policy::Engine::getDeviceForStrategyInt(android::routing_strategy, android::DeviceVector, android::DeviceVector, android::SwAudioOutputCollection const&, unsigned int) const+1074)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #04 pc 000081d9 /system/lib/libaudiopolicyenginedefault.so (android::audio_policy::Engine::getDeviceForStrategy(android::routing_strategy) const+144)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #05 pc 0002b3a3 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::checkDeviceMuteStrategies(android::spandroid::AudioOutputDescriptor const&, unsigned int, unsigned int)+110)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #06 pc 0002b719 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::setOutputDevice(android::spandroid::AudioOutputDescriptor const&, unsigned int, bool, int, int, char const, bool)+380)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #07 pc 000206f5 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::setForceUse(audio_policy_force_use_t, audio_policy_forced_cfg_t)+448)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #08 pc 0000c349 /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::setForceUse(audio_policy_force_use_t, audio_policy_forced_cfg_t)+66)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #09 pc 0003f97f /system/lib/libaudioclient.so (android::BnAudioPolicyService::onTransact(unsigned int, android::Parcel const&, android::Parcel, unsigned int)+4310)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #10 pc 0003613f /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel
, unsigned int)+70)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #11 pc 0003d99f /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+410)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #12 pc 0003d72b /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+106)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #13 pc 0003dc53 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+38)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #14 pc 0000358d /system/bin/audioserver (main+568)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #15 pc 00088da5 /system/lib/libc.so (__libc_init+48)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #16 pc 00003313 /system/bin/audioserver (_start_main+46)
2024-09-30 15:18:33.786 2698-2698 APM::Devices pid-2698 D #17 pc 00000306 anonymous:f4ca1000
2024-09-30 15:18:33.787 2698-2698 APM::Devices pid-2698 V DeviceVector::getDevicesFromType() for type 20000000 found 0xf2042140
2024-09-30 15:18:33.787 2698-2698 APM::Devices pid-2698 V DeviceVector::refreshTypes() mDeviceTypes 22000002

我要看的是 DeviceVector availableInputDevices = mApmObserver->getAvailableInputDevices();在

04 pc 000081d9 /system/lib/libaudiopolicyenginedefault.so (android::audio_policy::Engine::getDeviceForStrategy(android::routing_strategy) const+144)

中,调用了availableInputDevices=getAvailableInputDevices(),传入了getDeviceForStrategyInt。所以后面不用看了,找到一个refreshTypes的调用栈,且不进过getDeviceForStrategy

因为在setObserver之前所有的对DeviceVector的修改都在这里(通过调用栈得知)
解析和设置的逻辑都在这里,但有点杂乱
status_t ModuleTraits::deserialize(xmlDocPtr doc, const xmlNode *root, PtrElement &module,
PtrSerializingCtx ctx)

在frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp中,
使用mAvailableOutputDevices.add只有setDeviceConnectionStateInt函数,但通过添加打印,发现,初始化阶段并没有去调用这个函数
所以使用mAvailableOutputDevices值的设定并不是在这里做的。
由于通过日志打印了解到mAvailableOutputDevices是通过默认构造的,所以排除拷贝构造。
有几种可能,其他cpp文件调用add,通过拷贝赋值。

通过日志打印可知,并没有通过拷贝赋值,而是通过add,通过最后mAvailableOutputDevices的地址,定位到在往mAvailableOutputDevices里add设备时的调用栈如下

2024-10-08 21:39:21.529 3196-3196 APM::Serializer pid-3196 W deserialize: Set routes for module
2024-10-08 21:39:21.529 3196-3196 APM::Serializer pid-3196 W deserialize: Iterating over child nodes
2024-10-08 21:39:21.529 3196-3196 APM::Serializer pid-3196 W deserialize: ModuleTraits attachedDevices found
2024-10-08 21:39:21.529 3196-3196 APM::Serializer pid-3196 W deserialize: ModuleTraits item=Speaker
2024-10-08 21:39:21.529 3196-3196 APM::Devices pid-3196 V DeviceVector::refreshTypes() mDeviceTypes 00000002
2024-10-08 21:39:21.529 3196-3196 APM::Devices pid-3196 V DeviceVector::refreshTypes() p: 0xe9b3d05c
2024-10-08 21:39:21.530 3196-3196 APM_AudioPolicyManager pid-3196 I this=0xe9b3d05c, mDeviceTypes=0x2
2024-10-08 21:39:21.530 3196-3196 APM::Serializer pid-3196 W deserialize: ModuleTraits item=Handset Speaker
2024-10-08 21:39:21.530 3196-3196 APM::Devices pid-3196 V DeviceVector::refreshTypes() mDeviceTypes 20000002
2024-10-08 21:39:21.530 3196-3196 APM::Devices pid-3196 V DeviceVector::refreshTypes() p: 0xe9b3d05c
2024-10-08 21:39:21.530 3196-3196 APM_AudioPolicyManager pid-3196 I this=0xe9b3d05c, mDeviceTypes=0x20000002
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #00 pc 0002d20f /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::a(void, unsigned int)+58)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #01 pc 0002f93f /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::refreshTypes()+134)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #02 pc 0002fa27 /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::add(android::spandroid::DeviceDescriptor const&)+58)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #03 pc 0003b8e1 /system/lib/libaudiopolicymanagerdefault.so (android::ModuleTraits::deserialize(_xmlDoc
, _xmlNode const, android::spandroid::HwModule&, android::AudioPolicyConfig)+1724)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #04 pc 0003c91b /system/lib/libaudiopolicymanagerdefault.so (android::PolicySerializer::deserialize(char const, android::AudioPolicyConfig&)+534)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #05 pc 00028f89 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::loadConfig()+176)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #06 pc 00028ecb /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::AudioPolicyManager(android::AudioPolicyClientInterface
)+10)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #07 pc 0000075f /system/lib/libaudiopolicymanager.so (createAudioPolicyManager+14)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #08 pc 00006615 /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::onFirstRef()+280)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #09 pc 000038b5 /system/bin/audioserver (android::BinderServiceandroid::AudioPolicyService::publish(bool, int)+72)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #10 pc 00003543 /system/bin/audioserver (main+494)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #11 pc 00088da5 /system/lib/libc.so (__libc_init+48)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #12 pc 00003313 /system/bin/audioserver (_start_main+46)
2024-10-08 21:39:21.566 3196-3196 APM_AudioPolicyManager pid-3196 D #13 pc 00000306 anonymous:ec7a8000

尝试关闭编译器优化,看到更清晰的调用栈,编译完成,待烧录

deserialize: Set routes for module
2024-10-09 10:36:28.129 3841-3841 APM::Serializer pid-3841 W deserialize: Iterating over child nodes
2024-10-09 10:36:28.129 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits attachedDevices found
2024-10-09 10:36:28.129 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Speaker
2024-10-09 10:36:28.129 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 00000002
2024-10-09 10:36:28.130 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d05c
2024-10-09 10:36:28.130 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d05c, mDeviceTypes=0x2
2024-10-09 10:36:28.130 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Handset Speaker
2024-10-09 10:36:28.130 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 20000002
2024-10-09 10:36:28.130 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d05c
2024-10-09 10:36:28.130 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d05c, mDeviceTypes=0x20000002
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #00 pc 0002d20f /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::a(void, unsigned int)+58)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #01 pc 0002f93f /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::refreshTypes()+134)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #02 pc 0002fa27 /system/lib/libaudiopolicymanagerdefault.so (android::DeviceVector::add(android::spandroid::DeviceDescriptor const&)+58)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #03 pc 0003b8e1 /system/lib/libaudiopolicymanagerdefault.so (android::ModuleTraits::deserialize(_xmlDoc
, _xmlNode const, android::spandroid::HwModule&, android::AudioPolicyConfig)+1724)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #04 pc 0003c91b /system/lib/libaudiopolicymanagerdefault.so (android::PolicySerializer::deserialize(char const, android::AudioPolicyConfig&)+534)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #05 pc 00028f89 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::loadConfig()+176)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #06 pc 00028ecb /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::AudioPolicyManager(android::AudioPolicyClientInterface
)+10)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #07 pc 0000075f /system/lib/libaudiopolicymanager.so (createAudioPolicyManager+14)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #08 pc 00006615 /system/lib/libaudiopolicyservice.so (android::AudioPolicyService::onFirstRef()+280)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #09 pc 000038b5 /system/bin/audioserver (android::BinderServiceandroid::AudioPolicyService::publish(bool, int)+72)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #10 pc 00003543 /system/bin/audioserver (main+494)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #11 pc 00088da5 /system/lib/libc.so (__libc_init+48)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #12 pc 00003313 /system/bin/audioserver (_start_main+46)
2024-10-09 10:36:28.166 3841-3841 APM_AudioPolicyManager pid-3841 D #13 pc 00000306 anonymous:e84db000
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Built-In Mic
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 80000004
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d074
2024-10-09 10:36:28.167 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d074, mDeviceTypes=0x80000004
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Handset Mic
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 80200004
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d074
2024-10-09 10:36:28.167 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d074, mDeviceTypes=0x80200004
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Fake Headset
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 22000002
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d05c
2024-10-09 10:36:28.167 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d05c, mDeviceTypes=0x22000002
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits item=Fake Headset Mic
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() mDeviceTypes 81200004
2024-10-09 10:36:28.167 3841-3841 APM::Devices pid-3841 V DeviceVector::refreshTypes() p: 0xe583d074
2024-10-09 10:36:28.167 3841-3841 APM_AudioPolicyManager pid-3841 I this=0xe583d074, mDeviceTypes=0x81200004
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: ModuleTraits defaultOutputDevice=Speaker
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: default is 00000002
2024-10-09 10:36:28.167 3841-3841 APM::Serializer pid-3841 W deserialize: Deserialization complete

可以看到,解析的地方是status_t ModuleTraits::deserialize中,末尾那个大的while,需要搞清楚他在解析什么文件,去看一下什么情况

经过简易阅读源码,应该是audio/audio_policy_configuration.xml里的attachedDevices标签,才会被解析为可用
简易修改尝试一下

成功定位到可用设备时是audio_policy_configuration.xml里的attachedDevices标签来决定的。

posted @   任侠平生愿  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示