Try to reduce CPU overhead of animated images a bit

This commit is contained in:
Nicolas Werner 2021-12-30 06:10:19 +01:00
parent 459edcd71a
commit c5f4865ee6
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
1 changed files with 8 additions and 4 deletions

View File

@ -91,6 +91,10 @@ MxcAnimatedImage::startDownload()
"Playing movie with size: {}, {}", buffer.bytesAvailable(), buffer.isOpen());
movie.setFormat(mimeType);
movie.setDevice(&buffer);
movie.setScaledSize(this->size().toSize());
if (buffer.bytesAvailable() <
4LL * 1024 * 1024 * 1024) // cache images smaller than 4MB in RAM
movie.setCacheMode(QMovie::CacheAll);
if (play_)
movie.start();
else
@ -158,17 +162,17 @@ MxcAnimatedImage::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeD
// n->setTexture(nullptr);
auto img = movie.currentImage();
n->setSourceRect(img.rect());
if (!img.isNull())
n->setTexture(window()->createTextureFromImage(img));
n->setTexture(window()->createTextureFromImage(std::move(img)));
else {
delete n;
return nullptr;
}
n->setSourceRect(img.rect());
n->setRect(QRect(0, 0, width(), height()));
n->setFiltering(QSGTexture::Linear);
n->setMipmapFiltering(QSGTexture::Linear);
n->setFiltering(QSGTexture::Nearest);
n->setMipmapFiltering(QSGTexture::None);
return n;
}