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

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中。


修改方法:

kris@eco:~/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的音量设置流程小结

你可能感兴趣的:(RK3399,子类__Audio)