Android10接上usb摄像头重启设备无声音

一、问题描述

        接上usb摄像头,插上喇叭,重启设备,有时候有声音,有时候没有

二、问题原因

        原因:插上usb设卡后又两个声卡,而重启后哪个声卡的节点先生成不确定,而hal层中只是打开第一个节点,而usb声卡是没有播放功能的,所以节点中没有播放节点,所以没有声音

三、解决方案

        修改HAL, 检测各个节点的播放声卡是否存在,如果存在则使用那个节点播放声音。
--- a/hal/platform.c
+++ b/hal/platform.c
@@ -1175,6 +1175,7 @@ int get_platform_snd_card_config(int *card, int *port,
     struct pdev_profile *profile = NULL;
     char dev_name[50];
     unsigned int i;
+    char filePath[128]={0};
 
     pdev2str(dev_name, platform_device);
 
@@ -1193,6 +1194,17 @@ int get_platform_snd_card_config(int *card, int *port,
         return -1;
     }
 
+    for(i=0;i<64;i++){
+       memset(filePath, 0, sizeof(filePath));
+       sprintf(filePath,"/dev/snd/pcmC%dD0p",i);
+       if(!access(filePath,0)){
+            break;
+       }
+    }
+    if(i != 64){
+        profile->frontend.card = i;
+    }
+    
     /* get snd_card_config */
     *card = profile->frontend.card;
     *port = profile->frontend.port;

        首先声明了一个名为filePath的字符数组,用于存储文件路径。这个数组的大小是128字节。接下来,通过pdev2str函数将platform_device转换为一个字符串,保存在dev_name数组中。然后,使用一个循环从0到63遍历,拼接出一个名为filePath的文件路径字符串/dev/snd/pcmC%dD0p,其中%d是循环变量i。然后,使用access函数检查该路径下的文件是否存在。如果该路径下的文件存在,access函数将返回0,并跳出循环。接下来,检查循环变量i是否等于64,如果不等于,说明在之前的循环中找到了一个存在的文件路径,将其赋值给profile->frontend.card,即声卡的配置。最后,将profile->frontend.card赋值给*card,作为函数的返回值。

猜你喜欢

转载自blog.csdn.net/qq_53676406/article/details/132203316