diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-02-14 15:28:55 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-15 13:26:50 +0000 |
commit | 4ca65c16c1688ebe0a89d0463ade70d296a376ef (patch) | |
tree | 7a6084a277cd8bc3648eb9fdd129a7cea0941132 | |
parent | c77d8a7b9ee961d50b1555d3e43a4789909ea0ef (diff) | |
download | qtmultimedia-4ca65c16c1688ebe0a89d0463ade70d296a376ef.tar.gz |
Windows: Move some audio helpers to QWindowsAudioUtils
They cause clashes in CMake Unity (Jumbo) builds.
Task-number: QTBUG-109394
Change-Id: Ib9450337e301e5fca09bfce1c9e06530dc8e8660
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Doris Verria <doris.verria@qt.io>
(cherry picked from commit a79a69a30398f262f2e0ea753927dcac471d5b2a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/multimedia/windows/qwindowsaudiosink.cpp | 26 | ||||
-rw-r--r-- | src/multimedia/windows/qwindowsaudiosource.cpp | 26 | ||||
-rw-r--r-- | src/multimedia/windows/qwindowsaudioutils.cpp | 20 | ||||
-rw-r--r-- | src/multimedia/windows/qwindowsaudioutils_p.h | 5 |
4 files changed, 33 insertions, 44 deletions
diff --git a/src/multimedia/windows/qwindowsaudiosink.cpp b/src/multimedia/windows/qwindowsaudiosink.cpp index f95f0dba2..deb660ec3 100644 --- a/src/multimedia/windows/qwindowsaudiosink.cpp +++ b/src/multimedia/windows/qwindowsaudiosink.cpp @@ -45,28 +45,10 @@ private: QWindowsAudioSink &audioDevice; }; -std::optional<quint32> audioClientFramesInUse(IAudioClient *client) -{ - Q_ASSERT(client); - UINT32 framesPadding = 0; - if (SUCCEEDED(client->GetCurrentPadding(&framesPadding))) - return framesPadding; - return {}; -} - -std::optional<quint32> audioClientFramesAllocated(IAudioClient *client) -{ - Q_ASSERT(client); - UINT32 bufferFrameCount = 0; - if (SUCCEEDED(client->GetBufferSize(&bufferFrameCount))) - return bufferFrameCount; - return {}; -} - std::optional<quint32> audioClientFramesAvailable(IAudioClient *client) { - auto framesAllocated = audioClientFramesAllocated(client); - auto framesInUse = audioClientFramesInUse(client); + auto framesAllocated = QWindowsAudioUtils::audioClientFramesAllocated(client); + auto framesInUse = QWindowsAudioUtils::audioClientFramesInUse(client); if (framesAllocated && framesInUse) return *framesAllocated - *framesInUse; @@ -91,7 +73,7 @@ QWindowsAudioSink::~QWindowsAudioSink() qint64 QWindowsAudioSink::remainingPlayTimeUs() { - auto framesInUse = audioClientFramesInUse(m_audioClient.get()); + auto framesInUse = QWindowsAudioUtils::audioClientFramesInUse(m_audioClient.get()); return m_resampler.outputFormat().durationForFrames(framesInUse ? *framesInUse : 0); } @@ -257,7 +239,7 @@ bool QWindowsAudioSink::open() return false; } - auto framesAllocated = audioClientFramesAllocated(m_audioClient.get()); + auto framesAllocated = QWindowsAudioUtils::audioClientFramesAllocated(m_audioClient.get()); if (!framesAllocated) { qCWarning(qLcAudioOutput) << "Failed to get audio client buffer size"; return false; diff --git a/src/multimedia/windows/qwindowsaudiosource.cpp b/src/multimedia/windows/qwindowsaudiosource.cpp index 94693636f..83aed6e87 100644 --- a/src/multimedia/windows/qwindowsaudiosource.cpp +++ b/src/multimedia/windows/qwindowsaudiosource.cpp @@ -45,24 +45,6 @@ private: QWindowsAudioSource &m_audioSource; }; -static std::optional<quint32> audioClientFramesInUse(IAudioClient *client) -{ - Q_ASSERT(client); - UINT32 framesPadding = 0; - if (SUCCEEDED(client->GetCurrentPadding(&framesPadding))) - return framesPadding; - return {}; -} - -static std::optional<quint32> audioClientFramesAllocated(IAudioClient *client) -{ - Q_ASSERT(client); - UINT32 bufferFrameCount = 0; - if (SUCCEEDED(client->GetBufferSize(&bufferFrameCount))) - return bufferFrameCount; - return {}; -} - QWindowsAudioSource::QWindowsAudioSource(QWindowsIUPointer<IMMDevice> device, QObject *parent) : QPlatformAudioSource(parent), m_timer(new QTimer(this)), @@ -181,8 +163,8 @@ QByteArray QWindowsAudioSource::readCaptureClientBuffer() void QWindowsAudioSource::schedulePull() { - auto allocated = audioClientFramesAllocated(m_audioClient.get()); - auto inUse = audioClientFramesInUse(m_audioClient.get()); + auto allocated = QWindowsAudioUtils::audioClientFramesAllocated(m_audioClient.get()); + auto inUse = QWindowsAudioUtils::audioClientFramesInUse(m_audioClient.get()); if (!allocated || !inUse) { deviceStateChange(QAudio::IdleState, QAudio::IOError); @@ -301,7 +283,7 @@ bool QWindowsAudioSource::open() return false; } - auto framesAllocated = audioClientFramesAllocated(m_audioClient.get()); + auto framesAllocated = QWindowsAudioUtils::audioClientFramesAllocated(m_audioClient.get()); if (!framesAllocated) { qCWarning(qLcAudioSource) << "Failed to get audio client buffer size"; return false; @@ -338,7 +320,7 @@ qsizetype QWindowsAudioSource::bytesReady() const if (m_deviceState == QAudio::StoppedState || m_deviceState == QAudio::SuspendedState) return 0; - auto frames = audioClientFramesInUse(m_audioClient.get()); + auto frames = QWindowsAudioUtils::audioClientFramesInUse(m_audioClient.get()); if (frames) { auto clientBufferSize = m_resampler.outputFormat().bytesForDuration( m_resampler.inputFormat().durationForFrames(*frames)); diff --git a/src/multimedia/windows/qwindowsaudioutils.cpp b/src/multimedia/windows/qwindowsaudioutils.cpp index c6a7ff9ee..ff2713f6b 100644 --- a/src/multimedia/windows/qwindowsaudioutils.cpp +++ b/src/multimedia/windows/qwindowsaudioutils.cpp @@ -7,6 +7,8 @@ #include "ks.h" #include "ksmedia.h" +#include <audioclient.h> + QT_BEGIN_NAMESPACE static QAudioFormat::AudioChannelPosition channelFormatMap[] = @@ -185,4 +187,22 @@ QWindowsIUPointer<IMFMediaType> QWindowsAudioUtils::formatToMediaType(QWindowsMe return mediaType; } +std::optional<quint32> QWindowsAudioUtils::audioClientFramesInUse(IAudioClient *client) +{ + Q_ASSERT(client); + UINT32 framesPadding = 0; + if (SUCCEEDED(client->GetCurrentPadding(&framesPadding))) + return framesPadding; + return {}; +} + +std::optional<quint32> QWindowsAudioUtils::audioClientFramesAllocated(IAudioClient *client) +{ + Q_ASSERT(client); + UINT32 bufferFrameCount = 0; + if (SUCCEEDED(client->GetBufferSize(&bufferFrameCount))) + return bufferFrameCount; + return {}; +} + QT_END_NAMESPACE diff --git a/src/multimedia/windows/qwindowsaudioutils_p.h b/src/multimedia/windows/qwindowsaudioutils_p.h index c82c2a01c..3ae957e35 100644 --- a/src/multimedia/windows/qwindowsaudioutils_p.h +++ b/src/multimedia/windows/qwindowsaudioutils_p.h @@ -20,6 +20,9 @@ #include <private/qwindowsiupointer_p.h> #include <mmreg.h> +#include <optional> + +struct IAudioClient; struct IMFMediaType; QT_BEGIN_NAMESPACE @@ -33,6 +36,8 @@ namespace QWindowsAudioUtils Q_MULTIMEDIA_EXPORT QAudioFormat mediaTypeToFormat(IMFMediaType *mediaType); QWindowsIUPointer<IMFMediaType> formatToMediaType(QWindowsMediaFoundation &, const QAudioFormat &format); QAudioFormat::ChannelConfig maskToChannelConfig(UINT32 mask, int count); + std::optional<quint32> audioClientFramesInUse(IAudioClient *client); + std::optional<quint32> audioClientFramesAllocated(IAudioClient *client); } QT_END_NAMESPACE |