diff options
Diffstat (limited to 'src/plugins/imageformats/tiff')
-rw-r--r-- | src/plugins/imageformats/tiff/CMakeLists.txt | 100 | ||||
-rw-r--r-- | src/plugins/imageformats/tiff/qtiffhandler.cpp | 27 |
2 files changed, 125 insertions, 2 deletions
diff --git a/src/plugins/imageformats/tiff/CMakeLists.txt b/src/plugins/imageformats/tiff/CMakeLists.txt new file mode 100644 index 0000000..d38a8ec --- /dev/null +++ b/src/plugins/imageformats/tiff/CMakeLists.txt @@ -0,0 +1,100 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# Generated from tiff.pro. + +##################################################################### +## QTiffPlugin Plugin: +##################################################################### + +# special case begin +# Handle the conditional finding of either system zlib or qt zlib. +if(NOT QT_FEATURE_system_zlib) + find_package(Qt6 COMPONENTS ZlibPrivate) +elseif(NOT TARGET WrapZLIB::WrapZLIB) + qt_find_package(WrapZLIB PROVIDED_TARGETS WrapZLIB::WrapZLIB) +endif() +# special case end + +qt_internal_add_plugin(QTiffPlugin + OUTPUT_NAME qtiff + PLUGIN_TYPE imageformats + SOURCES + main.cpp + qtiffhandler.cpp qtiffhandler_p.h + LIBRARIES + Qt::Core + Qt::Gui +) + +#### Keys ignored in scope 1:.:.:tiff.pro:<TRUE>: +# OTHER_FILES = "tiff.json" +# QT_FOR_CONFIG = "imageformats-private" + +## Scopes: +##################################################################### + +qt_internal_extend_target(QTiffPlugin CONDITION QT_FEATURE_system_tiff + LIBRARIES + TIFF::TIFF +) + +qt_internal_extend_target(QTiffPlugin CONDITION NOT QT_FEATURE_system_tiff + SOURCES + ../../../3rdparty/libtiff/libtiff/tif_aux.c + ../../../3rdparty/libtiff/libtiff/tif_close.c + ../../../3rdparty/libtiff/libtiff/tif_codec.c + ../../../3rdparty/libtiff/libtiff/tif_color.c + ../../../3rdparty/libtiff/libtiff/tif_compress.c + ../../../3rdparty/libtiff/libtiff/tif_dir.c + ../../../3rdparty/libtiff/libtiff/tif_dirinfo.c + ../../../3rdparty/libtiff/libtiff/tif_dirread.c + ../../../3rdparty/libtiff/libtiff/tif_dirwrite.c + ../../../3rdparty/libtiff/libtiff/tif_dumpmode.c + ../../../3rdparty/libtiff/libtiff/tif_error.c + ../../../3rdparty/libtiff/libtiff/tif_extension.c + ../../../3rdparty/libtiff/libtiff/tif_fax3.c + ../../../3rdparty/libtiff/libtiff/tif_fax3sm.c + ../../../3rdparty/libtiff/libtiff/tif_flush.c + ../../../3rdparty/libtiff/libtiff/tif_getimage.c + ../../../3rdparty/libtiff/libtiff/tif_hash_set.c + ../../../3rdparty/libtiff/libtiff/tif_luv.c + ../../../3rdparty/libtiff/libtiff/tif_lzw.c + ../../../3rdparty/libtiff/libtiff/tif_next.c + ../../../3rdparty/libtiff/libtiff/tif_open.c + ../../../3rdparty/libtiff/libtiff/tif_packbits.c + ../../../3rdparty/libtiff/libtiff/tif_pixarlog.c + ../../../3rdparty/libtiff/libtiff/tif_predict.c + ../../../3rdparty/libtiff/libtiff/tif_print.c + ../../../3rdparty/libtiff/libtiff/tif_read.c + ../../../3rdparty/libtiff/libtiff/tif_strip.c + ../../../3rdparty/libtiff/libtiff/tif_swab.c + ../../../3rdparty/libtiff/libtiff/tif_thunder.c + ../../../3rdparty/libtiff/libtiff/tif_tile.c + ../../../3rdparty/libtiff/libtiff/tif_version.c + ../../../3rdparty/libtiff/libtiff/tif_warning.c + ../../../3rdparty/libtiff/libtiff/tif_write.c + ../../../3rdparty/libtiff/libtiff/tif_zip.c + INCLUDE_DIRECTORIES + ../../../3rdparty/libtiff/libtiff +) + +qt_internal_extend_target(QTiffPlugin CONDITION WIN32 AND NOT QT_FEATURE_system_tiff + SOURCES + ../../../3rdparty/libtiff/libtiff/tif_win32.c +) + +qt_internal_extend_target(QTiffPlugin CONDITION UNIX AND NOT QT_FEATURE_system_tiff + SOURCES + ../../../3rdparty/libtiff/libtiff/tif_unix.c +) + +qt_internal_extend_target(QTiffPlugin CONDITION QT_FEATURE_system_zlib AND NOT QT_FEATURE_system_tiff + LIBRARIES + WrapZLIB::WrapZLIB +) + +qt_internal_extend_target(QTiffPlugin CONDITION NOT QT_FEATURE_system_tiff AND NOT QT_FEATURE_system_zlib + LIBRARIES + Qt::ZlibPrivate +) diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp index ac8956c..f0dfe7f 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -43,6 +43,9 @@ #include <qdebug.h> #include <qimage.h> #include <qglobal.h> +#include <qbuffer.h> +#include <qfiledevice.h> + extern "C" { #include "tiffio.h" } @@ -90,13 +93,33 @@ toff_t qtiffSizeProc(thandle_t fd) return static_cast<QIODevice *>(fd)->size(); } -int qtiffMapProc(thandle_t /*fd*/, tdata_t* /*pbase*/, toff_t* /*psize*/) +int qtiffMapProc(thandle_t fd, void **base, toff_t *size) { + QIODevice *device = static_cast<QIODevice *>(fd); + + QFileDevice *file = qobject_cast<QFileDevice *>(device); + if (file) { + *base = file->map(0, file->size()); + if (*base != nullptr) { + *size = file->size(); + return 1; + } + } else { + QBuffer *buf = qobject_cast<QBuffer *>(device); + if (buf) { + *base = const_cast<char *>(buf->data().constData()); + *size = buf->size(); + return 1; + } + } return 0; } -void qtiffUnmapProc(thandle_t /*fd*/, tdata_t /*base*/, toff_t /*size*/) +void qtiffUnmapProc(thandle_t fd, void *base, toff_t /*size*/) { + QFileDevice *file = qobject_cast<QFileDevice *>(static_cast<QIODevice *>(fd)); + if (file && base) + file->unmap(static_cast<uchar *>(base)); } |