summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2023-10-02 17:11:55 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2024-02-02 09:57:00 -0700
commit7c313f18654d18fe253e1f1c55d6f4d92660888a (patch)
treedf4058c3c169c4f4bbd66fcfd24f045bad360e01 /tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
parentcec2e42052a04cd2481c20bd4be5de2ba5ccaec2 (diff)
QMovie non-anim: use QImageReader::imageCount but not nextImageDelay
Since 3f4d6279c4b0d04422efff478a5e2fb36259dbaa (khansen 2005) QMovie calls QImageReader::read() until QImageReader::canRead() returns false. That's apparently to support animated image formats in which the frame count is not known at the beginnning (i.e. not specified in the image format's metadata). But non-animated multi-frame formats are expected to return valid values from QImageReader::imageCount(); and those also tend to keep returning true from canRead() regardless of how many frames have been read (the interpretation of canRead() is "does the file have the expected format?" rather than "are we about to read too many frames?"). So, when a multi-frame image is abused as an animation, QMovie was able to keep reading the same frame repeatedly and pretend that the frame sequence goes on forever. It also tended to read frames as fast as they could be decoded, because nextImageDelay() is not usually provided, because multi-frame image formats don't specify a frame rate in their metadata. So now we change QMovie's behavior for image formats where QImageIOHandler::supportsOption(Animation) returns false: trust imageCount(), but not do not trust nextImageDelay(). But to actually jump to the next frame in this case, we also need to call QImageReader::jumpToNextImage(). Altogether, this makes QMovie support "flipbook" animation for multi-frame image formats, such as tiff and pdf. Added "read frame x of c" logging in qt.gui.imageio category. For testing, we use a pre-existing multi-frame Obj_N2_Internal_Mem.ico file, to avoid depending on the tiff plugin. [ChangeLog][QtGui][QMovie] QMovie now handles non-animated multi-frame image formats (such as tiff): QImageIOHandler::imageCount() is observed, and the default frame rate is 1 FPS. Pick-to: 6.5 6.6 6.7 Fixes: QTBUG-117429 Change-Id: I6dad2a684e12c78a68288402e223a59427bf649e Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Diffstat (limited to 'tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico')
-rw-r--r--tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.icobin0 -> 25214 bytes
1 files changed, 0 insertions, 0 deletions
diff --git a/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico b/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
new file mode 100644
index 0000000000..8da119efdd
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
Binary files differ