RK3588 Android13配置耳机和hdmi同时出声音

1、关掉BOARD_SUPPORT_MULTIAUDIO宏
2、frameworks/av修改

 using content::AttributionSourceState;
diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp
old mode 100644
new mode 100755
index 9626483fd4..3dad282d13
--- a/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -418,10 +418,32 @@ DeviceVector Engine::getDevicesForStrategyInt(legacy_strategy strategy,
         }
         DeviceVector devices3;
         if (strategy == STRATEGY_MEDIA) {
-            // ARC and AUX_LINE can co-exist with others.
-            devices3 = availableOutputDevices.getDevicesFromTypes({
-                    AUDIO_DEVICE_OUT_HDMI_ARC, AUDIO_DEVICE_OUT_HDMI_EARC,
-                    AUDIO_DEVICE_OUT_AUX_LINE, });
+            DeviceVector device_headset = availableOutputDevices.getDevicesFromType(
+                    AUDIO_DEVICE_OUT_WIRED_HEADSET);
+            DeviceVector device_headphone = availableOutputDevices.getDevicesFromType(
+                    AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
+            if (device_headset.isEmpty() && device_headphone.isEmpty()) {
+                devices3 = availableOutputDevices.getDevicesFromTypes({
+                        AUDIO_DEVICE_OUT_SPEAKER,
+                        AUDIO_DEVICE_OUT_AUX_DIGITAL, VX_ROCKCHIP_OUT_HDMI0,
+                        AUDIO_DEVICE_OUT_SPDIF, VX_ROCKCHIP_OUT_SPDIF0,
+                        AUDIO_DEVICE_OUT_HDMI_ARC, AUDIO_DEVICE_OUT_HDMI_EARC,
+                        AUDIO_DEVICE_OUT_AUX_LINE, });
+            } else if (device_headset.isEmpty() && !device_headphone.isEmpty()) {
+                devices3 = availableOutputDevices.getDevicesFromTypes({
+                        AUDIO_DEVICE_OUT_WIRED_HEADPHONE,
+                        AUDIO_DEVICE_OUT_AUX_DIGITAL, VX_ROCKCHIP_OUT_HDMI0,
+                        AUDIO_DEVICE_OUT_SPDIF, VX_ROCKCHIP_OUT_SPDIF0,
+                        AUDIO_DEVICE_OUT_HDMI_ARC, AUDIO_DEVICE_OUT_HDMI_EARC,
+                        AUDIO_DEVICE_OUT_AUX_LINE, });
+            } else if (!device_headset.isEmpty() && device_headphone.isEmpty()) {
+                devices3 = availableOutputDevices.getDevicesFromTypes({
+                        AUDIO_DEVICE_OUT_WIRED_HEADSET,
+                        AUDIO_DEVICE_OUT_AUX_DIGITAL, VX_ROCKCHIP_OUT_HDMI0,
+                        AUDIO_DEVICE_OUT_SPDIF, VX_ROCKCHIP_OUT_SPDIF0,
+                        AUDIO_DEVICE_OUT_HDMI_ARC, AUDIO_DEVICE_OUT_HDMI_EARC,
+                        AUDIO_DEVICE_OUT_AUX_LINE, });
+            }
         }
 
         devices2.add(devices3);
(END)

3、/hardware/rockchip/audio

diff --git a/tinyalsa_hal/audio_hw.c b/tinyalsa_hal/audio_hw.c
index 9dd81eb..e1244bf 100755
--- a/tinyalsa_hal/audio_hw.c
+++ b/tinyalsa_hal/audio_hw.c
@@ -326,9 +326,9 @@ unsigned getOutputRouteFromDevice(uint32_t device)
     case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT:
         return BLUETOOTH_NORMAL_ROUTE;
     case AUDIO_DEVICE_OUT_AUX_DIGITAL:
-#ifdef SUPPORT_VX_ROCKCHIP
+//#ifdef SUPPORT_VX_ROCKCHIP
     case VX_ROCKCHIP_OUT_HDMI0:
-#endif
+//#endif
         return HDMI_NORMAL_ROUTE;
     default:
         return PLAYBACK_OFF_ROUTE;
@@ -494,6 +494,7 @@ struct dev_proc_info SPEAKER_OUT_NAME[] = /* add codes& dai name here*/
     {"rockchiprt5670c", NULL,},
     {"rockchiprt5672c", NULL,},
     {"rk3528acodec",    NULL},
+       {"rockchipi2ssoun", NULL,},
     {NULL, NULL}, /* Note! Must end with NULL, else will cause crash */
 };
 
@@ -557,6 +558,7 @@ struct dev_proc_info MIC_IN_NAME[] =
     {"rockchiprt5640c", NULL,},
     {"rockchiprt5670c", NULL,},
     {"rockchiprt5672c", NULL,},
