RK3576 音频修改:解决HDMI抢占媒体声音

前言

现象:HDMI 插入 → AudioPolicy 自动把媒体音频路由切到 HDMI 音频设备,板子扬声器(SPK)静音

执行:cat /proc/asound/cards

可见有三张声卡

现象

HDMI屏幕接线后板子的扬声器便没有媒体声音

需求

RK3576 板子接 HDMI 屏只做显示,媒体声音继续走板载声卡 → 扬声器,不允许插上 HDMI 后声音自动切到 HDMI。

原因

RK 的顺序是:有线/A2DP → HDMI → HDMI0 → SPDIF → SPDIF0 → ... → SPEAKER(最后)

插上 HDMI 后:

  • HDMI 设备进入可用设备列表;
  • 它在链里排在 SPEAKER 前面,所以 devices2 先被赋成 HDMI;
  • devices2 一旦非空,后面的 SPEAKER 分支就被跳过 → 媒体音频全部走 HDMI,板载声卡永远轮不到。

解决

修改位置:frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp

复制代码
diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp
index 2740994862..5a16835547 100644
--- a/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -40,6 +40,7 @@
 #include <media/AudioContainers.h>
 #include <utils/String8.h>
 #include <utils/Log.h>
+#include <cutils/properties.h>
 
 namespace android::audio_policy {
 
@@ -422,6 +423,21 @@ DeviceVector Engine::getDevicesForStrategyInt(legacy_strategy strategy,
                         getLastRemovableMediaDevices(GROUP_WIRED));
             }
         }
+        //-----------------------rk code----------
+        // Some products (tablet/kiosk) need media to keep playing on the local
+        // speaker even when HDMI/SPDIF is connected, instead of being switched to
+        // the HDMI/SPDIF output.
+        // Default is ON so it also works when the property cannot be read
+        // (e.g. not yet labeled / SELinux denied). Set:
+        //     audio.media.spk=false
+        // to restore routing media to HDMI/SPDIF.
+        // (labeled audio_config_prop so audioserver is allowed to read it)
+        // Placed after wired/BT check so headphones/A2DP still take precedence.
+        if (devices2.isEmpty() &&
+                property_get_bool("audio.media.spk", true)) {
+            devices2 = availableOutputDevices.getDevicesFromType(AUDIO_DEVICE_OUT_SPEAKER);
+        }
+        //----------------------------------------
         if ((devices2.isEmpty()) && (strategy != STRATEGY_SONIFICATION)) {
             // no sonification on aux digital (e.g. HDMI)
             devices2 = availableOutputDevices.getDevicesFromType(AUDIO_DEVICE_OUT_AUX_DIGITAL);

为什么改这里:

  • audio_policy_configuration.xml / mixer 只声明"有哪些设备、能怎么连",不决定谁优先;决定优先级的就是这段代码,所以改那里没用。
  • 只要在这条链最前面(耳机/A2DP 之后)加一句:无耳机、无蓝牙时直接选 SPEAKER,后面的 HDMI/SPDIF 分支因 devices2 已非空而自动跳过 → 声音留在扬声器,HDMI 只做显示。

放在这个位置的两点理由:① 耳机/A2DP 仍能正常抢占,插耳机照样切走;② HDMI 只在"有音频需求时"被跳过,视频通路完全不受影响,画面照常显示,只是 HDMI 不再出声。

相关推荐
开发笔记-阿牛19 小时前
做工业报警器语音提示,CK6159A 为什么更合适?
人工智能·stm32·单片机·嵌入式硬件·音频
熊猫钓鱼>_>21 小时前
声临其境:HarmonyOS 空间音频全链路开发实战
音频·harmonyos·arkts·鸿蒙·arkui·空间·hap
zxy28472253012 天前
C# 音频倍速播放
c#·音频·naudio·soundtouch·倍速
林澈在路上2 天前
能做DJ的AI写歌软件推荐:MELO音乐对比Suno v6
大数据·人工智能·github·音视频·音频
提升汽车音响好物5 天前
斯巴鲁森林人音响升级记录:江门汇声的前后声场与低频搭配
汽车·音频
沐禾安信9 天前
抖音的bgm 想保存? 3个音频提取工具,一键分离
音视频·音频·音频转换·视频转换
A133455513 天前
Apple TV 软件推荐:全平台怎么选
android·音频
林澈在路上18 天前
AI翻唱软件哪个好 2026国产AI写歌工具对比推荐
大数据·人工智能·深度学习·github·aigc·音视频·音频
提升汽车音响好物19 天前
宝马音响升级怎么做?东莞虎门杰之声 采用FOCAL 劲浪专车专用进行汽车音响升级
汽车·音频