kde-frameworks/kimageformats: Fix AVIF performance

See also:
https://mail.kde.org/pipermail/distributions/2022-October/001309.html

Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2022-10-16 11:25:04 +02:00
parent f75addaf83
commit 4850296058
3 changed files with 110 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
From 350ce1b990460cb2178f369f22fe80803f5645f3 Mon Sep 17 00:00:00 2001
From: Fushan Wen <qydwhotmail@gmail.com>
Date: Sat, 15 Oct 2022 11:40:41 +0800
Subject: [PATCH] avif: return `false` in `canRead()` when `imageIndex >=
imageCount`
Otherwise when `cache: false` is set in AnimatedImage, QMovie will try
to read the image forever.
BUG: 460085
FIXED-IN: 5.100
---
src/imageformats/avif.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/imageformats/avif.cpp b/src/imageformats/avif.cpp
index 2865a4e..c4f7a0f 100644
--- a/src/imageformats/avif.cpp
+++ b/src/imageformats/avif.cpp
@@ -42,6 +42,11 @@ bool QAVIFHandler::canRead() const
if (m_parseState != ParseAvifError) {
setFormat("avif");
+
+ if (m_parseState == ParseAvifSuccess && m_decoder->imageIndex >= m_decoder->imageCount - 1) {
+ return false;
+ }
+
return true;
}
return false;
--
GitLab

View File

@@ -0,0 +1,32 @@
From 1190e53e9b69da6f9663ceb75c4813c5708b7cbd Mon Sep 17 00:00:00 2001
From: Fushan Wen <qydwhotmail@gmail.com>
Date: Sat, 15 Oct 2022 14:11:56 +0800
Subject: [PATCH] avif: always indicate endless loop
avif does not support loops but endless loop was the behavior before
460085 was fixed, so a workaround is added.
See also: https://github.com/AOMediaCodec/libavif/issues/347
CCBUG: 460085
---
src/imageformats/avif.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/imageformats/avif.cpp b/src/imageformats/avif.cpp
index c4f7a0f..24aec84 100644
--- a/src/imageformats/avif.cpp
+++ b/src/imageformats/avif.cpp
@@ -1024,7 +1024,8 @@ int QAVIFHandler::loopCount() const
return 0;
}
- return 1;
+ // Endless loop to work around https://github.com/AOMediaCodec/libavif/issues/347
+ return -1;
}
QPointF QAVIFHandler::CompatibleChromacity(qreal chrX, qreal chrY)
--
GitLab

View File

@@ -0,0 +1,44 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
ECM_QTHELP="false"
PVCUT=$(ver_cut 1-2)
QTMIN=5.15.5
VIRTUALX_REQUIRED="test"
inherit ecm frameworks.kde.org
DESCRIPTION="Framework providing additional format plugins for Qt's image I/O system"
LICENSE="LGPL-2+"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
IUSE="avif eps heif jpegxl openexr raw"
DEPEND="
>=dev-qt/qtgui-${QTMIN}:5
=kde-frameworks/karchive-${PVCUT}*:5
avif? ( >=media-libs/libavif-0.8.2:= )
eps? ( >=dev-qt/qtprintsupport-${QTMIN}:5 )
heif? ( >=media-libs/libheif-1.10.0:= )
jpegxl? ( media-libs/libjxl )
openexr? ( >=media-libs/openexr-3:= )
raw? ( media-libs/libraw:= )
"
RDEPEND="${DEPEND}"
DOCS=( src/imageformats/AUTHORS )
PATCHES=( "${FILESDIR}"/${P}-avif-perf-{1,2}.patch )
src_configure() {
local mycmakeargs=(
-DKIMAGEFORMATS_JXL=$(usex jpegxl)
$(cmake_use_find_package avif libavif)
$(cmake_use_find_package eps Qt5PrintSupport)
-DKIMAGEFORMATS_HEIF=$(usex heif)
$(cmake_use_find_package openexr OpenEXR)
$(cmake_use_find_package raw LibRaw)
)
ecm_src_configure
}