diff options
author | Jøger Hansegård <joger.hansegard@qt.io> | 2023-06-08 10:49:05 +0200 |
---|---|---|
committer | Jøger Hansegård <joger.hansegard@qt.io> | 2023-06-08 21:27:29 +0200 |
commit | 8d8622f40f5f3e1053121cff58b3c1179a158297 (patch) | |
tree | c3c81366e8c4275100415a955a3c8e181343b20d | |
parent | cf4097cfb3b0d5b8e13a5f7c11a9517236edb578 (diff) |
Split QComPtr reset() function into a reset() and an attach() function
The name 'reset' does not specify well how ownership is handled when
reset to a new pointer value. A better name for this is 'attach', which
indicates that AddRef is not called.
'reset' now just resets the pointer to a default constructed state.
This is a step towards replacing QComPtr out with WRL::ComPtr which is used elsewhere in Qt.
Change-Id: Ic72beba8cf212669f5dfa2e01f36754ffb0ad94e
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>
(cherry picked from commit b9a3961ff5966af372acad83f9dcee7f082a21c7)
5 files changed, 20 insertions, 6 deletions
diff --git a/src/multimedia/windows/qcomptr_p.h b/src/multimedia/windows/qcomptr_p.h index 2c7818598..38cae0c17 100644 --- a/src/multimedia/windows/qcomptr_p.h +++ b/src/multimedia/windows/qcomptr_p.h @@ -54,7 +54,22 @@ public: T *operator->() const { return m_ptr; } T **address() { Q_ASSERT(m_ptr == nullptr); return &m_ptr; } - void reset(T *ptr = nullptr) { if (m_ptr) m_ptr->Release(); m_ptr = ptr; } + + void reset() + { + if (m_ptr) + m_ptr->Release(); + m_ptr = nullptr; + } + + // Takes ownership of interface without calling AddRef + void attach(T *ptr) + { + if (m_ptr) + m_ptr->Release(); + m_ptr = ptr; + } + T *release() { T *ptr = m_ptr; m_ptr = nullptr; return ptr; } T *get() const { return m_ptr; } diff --git a/src/multimedia/windows/qwindowsmediadevices.cpp b/src/multimedia/windows/qwindowsmediadevices.cpp index cad49862a..d55b73761 100644 --- a/src/multimedia/windows/qwindowsmediadevices.cpp +++ b/src/multimedia/windows/qwindowsmediadevices.cpp @@ -179,7 +179,7 @@ QWindowsMediaDevices::QWindowsMediaDevices() } - m_notificationClient.reset(new CMMNotificationClient(this, m_deviceEnumerator, std::move(devState))); + m_notificationClient.attach(new CMMNotificationClient(this, m_deviceEnumerator, std::move(devState))); m_deviceEnumerator->RegisterEndpointNotificationCallback(m_notificationClient.get()); } else { diff --git a/src/plugins/multimedia/ffmpeg/qwindowscamera.cpp b/src/plugins/multimedia/ffmpeg/qwindowscamera.cpp index a6c85dba4..d0d905ab0 100644 --- a/src/plugins/multimedia/ffmpeg/qwindowscamera.cpp +++ b/src/plugins/multimedia/ffmpeg/qwindowscamera.cpp @@ -185,7 +185,7 @@ public: if (!ac->m_source) return {}; - ac->m_readerCallback.reset(new CameraReaderCallback); + ac->m_readerCallback.attach(new CameraReaderCallback); ac->m_readerCallback->setActiveCamera(ac.get()); ac->m_reader = createCameraReader(ac->m_source.get(), ac->m_readerCallback); if (!ac->m_reader) diff --git a/src/plugins/multimedia/windows/decoder/mfaudiodecodercontrol.cpp b/src/plugins/multimedia/windows/decoder/mfaudiodecodercontrol.cpp index 4f25ae5ec..9d9abedb9 100644 --- a/src/plugins/multimedia/windows/decoder/mfaudiodecodercontrol.cpp +++ b/src/plugins/multimedia/windows/decoder/mfaudiodecodercontrol.cpp @@ -87,7 +87,7 @@ void MFAudioDecoderControl::startReadingSource(IMFMediaSource *source) { Q_ASSERT(source); - m_decoderSourceReader.reset(new MFDecoderSourceReader()); + m_decoderSourceReader.attach(new MFDecoderSourceReader()); if (!m_decoderSourceReader) { error(QAudioDecoder::ResourceError, tr("Could not instantiate MFDecoderSourceReader")); return; diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp index 7fab5b8cd..1c2c2c1aa 100644 --- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp +++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp @@ -34,10 +34,9 @@ public: IMFSample *sample, QRhi *rhi, QVideoFrame::HandleType type = QVideoFrame::NoHandle) : QAbstractVideoBuffer(type, rhi) , m_device(device) + , m_sample(sample) , m_mapMode(QVideoFrame::NotMapped) { - sample->AddRef(); - m_sample.reset(sample); } ~IMFSampleVideoBuffer() override |