summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-02-14 15:28:55 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-15 13:26:50 +0000
commit4ca65c16c1688ebe0a89d0463ade70d296a376ef (patch)
tree7a6084a277cd8bc3648eb9fdd129a7cea0941132
parentc77d8a7b9ee961d50b1555d3e43a4789909ea0ef (diff)
downloadqtmultimedia-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.cpp26
-rw-r--r--src/multimedia/windows/qwindowsaudiosource.cpp26
-rw-r--r--src/multimedia/windows/qwindowsaudioutils.cpp20
-rw-r--r--src/multimedia/windows/qwindowsaudioutils_p.h5
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