summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2022-10-10 16:57:49 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-10-10 16:06:53 +0000
commit115a882c0fda6015198bc1bd655a942c326faa3a (patch)
tree9ec8bffb71f86aeea9bd1c20a128668b81526cca
parente341284528a3e08daa7a728bc77777ead57bfbca (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. Change-Id: Ie5321c6fba4361508efdef023f42eba32a5d23db Reviewed-by: André de la Rocha <andre.rocha@qt.io> (cherry picked from commit 45019c7f9ff9280c5aa2136f4dc60ec8e802d8c3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-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
{