summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2024-02-28 13:57:30 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-02-28 16:46:35 +0000
commit7e1534f53fa676f7e8da79ad9f1e44969e66b5c1 (patch)
tree0c96fe94d81d757ea8ce638066d6bfa457662eba
parentfbc6f09f49734b44ce6ef8eede04fb4b5c5d493d (diff)
Hold TextureConverterBackend via unique_ptr
The patch prettifies the code and addresses a memory leak in very specific case: recreation of texture conversion backend. Pick-to: 6.6 6.5 Change-Id: I869c51fd66f103eaa0a784af4af168dd9bd18883 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Sutterud <lars.sutterud@qt.io> (cherry picked from commit fac12d3c236c7f5e146c0eaad34d6238da3d1fbf) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp13
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h3
2 files changed, 5 insertions, 11 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp
index df49a07bf..22b4fe518 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp
@@ -322,11 +322,6 @@ AVPixelFormat getFormat(AVCodecContext *codecContext, const AVPixelFormat *sugge
return *suggestedFormats;
}
-TextureConverter::Data::~Data()
-{
- delete backend;
-}
-
HWAccel::~HWAccel() = default;
std::unique_ptr<HWAccel> HWAccel::create(AVHWDeviceType deviceType)
@@ -456,22 +451,22 @@ void TextureConverter::updateBackend(AVPixelFormat fmt)
switch (fmt) {
#if QT_CONFIG(vaapi)
case AV_PIX_FMT_VAAPI:
- d->backend = new VAAPITextureConverter(d->rhi);
+ d->backend = std::make_unique<VAAPITextureConverter>(d->rhi);
break;
#endif
#ifdef Q_OS_DARWIN
case AV_PIX_FMT_VIDEOTOOLBOX:
- d->backend = new VideoToolBoxTextureConverter(d->rhi);
+ d->backend = std::make_unique<VideoToolBoxTextureConverter>(d->rhi);
break;
#endif
#if QT_CONFIG(wmf)
case AV_PIX_FMT_D3D11:
- d->backend = new D3D11TextureConverter(d->rhi);
+ d->backend = std::make_unique<D3D11TextureConverter>(d->rhi);
break;
#endif
#ifdef Q_OS_ANDROID
case AV_PIX_FMT_MEDIACODEC:
- d->backend = new MediaCodecTextureConverter(d->rhi);
+ d->backend = std::make_unique<MediaCodecTextureConverter>(d->rhi);
break;
#endif
default:
diff --git a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h
index bf5b5cc3d..ac2680ee6 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h
+++ b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h
@@ -59,11 +59,10 @@ class TextureConverter
class Data final
{
public:
- ~Data();
QAtomicInt ref = 0;
QRhi *rhi = nullptr;
AVPixelFormat format = AV_PIX_FMT_NONE;
- TextureConverterBackend *backend = nullptr;
+ std::unique_ptr<TextureConverterBackend> backend;
};
public:
TextureConverter(QRhi *rhi = nullptr);