diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2024-02-28 13:57:30 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-28 16:46:35 +0000 |
commit | 7e1534f53fa676f7e8da79ad9f1e44969e66b5c1 (patch) | |
tree | 0c96fe94d81d757ea8ce638066d6bfa457662eba | |
parent | fbc6f09f49734b44ce6ef8eede04fb4b5c5d493d (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.cpp | 13 | ||||
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpeghwaccel_p.h | 3 |
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); |