[RK3399][Android7.1] 调试笔记 --- 系统音量无法调节
程序员文章站
2022-05-12 09:18:44
...
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中。
修改方法:
[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的音量设置流程小结
上一篇: Seekbar调节系统音量
下一篇: scrapy的cookie管理