From f48e16dc45cde8f634823c40aa573b18673cf13d Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Mon, 4 May 2020 11:56:22 +0200 Subject: Vivante: Keep only one frame The imx6 vivante implementation of videonode used by qtvideosink holds reference to two frames during rendering. It releases the first frame only when it receives the third frame. This makes jerky playback when frames are not coming at constant rate. It displays the previous frame during video playback. Change-Id: If306bdcd358fac46a1fd0000ccb068424aee813a Reviewed-by: Karim Pinter Reviewed-by: Andy Shaw --- src/plugins/videonode/imx6/qsgvivantevideomaterial.cpp | 10 +++------- src/plugins/videonode/imx6/qsgvivantevideomaterial.h | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/plugins/videonode/imx6/qsgvivantevideomaterial.cpp b/src/plugins/videonode/imx6/qsgvivantevideomaterial.cpp index e1468fe34..e8371d766 100644 --- a/src/plugins/videonode/imx6/qsgvivantevideomaterial.cpp +++ b/src/plugins/videonode/imx6/qsgvivantevideomaterial.cpp @@ -107,7 +107,7 @@ void QSGVivanteVideoMaterial::updateBlending() { void QSGVivanteVideoMaterial::setCurrentFrame(const QVideoFrame &frame, QSGVideoNode::FrameFlags flags) { QMutexLocker lock(&mFrameMutex); - mNextFrame = frame; + mCurrentFrame = frame; mMappable = mMapError == GL_NO_ERROR && !flags.testFlag(QSGVideoNode::FrameFiltered); #ifdef QT_VIVANTE_VIDEO_DEBUG @@ -124,12 +124,8 @@ void QSGVivanteVideoMaterial::bind() } QMutexLocker lock(&mFrameMutex); - if (mNextFrame.isValid()) { - mCurrentFrame.unmap(); - - mCurrentFrame = mNextFrame; - mCurrentTexture = vivanteMapping(mNextFrame); - } + if (mCurrentFrame.isValid()) + mCurrentTexture = vivanteMapping(mCurrentFrame); else glBindTexture(GL_TEXTURE_2D, mCurrentTexture); } diff --git a/src/plugins/videonode/imx6/qsgvivantevideomaterial.h b/src/plugins/videonode/imx6/qsgvivantevideomaterial.h index adbd960a4..db59e8fc7 100644 --- a/src/plugins/videonode/imx6/qsgvivantevideomaterial.h +++ b/src/plugins/videonode/imx6/qsgvivantevideomaterial.h @@ -78,7 +78,7 @@ private: QVideoFrame::PixelFormat mFormat; QMap mBitsToTextureMap; - QVideoFrame mCurrentFrame, mNextFrame; + QVideoFrame mCurrentFrame; GLuint mCurrentTexture; bool mMappable; GLenum mMapError = GL_NO_ERROR; -- cgit v1.2.3