summaryrefslogtreecommitdiff
path: root/src/multimedia/windows/qwindowsaudiosink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/windows/qwindowsaudiosink.cpp')
-rw-r--r--src/multimedia/windows/qwindowsaudiosink.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/multimedia/windows/qwindowsaudiosink.cpp b/src/multimedia/windows/qwindowsaudiosink.cpp
index 30bf054f1..f585b83e2 100644
--- a/src/multimedia/windows/qwindowsaudiosink.cpp
+++ b/src/multimedia/windows/qwindowsaudiosink.cpp
@@ -203,6 +203,9 @@ QIODevice* QWindowsAudioSink::start()
bool QWindowsAudioSink::open()
{
+ if (m_audioClient)
+ return true;
+
HRESULT hr = m_device->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER,
nullptr, (void**)m_audioClient.address());
if (FAILED(hr)) {
@@ -210,6 +213,8 @@ bool QWindowsAudioSink::open()
return false;
}
+ auto resetClient = qScopeGuard([this](){ m_audioClient.reset(); });
+
WAVEFORMATEX *pwfx = nullptr;
hr = m_audioClient->GetMixFormat(&pwfx);
if (FAILED(hr)) {
@@ -259,6 +264,8 @@ bool QWindowsAudioSink::open()
return false;
}
+ resetClient.dismiss();
+
return true;
}
@@ -373,12 +380,14 @@ void QWindowsAudioSink::setVolume(qreal v)
m_volume = qBound(qreal(0), v, qreal(1));
}
+void QWindowsAudioSink::stop() {
+ // TODO: investigate and find a way to drain and stop instead of closing
+ close();
+}
+
void QWindowsAudioSink::reset()
{
- if (m_audioClient) {
- m_audioClient->Stop();
- m_audioClient->Reset();
- }
+ close();
}
QT_END_NAMESPACE