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:
committed by
The Qt Project
parent
19b1dff5b2
commit
0e280e78e2
@@ -56,6 +56,9 @@
|
||||
|
||||
QSGVivanteVideoMaterial::QSGVivanteVideoMaterial() :
|
||||
mOpacity(1.0),
|
||||
mWidth(0),
|
||||
mHeight(0),
|
||||
mFormat(QVideoFrame::Format_Invalid),
|
||||
mCurrentTexture(0)
|
||||
{
|
||||
#ifdef QT_VIVANTE_VIDEO_DEBUG
|
||||
@@ -147,6 +150,18 @@ GLuint QSGVivanteVideoMaterial::vivanteMapping(QVideoFrame vF)
|
||||
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)) {
|
||||
|
||||
|
||||
@@ -70,6 +70,10 @@ public:
|
||||
private:
|
||||
qreal mOpacity;
|
||||
|
||||
int mWidth;
|
||||
int mHeight;
|
||||
QVideoFrame::PixelFormat mFormat;
|
||||
|
||||
QMap<const uchar*, GLuint> mBitsToTextureMap;
|
||||
QVideoFrame mCurrentFrame, mNextFrame;
|
||||
GLuint mCurrentTexture;
|
||||
|
||||
Reference in New Issue
Block a user