Use floating point volume in mixer for mute checking
We lose some precision by use u4.12 integer volume in mixer, in some
cases (low dB) the u4.12 volume will be round to 0 and result in silent
Bug: 285425288
Test: Change volume table start position to -7200mdB and check audio
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1839ccae0e63d60ef2328458a8181c4df796c51e)
Merged-In: I856475e00d377c157c369c084d0e712b5ee53a7c
Change-Id: I856475e00d377c157c369c084d0e712b5ee53a7c
diff --git a/media/libaudioprocessing/AudioMixerBase.cpp b/media/libaudioprocessing/AudioMixerBase.cpp
index 427bd55..3d11d92 100644
--- a/media/libaudioprocessing/AudioMixerBase.cpp
+++ b/media/libaudioprocessing/AudioMixerBase.cpp
@@ -471,9 +471,9 @@
&track->mVolume[param - VOLUME0],
&track->mPrevVolume[param - VOLUME0],
&track->mVolumeInc[param - VOLUME0])) {
- ALOGV("setParameter(%s, VOLUME%d: %04x)",
- target == VOLUME ? "VOLUME" : "RAMP_VOLUME", param - VOLUME0,
- track->volume[param - VOLUME0]);
+ ALOGV("setParameter(%s, VOLUME%d: %f)",
+ target == VOLUME ? "VOLUME" : "RAMP_VOLUME", param - VOLUME0,
+ track->mVolume[param - VOLUME0]);
invalidate();
}
} else {
@@ -648,7 +648,7 @@
if (t->volumeInc[0]|t->volumeInc[1]) {
volumeRamp = true;
- } else if (!t->doesResample() && t->volumeRL == 0) {
+ } else if (!t->doesResample() && t->isVolumeMuted()) {
n |= NEEDS_MUTE;
}
t->needs = n;
@@ -748,7 +748,7 @@
for (const int name : mEnabled) {
const std::shared_ptr<TrackBase> &t = mTracks[name];
- if (!t->doesResample() && t->volumeRL == 0) {
+ if (!t->doesResample() && t->isVolumeMuted()) {
t->needs |= NEEDS_MUTE;
t->hook = &TrackBase::track__nop;
} else {