diff options
author | Liang Qi <liang.qi@qt.io> | 2016-12-12 09:48:13 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-12-12 10:27:59 +0100 |
commit | 533759ef333e4db8625cd02f763994788da01199 (patch) | |
tree | dcb4b4ec8882b42ce8213f4e309534dd8d234843 /src/plugins/windowsaudio | |
parent | 31ed506ea2c7a8be439d77e02ca0d67b6f9ce675 (diff) | |
parent | 7bc230386e0d8d6f3c4ad5a0a6a22a625c9a8327 (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts:
src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
Change-Id: I7c30c2d13fdd07ee07e4449d5d3e256e988d3793
Diffstat (limited to 'src/plugins/windowsaudio')
-rw-r--r-- | src/plugins/windowsaudio/qwindowsaudiooutput.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp index c4bbbe85d..815b78979 100644 --- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp +++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp @@ -53,6 +53,7 @@ #include "qwindowsaudioutils.h" #include <QtEndian> #include <QtCore/QDataStream> +#include <private/qaudiohelpers_p.h> //#define DEBUG_AUDIO 1 @@ -72,7 +73,7 @@ QWindowsAudioOutput::QWindowsAudioOutput(const QByteArray &device) audioSource = 0; pullMode = true; finished = false; - volumeCache = (qreal)1.; + volumeCache = qreal(1.0); } QWindowsAudioOutput::~QWindowsAudioOutput() @@ -280,8 +281,6 @@ bool QWindowsAudioOutput::open() timeStampOpened.restart(); elapsedTimeOffset = 0; - setVolume(volumeCache); - errorState = QAudio::NoError; if(pullMode) { deviceState = QAudio::ActiveState; @@ -407,7 +406,11 @@ qint64 QWindowsAudioOutput::write( const char *data, qint64 len ) remain = l; else remain = period_size; - memcpy(current->lpData, p, remain); + + if (volumeCache < qreal(1.0)) + QAudioHelperInternal::qMultiplySamples(volumeCache, settings, p, current->lpData, remain); + else + memcpy(current->lpData, p, remain); l -= remain; p += remain; @@ -595,16 +598,10 @@ QAudio::State QWindowsAudioOutput::state() const void QWindowsAudioOutput::setVolume(qreal v) { - const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0)); - if (deviceState != QAudio::ActiveState) { - volumeCache = normalizedVolume; + if (qFuzzyCompare(volumeCache, v)) return; - } - const quint16 scaled = normalizedVolume * 0xFFFF; - DWORD vol = MAKELONG(scaled, scaled); - MMRESULT res = waveOutSetVolume(hWaveOut, vol); - if (res == MMSYSERR_NOERROR) - volumeCache = normalizedVolume; + + volumeCache = qBound(qreal(0), v, qreal(1)); } qreal QWindowsAudioOutput::volume() const |