+       {"rockchipi2ssoun", NULL,},
     {NULL, NULL}, /* Note! Must end with NULL, else will cause crash */
 };
 
@@ -1265,7 +1267,7 @@ static int start_output_stream(struct stream_out *out)
             }
         }
 
-#ifdef SUPPORT_VX_ROCKCHIP
+//#ifdef SUPPORT_VX_ROCKCHIP
         if (out->devices[i] == VX_ROCKCHIP_OUT_SPDIF0) {
             card = adev->dev_out[SND_OUT_SOUND_CARD_SPDIF_1].card;
             device = adev->dev_out[SND_OUT_SOUND_CARD_SPDIF_1].device;
@@ -1279,7 +1281,7 @@ static int start_output_stream(struct stream_out *out)
             ret = open_pcm(card, device, (int)SND_OUT_SOUND_CARD_HDMI_1, out);
             if (ret < 0) return ret;
         }
-#endif
+//#endif
 
         if (audio_is_bluetooth_out_sco_device(out->devices[i])) {
             card = adev->dev_out[SND_OUT_SOUND_CARD_BT].card;

4、/device/rockchip/common

diff --git a/audio_policy_configuration.xml b/audio_policy_configuration.xml
old mode 100644
new mode 100755
index 91f0232..4519e4f
--- a/audio_policy_configuration.xml
+++ b/audio_policy_configuration.xml
@@ -81,8 +81,12 @@
                 <devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink">
                 </devicePort>
                 <devicePort tagName="HDMI Out" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink">
+                </devicePort>
+                               <devicePort tagName="HDMI_1 Out" type="VX_ROCKCHIP_OUT_HDMI0" role="sink">
                 </devicePort>
                 <devicePort tagName="SPDIF Out" type="AUDIO_DEVICE_OUT_SPDIF" role="sink">
+                </devicePort>
+                               <devicePort tagName="SPDIF_1 Out" type="VX_ROCKCHIP_OUT_SPDIF0" role="sink">
                 </devicePort>
 
                 <devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
@@ -109,8 +113,12 @@
                        sources="primary output"/>
                 <route type="mix" sink="HDMI Out"
                        sources="primary output,hdmi_bitstream"/>
+                               <route type="mix" sink="HDMI_1 Out"
+                       sources="primary output"/>         
                 <route type="mix" sink="SPDIF Out"
                        sources="primary output,spdif_passthrough"/>
+                               <route type="mix" sink="SPDIF_1 Out"
+                       sources="primary output"/>
                 <route type="mix" sink="primary input"
                        sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,HDMIIn"/>
             </routes>
diff --git a/device.mk b/device.mk
old mode 100644
new mode 100755
index 02be5f7..22960d3
--- a/device.mk

### RK3588 HDMI 输入配置支持 对于RK3588芯片组中的HDMI输入功能,其配置流程涉及多个方面,包括但不限于音频设置、DDC(显示数据通道)、视频输入参数调整以及可能涉及到的高级特性如MPLL(主像素锁相环),CEC(消费者电子控制)HDCP(高带宽数字内容保护)。具体来说: #### 音频配置 为了使能并优化通过HDMI端口传输的声音信号,在系统初始化阶段需指定所采用的具体编解码器标准。这通常是在设备树文件或是特定的应用层框架内完成定义[^1]。 #### DDC配置 DDC用于自动读取连接显示器的能力描述符,从而简化了分辨率及其他显示属性的选择过程。正确设定这一部分可以确保最佳视觉效果的同时也提高了用户体验的一致性便捷度。 #### 视频输入配置 此环节主要关注如何处理来自外部源的数据流,比如确定支持的最大帧率、色彩空间转换机制等。这些选项同样依赖于底层硬件特性的暴露程度及其对应的软件接口实现方式。 #### MPLL配置 作为影响图像质量的关键因素之一,合理调节MPLL能够有效改善画面清晰度平滑过渡表现。这项工作往往需要深入理解内部时钟生成原理并与实际应用场景相结合来做最合适的决策。 #### CEC配置 (可选) 如果目标应用环境中有必要启用此项,则可以通过相应的APIs或命令行工具来进行简单的开关操作或者是更复杂的场景联动编程。 #### HDCP配置 针对版权保护需求较高的场合下,激活HDCP协议有助于防止未授权的内容复制行为发生。该步骤一般会紧随其他基础项之后执行,并且可能会牵涉到密钥交换等一系列安全措施。 ```bash # 示例:开启PWM遥控调试模式以便观察红外接收情况 echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print ``` 值得注意的是,上述各项配置并非孤立存在而是相互关联构成完整的解决方案链路;另外由于不同版本的操作系统可能存在差异因此建议参照官方文档获取最新指导说明[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值