Fix QAudioOutput::setVolume() limited 50% on 32-bit Windows
authorBill Somerville <bill@classdesign.com>
Sat, 24 Aug 2013 19:51:24 +0000 (20:51 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 2 Sep 2013 10:08:30 +0000 (12:08 +0200)
A signed 16 bit integer was being used to pack a normalised double into
half of a DWORD. It needed to be unsigned 16-bit to get the full range
of the Windows volume control.

Task-number: QTBUG-33160

Change-Id: Ic17f572a188401ee686c6e6af3984d52328ccda6
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
src/multimedia/audio/qaudiooutput_win32_p.cpp

index 4d13d43..286cecb 100644 (file)
@@ -702,7 +702,7 @@ void QAudioOutputPrivate::setVolume(qreal v)
         volumeCache = normalizedVolume;
         return;
     }
-    const qint16 scaled = normalizedVolume * 0xFFFF;
+    const quint16 scaled = normalizedVolume * 0xFFFF;
     DWORD vol = MAKELONG(scaled, scaled);
     MMRESULT res = waveOutSetVolume(hWaveOut, vol);
     if (res == MMSYSERR_NOERROR)