summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJøger Hansegård <joger.hansegard@qt.io>2024-03-03 00:07:55 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-08 23:27:47 +0000
commit74c2d1e816e6753cba178f08f795a9a16e10f280 (patch)
tree37711e193b300e7787acd46fecf7be777d95234e
parent26b9e9ff69ef1858458eedd3017ed524130ac63f (diff)
Simplify lifetime management of QPlatformAudioResampler
QPlatformMediaIntegration creates various objects, and return them as QMaybe<Type*>. This moves responsibility of ownership to the caller. This patch makes the createAudioResampler function return the resampler as QMaybe<std::unique_ptr<Type>> which simplifies lifetime management. This introduces an asymmetry with other factory functions, but this is a step in the right direction Pick-to: 6.5 Change-Id: Id2f67597c8d8271b184321d138e126edff5f3202 Reviewed-by: Tim Blechmann <tim@klingt.org> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Sutterud <lars.sutterud@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> (cherry picked from commit 32f6952b03ba0e550db3e9dc358c366bf52c54a9) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit 0d2f051469ccabc3a9dab7d5aae9658f33525aaf)
-rw-r--r--src/multimedia/audio/qsoundeffect.cpp14
-rw-r--r--src/multimedia/platform/qplatformmediaintegration.cpp7
-rw-r--r--src/multimedia/platform/qplatformmediaintegration_p.h7
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp6
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h2
5 files changed, 21 insertions, 15 deletions
diff --git a/src/multimedia/audio/qsoundeffect.cpp b/src/multimedia/audio/qsoundeffect.cpp
index e5cb99144..4685b4671 100644
--- a/src/multimedia/audio/qsoundeffect.cpp
+++ b/src/multimedia/audio/qsoundeffect.cpp
@@ -127,14 +127,14 @@ void QSoundEffectPrivate::sampleReady()
<< audioDevice.channelConfiguration();
auto outputFormat = sampleFormat;
outputFormat.setChannelConfig(audioDevice.channelConfiguration());
- if (auto maybeResampler = QPlatformMediaIntegration::instance()->createAudioResampler(
- m_sample->format(), outputFormat)) {
- std::unique_ptr<QPlatformAudioResampler> resampler(maybeResampler.value());
- m_audioBuffer =
- resampler->resample(m_sample->data().constData(), m_sample->data().size());
- } else {
+
+ const auto resampler = QPlatformMediaIntegration::instance()->createAudioResampler(
+ m_sample->format(), outputFormat);
+ if (resampler)
+ m_audioBuffer = resampler.value()->resample(m_sample->data().constData(),
+ m_sample->data().size());
+ else
qCDebug(qLcSoundEffect) << "Cannot create resampler for channels mapping";
- }
}
if (!m_audioBuffer.isValid())
diff --git a/src/multimedia/platform/qplatformmediaintegration.cpp b/src/multimedia/platform/qplatformmediaintegration.cpp
index dcb412acf..1eb113b28 100644
--- a/src/multimedia/platform/qplatformmediaintegration.cpp
+++ b/src/multimedia/platform/qplatformmediaintegration.cpp
@@ -7,6 +7,7 @@
#include <qmutex.h>
#include <qplatformaudioinput_p.h>
#include <qplatformaudiooutput_p.h>
+#include <qplatformaudioresampler_p.h>
#include <qplatformvideodevices_p.h>
#include <qmediadevices.h>
#include <qcameradevice.h>
@@ -118,6 +119,12 @@ QList<QCameraDevice> QPlatformMediaIntegration::videoInputs()
return devices ? devices->videoDevices() : QList<QCameraDevice>{};
}
+QMaybe<std::unique_ptr<QPlatformAudioResampler>>
+QPlatformMediaIntegration::createAudioResampler(const QAudioFormat &, const QAudioFormat &)
+{
+ return notAvailable;
+}
+
QMaybe<QPlatformAudioInput *> QPlatformMediaIntegration::createAudioInput(QAudioInput *q)
{
return new QPlatformAudioInput(q);
diff --git a/src/multimedia/platform/qplatformmediaintegration_p.h b/src/multimedia/platform/qplatformmediaintegration_p.h
index 4673c47b3..d47687586 100644
--- a/src/multimedia/platform/qplatformmediaintegration_p.h
+++ b/src/multimedia/platform/qplatformmediaintegration_p.h
@@ -71,12 +71,9 @@ public:
virtual QPlatformSurfaceCapture *createWindowCapture(QWindowCapture *) { return nullptr; }
virtual QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *) { return notAvailable; }
- virtual QMaybe<QPlatformAudioResampler *>
+ virtual QMaybe<std::unique_ptr<QPlatformAudioResampler>>
createAudioResampler(const QAudioFormat & /*inputFormat*/,
- const QAudioFormat & /*outputFormat*/)
- {
- return notAvailable;
- }
+ const QAudioFormat & /*outputFormat*/);
virtual QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() { return notAvailable; }
virtual QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *) { return notAvailable; }
virtual QMaybe<QPlatformMediaRecorder *> createRecorder(QMediaRecorder *) { return notAvailable; }
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp
index 7abded14c..28c0625c7 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration.cpp
@@ -190,9 +190,11 @@ QMaybe<QPlatformAudioDecoder *> QFFmpegMediaIntegration::createAudioDecoder(QAud
return new QFFmpegAudioDecoder(decoder);
}
-QMaybe<QPlatformAudioResampler *> QFFmpegMediaIntegration::createAudioResampler(const QAudioFormat &inputFormat, const QAudioFormat &outputFormat)
+QMaybe<std::unique_ptr<QPlatformAudioResampler>>
+QFFmpegMediaIntegration::createAudioResampler(const QAudioFormat &inputFormat,
+ const QAudioFormat &outputFormat)
{
- return new QFFmpegResampler(inputFormat, outputFormat);
+ return { std::make_unique<QFFmpegResampler>(inputFormat, outputFormat) };
}
QMaybe<QPlatformMediaCaptureSession *> QFFmpegMediaIntegration::createCaptureSession()
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h
index 7d56b60bb..b8787bcc4 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h
+++ b/src/plugins/multimedia/ffmpeg/qffmpegmediaintegration_p.h
@@ -27,7 +27,7 @@ public:
QFFmpegMediaIntegration();
QMaybe<QPlatformAudioDecoder *> createAudioDecoder(QAudioDecoder *decoder) override;
- QMaybe<QPlatformAudioResampler *> createAudioResampler(const QAudioFormat &inputFormat, const QAudioFormat &outputFormat) override;
+ QMaybe<std::unique_ptr<QPlatformAudioResampler>> createAudioResampler(const QAudioFormat &inputFormat, const QAudioFormat &outputFormat) override;
QMaybe<QPlatformMediaCaptureSession *> createCaptureSession() override;
QMaybe<QPlatformMediaPlayer *> createPlayer(QMediaPlayer *player) override;
QMaybe<QPlatformCamera *> createCamera(QCamera *) override;