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() :
|
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)) {
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user