audioflinger: fix mmap stream volume
Fix bad casting from MmapPlaybackThread to VolumeInterface causing
volume commands to be lost by audio flinger for MMAP threads.
Bug: 37518243
Test: Verify volume is received by the audio HAL on MMAP streams
Verify no regression for other stream types.
Change-Id: I584ae868245358b2edefecc46a5249092f8be229
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 42e9c6b..9f19dfd 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2676,12 +2676,14 @@
// checkPlaybackThread_l() must be called with AudioFlinger::mLock held
AudioFlinger::VolumeInterface *AudioFlinger::getVolumeInterface_l(audio_io_handle_t output) const
{
- VolumeInterface *volumeInterface = (VolumeInterface *)mPlaybackThreads.valueFor(output).get();
+ VolumeInterface *volumeInterface = mPlaybackThreads.valueFor(output).get();
if (volumeInterface == nullptr) {
MmapThread *mmapThread = mMmapThreads.valueFor(output).get();
if (mmapThread != nullptr) {
if (mmapThread->isOutput()) {
- volumeInterface = (VolumeInterface *)mmapThread;
+ MmapPlaybackThread *mmapPlaybackThread =
+ static_cast<MmapPlaybackThread *>(mmapThread);
+ volumeInterface = mmapPlaybackThread;
}
}
}
@@ -2692,11 +2694,13 @@
{
Vector <VolumeInterface *> volumeInterfaces;
for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
- volumeInterfaces.add((VolumeInterface *)mPlaybackThreads.valueAt(i).get());
+ volumeInterfaces.add(mPlaybackThreads.valueAt(i).get());
}
for (size_t i = 0; i < mMmapThreads.size(); i++) {
if (mMmapThreads.valueAt(i)->isOutput()) {
- volumeInterfaces.add((VolumeInterface *)mMmapThreads.valueAt(i).get());
+ MmapPlaybackThread *mmapPlaybackThread =
+ static_cast<MmapPlaybackThread *>(mMmapThreads.valueAt(i).get());
+ volumeInterfaces.add(mmapPlaybackThread);
}
}
return volumeInterfaces;