summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorMichael Goddard <michael.goddard@nokia.com>2012-06-20 15:53:39 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-20 09:11:28 +0200
commiteb92be7ede9c1aa47cb24d99488f09ec7c6cfc3f (patch)
tree08d668f07da9b30c5e14a5b184a41398b02b3423 /src/multimedia
parent84ca7137603be1b8517be55f92523b0caa90e9e4 (diff)
Fix QAudioOutput volume on OSX.
Change-Id: I142ca638d3dc0839f7c5b103f03edac6715a0bb6 Reviewed-by: Ling Hu <ling.hu@nokia.com> Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.cpp25
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.h4
2 files changed, 29 insertions, 0 deletions
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp
index 2d8f595f8..105f41f39 100644
--- a/src/multimedia/audio/qaudiooutput_mac_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp
@@ -297,6 +297,8 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device)
stateCode = QAudio::StoppedState;
audioThreadState.store(Stopped);
+ cachedVolume = (qreal)1.;
+
intervalTimer = new QTimer(this);
intervalTimer->setInterval(1000);
connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify()));
@@ -408,6 +410,8 @@ bool QAudioOutputPrivate::open()
isOpen = true;
+ setVolume(cachedVolume);
+
return true;
}
@@ -661,6 +665,27 @@ void QAudioOutputPrivate::stopTimers()
intervalTimer->stop();
}
+void QAudioOutputPrivate::setVolume(qreal v)
+{
+ const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0));
+ if (!isOpen) {
+ cachedVolume = normalizedVolume;
+ return;
+ }
+
+ if (AudioUnitSetParameter(audioUnit,
+ kHALOutputParam_Volume,
+ kAudioUnitScope_Global,
+ 0 /* bus */,
+ (float)normalizedVolume,
+ 0) == noErr)
+ cachedVolume = normalizedVolume;
+}
+
+qreal QAudioOutputPrivate::volume() const
+{
+ return cachedVolume;
+}
void QAudioOutputPrivate::deviceStopped()
{
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/audio/qaudiooutput_mac_p.h
index 953551877..fd513c4e7 100644
--- a/src/multimedia/audio/qaudiooutput_mac_p.h
+++ b/src/multimedia/audio/qaudiooutput_mac_p.h
@@ -106,6 +106,7 @@ public:
QMutex mutex;
QTimer* intervalTimer;
QAbstractAudioDeviceInfo *audioDeviceInfo;
+ qreal cachedVolume;
QAudio::Error errorCode;
QAudio::State stateCode;
@@ -152,6 +153,9 @@ public:
void startTimers();
void stopTimers();
+ void setVolume(qreal);
+ qreal volume() const;
+
private slots:
void deviceStopped();
void inputReady();