summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--src/plugins/imageformats/icns/main.cpp6
-rw-r--r--src/plugins/imageformats/jp2/main.cpp6
-rw-r--r--src/plugins/imageformats/macheif/main.cpp8
-rw-r--r--src/plugins/imageformats/macjp2/main.cpp6
-rw-r--r--src/plugins/imageformats/mng/main.cpp6
-rw-r--r--src/plugins/imageformats/tga/main.cpp6
-rw-r--r--src/plugins/imageformats/tiff/main.cpp6
-rw-r--r--src/plugins/imageformats/tiff/qtiffhandler.cpp11
-rw-r--r--src/plugins/imageformats/wbmp/main.cpp6
-rw-r--r--src/plugins/imageformats/webp/main.cpp6
-rw-r--r--tests/auto/tiff/tst_qtiff.cpp29
-rw-r--r--tests/shared/images/tiff.qrc4
-rw-r--r--tests/shared/images/tiff/big_16bpc.tiffbin0 -> 21548 bytes
-rw-r--r--tests/shared/images/tiff/big_grayscale.tiffbin0 -> 4581 bytes
-rw-r--r--tests/shared/images/tiff/big_rgb.tiffbin0 -> 12748 bytes
-rw-r--r--tests/shared/images/tiff/big_rgb_bigendian.tiffbin0 -> 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
new file mode 100644
index 0000000..09f949c
--- /dev/null
+++ b/tests/shared/images/tiff/big_16bpc.tiff
Binary files differ
diff --git a/tests/shared/images/tiff/big_grayscale.tiff b/tests/shared/images/tiff/big_grayscale.tiff
new file mode 100644
index 0000000..244f8fc
--- /dev/null
+++ b/tests/shared/images/tiff/big_grayscale.tiff
Binary files differ
diff --git a/tests/shared/images/tiff/big_rgb.tiff b/tests/shared/images/tiff/big_rgb.tiff
new file mode 100644
index 0000000..18eecf2
--- /dev/null
+++ b/tests/shared/images/tiff/big_rgb.tiff
Binary files differ
diff --git a/tests/shared/images/tiff/big_rgb_bigendian.tiff b/tests/shared/images/tiff/big_rgb_bigendian.tiff
new file mode 100644
index 0000000..0d1a11f
--- /dev/null
+++ b/tests/shared/images/tiff/big_rgb_bigendian.tiff
Binary files differ