bash
diff --git a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
index e50f81aca9c..1de19a5afec 100755
--- a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -16,8 +16,8 @@
#define LOG_TAG "APM_AudioPolicyEngine"
//#define LOG_NDEBUG 0
-
-//#define VERY_VERBOSE_LOGGING
+#define TRACE_CASE(source) ALOGD("zzz getDeviceForInputSource: selected %s", #source);
+#define VERY_VERBOSE_LOGGING
#ifdef VERY_VERBOSE_LOGGING
#define ALOGVV ALOGV
#else
@@ -510,6 +510,7 @@ sp<DeviceDescriptor> Engine::getDeviceForInputSource(audio_source_t inputSource)
switch (inputSource) {
case AUDIO_SOURCE_DEFAULT:
case AUDIO_SOURCE_MIC:
+ TRACE_CASE(AUDIO_SOURCE_MIC);
device = availableDevices.getDevice(
AUDIO_DEVICE_IN_BLUETOOTH_A2DP, String8(""), AUDIO_FORMAT_DEFAULT);
if (device != nullptr) break;
@@ -524,6 +525,7 @@ sp<DeviceDescriptor> Engine::getDeviceForInputSource(audio_source_t inputSource)
break;
case AUDIO_SOURCE_VOICE_COMMUNICATION:
+ TRACE_CASE(AUDIO_SOURCE_VOICE_COMMUNICATION);
// Allow only use of devices on primary input if in call and HAL does not support routing
// to voice call path.
if ((getPhoneState() == AUDIO_MODE_IN_CALL) &&
@@ -559,6 +561,7 @@ sp<DeviceDescriptor> Engine::getDeviceForInputSource(audio_source_t inputSource)
case AUDIO_SOURCE_VOICE_RECOGNITION:
case AUDIO_SOURCE_UNPROCESSED:
case AUDIO_SOURCE_HOTWORD:
+ TRACE_CASE(AUDIO_SOURCE_HOTWORD);
if (inputSource == AUDIO_SOURCE_HOTWORD) {
// We should not use primary output criteria for Hotword but rather limit
// to devices attached to the same HW module as the build in mic
@@ -575,6 +578,7 @@ sp<DeviceDescriptor> Engine::getDeviceForInputSource(audio_source_t inputSource)
AUDIO_DEVICE_IN_USB_DEVICE, AUDIO_DEVICE_IN_BUILTIN_MIC});
break;
case AUDIO_SOURCE_CAMCORDER:
+ TRACE_CASE(AUDIO_SOURCE_CAMCORDER);
// For a device without built-in mic, adding usb device
device = availableDevices.getFirstExistingDevice({
AUDIO_DEVICE_IN_USB_DEVICE,
@@ -583,23 +587,32 @@ sp<DeviceDescriptor> Engine::getDeviceForInputSource(audio_source_t inputSource)
case AUDIO_SOURCE_VOICE_DOWNLINK:
case AUDIO_SOURCE_VOICE_CALL:
case AUDIO_SOURCE_VOICE_UPLINK:
+ TRACE_CASE(AUDIO_SOURCE_VOICE_UPLINK);
+
device = availableDevices.getDevice(
AUDIO_DEVICE_IN_VOICE_CALL, String8(""), AUDIO_FORMAT_DEFAULT);
break;
case AUDIO_SOURCE_VOICE_PERFORMANCE:
+ TRACE_CASE(AUDIO_SOURCE_VOICE_PERFORMANCE);
+
device = availableDevices.getFirstExistingDevice({
AUDIO_DEVICE_IN_WIRED_HEADSET, AUDIO_DEVICE_IN_USB_HEADSET,
AUDIO_DEVICE_IN_USB_DEVICE, AUDIO_DEVICE_IN_BUILTIN_MIC});
break;
case AUDIO_SOURCE_REMOTE_SUBMIX:
+ TRACE_CASE(AUDIO_SOURCE_REMOTE_SUBMIX);
+
device = availableDevices.getDevice(
AUDIO_DEVICE_IN_REMOTE_SUBMIX, String8(""), AUDIO_FORMAT_DEFAULT);
break;
case AUDIO_SOURCE_FM_TUNER:
+ TRACE_CASE(AUDIO_SOURCE_FM_TUNER);
+
device = availableDevices.getDevice(
AUDIO_DEVICE_IN_FM_TUNER, String8(""), AUDIO_FORMAT_DEFAULT);
break;
case AUDIO_SOURCE_ECHO_REFERENCE:
+ TRACE_CASE(AUDIO_SOURCE_ECHO_REFERENCE);
device = availableDevices.getDevice(
AUDIO_DEVICE_IN_ECHO_REFERENCE, String8(""), AUDIO_FORMAT_DEFAULT);
break;
-
帮助开发者跟踪音频策略引擎在为不同音频源选择输入设备时的执行路径
-
可以清楚地看到系统处理了哪个音频源类型
-
调试时可以验证是否进入了预期的 case 分支
-
当有音频输入相关问题时,可以通过这些日志快速定位问题源头