标记当前处理的音频源类型

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 分支

  • 当有音频输入相关问题时,可以通过这些日志快速定位问题源头

相关推荐
不穿格子的程序员13 小时前
Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史
数据库·redis·集群·主从·高可用·哨兵
阿坤带你走近大数据14 小时前
什么是元数据管理?(附具体实施方案供参考)
数据库·金融
俊男无期14 小时前
超效率工作法
java·前端·数据库
2301_8234380214 小时前
【无标题】解析《采用非对称自玩实现强健多机器人群集的深度强化学习方法》
数据库·人工智能·算法
中国胖子风清扬14 小时前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
Elastic 中国社区官方博客14 小时前
Elasticsearch:你是说,用于混合搜索(hybrid search)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
czlczl2002092514 小时前
高并发下的 Token 存储策略: Redis 与 MySQL 的一致性
数据库·redis·mysql
虹科网络安全14 小时前
艾体宝产品 | 基准测试:ArangoDB性能碾压Neo4j,速度最高提升8倍!
数据库·neo4j
哈哈老师啊14 小时前
Springboot校园订餐管理系统k2pr7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
JIngJaneIL14 小时前
基于java+ vue学生选课系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot