From 74383cb40cfd87e5e07a91122678ebf6b7af5222 Mon Sep 17 00:00:00 2001 From: Dmytro Poplavskiy Date: Wed, 6 Jun 2012 14:35:42 +1000 Subject: [PATCH] Added QAbstractVideoBuffer::release virtual method It's useful when the buffer pool stores QAbstractVideoBuffer instances instead of underlying system buffers and allows to avoid reallocation of QAbstractVideoBuffer instances. The default implementation deletes the buffer, so this change is source compatible. Change-Id: I7dadd7dac529748b5eb33e5aa7c2d0578b8b1634 Reviewed-by: Lev Zelenskiy Reviewed-by: Jonas Rabbe Reviewed-by: Michael Goddard --- src/multimedia/video/qabstractvideobuffer.cpp | 13 +++++++++++++ src/multimedia/video/qabstractvideobuffer.h | 1 + src/multimedia/video/qvideoframe.cpp | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp index 0d0ff597..127cd5ea 100644 --- a/src/multimedia/video/qabstractvideobuffer.cpp +++ b/src/multimedia/video/qabstractvideobuffer.cpp @@ -148,6 +148,19 @@ QAbstractVideoBuffer::~QAbstractVideoBuffer() delete d_ptr; } +/*! + Releases the video buffer. + + QVideoFrame calls QAbstractVideoBuffer::release when the buffer is not used + any more and can be destroyed or returned to the buffer pool. + + The default implementation deletes the buffer instance. +*/ +void QAbstractVideoBuffer::release() +{ + delete this; +} + /*! Returns the type of a video buffer's handle. diff --git a/src/multimedia/video/qabstractvideobuffer.h b/src/multimedia/video/qabstractvideobuffer.h index 0e92d328..6bd7f8a5 100644 --- a/src/multimedia/video/qabstractvideobuffer.h +++ b/src/multimedia/video/qabstractvideobuffer.h @@ -82,6 +82,7 @@ public: QAbstractVideoBuffer(HandleType type); virtual ~QAbstractVideoBuffer(); + virtual void release(); HandleType handleType() const; diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp index c17a8883..4b130980 100644 --- a/src/multimedia/video/qvideoframe.cpp +++ b/src/multimedia/video/qvideoframe.cpp @@ -102,7 +102,8 @@ public: ~QVideoFramePrivate() { - delete buffer; + if (buffer) + buffer->release(); } QSize size;