videonode: imx6: clear texture cache when the format changes

The old textures won't match anyways. So there is no need to keep them.

Change-Id: Id3482333d10cf022d04076ec0f5c7df475c522ae
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
Michael Olbrich
2014-02-26 19:00:05 +01:00
committed by The Qt Project
parent 19b1dff5b2
commit 0e280e78e2
2 changed files with 19 additions and 0 deletions

View File

@@ -56,6 +56,9 @@
QSGVivanteVideoMaterial::QSGVivanteVideoMaterial() : QSGVivanteVideoMaterial::QSGVivanteVideoMaterial() :
mOpacity(1.0), mOpacity(1.0),
mWidth(0),
mHeight(0),
mFormat(QVideoFrame::Format_Invalid),
mCurrentTexture(0) mCurrentTexture(0)
{ {
#ifdef QT_VIVANTE_VIDEO_DEBUG #ifdef QT_VIVANTE_VIDEO_DEBUG
@@ -147,6 +150,18 @@ GLuint QSGVivanteVideoMaterial::vivanteMapping(QVideoFrame vF)
return 0; return 0;
} }
if (mWidth != vF.width() || mHeight != vF.height() || mFormat != vF.pixelFormat()) {
mWidth = vF.width();
mHeight = vF.height();
mFormat = vF.pixelFormat();
for (GLuint id : mBitsToTextureMap.values()) {
#ifdef QT_VIVANTE_VIDEO_DEBUG
qDebug() << "delete texture: " << id;
#endif
glDeleteTextures(1, &id);
}
mBitsToTextureMap.clear();
}
if (vF.map(QAbstractVideoBuffer::ReadOnly)) { if (vF.map(QAbstractVideoBuffer::ReadOnly)) {

View File

@@ -70,6 +70,10 @@ public:
private: private:
qreal mOpacity; qreal mOpacity;
int mWidth;
int mHeight;
QVideoFrame::PixelFormat mFormat;
QMap<const uchar*, GLuint> mBitsToTextureMap; QMap<const uchar*, GLuint> mBitsToTextureMap;
QVideoFrame mCurrentFrame, mNextFrame; QVideoFrame mCurrentFrame, mNextFrame;
GLuint mCurrentTexture; GLuint mCurrentTexture;