欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[RK3399][Android7.1] 调试笔记 --- 系统音量无法调节

程序员文章站 2022-05-12 09:18:44
...

Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83

背景:
刚开始配置完音频codec后声音是正常,后来改着改着发现音量无法调节了。


调试:

  1. 测试修改了下codec的输出gain值是可以调节声音的,说明问题出在软件调节声音模块。
  2. HAL层dump不同音量级别的data,发现没有变化。
  3. 根据音量调节的过程,在各个层添加log查看volume的值,发现问题出在了最后一步计算音量中。prepareTracks_l会计算最终的一个音量来调整音频的幅值。

原因:
中间有添加过开机播放视频动画的功能,如果使能了这个功能并且
sys.bootvideo.closed这个property被置1的话,那么音量是会被设置成最大值的。
sys.bootvideo.closed会在动画播放完之后被置位,在bootanimation.cpp中。


修改方法:

[email protected]:~/rk3399/frameworks/av/services$ g df 1f724a14eb6b3f305ed82bdbc61e5f70c4df2152 0ea1c9822361688bb55bcb8ec1b4ef5525a9aeba
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 4e42de2..678d525 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4323,6 +4323,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
                 // read original volumes with volume control
                 float typeVolume = mStreamTypes[track->streamType()].volume;
                 float v = masterVolume * typeVolume;
+/*Kris, 180927, Fix bug that volume can't adjust. {*/
+#if 0
                //add for boot video:sync audio for boot
                 char value[PROPERTY_VALUE_MAX] = "";
                 property_get("persist.sys.bootvideo.enable", value, "false");
@@ -4333,6 +4335,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
                         v = 1.0;
                    }
                 }
+#endif
+/*Kris, 180927, Fix bug that volume can't adjust. }*/
 

参考:
[RK3288][Android6.0] Audio的音量计算过程小结
[RK3288][Android6.0] Audio的音量设置流程小结