diff options
author | Piotr Srebrny <piotr.srebrny@qt.io> | 2022-10-10 16:57:49 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-10-10 16:06:53 +0000 |
commit | 115a882c0fda6015198bc1bd655a942c326faa3a (patch) | |
tree | 9ec8bffb71f86aeea9bd1c20a128668b81526cca | |
parent | e341284528a3e08daa7a728bc77777ead57bfbca (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.cpp | 9 |
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 { |