summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2022-10-10 16:57:49 +0200
committerPiotr Srebrny <piotr.srebrny@qt.io>2022-10-10 15:36:41 +0000
commit45019c7f9ff9280c5aa2136f4dc60ec8e802d8c3 (patch)
treef42f6872c6294acaa04d9244d875e796177b40fe /src
parent0dbf32328b5566e497d0c8b4f5b1763751626cf2 (diff)
Initialize COM library for thread using QWindowsResampler
Since FFmpeg backend does not initialize COM library by defualt as Windows backend does, we have to initialize it when instantiating QWindowsResampler. This does not change the Windows backend behavior as COM library is initialized only once and the calls to CoInitialize are ref-counted. Pick-to: 6.4 Change-Id: Ie5321c6fba4361508efdef023f42eba32a5d23db Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/windows/qwindowsresampler.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/multimedia/windows/qwindowsresampler.cpp b/src/multimedia/windows/qwindowsresampler.cpp
index a21563311..9e76c9159 100644
--- a/src/multimedia/windows/qwindowsresampler.cpp
+++ b/src/multimedia/windows/qwindowsresampler.cpp
@@ -21,13 +21,20 @@ Q_LOGGING_CATEGORY(qLcAudioResampler, "qt.multimedia.audioresampler")
QWindowsResampler::QWindowsResampler()
: m_wmf(QWindowsMediaFoundation::instance())
{
+ HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
+ if (hr == RPC_E_CHANGED_MODE)
+ qWarning() << "Failed attempt to change apartment concurrency model";
+
CoCreateInstance(qCLSID_CResamplerMediaObject, nullptr, CLSCTX_INPROC_SERVER,
qIID_IMFTransform, (LPVOID*)(m_resampler.address()));
if (m_resampler)
m_resampler->AddInputStreams(1, &m_inputStreamID);
}
-QWindowsResampler::~QWindowsResampler() = default;
+QWindowsResampler::~QWindowsResampler()
+{
+ CoUninitialize();
+};
quint64 QWindowsResampler::outputBufferSize(quint64 inputBufferSize) const
{