diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/plugins/imageformats/icns/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/jp2/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/macheif/main.cpp | 8 | ||||
-rw-r--r-- | src/plugins/imageformats/macjp2/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/mng/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/tga/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/tiff/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/tiff/qtiffhandler.cpp | 11 | ||||
-rw-r--r-- | src/plugins/imageformats/wbmp/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/imageformats/webp/main.cpp | 6 | ||||
-rw-r--r-- | tests/auto/tiff/tst_qtiff.cpp | 29 | ||||
-rw-r--r-- | tests/shared/images/tiff.qrc | 4 | ||||
-rw-r--r-- | tests/shared/images/tiff/big_16bpc.tiff | bin | 0 -> 21548 bytes | |||
-rw-r--r-- | tests/shared/images/tiff/big_grayscale.tiff | bin | 0 -> 4581 bytes | |||
-rw-r--r-- | tests/shared/images/tiff/big_rgb.tiff | bin | 0 -> 12748 bytes | |||
-rw-r--r-- | tests/shared/images/tiff/big_rgb_bigendian.tiff | bin | 0 -> 12748 bytes |
17 files changed, 70 insertions, 32 deletions
diff --git a/.qmake.conf b/.qmake.conf index 35dba54..b3c7403 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,4 +2,4 @@ load(qt_build_config) DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST -MODULE_VERSION = 5.14.2 +MODULE_VERSION = 5.15.0 diff --git a/src/plugins/imageformats/icns/main.cpp b/src/plugins/imageformats/icns/main.cpp index 70dd034..6a5af47 100644 --- a/src/plugins/imageformats/icns/main.cpp +++ b/src/plugins/imageformats/icns/main.cpp @@ -60,12 +60,12 @@ QImageIOPlugin::Capabilities QICNSPlugin::capabilities(QIODevice *device, const { if (format == QByteArrayLiteral("icns")) return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device || !device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QICNSHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/jp2/main.cpp b/src/plugins/imageformats/jp2/main.cpp index a1f1281..22368a5 100644 --- a/src/plugins/imageformats/jp2/main.cpp +++ b/src/plugins/imageformats/jp2/main.cpp @@ -64,12 +64,12 @@ QImageIOPlugin::Capabilities QJp2Plugin::capabilities(QIODevice *device, const Q { if (format == "jp2" || format == "j2k") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QJp2Handler::canRead(device, 0)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/macheif/main.cpp b/src/plugins/imageformats/macheif/main.cpp index 12d9a4a..785ad1f 100644 --- a/src/plugins/imageformats/macheif/main.cpp +++ b/src/plugins/imageformats/macheif/main.cpp @@ -58,16 +58,16 @@ QImageIOPlugin::Capabilities QMacHeifPlugin::capabilities(QIODevice *device, con { static const Capabilities sysCaps = QIIOFHelpers::systemCapabilities(QStringLiteral("public.heic")); + Capabilities cap; if (!sysCaps) - return 0; + return cap; if (format == "heic" || format == "heif") return sysCaps; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (sysCaps.testFlag(CanRead) && device->isReadable() && QMacHeifHandler::canRead(device)) cap |= CanRead; if (sysCaps.testFlag(CanWrite) && device->isWritable()) diff --git a/src/plugins/imageformats/macjp2/main.cpp b/src/plugins/imageformats/macjp2/main.cpp index 08b497e..ea0cf44 100644 --- a/src/plugins/imageformats/macjp2/main.cpp +++ b/src/plugins/imageformats/macjp2/main.cpp @@ -57,12 +57,12 @@ QImageIOPlugin::Capabilities QMacJp2Plugin::capabilities(QIODevice *device, cons { if (format == "jp2") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QMacJp2Handler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/mng/main.cpp b/src/plugins/imageformats/mng/main.cpp index 5e5b0a3..be82312 100644 --- a/src/plugins/imageformats/mng/main.cpp +++ b/src/plugins/imageformats/mng/main.cpp @@ -66,12 +66,12 @@ QImageIOPlugin::Capabilities QMngPlugin::capabilities(QIODevice *device, const Q { if (format == "mng") return Capabilities(CanRead); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QMngHandler::canRead(device)) cap |= CanRead; return cap; diff --git a/src/plugins/imageformats/tga/main.cpp b/src/plugins/imageformats/tga/main.cpp index 22fd3be..9177aa8 100644 --- a/src/plugins/imageformats/tga/main.cpp +++ b/src/plugins/imageformats/tga/main.cpp @@ -64,12 +64,12 @@ QImageIOPlugin::Capabilities QTgaPlugin::capabilities(QIODevice *device, const Q { if (format == "tga") return Capabilities(CanRead); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QTgaHandler::canRead(device)) cap |= CanRead; return cap; diff --git a/src/plugins/imageformats/tiff/main.cpp b/src/plugins/imageformats/tiff/main.cpp index 2c34097..8882f35 100644 --- a/src/plugins/imageformats/tiff/main.cpp +++ b/src/plugins/imageformats/tiff/main.cpp @@ -60,12 +60,12 @@ QImageIOPlugin::Capabilities QTiffPlugin::capabilities(QIODevice *device, const { if (format == "tiff" || format == "tif") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QTiffHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp index 65873e1..ad4e393 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -205,9 +205,14 @@ bool QTiffHandlerPrivate::canRead(QIODevice *device) // current implementation uses TIFFClientOpen which needs to be // able to seek, so sequential devices are not supported - QByteArray header = device->peek(4); - return header == QByteArray::fromRawData("\x49\x49\x2A\x00", 4) - || header == QByteArray::fromRawData("\x4D\x4D\x00\x2A", 4); + char h[4]; + if (device->peek(h, 4) != 4) + return false; + if ((h[0] == 0x49 && h[1] == 0x49) && (h[2] == 0x2a || h[2] == 0x2b) && h[3] == 0) + return true; // Little endian, classic or bigtiff + if ((h[0] == 0x4d && h[1] == 0x4d) && h[2] == 0 && (h[3] == 0x2a || h[3] == 0x2b)) + return true; // Big endian, classic or bigtiff + return false; } bool QTiffHandlerPrivate::openForRead(QIODevice *device) diff --git a/src/plugins/imageformats/wbmp/main.cpp b/src/plugins/imageformats/wbmp/main.cpp index 45da0ca..5e8206e 100644 --- a/src/plugins/imageformats/wbmp/main.cpp +++ b/src/plugins/imageformats/wbmp/main.cpp @@ -64,13 +64,13 @@ QImageIOPlugin::Capabilities QWbmpPlugin::capabilities(QIODevice *device, const if (format == "wbmp") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QWbmpHandler::canRead(device)) cap |= CanRead; diff --git a/src/plugins/imageformats/webp/main.cpp b/src/plugins/imageformats/webp/main.cpp index 7e9405b..02a3ed4 100644 --- a/src/plugins/imageformats/webp/main.cpp +++ b/src/plugins/imageformats/webp/main.cpp @@ -64,12 +64,12 @@ QWebpPlugin::Capabilities QWebpPlugin::capabilities(QIODevice *device, const QBy if (format == "webp") return Capabilities(CanRead | CanWrite); + Capabilities cap; if (!format.isEmpty()) - return 0; + return cap; if (!device->isOpen()) - return 0; + return cap; - Capabilities cap; if (device->isReadable() && QWebpHandler::canRead(device)) cap |= CanRead; if (device->isWritable()) diff --git a/tests/auto/tiff/tst_qtiff.cpp b/tests/auto/tiff/tst_qtiff.cpp index be02460..e411f66 100644 --- a/tests/auto/tiff/tst_qtiff.cpp +++ b/tests/auto/tiff/tst_qtiff.cpp @@ -90,6 +90,9 @@ private slots: void colorSpace_data(); void colorSpace(); + void bigtiff_data(); + void bigtiff(); + private: QString prefix; }; @@ -173,6 +176,10 @@ void tst_qtiff::readImage_data() QTest::newRow("tiled_oddsize_mono") << QString("tiled_oddsize_mono.tiff") << QSize(59, 71); QTest::newRow("16bpc") << QString("16bpc.tiff") << QSize(64, 46); QTest::newRow("gray16") << QString("gray16.tiff") << QSize(64, 46); + QTest::newRow("big_rgb") << QString("big_rgb.tiff") << QSize(64, 64); + QTest::newRow("big_rgb_bigendian") << QString("big_rgb_bigendian.tiff") << QSize(64, 64); + QTest::newRow("big_grayscale") << QString("big_grayscale.tiff") << QSize(64, 64); + QTest::newRow("big_16bpc") << QString("big_16bpc.tiff") << QSize(64, 46); } void tst_qtiff::readImage() @@ -665,5 +672,27 @@ void tst_qtiff::colorSpace() QCOMPARE(image2, image); } +void tst_qtiff::bigtiff_data() +{ + QTest::addColumn<QString>("expectedFile"); + QTest::addColumn<QString>("bigtiffFile"); + + QTest::newRow("big_rgb") << QString("original_rgb.tiff") << QString("big_rgb.tiff"); + QTest::newRow("big_rgb_bigendian") << QString("original_rgb.tiff") << QString("big_rgb_bigendian.tiff"); + QTest::newRow("big_grayscale") << QString("original_grayscale.tiff") << QString("big_grayscale.tiff"); + QTest::newRow("big_16bpc") << QString("16bpc.tiff") << QString("big_16bpc.tiff"); +} + +void tst_qtiff::bigtiff() +{ + QFETCH(QString, expectedFile); + QFETCH(QString, bigtiffFile); + + QImage expectedImage(prefix + expectedFile); + QImage bigtiffImage(prefix + bigtiffFile); + QVERIFY(!bigtiffImage.isNull()); + QCOMPARE(expectedImage, bigtiffImage); +} + QTEST_MAIN(tst_qtiff) #include "tst_qtiff.moc" diff --git a/tests/shared/images/tiff.qrc b/tests/shared/images/tiff.qrc index e1ce9da..2c876af 100644 --- a/tests/shared/images/tiff.qrc +++ b/tests/shared/images/tiff.qrc @@ -52,5 +52,9 @@ <file>tiff/oddsize_mono.tiff</file> <file>tiff/tiled_rgb.tiff</file> <file>tiff/gray16.tiff</file> + <file>tiff/big_rgb.tiff</file> + <file>tiff/big_16bpc.tiff</file> + <file>tiff/big_grayscale.tiff</file> + <file>tiff/big_rgb_bigendian.tiff</file> </qresource> </RCC> diff --git a/tests/shared/images/tiff/big_16bpc.tiff b/tests/shared/images/tiff/big_16bpc.tiff Binary files differnew file mode 100644 index 0000000..09f949c --- /dev/null +++ b/tests/shared/images/tiff/big_16bpc.tiff diff --git a/tests/shared/images/tiff/big_grayscale.tiff b/tests/shared/images/tiff/big_grayscale.tiff Binary files differnew file mode 100644 index 0000000..244f8fc --- /dev/null +++ b/tests/shared/images/tiff/big_grayscale.tiff diff --git a/tests/shared/images/tiff/big_rgb.tiff b/tests/shared/images/tiff/big_rgb.tiff Binary files differnew file mode 100644 index 0000000..18eecf2 --- /dev/null +++ b/tests/shared/images/tiff/big_rgb.tiff diff --git a/tests/shared/images/tiff/big_rgb_bigendian.tiff b/tests/shared/images/tiff/big_rgb_bigendian.tiff Binary files differnew file mode 100644 index 0000000..0d1a11f --- /dev/null +++ b/tests/shared/images/tiff/big_rgb_bigendian.tiff |