diff options
Diffstat (limited to 'src/multimedia/windows/qwindowsaudiosink.cpp')
-rw-r--r-- | src/multimedia/windows/qwindowsaudiosink.cpp | 17 |
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 |