Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83
背景:
刚开始配置完音频codec后声音是正常,后来改着改着发现音量无法调节了。
调试:
测试修改了下codec的输出gain值是可以调节声音的,说明问题出在软件调节声音模块。
HAL层dump不同音量级别的data,发现没有变化。
根据音量调节的过程,在各个层添加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
[url=home.php?mod=space&uid=1999721]@@[/url] -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. }/
原作者:KrisFei
|