mirror of
https://github.com/zebrajr/opencv.git
synced 2025-12-06 00:19:46 +01:00
Merge pull request #27806 from Kumataro:fix27784
libtiff upgrade to version 4.7.1 #27806 close https://github.com/opencv/opencv/issues/27784 ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [x] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake
This commit is contained in:
parent
64bb4ad035
commit
744d5ecd14
4
3rdparty/libtiff/CMakeLists.txt
vendored
4
3rdparty/libtiff/CMakeLists.txt
vendored
|
|
@ -359,7 +359,7 @@ endif()
|
||||||
|
|
||||||
set(LIBTIFF_MAJOR_VERSION "4")
|
set(LIBTIFF_MAJOR_VERSION "4")
|
||||||
set(LIBTIFF_MINOR_VERSION "7")
|
set(LIBTIFF_MINOR_VERSION "7")
|
||||||
set(LIBTIFF_MICRO_VERSION "0")
|
set(LIBTIFF_MICRO_VERSION "1")
|
||||||
set(LIBTIFF_VERSION "${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}")
|
set(LIBTIFF_VERSION "${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}")
|
||||||
file(READ "RELEASE-DATE" LIBTIFF_RELEASE_DATE content)
|
file(READ "RELEASE-DATE" LIBTIFF_RELEASE_DATE content)
|
||||||
|
|
||||||
|
|
@ -480,4 +480,4 @@ if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${TIFF_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev OPTIONAL)
|
ocv_install_target(${TIFF_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev OPTIONAL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ocv_install_3rdparty_licenses(libtiff COPYRIGHT)
|
ocv_install_3rdparty_licenses(libtiff LICENSE.md)
|
||||||
|
|
|
||||||
21
3rdparty/libtiff/COPYRIGHT
vendored
21
3rdparty/libtiff/COPYRIGHT
vendored
|
|
@ -1,21 +0,0 @@
|
||||||
Copyright (c) 1988-1997 Sam Leffler
|
|
||||||
Copyright (c) 1991-1997 Silicon Graphics, Inc.
|
|
||||||
|
|
||||||
Permission to use, copy, modify, distribute, and sell this software and
|
|
||||||
its documentation for any purpose is hereby granted without fee, provided
|
|
||||||
that (i) the above copyright notices and this permission notice appear in
|
|
||||||
all copies of the software and related documentation, and (ii) the names of
|
|
||||||
Sam Leffler and Silicon Graphics may not be used in any advertising or
|
|
||||||
publicity relating to the software without the specific, prior written
|
|
||||||
permission of Sam Leffler and Silicon Graphics.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
|
||||||
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
|
|
||||||
ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
|
||||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
||||||
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
|
||||||
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
|
||||||
OF THIS SOFTWARE.
|
|
||||||
1319
3rdparty/libtiff/ChangeLog
vendored
1319
3rdparty/libtiff/ChangeLog
vendored
File diff suppressed because it is too large
Load Diff
49
3rdparty/libtiff/LICENSE.md
vendored
Normal file
49
3rdparty/libtiff/LICENSE.md
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# LibTIFF license
|
||||||
|
|
||||||
|
Copyright © 1988-1997 Sam Leffler\
|
||||||
|
Copyright © 1991-1997 Silicon Graphics, Inc.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this software and
|
||||||
|
its documentation for any purpose is hereby granted without fee, provided
|
||||||
|
that (i) the above copyright notices and this permission notice appear in
|
||||||
|
all copies of the software and related documentation, and (ii) the names of
|
||||||
|
Sam Leffler and Silicon Graphics may not be used in any advertising or
|
||||||
|
publicity relating to the software without the specific, prior written
|
||||||
|
permission of Sam Leffler and Silicon Graphics.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||||
|
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
|
||||||
|
ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||||
|
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||||
|
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
# Lempel-Ziv & Welch Compression (tif_lzw.c) license
|
||||||
|
The code of tif_lzw.c is derived from the compress program whose code is
|
||||||
|
derived from software contributed to Berkeley by James A. Woods,
|
||||||
|
derived from original work by Spencer Thomas and Joseph Orost.
|
||||||
|
|
||||||
|
The original Berkeley copyright notice appears below in its entirety:
|
||||||
|
|
||||||
|
Copyright (c) 1985, 1986 The Regents of the University of California.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This code is derived from software contributed to Berkeley by
|
||||||
|
James A. Woods, derived from original work by Spencer Thomas
|
||||||
|
and Joseph Orost.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms are permitted
|
||||||
|
provided that the above copyright notice and this paragraph are
|
||||||
|
duplicated in all such forms and that any documentation,
|
||||||
|
advertising materials, and other materials related to such
|
||||||
|
distribution and use acknowledge that the software was developed
|
||||||
|
by the University of California, Berkeley. The name of the
|
||||||
|
University may not be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
2
3rdparty/libtiff/RELEASE-DATE
vendored
2
3rdparty/libtiff/RELEASE-DATE
vendored
|
|
@ -1 +1 @@
|
||||||
20240911
|
20250911
|
||||||
|
|
|
||||||
5
3rdparty/libtiff/tif_aux.c
vendored
5
3rdparty/libtiff/tif_aux.c
vendored
|
|
@ -131,7 +131,10 @@ static int TIFFDefaultTransferFunction(TIFF *tif, TIFFDirectory *td)
|
||||||
tmsize_t i, n, nbytes;
|
tmsize_t i, n, nbytes;
|
||||||
|
|
||||||
tf[0] = tf[1] = tf[2] = 0;
|
tf[0] = tf[1] = tf[2] = 0;
|
||||||
if (td->td_bitspersample >= sizeof(tmsize_t) * 8 - 2)
|
// Do not try to generate a default TransferFunction beyond 24 bits.
|
||||||
|
// This otherwise leads to insane amounts, resulting in denial of service
|
||||||
|
// See https://github.com/OSGeo/gdal/issues/10875
|
||||||
|
if (td->td_bitspersample > 24)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
n = ((tmsize_t)1) << td->td_bitspersample;
|
n = ((tmsize_t)1) << td->td_bitspersample;
|
||||||
|
|
|
||||||
1
3rdparty/libtiff/tif_close.c
vendored
1
3rdparty/libtiff/tif_close.c
vendored
|
|
@ -48,7 +48,6 @@ void TIFFCleanup(TIFF *tif)
|
||||||
*/
|
*/
|
||||||
if (tif->tif_mode != O_RDONLY)
|
if (tif->tif_mode != O_RDONLY)
|
||||||
TIFFFlush(tif);
|
TIFFFlush(tif);
|
||||||
(*tif->tif_cleanup)(tif);
|
|
||||||
TIFFFreeDirectory(tif);
|
TIFFFreeDirectory(tif);
|
||||||
|
|
||||||
_TIFFCleanupIFDOffsetAndNumberMaps(tif);
|
_TIFFCleanupIFDOffsetAndNumberMaps(tif);
|
||||||
|
|
|
||||||
10
3rdparty/libtiff/tif_config.h.cmake.in
vendored
10
3rdparty/libtiff/tif_config.h.cmake.in
vendored
|
|
@ -80,11 +80,17 @@
|
||||||
#cmakedefine HAVE_UNISTD_H 1
|
#cmakedefine HAVE_UNISTD_H 1
|
||||||
|
|
||||||
/* 8/12 bit libjpeg dual mode enabled */
|
/* 8/12 bit libjpeg dual mode enabled */
|
||||||
#cmakedefine JPEG_DUAL_MODE_8_12 1 1
|
#cmakedefine JPEG_DUAL_MODE_8_12 1
|
||||||
|
|
||||||
|
/* 8/12 bit dual mode JPEG built into libjpeg-turbo 3.0+ */
|
||||||
|
#cmakedefine HAVE_JPEGTURBO_DUAL_MODE_8_12 1
|
||||||
|
|
||||||
/* Support LERC compression */
|
/* Support LERC compression */
|
||||||
#cmakedefine LERC_SUPPORT 1
|
#cmakedefine LERC_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 when building a static libtiff with LERC enabled. */
|
||||||
|
#cmakedefine LERC_STATIC
|
||||||
|
|
||||||
/* 12bit libjpeg primary include file with path */
|
/* 12bit libjpeg primary include file with path */
|
||||||
#define LIBJPEG_12_PATH "@LIBJPEG_12_PATH@"
|
#define LIBJPEG_12_PATH "@LIBJPEG_12_PATH@"
|
||||||
|
|
||||||
|
|
@ -133,7 +139,7 @@
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifndef WORDS_BIGENDIAN
|
# ifndef WORDS_BIGENDIAN
|
||||||
# undef WORDS_BIGENDIAN
|
# cmakedefine WORDS_BIGENDIAN 1
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
55
3rdparty/libtiff/tif_dir.c
vendored
55
3rdparty/libtiff/tif_dir.c
vendored
|
|
@ -723,10 +723,9 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
{
|
{
|
||||||
TIFFTagValue *new_customValues;
|
TIFFTagValue *new_customValues;
|
||||||
|
|
||||||
td->td_customValueCount++;
|
|
||||||
new_customValues = (TIFFTagValue *)_TIFFreallocExt(
|
new_customValues = (TIFFTagValue *)_TIFFreallocExt(
|
||||||
tif, td->td_customValues,
|
tif, td->td_customValues,
|
||||||
sizeof(TIFFTagValue) * td->td_customValueCount);
|
sizeof(TIFFTagValue) * (td->td_customValueCount + 1));
|
||||||
if (!new_customValues)
|
if (!new_customValues)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module,
|
TIFFErrorExtR(tif, module,
|
||||||
|
|
@ -737,6 +736,7 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
td->td_customValueCount++;
|
||||||
td->td_customValues = new_customValues;
|
td->td_customValues = new_customValues;
|
||||||
|
|
||||||
tv = td->td_customValues + (td->td_customValueCount - 1);
|
tv = td->td_customValues + (td->td_customValueCount - 1);
|
||||||
|
|
@ -748,8 +748,8 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
/*
|
/*
|
||||||
* Set custom value ... save a copy of the custom tag value.
|
* Set custom value ... save a copy of the custom tag value.
|
||||||
*/
|
*/
|
||||||
/*--: Rational2Double: For Rationals evaluate "set_field_type" to
|
/*--: Rational2Double: For Rationals evaluate "set_get_field_type"
|
||||||
* determine internal storage size. */
|
* to determine internal storage size. */
|
||||||
tv_size = TIFFFieldSetGetSize(fip);
|
tv_size = TIFFFieldSetGetSize(fip);
|
||||||
if (tv_size == 0)
|
if (tv_size == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -806,14 +806,13 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
|
|
||||||
if (tv->count == 0)
|
if (tv->count == 0)
|
||||||
{
|
{
|
||||||
status = 0;
|
TIFFWarningExtR(tif, module,
|
||||||
TIFFErrorExtR(tif, module,
|
"%s: Null count for \"%s\" (type "
|
||||||
"%s: Null count for \"%s\" (type "
|
"%d, writecount %d, passcount %d)",
|
||||||
"%d, writecount %d, passcount %d)",
|
tif->tif_name, fip->field_name,
|
||||||
tif->tif_name, fip->field_name,
|
fip->field_type, fip->field_writecount,
|
||||||
fip->field_type, fip->field_writecount,
|
fip->field_passcount);
|
||||||
fip->field_passcount);
|
break;
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tv->value = _TIFFCheckMalloc(tif, tv->count, tv_size,
|
tv->value = _TIFFCheckMalloc(tif, tv->count, tv_size,
|
||||||
|
|
@ -843,7 +842,7 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
fip->field_writecount == TIFF_SPP || tv->count > 1)
|
fip->field_writecount == TIFF_SPP || tv->count > 1)
|
||||||
{
|
{
|
||||||
/*--: Rational2Double: For Rationals tv_size is set above to
|
/*--: Rational2Double: For Rationals tv_size is set above to
|
||||||
* 4 or 8 according to fip->set_field_type! */
|
* 4 or 8 according to fip->set_get_field_type! */
|
||||||
_TIFFmemcpy(tv->value, va_arg(ap, void *),
|
_TIFFmemcpy(tv->value, va_arg(ap, void *),
|
||||||
tv->count * tv_size);
|
tv->count * tv_size);
|
||||||
/* Test here for too big values for LONG8, SLONG8 in
|
/* Test here for too big values for LONG8, SLONG8 in
|
||||||
|
|
@ -978,7 +977,8 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
case TIFF_RATIONAL:
|
case TIFF_RATIONAL:
|
||||||
case TIFF_SRATIONAL:
|
case TIFF_SRATIONAL:
|
||||||
/*-- Rational2Double: For Rationals tv_size is set
|
/*-- Rational2Double: For Rationals tv_size is set
|
||||||
* above to 4 or 8 according to fip->set_field_type!
|
* above to 4 or 8 according to
|
||||||
|
* fip->set_get_field_type!
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
if (tv_size == 8)
|
if (tv_size == 8)
|
||||||
|
|
@ -996,11 +996,11 @@ static int _TIFFVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
* default. */
|
* default. */
|
||||||
if (tv_size != 4)
|
if (tv_size != 4)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(
|
TIFFErrorExtR(tif, module,
|
||||||
tif, module,
|
"Rational2Double: "
|
||||||
"Rational2Double: .set_field_type "
|
".set_get_field_type "
|
||||||
"in not 4 but %d",
|
"in not 4 but %d",
|
||||||
tv_size);
|
tv_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1527,7 +1527,7 @@ static int _TIFFVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
case TIFF_SRATIONAL:
|
case TIFF_SRATIONAL:
|
||||||
{
|
{
|
||||||
/*-- Rational2Double: For Rationals evaluate
|
/*-- Rational2Double: For Rationals evaluate
|
||||||
* "set_field_type" to determine internal
|
* "set_get_field_type" to determine internal
|
||||||
* storage size and return value size. */
|
* storage size and return value size. */
|
||||||
int tv_size = TIFFFieldSetGetSize(fip);
|
int tv_size = TIFFFieldSetGetSize(fip);
|
||||||
if (tv_size == 8)
|
if (tv_size == 8)
|
||||||
|
|
@ -1545,11 +1545,11 @@ static int _TIFFVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
* default. */
|
* default. */
|
||||||
if (tv_size != 4)
|
if (tv_size != 4)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(
|
TIFFErrorExtR(tif, "_TIFFVGetField",
|
||||||
tif, "_TIFFVGetField",
|
"Rational2Double: "
|
||||||
"Rational2Double: .set_field_type "
|
".set_get_field_type "
|
||||||
"in not 4 but %d",
|
"in not 4 but %d",
|
||||||
tv_size);
|
tv_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1621,6 +1621,7 @@ void TIFFFreeDirectory(TIFF *tif)
|
||||||
TIFFDirectory *td = &tif->tif_dir;
|
TIFFDirectory *td = &tif->tif_dir;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
(*tif->tif_cleanup)(tif);
|
||||||
_TIFFmemset(td->td_fieldsset, 0, sizeof(td->td_fieldsset));
|
_TIFFmemset(td->td_fieldsset, 0, sizeof(td->td_fieldsset));
|
||||||
CleanupField(td_sminsamplevalue);
|
CleanupField(td_sminsamplevalue);
|
||||||
CleanupField(td_smaxsamplevalue);
|
CleanupField(td_smaxsamplevalue);
|
||||||
|
|
@ -2207,7 +2208,7 @@ int TIFFSetSubDirectory(TIFF *tif, uint64_t diroff)
|
||||||
_TIFFCleanupIFDOffsetAndNumberMaps(tif);
|
_TIFFCleanupIFDOffsetAndNumberMaps(tif);
|
||||||
tif->tif_curdir = 0; /* first directory of new chain */
|
tif->tif_curdir = 0; /* first directory of new chain */
|
||||||
/* add this offset to new IFD list */
|
/* add this offset to new IFD list */
|
||||||
_TIFFCheckDirNumberAndOffset(tif, tif->tif_curdir, diroff);
|
retval = _TIFFCheckDirNumberAndOffset(tif, tif->tif_curdir, diroff);
|
||||||
}
|
}
|
||||||
/* To be able to return from SubIFD or custom-IFD to main-IFD */
|
/* To be able to return from SubIFD or custom-IFD to main-IFD */
|
||||||
tif->tif_setdirectory_force_absolute = TRUE;
|
tif->tif_setdirectory_force_absolute = TRUE;
|
||||||
|
|
@ -2336,12 +2337,12 @@ int TIFFUnlinkDirectory(TIFF *tif, tdir_t dirn)
|
||||||
* means that the caller can only append to the directory
|
* means that the caller can only append to the directory
|
||||||
* chain.
|
* chain.
|
||||||
*/
|
*/
|
||||||
(*tif->tif_cleanup)(tif);
|
|
||||||
if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
|
if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
|
||||||
{
|
{
|
||||||
_TIFFfreeExt(tif, tif->tif_rawdata);
|
_TIFFfreeExt(tif, tif->tif_rawdata);
|
||||||
tif->tif_rawdata = NULL;
|
tif->tif_rawdata = NULL;
|
||||||
tif->tif_rawcc = 0;
|
tif->tif_rawcc = 0;
|
||||||
|
tif->tif_rawcp = NULL;
|
||||||
tif->tif_rawdataoff = 0;
|
tif->tif_rawdataoff = 0;
|
||||||
tif->tif_rawdataloaded = 0;
|
tif->tif_rawdataloaded = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
19
3rdparty/libtiff/tif_dir.h
vendored
19
3rdparty/libtiff/tif_dir.h
vendored
|
|
@ -329,16 +329,15 @@ extern "C"
|
||||||
|
|
||||||
struct _TIFFField
|
struct _TIFFField
|
||||||
{
|
{
|
||||||
uint32_t field_tag; /* field's tag */
|
uint32_t field_tag; /* field's tag */
|
||||||
short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
|
short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
|
||||||
short field_writecount; /* write count/TIFF_VARIABLE */
|
short field_writecount; /* write count/TIFF_VARIABLE */
|
||||||
TIFFDataType field_type; /* type of associated data */
|
TIFFDataType field_type; /* type of associated data */
|
||||||
uint32_t
|
uint32_t field_anonymous; /* if true, this is a unknown /
|
||||||
field_anonymous; /* if true, this is a unknown / anonymous tag */
|
anonymous tag */
|
||||||
TIFFSetGetFieldType set_field_type; /* type to be passed to TIFFSetField
|
TIFFSetGetFieldType set_get_field_type; /* type to be passed to
|
||||||
and TIFFGetField*/
|
TIFFSetField, TIFFGetField */
|
||||||
TIFFSetGetFieldType get_field_type; /* not used */
|
unsigned short field_bit; /* bit in fieldsset bit vector */
|
||||||
unsigned short field_bit; /* bit in fieldsset bit vector */
|
|
||||||
unsigned char field_oktochange; /* if true, can change while writing */
|
unsigned char field_oktochange; /* if true, can change while writing */
|
||||||
unsigned char field_passcount; /* if true, pass dir count on set */
|
unsigned char field_passcount; /* if true, pass dir count on set */
|
||||||
char *field_name; /* ASCII name */
|
char *field_name; /* ASCII name */
|
||||||
|
|
|
||||||
823
3rdparty/libtiff/tif_dirinfo.c
vendored
823
3rdparty/libtiff/tif_dirinfo.c
vendored
|
|
@ -54,10 +54,10 @@ static const TIFFFieldArray gpsFieldArray;
|
||||||
/*--: Rational2Double: --
|
/*--: Rational2Double: --
|
||||||
* The Rational2Double upgraded libtiff functionality allows the definition and
|
* The Rational2Double upgraded libtiff functionality allows the definition and
|
||||||
* achievement of true double-precision accuracy for TIFF tags of RATIONAL type
|
* achievement of true double-precision accuracy for TIFF tags of RATIONAL type
|
||||||
* and field_bit=FIELD_CUSTOM using the set_field_type = TIFF_SETGET_DOUBLE.
|
* and field_bit=FIELD_CUSTOM using the set_get_field_type = TIFF_SETGET_DOUBLE.
|
||||||
* Unfortunately, that changes the old implemented interface for TIFFGetField().
|
* Unfortunately, that changes the old implemented interface for TIFFGetField().
|
||||||
* In order to keep the old TIFFGetField() interface behavior those tags have to
|
* In order to keep the old TIFFGetField() interface behavior those tags have to
|
||||||
* be redefined with set_field_type = TIFF_SETGET_FLOAT!
|
* be redefined with set_get_field_type = TIFF_SETGET_FLOAT!
|
||||||
*
|
*
|
||||||
* Rational custom arrays are already defined as _Cxx_FLOAT, thus can stay.
|
* Rational custom arrays are already defined as _Cxx_FLOAT, thus can stay.
|
||||||
*
|
*
|
||||||
|
|
@ -65,281 +65,281 @@ static const TIFFFieldArray gpsFieldArray;
|
||||||
|
|
||||||
/* clang-format off */ /* for better readability of tag comments */
|
/* clang-format off */ /* for better readability of tag comments */
|
||||||
static const TIFFField tiffFields[] = {
|
static const TIFFField tiffFields[] = {
|
||||||
{TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL},
|
{TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL},
|
||||||
{TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "OldSubfileType", NULL},
|
{TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "OldSubfileType", NULL},
|
||||||
{TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL},
|
{TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL},
|
||||||
{TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL},
|
{TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL},
|
||||||
{TIFFTAG_BITSPERSAMPLE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL},
|
{TIFFTAG_BITSPERSAMPLE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL},
|
||||||
{TIFFTAG_COMPRESSION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_COMPRESSION, 0, 0, "Compression", NULL},
|
{TIFFTAG_COMPRESSION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_COMPRESSION, 0, 0, "Compression", NULL},
|
||||||
{TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PHOTOMETRIC, 0, 0, "PhotometricInterpretation", NULL},
|
{TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_PHOTOMETRIC, 0, 0, "PhotometricInterpretation", NULL},
|
||||||
{TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL},
|
{TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL},
|
||||||
{TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellWidth", NULL},
|
{TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CellWidth", NULL},
|
||||||
{TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellLength", NULL},
|
{TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CellLength", NULL},
|
||||||
{TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_FILLORDER, 0, 0, "FillOrder", NULL},
|
{TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_FILLORDER, 0, 0, "FillOrder", NULL},
|
||||||
{TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DocumentName", NULL},
|
{TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DocumentName", NULL},
|
||||||
{TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageDescription", NULL},
|
{TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "ImageDescription", NULL},
|
||||||
{TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Make", NULL},
|
{TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Make", NULL},
|
||||||
{TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Model", NULL},
|
{TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Model", NULL},
|
||||||
{TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL},
|
{TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL},
|
||||||
{TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_ORIENTATION, 0, 0, "Orientation", NULL},
|
{TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_ORIENTATION, 0, 0, "Orientation", NULL},
|
||||||
{TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", NULL},
|
{TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", NULL},
|
||||||
{TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL},
|
{TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL},
|
||||||
{TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", NULL},
|
{TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", NULL},
|
||||||
{TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL},
|
{TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL},
|
||||||
{TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL},
|
{TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL},
|
||||||
{TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "XResolution", NULL},
|
{TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_RESOLUTION, 1, 0, "XResolution", NULL},
|
||||||
{TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "YResolution", NULL},
|
{TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_RESOLUTION, 1, 0, "YResolution", NULL},
|
||||||
{TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", NULL},
|
{TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", NULL},
|
||||||
{TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PageName", NULL},
|
{TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "PageName", NULL},
|
||||||
{TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "XPosition", NULL},
|
{TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_POSITION, 1, 0, "XPosition", NULL},
|
||||||
{TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "YPosition", NULL},
|
{TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_POSITION, 1, 0, "YPosition", NULL},
|
||||||
{TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeOffsets", NULL},
|
{TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeOffsets", NULL},
|
||||||
{TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL},
|
{TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL},
|
||||||
{TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL},
|
{TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL},
|
||||||
{TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL},
|
{TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL},
|
||||||
{TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL},
|
{TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL},
|
||||||
{TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL},
|
{TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL},
|
||||||
{TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL},
|
{TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL},
|
||||||
{TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", NULL},
|
{TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", NULL},
|
||||||
{TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Software", NULL},
|
{TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Software", NULL},
|
||||||
{TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTime", NULL},
|
{TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DateTime", NULL},
|
||||||
{TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Artist", NULL},
|
{TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Artist", NULL},
|
||||||
{TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HostComputer", NULL},
|
{TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "HostComputer", NULL},
|
||||||
{TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhitePoint", NULL},
|
{TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "WhitePoint", NULL},
|
||||||
{TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PrimaryChromaticities", NULL},
|
{TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "PrimaryChromaticities", NULL},
|
||||||
{TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_COLORMAP, 1, 0, "ColorMap", NULL},
|
{TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, FIELD_COLORMAP, 1, 0, "ColorMap", NULL},
|
||||||
{TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL},
|
{TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL},
|
||||||
{TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL},
|
{TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL},
|
||||||
{TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL},
|
{TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL},
|
||||||
{TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL},
|
{TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL},
|
||||||
{TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", NULL},
|
{TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", NULL},
|
||||||
{TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, TIFF_SETGET_UNDEFINED, FIELD_SUBIFD, 1, 1, "SubIFD", (TIFFFieldArray *)&tiffFieldArray},
|
{TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, FIELD_SUBIFD, 1, 1, "SubIFD", (TIFFFieldArray *)&tiffFieldArray},
|
||||||
{TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InkSet", NULL},
|
{TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 0, 0, "InkSet", NULL},
|
||||||
{TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII, TIFF_SETGET_UNDEFINED, FIELD_INKNAMES, 1, 1, "InkNames", NULL},
|
{TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII, FIELD_INKNAMES, 1, 1, "InkNames", NULL},
|
||||||
{TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_NUMBEROFINKS, 1, 0, "NumberOfInks", NULL},
|
{TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_NUMBEROFINKS, 1, 0, "NumberOfInks", NULL},
|
||||||
{TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DotRange", NULL},
|
{TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, FIELD_CUSTOM, 0, 0, "DotRange", NULL},
|
||||||
{TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL},
|
{TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL},
|
||||||
{TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL},
|
{TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL},
|
||||||
{TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL},
|
{TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL},
|
||||||
{TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", NULL},
|
{TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", NULL},
|
||||||
{TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", NULL},
|
{TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", NULL},
|
||||||
{TIFFTAG_CLIPPATH, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ClipPath", NULL},
|
{TIFFTAG_CLIPPATH, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 0, 1, "ClipPath", NULL},
|
||||||
{TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL},
|
{TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL},
|
||||||
{TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL},
|
{TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL},
|
||||||
{TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL},
|
{TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL},
|
||||||
{TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", NULL},
|
{TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", NULL},
|
||||||
{TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", NULL},
|
{TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", NULL},
|
||||||
{TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", NULL},
|
{TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", NULL},
|
||||||
{TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "XMLPacket", NULL},
|
{TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "XMLPacket", NULL},
|
||||||
/* begin SGI tags */
|
/* begin SGI tags */
|
||||||
{TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL},
|
{TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL},
|
||||||
{TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL},
|
{TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL},
|
||||||
{TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL},
|
{TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL},
|
||||||
{TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL},
|
{TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL},
|
||||||
/* end SGI tags */
|
/* end SGI tags */
|
||||||
/* begin Pixar tags */
|
/* begin Pixar tags */
|
||||||
{TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL},
|
{TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL},
|
||||||
{TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL},
|
{TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL},
|
||||||
{TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureFormat", NULL},
|
{TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "TextureFormat", NULL},
|
||||||
{TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL},
|
{TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL},
|
||||||
{TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL},
|
{TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL},
|
||||||
{TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen", NULL},
|
{TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen", NULL},
|
||||||
{TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera", NULL},
|
{TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera", NULL},
|
||||||
{TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Copyright", NULL},
|
{TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Copyright", NULL},
|
||||||
/* end Pixar tags */
|
/* end Pixar tags */
|
||||||
{TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "RichTIFFIPTC", NULL},
|
{TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "RichTIFFIPTC", NULL},
|
||||||
{TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Photoshop", NULL},
|
{TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "Photoshop", NULL},
|
||||||
/*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not TIFF_IFD8 as in original LibTiff. However, for IFD-like tags,
|
/*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not TIFF_IFD8 as in original LibTiff. However, for IFD-like tags,
|
||||||
* libtiff uses the data type TIFF_IFD8 in tiffFields[]-tag definition combined with a special handling procedure in order to write either
|
* libtiff uses the data type TIFF_IFD8 in tiffFields[]-tag definition combined with a special handling procedure in order to write either
|
||||||
* a 32-bit value and the TIFF_IFD type-id into ClassicTIFF files or a 64-bit value and the TIFF_IFD8 type-id into BigTIFF files. */
|
* a 32-bit value and the TIFF_IFD type-id into ClassicTIFF files or a 64-bit value and the TIFF_IFD8 type-id into BigTIFF files. */
|
||||||
{TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EXIFIFDOffset", (TIFFFieldArray *)&exifFieldArray},
|
{TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, FIELD_CUSTOM, 1, 0, "EXIFIFDOffset", (TIFFFieldArray *)&exifFieldArray},
|
||||||
{TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ICC Profile", NULL},
|
{TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "ICC Profile", NULL},
|
||||||
{TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GPSIFDOffset", (TIFFFieldArray *)&gpsFieldArray},
|
{TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, FIELD_CUSTOM, 1, 0, "GPSIFDOffset", (TIFFFieldArray *)&gpsFieldArray},
|
||||||
{TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL},
|
{TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL},
|
||||||
{TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL},
|
{TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL},
|
||||||
{TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL},
|
{TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL},
|
||||||
{TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL},
|
{TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL},
|
||||||
{TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "StoNits", NULL},
|
{TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 0, 0, "StoNits", NULL},
|
||||||
{TIFFTAG_IMAGESOURCEDATA, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Adobe Photoshop Document Data Block", NULL},
|
{TIFFTAG_IMAGESOURCEDATA, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "Adobe Photoshop Document Data Block", NULL},
|
||||||
{TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", NULL},
|
{TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", NULL},
|
||||||
/* begin DNG tags */
|
/* begin DNG tags */
|
||||||
{TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DNGVersion", NULL},
|
{TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "DNGVersion", NULL},
|
||||||
{TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DNGBackwardVersion", NULL},
|
{TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "DNGBackwardVersion", NULL},
|
||||||
{TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL},
|
{TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL},
|
||||||
{TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL},
|
{TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL},
|
||||||
{TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPlaneColor", NULL},
|
{TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "CFAPlaneColor", NULL},
|
||||||
{TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CFALayout", NULL},
|
{TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CFALayout", NULL},
|
||||||
{TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LinearizationTable", NULL},
|
{TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "LinearizationTable", NULL},
|
||||||
{TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BlackLevelRepeatDim", NULL},
|
{TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, FIELD_CUSTOM, 1, 0, "BlackLevelRepeatDim", NULL},
|
||||||
{TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevel", NULL},
|
{TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "BlackLevel", NULL},
|
||||||
{TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaH", NULL},
|
{TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaH", NULL},
|
||||||
{TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaV", NULL},
|
{TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaV", NULL},
|
||||||
{TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "WhiteLevel", NULL},
|
{TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, FIELD_CUSTOM, 1, 1, "WhiteLevel", NULL},
|
||||||
{TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultScale", NULL},
|
{TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "DefaultScale", NULL},
|
||||||
{TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BestQualityScale", NULL},
|
{TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BestQualityScale", NULL},
|
||||||
{TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultCropOrigin", NULL},
|
{TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "DefaultCropOrigin", NULL},
|
||||||
{TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultCropSize", NULL},
|
{TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "DefaultCropSize", NULL},
|
||||||
{TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix1", NULL},
|
{TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ColorMatrix1", NULL},
|
||||||
{TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix2", NULL},
|
{TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ColorMatrix2", NULL},
|
||||||
{TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration1", NULL},
|
{TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "CameraCalibration1", NULL},
|
||||||
{TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration2", NULL},
|
{TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "CameraCalibration2", NULL},
|
||||||
{TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix1", NULL},
|
{TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ReductionMatrix1", NULL},
|
||||||
{TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix2", NULL},
|
{TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ReductionMatrix2", NULL},
|
||||||
{TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AnalogBalance", NULL},
|
{TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "AnalogBalance", NULL},
|
||||||
{TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotNeutral", NULL},
|
{TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "AsShotNeutral", NULL},
|
||||||
{TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AsShotWhiteXY", NULL},
|
{TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "AsShotWhiteXY", NULL},
|
||||||
{TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineExposure", NULL},
|
{TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BaselineExposure", NULL},
|
||||||
{TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineNoise", NULL},
|
{TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BaselineNoise", NULL},
|
||||||
{TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineSharpness", NULL},
|
{TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BaselineSharpness", NULL},
|
||||||
{TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BayerGreenSplit", NULL},
|
{TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "BayerGreenSplit", NULL},
|
||||||
{TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LinearResponseLimit", NULL},
|
{TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "LinearResponseLimit", NULL},
|
||||||
{TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL},
|
{TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL},
|
||||||
{TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensInfo", NULL},
|
{TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "LensInfo", NULL},
|
||||||
{TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ChromaBlurRadius", NULL},
|
{TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ChromaBlurRadius", NULL},
|
||||||
{TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AntiAliasStrength", NULL},
|
{TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "AntiAliasStrength", NULL},
|
||||||
{TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShadowScale", NULL},
|
{TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ShadowScale", NULL},
|
||||||
{TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "DNGPrivateData", NULL},
|
{TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "DNGPrivateData", NULL},
|
||||||
{TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MakerNoteSafety", NULL},
|
{TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "MakerNoteSafety", NULL},
|
||||||
{TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant1", NULL},
|
{TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant1", NULL},
|
||||||
{TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant2", NULL},
|
{TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant2", NULL},
|
||||||
{TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawDataUniqueID", NULL},
|
{TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "RawDataUniqueID", NULL},
|
||||||
{TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL},
|
{TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL},
|
||||||
{TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileData", NULL},
|
{TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "OriginalRawFileData", NULL},
|
||||||
{TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ActiveArea", NULL},
|
{TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "ActiveArea", NULL},
|
||||||
{TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MaskedAreas", NULL},
|
{TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, FIELD_CUSTOM, 1, 1, "MaskedAreas", NULL},
|
||||||
{TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotICCProfile", NULL},
|
{TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "AsShotICCProfile", NULL},
|
||||||
{TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotPreProfileMatrix", NULL},
|
{TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "AsShotPreProfileMatrix", NULL},
|
||||||
{TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CurrentICCProfile", NULL},
|
{TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "CurrentICCProfile", NULL},
|
||||||
{TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CurrentPreProfileMatrix", NULL},
|
{TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "CurrentPreProfileMatrix", NULL},
|
||||||
{TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL},
|
{TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL},
|
||||||
#if 0
|
#if 0
|
||||||
/* begin DNG 1.2.0.0 tags */
|
/* begin DNG 1.2.0.0 tags */
|
||||||
{TIFFTAG_COLORIMETRICREFERENCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorimetricReference", NULL},
|
{TIFFTAG_COLORIMETRICREFERENCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "ColorimetricReference", NULL},
|
||||||
{TIFFTAG_CAMERACALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibrationSignature", NULL},
|
{TIFFTAG_CAMERACALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "CameraCalibrationSignature", NULL},
|
||||||
{TIFFTAG_PROFILECALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileCalibrationSignature", NULL},
|
{TIFFTAG_PROFILECALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "ProfileCalibrationSignature", NULL},
|
||||||
{TIFFTAG_EXTRACAMERAPROFILES, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ExtraCameraProfiles", NULL},
|
{TIFFTAG_EXTRACAMERAPROFILES, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, FIELD_CUSTOM, 1, 1, "ExtraCameraProfiles", NULL},
|
||||||
{TIFFTAG_ASSHOTPROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotProfileName", NULL},
|
{TIFFTAG_ASSHOTPROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "AsShotProfileName", NULL},
|
||||||
{TIFFTAG_NOISEREDUCTIONAPPLIED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "NoiseReductionApplied", NULL},
|
{TIFFTAG_NOISEREDUCTIONAPPLIED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "NoiseReductionApplied", NULL},
|
||||||
{TIFFTAG_PROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileName", NULL},
|
{TIFFTAG_PROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "ProfileName", NULL},
|
||||||
{TIFFTAG_PROFILEHUESATMAPDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapDims", NULL},
|
{TIFFTAG_PROFILEHUESATMAPDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapDims", NULL},
|
||||||
{TIFFTAG_PROFILEHUESATMAPDATA1, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData1", NULL},
|
{TIFFTAG_PROFILEHUESATMAPDATA1, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData1", NULL},
|
||||||
{TIFFTAG_PROFILEHUESATMAPDATA2, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData2", NULL},
|
{TIFFTAG_PROFILEHUESATMAPDATA2, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData2", NULL},
|
||||||
{TIFFTAG_PROFILETONECURVE, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileToneCurve", NULL},
|
{TIFFTAG_PROFILETONECURVE, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ProfileToneCurve", NULL},
|
||||||
{TIFFTAG_PROFILEEMBEDPOLICY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileEmbedPolicy", NULL},
|
{TIFFTAG_PROFILEEMBEDPOLICY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ProfileEmbedPolicy", NULL},
|
||||||
{TIFFTAG_PROFILECOPYRIGHT, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileCopyright", NULL},
|
{TIFFTAG_PROFILECOPYRIGHT, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "ProfileCopyright", NULL},
|
||||||
{TIFFTAG_FORWARDMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix1", NULL},
|
{TIFFTAG_FORWARDMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ForwardMatrix1", NULL},
|
||||||
{TIFFTAG_FORWARDMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix2", NULL},
|
{TIFFTAG_FORWARDMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ForwardMatrix2", NULL},
|
||||||
{TIFFTAG_PREVIEWAPPLICATIONNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewApplicationName", NULL},
|
{TIFFTAG_PREVIEWAPPLICATIONNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "PreviewApplicationName", NULL},
|
||||||
{TIFFTAG_PREVIEWAPPLICATIONVERSION, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewApplicationVersion", NULL},
|
{TIFFTAG_PREVIEWAPPLICATIONVERSION, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "PreviewApplicationVersion", NULL},
|
||||||
{TIFFTAG_PREVIEWSETTINGSNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewSettingsName", NULL},
|
{TIFFTAG_PREVIEWSETTINGSNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "PreviewSettingsName", NULL},
|
||||||
{TIFFTAG_PREVIEWSETTINGSDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewSettingsDigest", NULL},
|
{TIFFTAG_PREVIEWSETTINGSDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "PreviewSettingsDigest", NULL},
|
||||||
{TIFFTAG_PREVIEWCOLORSPACE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewColorSpace", NULL},
|
{TIFFTAG_PREVIEWCOLORSPACE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "PreviewColorSpace", NULL},
|
||||||
{TIFFTAG_PREVIEWDATETIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewDateTime", NULL},
|
{TIFFTAG_PREVIEWDATETIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "PreviewDateTime", NULL},
|
||||||
{TIFFTAG_RAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawImageDigest", NULL},
|
{TIFFTAG_RAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "RawImageDigest", NULL},
|
||||||
{TIFFTAG_ORIGINALRAWFILEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalRawFileDigest", NULL},
|
{TIFFTAG_ORIGINALRAWFILEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "OriginalRawFileDigest", NULL},
|
||||||
{TIFFTAG_SUBTILEBLOCKSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubTileBlockSize", NULL},
|
{TIFFTAG_SUBTILEBLOCKSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "SubTileBlockSize", NULL},
|
||||||
{TIFFTAG_ROWINTERLEAVEFACTOR, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RowInterleaveFactor", NULL},
|
{TIFFTAG_ROWINTERLEAVEFACTOR, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "RowInterleaveFactor", NULL},
|
||||||
{TIFFTAG_PROFILELOOKTABLEDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileLookTableDims", NULL},
|
{TIFFTAG_PROFILELOOKTABLEDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "ProfileLookTableDims", NULL},
|
||||||
{TIFFTAG_PROFILELOOKTABLEDATA, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileLookTableData", NULL},
|
{TIFFTAG_PROFILELOOKTABLEDATA, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ProfileLookTableData", NULL},
|
||||||
/* begin DNG 1.3.0.0 tags */
|
/* begin DNG 1.3.0.0 tags */
|
||||||
{TIFFTAG_OPCODELIST1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList1", NULL},
|
{TIFFTAG_OPCODELIST1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "OpcodeList1", NULL},
|
||||||
{TIFFTAG_OPCODELIST2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList2", NULL},
|
{TIFFTAG_OPCODELIST2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "OpcodeList2", NULL},
|
||||||
{TIFFTAG_OPCODELIST3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList3", NULL},
|
{TIFFTAG_OPCODELIST3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "OpcodeList3", NULL},
|
||||||
{TIFFTAG_NOISEPROFILE, -1, -1, TIFF_DOUBLE, 0, TIFF_SETGET_C16_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "NoiseProfile", NULL},
|
{TIFFTAG_NOISEPROFILE, -1, -1, TIFF_DOUBLE, 0, TIFF_SETGET_C16_DOUBLE, FIELD_CUSTOM, 1, 1, "NoiseProfile", NULL},
|
||||||
/* begin DNG 1.4.0.0 tags */
|
/* begin DNG 1.4.0.0 tags */
|
||||||
{TIFFTAG_DEFAULTUSERCROP, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultUserCrop", NULL},
|
{TIFFTAG_DEFAULTUSERCROP, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "DefaultUserCrop", NULL},
|
||||||
{TIFFTAG_DEFAULTBLACKRENDER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultBlackRender", NULL},
|
{TIFFTAG_DEFAULTBLACKRENDER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "DefaultBlackRender", NULL},
|
||||||
{TIFFTAG_BASELINEEXPOSUREOFFSET, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineExposureOffset", NULL},
|
{TIFFTAG_BASELINEEXPOSUREOFFSET, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BaselineExposureOffset", NULL},
|
||||||
{TIFFTAG_PROFILELOOKTABLEENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileLookTableEncoding", NULL},
|
{TIFFTAG_PROFILELOOKTABLEENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ProfileLookTableEncoding", NULL},
|
||||||
{TIFFTAG_PROFILEHUESATMAPENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapEncoding", NULL},
|
{TIFFTAG_PROFILEHUESATMAPENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapEncoding", NULL},
|
||||||
{TIFFTAG_ORIGINALDEFAULTFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalDefaultFinalSize", NULL},
|
{TIFFTAG_ORIGINALDEFAULTFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "OriginalDefaultFinalSize", NULL},
|
||||||
{TIFFTAG_ORIGINALBESTQUALITYFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalBestQualityFinalSize", NULL},
|
{TIFFTAG_ORIGINALBESTQUALITYFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "OriginalBestQualityFinalSize", NULL},
|
||||||
{TIFFTAG_ORIGINALDEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalDefaultCropSize", NULL}, /* could also be rational */
|
{TIFFTAG_ORIGINALDEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "OriginalDefaultCropSize", NULL}, /* could also be rational */
|
||||||
{TIFFTAG_NEWRAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "NewRawImageDigest", NULL},
|
{TIFFTAG_NEWRAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "NewRawImageDigest", NULL},
|
||||||
{TIFFTAG_RAWTOPREVIEWGAIN, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawToPreviewGain", NULL},
|
{TIFFTAG_RAWTOPREVIEWGAIN, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "RawToPreviewGain", NULL},
|
||||||
/* begin DNG 1.5.0.0 tags */
|
/* begin DNG 1.5.0.0 tags */
|
||||||
{TIFFTAG_DEPTHFORMAT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthFormat", NULL},
|
{TIFFTAG_DEPTHFORMAT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "DepthFormat", NULL},
|
||||||
{TIFFTAG_DEPTHNEAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthNear", NULL},
|
{TIFFTAG_DEPTHNEAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "DepthNear", NULL},
|
||||||
{TIFFTAG_DEPTHFAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthFar", NULL},
|
{TIFFTAG_DEPTHFAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "DepthFar", NULL},
|
||||||
{TIFFTAG_DEPTHUNITS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthUnits", NULL},
|
{TIFFTAG_DEPTHUNITS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "DepthUnits", NULL},
|
||||||
{TIFFTAG_DEPTHMEASURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthMeasureType", NULL},
|
{TIFFTAG_DEPTHMEASURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "DepthMeasureType", NULL},
|
||||||
{TIFFTAG_ENHANCEPARAMS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EnhanceParams", NULL},
|
{TIFFTAG_ENHANCEPARAMS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EnhanceParams", NULL},
|
||||||
/* begin DNG 1.6.0.0 tags */
|
/* begin DNG 1.6.0.0 tags */
|
||||||
{TIFFTAG_PROFILEGAINTABLEMAP, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileGainTableMap", NULL},
|
{TIFFTAG_PROFILEGAINTABLEMAP, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "ProfileGainTableMap", NULL},
|
||||||
{TIFFTAG_SEMANTICNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SemanticName", NULL},
|
{TIFFTAG_SEMANTICNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SemanticName", NULL},
|
||||||
{TIFFTAG_SEMANTICINSTANCEID, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SemanticInstanceID", NULL},
|
{TIFFTAG_SEMANTICINSTANCEID, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SemanticInstanceID", NULL},
|
||||||
{TIFFTAG_MASKSUBAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaskSubArea", NULL},
|
{TIFFTAG_MASKSUBAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "MaskSubArea", NULL},
|
||||||
{TIFFTAG_RGBTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "RGBTables", NULL},
|
{TIFFTAG_RGBTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "RGBTables", NULL},
|
||||||
{TIFFTAG_CALIBRATIONILLUMINANT3, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant3", NULL},
|
{TIFFTAG_CALIBRATIONILLUMINANT3, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant3", NULL},
|
||||||
{TIFFTAG_COLORMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix3", NULL},
|
{TIFFTAG_COLORMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ColorMatrix3", NULL},
|
||||||
{TIFFTAG_CAMERACALIBRATION3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration3", NULL},
|
{TIFFTAG_CAMERACALIBRATION3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "CameraCalibration3", NULL},
|
||||||
{TIFFTAG_REDUCTIONMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix3", NULL},
|
{TIFFTAG_REDUCTIONMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ReductionMatrix3", NULL},
|
||||||
{TIFFTAG_PROFILEHUESATMAPDATA3, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData3", NULL},
|
{TIFFTAG_PROFILEHUESATMAPDATA3, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData3", NULL},
|
||||||
{TIFFTAG_FORWARDMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix3", NULL},
|
{TIFFTAG_FORWARDMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "ForwardMatrix3", NULL},
|
||||||
{TIFFTAG_ILLUMINANTDATA1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData1", NULL},
|
{TIFFTAG_ILLUMINANTDATA1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "IlluminantData1", NULL},
|
||||||
{TIFFTAG_ILLUMINANTDATA2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData2", NULL},
|
{TIFFTAG_ILLUMINANTDATA2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "IlluminantData2", NULL},
|
||||||
{TIFFTAG_ILLUMINANTDATA3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData3", NULL},
|
{TIFFTAG_ILLUMINANTDATA3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "IlluminantData3", NULL},
|
||||||
/* end DNG tags */
|
/* end DNG tags */
|
||||||
#endif
|
#endif
|
||||||
/* begin TIFF/EP tags */
|
/* begin TIFF/EP tags */
|
||||||
{TIFFTAG_EP_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP CFARepeatPatternDim", NULL},
|
{TIFFTAG_EP_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, FIELD_CUSTOM, 1, 0, "EP CFARepeatPatternDim", NULL},
|
||||||
{TIFFTAG_EP_CFAPATTERN, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP CFAPattern", NULL},
|
{TIFFTAG_EP_CFAPATTERN, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "EP CFAPattern", NULL},
|
||||||
#if 0
|
#if 0
|
||||||
/* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII.
|
/* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII.
|
||||||
* LibTiff defines it as ASCII and converts RATIONAL to an ASCII string. */
|
* LibTiff defines it as ASCII and converts RATIONAL to an ASCII string. */
|
||||||
{TIFFTAG_EP_BATTERYLEVEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP BatteryLevel", NULL},
|
{TIFFTAG_EP_BATTERYLEVEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EP BatteryLevel", NULL},
|
||||||
{TIFFTAG_EP_INTERLACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP Interlace", NULL},
|
{TIFFTAG_EP_INTERLACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP Interlace", NULL},
|
||||||
/* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723)
|
/* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723)
|
||||||
* LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG, because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */
|
* LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG, because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */
|
||||||
{TIFFTAG_EP_TIMEZONEOFFSET, -1, -1, TIFF_SSHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP TimeZoneOffset", NULL},
|
{TIFFTAG_EP_TIMEZONEOFFSET, -1, -1, TIFF_SSHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "EP TimeZoneOffset", NULL},
|
||||||
{TIFFTAG_EP_SELFTIMERMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SelfTimerMode", NULL},
|
{TIFFTAG_EP_SELFTIMERMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP SelfTimerMode", NULL},
|
||||||
{TIFFTAG_EP_FLASHENERGY, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FlashEnergy", NULL},
|
{TIFFTAG_EP_FLASHENERGY, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP FlashEnergy", NULL},
|
||||||
{TIFFTAG_EP_SPATIALFREQUENCYRESPONSE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SpatialFrequencyResponse", NULL},
|
{TIFFTAG_EP_SPATIALFREQUENCYRESPONSE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "EP SpatialFrequencyResponse", NULL},
|
||||||
{TIFFTAG_EP_NOISE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP Noise", NULL},
|
{TIFFTAG_EP_NOISE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "EP Noise", NULL},
|
||||||
{TIFFTAG_EP_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneXResolution", NULL},
|
{TIFFTAG_EP_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP FocalPlaneXResolution", NULL},
|
||||||
{TIFFTAG_EP_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneYResolution", NULL},
|
{TIFFTAG_EP_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP FocalPlaneYResolution", NULL},
|
||||||
{TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneResolutionUnit", NULL},
|
{TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP FocalPlaneResolutionUnit", NULL},
|
||||||
{TIFFTAG_EP_IMAGENUMBER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ImageNumber", NULL}, /* or SHORT */
|
{TIFFTAG_EP_IMAGENUMBER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "EP ImageNumber", NULL}, /* or SHORT */
|
||||||
{TIFFTAG_EP_SECURITYCLASSIFICATION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SecurityClassification", NULL},
|
{TIFFTAG_EP_SECURITYCLASSIFICATION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EP SecurityClassification", NULL},
|
||||||
{TIFFTAG_EP_IMAGEHISTORY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ImageHistory", NULL},
|
{TIFFTAG_EP_IMAGEHISTORY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EP ImageHistory", NULL},
|
||||||
{TIFFTAG_EP_EXPOSUREINDEX, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureIndex", NULL},
|
{TIFFTAG_EP_EXPOSUREINDEX, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP ExposureIndex", NULL},
|
||||||
{TIFFTAG_EP_STANDARDID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP StandardId", NULL},
|
{TIFFTAG_EP_STANDARDID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "EP StandardId", NULL},
|
||||||
{TIFFTAG_EP_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SensingMethod", NULL},
|
{TIFFTAG_EP_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP SensingMethod", NULL},
|
||||||
/* TIFF/EP tags equivalent to EXIF tags, sometimes defined differently. */
|
/* TIFF/EP tags equivalent to EXIF tags, sometimes defined differently. */
|
||||||
{TIFFTAG_EP_EXPOSURETIME, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureTime", NULL}, /*N=1 or 2 */
|
{TIFFTAG_EP_EXPOSURETIME, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP ExposureTime", NULL}, /*N=1 or 2 */
|
||||||
{TIFFTAG_EP_FNUMBER, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FNumber", NULL},
|
{TIFFTAG_EP_FNUMBER, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP FNumber", NULL},
|
||||||
{TIFFTAG_EP_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ExposureProgram", NULL},
|
{TIFFTAG_EP_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP ExposureProgram", NULL},
|
||||||
{TIFFTAG_EP_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SpectralSensitivity", NULL},
|
{TIFFTAG_EP_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EP SpectralSensitivity", NULL},
|
||||||
{TIFFTAG_EP_ISOSPEEDRATINGS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ISOSpeedRatings", NULL},
|
{TIFFTAG_EP_ISOSPEEDRATINGS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP ISOSpeedRatings", NULL},
|
||||||
{TIFFTAG_EP_OECF, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP OptoelectricConversionFactor", NULL},
|
{TIFFTAG_EP_OECF, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, FIELD_CUSTOM, 1, 1, "EP OptoelectricConversionFactor", NULL},
|
||||||
{TIFFTAG_EP_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP DateTimeOriginal", NULL},
|
{TIFFTAG_EP_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "EP DateTimeOriginal", NULL},
|
||||||
{TIFFTAG_EP_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP CompressedBitsPerPixel", NULL},
|
{TIFFTAG_EP_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP CompressedBitsPerPixel", NULL},
|
||||||
{TIFFTAG_EP_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ShutterSpeedValue", NULL},
|
{TIFFTAG_EP_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP ShutterSpeedValue", NULL},
|
||||||
{TIFFTAG_EP_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ApertureValue", NULL},
|
{TIFFTAG_EP_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP ApertureValue", NULL},
|
||||||
{TIFFTAG_EP_BRIGHTNESSVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP BrightnessValue", NULL},
|
{TIFFTAG_EP_BRIGHTNESSVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP BrightnessValue", NULL},
|
||||||
{TIFFTAG_EP_EXPOSUREBIASVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureBiasValue", NULL}, /*N=1 or 2 */
|
{TIFFTAG_EP_EXPOSUREBIASVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP ExposureBiasValue", NULL}, /*N=1 or 2 */
|
||||||
{TIFFTAG_EP_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP MaxApertureValue", NULL},
|
{TIFFTAG_EP_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "EP MaxApertureValue", NULL},
|
||||||
{TIFFTAG_EP_SUBJECTDISTANCE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SubjectDistance", NULL},
|
{TIFFTAG_EP_SUBJECTDISTANCE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP SubjectDistance", NULL},
|
||||||
{TIFFTAG_EP_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP MeteringMode", NULL},
|
{TIFFTAG_EP_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP MeteringMode", NULL},
|
||||||
{TIFFTAG_EP_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP LightSource", NULL},
|
{TIFFTAG_EP_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP LightSource", NULL},
|
||||||
{TIFFTAG_EP_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP Flash", NULL},
|
{TIFFTAG_EP_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "EP Flash", NULL},
|
||||||
{TIFFTAG_EP_FOCALLENGTH, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FocalLength", NULL},
|
{TIFFTAG_EP_FOCALLENGTH, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "EP FocalLength", NULL},
|
||||||
{TIFFTAG_EP_SUBJECTLOCATION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SubjectLocation", NULL},
|
{TIFFTAG_EP_SUBJECTLOCATION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "EP SubjectLocation", NULL},
|
||||||
/* end TIFF/EP tags */
|
/* end TIFF/EP tags */
|
||||||
#endif
|
#endif
|
||||||
/* begin TIFF/FX tags */
|
/* begin TIFF/FX tags */
|
||||||
{TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Indexed", NULL},
|
{TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Indexed", NULL},
|
||||||
{TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GlobalParametersIFD", NULL},
|
{TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, FIELD_CUSTOM, 1, 0, "GlobalParametersIFD", NULL},
|
||||||
{TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileType", NULL},
|
{TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ProfileType", NULL},
|
||||||
{TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FaxProfile", NULL},
|
{TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "FaxProfile", NULL},
|
||||||
{TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CodingMethods", NULL},
|
{TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "CodingMethods", NULL},
|
||||||
{TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "VersionYear", NULL},
|
{TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "VersionYear", NULL},
|
||||||
{TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ModeNumber", NULL},
|
{TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "ModeNumber", NULL},
|
||||||
{TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Decode", NULL},
|
{TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, FIELD_CUSTOM, 1, 1, "Decode", NULL},
|
||||||
{TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ImageBaseColor", NULL},
|
{TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "ImageBaseColor", NULL},
|
||||||
{TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "T82Options", NULL},
|
{TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "T82Options", NULL},
|
||||||
{TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "StripRowCounts", NULL},
|
{TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, FIELD_CUSTOM, 1, 1, "StripRowCounts", NULL},
|
||||||
{TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageLayer", NULL},
|
{TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, FIELD_CUSTOM, 1, 0, "ImageLayer", NULL},
|
||||||
/* end TIFF/FX tags */
|
/* end TIFF/FX tags */
|
||||||
/* begin pseudo tags */
|
/* begin pseudo tags */
|
||||||
};
|
};
|
||||||
|
|
@ -348,91 +348,91 @@ static const TIFFField tiffFields[] = {
|
||||||
* EXIF tags (Version 2.31, July 2016 plus version 2.32 May 2019)
|
* EXIF tags (Version 2.31, July 2016 plus version 2.32 May 2019)
|
||||||
*/
|
*/
|
||||||
static const TIFFField exifFields[] = {
|
static const TIFFField exifFields[] = {
|
||||||
{EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureTime", NULL},
|
{EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ExposureTime", NULL},
|
||||||
{EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FNumber", NULL},
|
{EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FNumber", NULL},
|
||||||
{EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL},
|
{EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL},
|
||||||
{EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL},
|
{EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL},
|
||||||
/* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. In addition, while "Count=Any", only 1 count should be used. */
|
/* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. In addition, while "Count=Any", only 1 count should be used. */
|
||||||
{EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL},
|
{EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL},
|
||||||
{EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", NULL},
|
{EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", NULL},
|
||||||
{EXIFTAG_SENSITIVITYTYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensitivityType", NULL},
|
{EXIFTAG_SENSITIVITYTYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "SensitivityType", NULL},
|
||||||
{EXIFTAG_STANDARDOUTPUTSENSITIVITY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "StandardOutputSensitivity", NULL},
|
{EXIFTAG_STANDARDOUTPUTSENSITIVITY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "StandardOutputSensitivity", NULL},
|
||||||
{EXIFTAG_RECOMMENDEDEXPOSUREINDEX, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RecommendedExposureIndex", NULL},
|
{EXIFTAG_RECOMMENDEDEXPOSUREINDEX, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "RecommendedExposureIndex", NULL},
|
||||||
{EXIFTAG_ISOSPEED, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeed", NULL},
|
{EXIFTAG_ISOSPEED, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ISOSpeed", NULL},
|
||||||
{EXIFTAG_ISOSPEEDLATITUDEYYY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudeyyy", NULL},
|
{EXIFTAG_ISOSPEEDLATITUDEYYY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudeyyy", NULL},
|
||||||
{EXIFTAG_ISOSPEEDLATITUDEZZZ, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudezzz", NULL},
|
{EXIFTAG_ISOSPEEDLATITUDEZZZ, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudezzz", NULL},
|
||||||
{EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExifVersion", NULL},
|
{EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "ExifVersion", NULL},
|
||||||
{EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL},
|
{EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL},
|
||||||
{EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL},
|
{EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL},
|
||||||
{EXIFTAG_OFFSETTIME, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTime", NULL},
|
{EXIFTAG_OFFSETTIME, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "OffsetTime", NULL},
|
||||||
{EXIFTAG_OFFSETTIMEORIGINAL, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeOriginal", NULL},
|
{EXIFTAG_OFFSETTIMEORIGINAL, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "OffsetTimeOriginal", NULL},
|
||||||
{EXIFTAG_OFFSETTIMEDIGITIZED, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeDigitized", NULL},
|
{EXIFTAG_OFFSETTIMEDIGITIZED, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "OffsetTimeDigitized", NULL},
|
||||||
{EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ComponentsConfiguration", NULL},
|
{EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "ComponentsConfiguration", NULL},
|
||||||
{EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL},
|
{EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL},
|
||||||
{EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL},
|
{EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL},
|
||||||
{EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ApertureValue", NULL},
|
{EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ApertureValue", NULL},
|
||||||
{EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL},
|
{EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL},
|
||||||
{EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL},
|
{EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL},
|
||||||
{EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL},
|
{EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL},
|
||||||
/*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
|
/*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
|
||||||
* However, there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values,
|
* However, there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values,
|
||||||
* which are not treated within LibTiff!! */
|
* which are not treated within LibTiff!! */
|
||||||
{EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL},
|
{EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL},
|
||||||
{EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeteringMode", NULL},
|
{EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "MeteringMode", NULL},
|
||||||
{EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LightSource", NULL},
|
{EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "LightSource", NULL},
|
||||||
{EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Flash", NULL},
|
{EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Flash", NULL},
|
||||||
{EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLength", NULL},
|
{EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FocalLength", NULL},
|
||||||
{EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SubjectArea", NULL},
|
{EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, FIELD_CUSTOM, 1, 1, "SubjectArea", NULL},
|
||||||
{EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MakerNote", NULL},
|
{EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "MakerNote", NULL},
|
||||||
{EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "UserComment", NULL},
|
{EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "UserComment", NULL},
|
||||||
{EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTime", NULL},
|
{EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SubSecTime", NULL},
|
||||||
{EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL},
|
{EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL},
|
||||||
{EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL},
|
{EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL},
|
||||||
{EXIFTAG_TEMPERATURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Temperature", NULL},
|
{EXIFTAG_TEMPERATURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "Temperature", NULL},
|
||||||
{EXIFTAG_HUMIDITY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Humidity", NULL},
|
{EXIFTAG_HUMIDITY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "Humidity", NULL},
|
||||||
{EXIFTAG_PRESSURE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Pressure", NULL},
|
{EXIFTAG_PRESSURE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "Pressure", NULL},
|
||||||
{EXIFTAG_WATERDEPTH, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WaterDepth", NULL},
|
{EXIFTAG_WATERDEPTH, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "WaterDepth", NULL},
|
||||||
{EXIFTAG_ACCELERATION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Acceleration", NULL},
|
{EXIFTAG_ACCELERATION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "Acceleration", NULL},
|
||||||
{EXIFTAG_CAMERAELEVATIONANGLE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraElevationAngle", NULL},
|
{EXIFTAG_CAMERAELEVATIONANGLE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "CameraElevationAngle", NULL},
|
||||||
{EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL},
|
{EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL},
|
||||||
{EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorSpace", NULL},
|
{EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "ColorSpace", NULL},
|
||||||
{EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL},
|
{EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL},
|
||||||
{EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL},
|
{EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL},
|
||||||
{EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL},
|
{EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL},
|
||||||
{EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL},
|
{EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL},
|
||||||
{EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SpatialFrequencyResponse", NULL},
|
{EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "SpatialFrequencyResponse", NULL},
|
||||||
{EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL},
|
{EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL},
|
||||||
{EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL},
|
{EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL},
|
||||||
{EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", NULL},
|
{EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", NULL},
|
||||||
{EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL},
|
{EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL},
|
||||||
{EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL},
|
{EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL},
|
||||||
{EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensingMethod", NULL},
|
{EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "SensingMethod", NULL},
|
||||||
{EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FileSource", NULL},
|
{EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "FileSource", NULL},
|
||||||
{EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneType", NULL},
|
{EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "SceneType", NULL},
|
||||||
{EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPattern", NULL},
|
{EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "CFAPattern", NULL},
|
||||||
{EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CustomRendered", NULL},
|
{EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CustomRendered", NULL},
|
||||||
{EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureMode", NULL},
|
{EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "ExposureMode", NULL},
|
||||||
{EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL},
|
{EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL},
|
||||||
{EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL},
|
{EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL},
|
||||||
{EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL},
|
{EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL},
|
||||||
{EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL},
|
{EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL},
|
||||||
{EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GainControl", NULL},
|
{EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "GainControl", NULL},
|
||||||
{EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Contrast", NULL},
|
{EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Contrast", NULL},
|
||||||
{EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Saturation", NULL},
|
{EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Saturation", NULL},
|
||||||
{EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Sharpness", NULL},
|
{EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Sharpness", NULL},
|
||||||
{EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "DeviceSettingDescription", NULL},
|
{EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "DeviceSettingDescription", NULL},
|
||||||
{EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL},
|
{EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL},
|
||||||
{EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL},
|
{EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL},
|
||||||
{EXIFTAG_CAMERAOWNERNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraOwnerName", NULL},
|
{EXIFTAG_CAMERAOWNERNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "CameraOwnerName", NULL},
|
||||||
{EXIFTAG_BODYSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BodySerialNumber", NULL},
|
{EXIFTAG_BODYSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "BodySerialNumber", NULL},
|
||||||
{EXIFTAG_LENSSPECIFICATION, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSpecification", NULL},
|
{EXIFTAG_LENSSPECIFICATION, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, FIELD_CUSTOM, 1, 0, "LensSpecification", NULL},
|
||||||
{EXIFTAG_LENSMAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensMake", NULL},
|
{EXIFTAG_LENSMAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "LensMake", NULL},
|
||||||
{EXIFTAG_LENSMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensModel", NULL},
|
{EXIFTAG_LENSMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "LensModel", NULL},
|
||||||
{EXIFTAG_LENSSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSerialNumber", NULL},
|
{EXIFTAG_LENSSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "LensSerialNumber", NULL},
|
||||||
{EXIFTAG_GAMMA, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Gamma", NULL},
|
{EXIFTAG_GAMMA, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, FIELD_CUSTOM, 1, 0, "Gamma", NULL},
|
||||||
{EXIFTAG_COMPOSITEIMAGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompositeImage", NULL},
|
{EXIFTAG_COMPOSITEIMAGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "CompositeImage", NULL},
|
||||||
{EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SourceImageNumberOfCompositeImage", NULL},
|
{EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, FIELD_CUSTOM, 1, 0, "SourceImageNumberOfCompositeImage", NULL},
|
||||||
{EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1,
|
{EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1,
|
||||||
"SourceExposureTimesOfCompositeImage", NULL}};
|
"SourceExposureTimesOfCompositeImage", NULL}};
|
||||||
/*
|
/*
|
||||||
* EXIF-GPS tags (Version 2.31, July 2016; nothing changed for version 2.32 May
|
* EXIF-GPS tags (Version 2.31, July 2016; nothing changed for version 2.32 May
|
||||||
|
|
@ -445,38 +445,38 @@ static const TIFFField gpsFields[] = {
|
||||||
* In order to achieve double precision for GPS tags: Standard definitions for GPSTAG is kept to TIFF_SETGET_DOUBLE
|
* In order to achieve double precision for GPS tags: Standard definitions for GPSTAG is kept to TIFF_SETGET_DOUBLE
|
||||||
* and TIFF_SETGET_C0_FLOAT is changed to TIFF_SETGET_C0_DOUBLE.
|
* and TIFF_SETGET_C0_FLOAT is changed to TIFF_SETGET_C0_DOUBLE.
|
||||||
*/
|
*/
|
||||||
{GPSTAG_VERSIONID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "VersionID", NULL},
|
{GPSTAG_VERSIONID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, FIELD_CUSTOM, 1, 0, "VersionID", NULL},
|
||||||
{GPSTAG_LATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LatitudeRef", NULL},
|
{GPSTAG_LATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "LatitudeRef", NULL},
|
||||||
{GPSTAG_LATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Latitude", NULL},
|
{GPSTAG_LATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, FIELD_CUSTOM, 1, 0, "Latitude", NULL},
|
||||||
{GPSTAG_LONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LongitudeRef", NULL},
|
{GPSTAG_LONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "LongitudeRef", NULL},
|
||||||
{GPSTAG_LONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Longitude", NULL},
|
{GPSTAG_LONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, FIELD_CUSTOM, 1, 0, "Longitude", NULL},
|
||||||
{GPSTAG_ALTITUDEREF, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AltitudeRef", NULL},
|
{GPSTAG_ALTITUDEREF, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "AltitudeRef", NULL},
|
||||||
{GPSTAG_ALTITUDE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Altitude", NULL},
|
{GPSTAG_ALTITUDE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "Altitude", NULL},
|
||||||
{GPSTAG_TIMESTAMP, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TimeStamp", NULL},
|
{GPSTAG_TIMESTAMP, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, FIELD_CUSTOM, 1, 0, "TimeStamp", NULL},
|
||||||
{GPSTAG_SATELLITES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Satellites", NULL},
|
{GPSTAG_SATELLITES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Satellites", NULL},
|
||||||
{GPSTAG_STATUS, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Status", NULL},
|
{GPSTAG_STATUS, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "Status", NULL},
|
||||||
{GPSTAG_MEASUREMODE, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeasureMode", NULL},
|
{GPSTAG_MEASUREMODE, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "MeasureMode", NULL},
|
||||||
{GPSTAG_DOP, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DOP", NULL},
|
{GPSTAG_DOP, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "DOP", NULL},
|
||||||
{GPSTAG_SPEEDREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpeedRef", NULL},
|
{GPSTAG_SPEEDREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "SpeedRef", NULL},
|
||||||
{GPSTAG_SPEED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Speed", NULL},
|
{GPSTAG_SPEED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "Speed", NULL},
|
||||||
{GPSTAG_TRACKREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TrackRef", NULL},
|
{GPSTAG_TRACKREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "TrackRef", NULL},
|
||||||
{GPSTAG_TRACK, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Track", NULL},
|
{GPSTAG_TRACK, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "Track", NULL},
|
||||||
{GPSTAG_IMGDIRECTIONREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirectionRef", NULL},
|
{GPSTAG_IMGDIRECTIONREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "ImgDirectionRef", NULL},
|
||||||
{GPSTAG_IMGDIRECTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirection", NULL},
|
{GPSTAG_IMGDIRECTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "ImgDirection", NULL},
|
||||||
{GPSTAG_MAPDATUM, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MapDatum", NULL},
|
{GPSTAG_MAPDATUM, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "MapDatum", NULL},
|
||||||
{GPSTAG_DESTLATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitudeRef", NULL},
|
{GPSTAG_DESTLATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DestLatitudeRef", NULL},
|
||||||
{GPSTAG_DESTLATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitude", NULL},
|
{GPSTAG_DESTLATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, FIELD_CUSTOM, 1, 0, "DestLatitude", NULL},
|
||||||
{GPSTAG_DESTLONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitudeRef", NULL},
|
{GPSTAG_DESTLONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DestLongitudeRef", NULL},
|
||||||
{GPSTAG_DESTLONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitude", NULL},
|
{GPSTAG_DESTLONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, FIELD_CUSTOM, 1, 0, "DestLongitude", NULL},
|
||||||
{GPSTAG_DESTBEARINGREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearingRef", NULL},
|
{GPSTAG_DESTBEARINGREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DestBearingRef", NULL},
|
||||||
{GPSTAG_DESTBEARING, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearing", NULL},
|
{GPSTAG_DESTBEARING, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "DestBearing", NULL},
|
||||||
{GPSTAG_DESTDISTANCEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistanceRef", NULL},
|
{GPSTAG_DESTDISTANCEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DestDistanceRef", NULL},
|
||||||
{GPSTAG_DESTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistance", NULL},
|
{GPSTAG_DESTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "DestDistance", NULL},
|
||||||
{GPSTAG_PROCESSINGMETHOD, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProcessingMethod", NULL},
|
{GPSTAG_PROCESSINGMETHOD, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "ProcessingMethod", NULL},
|
||||||
{GPSTAG_AREAINFORMATION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AreaInformation", NULL},
|
{GPSTAG_AREAINFORMATION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, FIELD_CUSTOM, 1, 1, "AreaInformation", NULL},
|
||||||
{GPSTAG_DATESTAMP, 11, 11, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateStamp", NULL},
|
{GPSTAG_DATESTAMP, 11, 11, TIFF_ASCII, 0, TIFF_SETGET_ASCII, FIELD_CUSTOM, 1, 0, "DateStamp", NULL},
|
||||||
{GPSTAG_DIFFERENTIAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Differential", NULL},
|
{GPSTAG_DIFFERENTIAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, FIELD_CUSTOM, 1, 0, "Differential", NULL},
|
||||||
{GPSTAG_GPSHPOSITIONINGERROR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HorizontalPositioningError", NULL}};
|
{GPSTAG_GPSHPOSITIONINGERROR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, FIELD_CUSTOM, 1, 0, "HorizontalPositioningError", NULL}};
|
||||||
/* clang-format on */ /* was off for better readability of tag comments */
|
/* clang-format on */ /* was off for better readability of tag comments */
|
||||||
|
|
||||||
static const TIFFFieldArray tiffFieldArray = {
|
static const TIFFFieldArray tiffFieldArray = {
|
||||||
|
|
@ -674,18 +674,19 @@ int TIFFFieldSetGetSize(const TIFFField *fip)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* TIFFSetField() and TIFFGetField() must provide the parameter accordingly
|
* TIFFSetField() and TIFFGetField() must provide the parameter accordingly
|
||||||
* to the definition of "set_field_type" of the tag definition in
|
* to the definition of "set_get_field_type" of the tag definition in
|
||||||
* dir_info.c. This function returns the data size for that purpose.
|
* dir_info.c. This function returns the data size for that purpose.
|
||||||
*
|
*
|
||||||
* Furthermore, this data size is also used for the internal storage,
|
* Furthermore, this data size is also used for the internal storage,
|
||||||
* even for TIFF_RATIONAL values for FIELD_CUSTOM, which are stored
|
* even for TIFF_RATIONAL values for FIELD_CUSTOM, which are stored
|
||||||
* internally as 4-byte float, but some of them should be stored internally
|
* internally as 4-byte float, but some of them should be stored internally
|
||||||
* as 8-byte double, depending on the "set_field_type" _FLOAT_ or _DOUBLE_.
|
* as 8-byte double, depending on the "set_get_field_type" _FLOAT_ or
|
||||||
|
* _DOUBLE_.
|
||||||
*/
|
*/
|
||||||
if (fip == NULL)
|
if (fip == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (fip->set_field_type)
|
switch (fip->set_get_field_type)
|
||||||
{
|
{
|
||||||
case TIFF_SETGET_UNDEFINED:
|
case TIFF_SETGET_UNDEFINED:
|
||||||
case TIFF_SETGET_ASCII:
|
case TIFF_SETGET_ASCII:
|
||||||
|
|
@ -758,7 +759,7 @@ int TIFFFieldSetGetCountSize(const TIFFField *fip)
|
||||||
if (fip == NULL)
|
if (fip == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (fip->set_field_type)
|
switch (fip->set_get_field_type)
|
||||||
{
|
{
|
||||||
case TIFF_SETGET_C16_ASCII:
|
case TIFF_SETGET_C16_ASCII:
|
||||||
case TIFF_SETGET_C16_UINT8:
|
case TIFF_SETGET_C16_UINT8:
|
||||||
|
|
@ -793,7 +794,7 @@ int TIFFFieldSetGetCountSize(const TIFFField *fip)
|
||||||
|
|
||||||
const TIFFField *TIFFFindField(TIFF *tif, uint32_t tag, TIFFDataType dt)
|
const TIFFField *TIFFFindField(TIFF *tif, uint32_t tag, TIFFDataType dt)
|
||||||
{
|
{
|
||||||
TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, 0, NULL, NULL};
|
TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, NULL, NULL};
|
||||||
TIFFField *pkey = &key;
|
TIFFField *pkey = &key;
|
||||||
const TIFFField **ret;
|
const TIFFField **ret;
|
||||||
if (tif->tif_foundfield && tif->tif_foundfield->field_tag == tag &&
|
if (tif->tif_foundfield && tif->tif_foundfield->field_tag == tag &&
|
||||||
|
|
@ -817,7 +818,7 @@ const TIFFField *TIFFFindField(TIFF *tif, uint32_t tag, TIFFDataType dt)
|
||||||
static const TIFFField *_TIFFFindFieldByName(TIFF *tif, const char *field_name,
|
static const TIFFField *_TIFFFindFieldByName(TIFF *tif, const char *field_name,
|
||||||
TIFFDataType dt)
|
TIFFDataType dt)
|
||||||
{
|
{
|
||||||
TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, 0, NULL, NULL};
|
TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, NULL, NULL};
|
||||||
TIFFField *pkey = &key;
|
TIFFField *pkey = &key;
|
||||||
const TIFFField **ret;
|
const TIFFField **ret;
|
||||||
if (tif->tif_foundfield &&
|
if (tif->tif_foundfield &&
|
||||||
|
|
@ -915,59 +916,46 @@ TIFFField *_TIFFCreateAnonField(TIFF *tif, uint32_t tag,
|
||||||
{
|
{
|
||||||
case TIFF_BYTE:
|
case TIFF_BYTE:
|
||||||
case TIFF_UNDEFINED:
|
case TIFF_UNDEFINED:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_UINT8;
|
fld->set_get_field_type = TIFF_SETGET_C32_UINT8;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_UINT8;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_ASCII:
|
case TIFF_ASCII:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_ASCII;
|
fld->set_get_field_type = TIFF_SETGET_C32_ASCII;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_ASCII;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_SHORT:
|
case TIFF_SHORT:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_UINT16;
|
fld->set_get_field_type = TIFF_SETGET_C32_UINT16;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_UINT16;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_LONG:
|
case TIFF_LONG:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_UINT32;
|
fld->set_get_field_type = TIFF_SETGET_C32_UINT32;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_UINT32;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_RATIONAL:
|
case TIFF_RATIONAL:
|
||||||
case TIFF_SRATIONAL:
|
case TIFF_SRATIONAL:
|
||||||
case TIFF_FLOAT:
|
case TIFF_FLOAT:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_FLOAT;
|
fld->set_get_field_type = TIFF_SETGET_C32_FLOAT;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_FLOAT;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_SBYTE:
|
case TIFF_SBYTE:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_SINT8;
|
fld->set_get_field_type = TIFF_SETGET_C32_SINT8;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_SINT8;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_SSHORT:
|
case TIFF_SSHORT:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_SINT16;
|
fld->set_get_field_type = TIFF_SETGET_C32_SINT16;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_SINT16;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_SLONG:
|
case TIFF_SLONG:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_SINT32;
|
fld->set_get_field_type = TIFF_SETGET_C32_SINT32;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_SINT32;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_DOUBLE:
|
case TIFF_DOUBLE:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_DOUBLE;
|
fld->set_get_field_type = TIFF_SETGET_C32_DOUBLE;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_DOUBLE;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_IFD:
|
case TIFF_IFD:
|
||||||
case TIFF_IFD8:
|
case TIFF_IFD8:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_IFD8;
|
fld->set_get_field_type = TIFF_SETGET_C32_IFD8;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_IFD8;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_LONG8:
|
case TIFF_LONG8:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_UINT64;
|
fld->set_get_field_type = TIFF_SETGET_C32_UINT64;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_UINT64;
|
|
||||||
break;
|
break;
|
||||||
case TIFF_SLONG8:
|
case TIFF_SLONG8:
|
||||||
fld->set_field_type = TIFF_SETGET_C32_SINT64;
|
fld->set_get_field_type = TIFF_SETGET_C32_SINT64;
|
||||||
fld->get_field_type = TIFF_SETGET_C32_SINT64;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fld->set_field_type = TIFF_SETGET_UNDEFINED;
|
fld->set_get_field_type = TIFF_SETGET_UNDEFINED;
|
||||||
fld->get_field_type = TIFF_SETGET_UNDEFINED;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fld->field_bit = FIELD_CUSTOM;
|
fld->field_bit = FIELD_CUSTOM;
|
||||||
|
|
@ -1198,38 +1186,51 @@ int TIFFMergeFieldInfo(TIFF *tif, const TIFFFieldInfo info[], uint32_t n)
|
||||||
{
|
{
|
||||||
tp->field_tag = info[i].field_tag;
|
tp->field_tag = info[i].field_tag;
|
||||||
if (info[i].field_readcount < TIFF_VARIABLE2 ||
|
if (info[i].field_readcount < TIFF_VARIABLE2 ||
|
||||||
info[i].field_readcount == 0 ||
|
info[i].field_writecount < TIFF_VARIABLE2)
|
||||||
info[i].field_writecount < TIFF_VARIABLE2 ||
|
|
||||||
info[i].field_writecount == 0)
|
|
||||||
{
|
{
|
||||||
/* The fields (field_readcount) and (field_writecount) may use the
|
/* The fields (field_readcount) and (field_writecount) may use the
|
||||||
* values TIFF_VARIABLE (-1), TIFF_SPP (-2), TIFF_VARIABLE2 (-3). */
|
* values TIFF_VARIABLE (-1), TIFF_SPP (-2), TIFF_VARIABLE2 (-3). */
|
||||||
TIFFErrorExtR(tif, module,
|
TIFFErrorExtR(
|
||||||
"The value of field_readcount and field_writecount "
|
tif, module,
|
||||||
"must be greater than or equal to -3 and not zero.");
|
"The value of field_readcount %d and field_writecount %d "
|
||||||
|
"must be greater than or equal to -3.",
|
||||||
|
info[i].field_readcount, info[i].field_writecount);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((info[i].field_readcount == 0 || info[i].field_writecount == 0) &&
|
||||||
|
info[i].field_bit != FIELD_IGNORE)
|
||||||
|
{
|
||||||
|
/* The fields (field_readcount) and (field_writecount) may only
|
||||||
|
be zero for pseudo_tags or ignored tags. */
|
||||||
|
TIFFErrorExtR(
|
||||||
|
tif, module,
|
||||||
|
"The value of field_readcount %d and field_writecount %d "
|
||||||
|
"may only be zero for field_bit = 0 (i.e. ignored tags).",
|
||||||
|
info[i].field_readcount, info[i].field_writecount);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tp->field_readcount = info[i].field_readcount;
|
tp->field_readcount = info[i].field_readcount;
|
||||||
tp->field_writecount = info[i].field_writecount;
|
tp->field_writecount = info[i].field_writecount;
|
||||||
tp->field_type = info[i].field_type;
|
tp->field_type = info[i].field_type;
|
||||||
tp->field_anonymous = 0;
|
tp->field_anonymous = 0;
|
||||||
tp->set_field_type =
|
tp->set_get_field_type =
|
||||||
_TIFFSetGetType(info[i].field_type, info[i].field_writecount,
|
_TIFFSetGetType(info[i].field_type, info[i].field_writecount,
|
||||||
info[i].field_passcount);
|
info[i].field_passcount);
|
||||||
tp->get_field_type =
|
|
||||||
_TIFFSetGetType(info[i].field_type, info[i].field_readcount,
|
|
||||||
info[i].field_passcount);
|
|
||||||
tp->field_bit = info[i].field_bit;
|
tp->field_bit = info[i].field_bit;
|
||||||
tp->field_oktochange = info[i].field_oktochange;
|
tp->field_oktochange = info[i].field_oktochange;
|
||||||
tp->field_passcount = info[i].field_passcount;
|
tp->field_passcount = info[i].field_passcount;
|
||||||
|
/* Define an empty static string to be passed as field_name where a NULL
|
||||||
|
* pointer is passed in. Otherwise, this will lead to buffer overflow
|
||||||
|
* furtheron. */
|
||||||
if (info[i].field_name == NULL)
|
if (info[i].field_name == NULL)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module,
|
static const char *string_static_empty = "";
|
||||||
"Field_name of %d.th allocation tag %d is NULL", i,
|
tp->field_name = (char *)string_static_empty;
|
||||||
info[i].field_tag);
|
}
|
||||||
return -1;
|
else
|
||||||
|
{
|
||||||
|
tp->field_name = info[i].field_name;
|
||||||
}
|
}
|
||||||
tp->field_name = info[i].field_name;
|
|
||||||
tp->field_subfields = NULL;
|
tp->field_subfields = NULL;
|
||||||
tp++;
|
tp++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
50
3rdparty/libtiff/tif_dirread.c
vendored
50
3rdparty/libtiff/tif_dirread.c
vendored
|
|
@ -47,6 +47,9 @@
|
||||||
#define TIFFCvtIEEEFloatToNative(tif, n, fp)
|
#define TIFFCvtIEEEFloatToNative(tif, n, fp)
|
||||||
#define TIFFCvtIEEEDoubleToNative(tif, n, dp)
|
#define TIFFCvtIEEEDoubleToNative(tif, n, dp)
|
||||||
#else
|
#else
|
||||||
|
/* If your machine does not support IEEE floating point then you will need to
|
||||||
|
* add support to tif_machdep.c to convert between the native format and
|
||||||
|
* IEEE format. */
|
||||||
extern void TIFFCvtIEEEFloatToNative(TIFF *, uint32_t, float *);
|
extern void TIFFCvtIEEEFloatToNative(TIFF *, uint32_t, float *);
|
||||||
extern void TIFFCvtIEEEDoubleToNative(TIFF *, uint32_t, double *);
|
extern void TIFFCvtIEEEDoubleToNative(TIFF *, uint32_t, double *);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -2781,7 +2784,7 @@ TIFFReadDirEntryFloatArray(TIFF *tif, TIFFDirEntry *direntry, float **value)
|
||||||
case TIFF_FLOAT:
|
case TIFF_FLOAT:
|
||||||
if (tif->tif_flags & TIFF_SWAB)
|
if (tif->tif_flags & TIFF_SWAB)
|
||||||
TIFFSwabArrayOfLong((uint32_t *)origdata, count);
|
TIFFSwabArrayOfLong((uint32_t *)origdata, count);
|
||||||
TIFFCvtIEEEDoubleToNative(tif, count, (float *)origdata);
|
TIFFCvtIEEEFloatToNative(tif, count, (float *)origdata);
|
||||||
*value = (float *)origdata;
|
*value = (float *)origdata;
|
||||||
return (TIFFReadDirEntryErrOk);
|
return (TIFFReadDirEntryErrOk);
|
||||||
}
|
}
|
||||||
|
|
@ -4310,7 +4313,6 @@ int TIFFReadDirectory(TIFF *tif)
|
||||||
tif->tif_flags &= ~TIFF_CHOPPEDUPARRAYS;
|
tif->tif_flags &= ~TIFF_CHOPPEDUPARRAYS;
|
||||||
|
|
||||||
/* free any old stuff and reinit */
|
/* free any old stuff and reinit */
|
||||||
(*tif->tif_cleanup)(tif); /* cleanup any previous compression state */
|
|
||||||
TIFFFreeDirectory(tif);
|
TIFFFreeDirectory(tif);
|
||||||
TIFFDefaultDirectory(tif);
|
TIFFDefaultDirectory(tif);
|
||||||
|
|
||||||
|
|
@ -4403,10 +4405,13 @@ int TIFFReadDirectory(TIFF *tif)
|
||||||
TIFFReadDirectoryFindFieldInfo(tif, dp->tdir_tag, &fii);
|
TIFFReadDirectoryFindFieldInfo(tif, dp->tdir_tag, &fii);
|
||||||
if (fii == FAILED_FII)
|
if (fii == FAILED_FII)
|
||||||
{
|
{
|
||||||
TIFFWarningExtR(tif, module,
|
if (tif->tif_warn_about_unknown_tags)
|
||||||
"Unknown field with tag %" PRIu16 " (0x%" PRIx16
|
{
|
||||||
") encountered",
|
TIFFWarningExtR(tif, module,
|
||||||
dp->tdir_tag, dp->tdir_tag);
|
"Unknown field with tag %" PRIu16
|
||||||
|
" (0x%" PRIx16 ") encountered",
|
||||||
|
dp->tdir_tag, dp->tdir_tag);
|
||||||
|
}
|
||||||
/* the following knowingly leaks the
|
/* the following knowingly leaks the
|
||||||
anonymous field structure */
|
anonymous field structure */
|
||||||
const TIFFField *fld = _TIFFCreateAnonField(
|
const TIFFField *fld = _TIFFCreateAnonField(
|
||||||
|
|
@ -5281,6 +5286,7 @@ int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff,
|
||||||
const TIFFField *fip;
|
const TIFFField *fip;
|
||||||
uint32_t fii;
|
uint32_t fii;
|
||||||
|
|
||||||
|
assert(infoarray != NULL);
|
||||||
dircount = TIFFFetchDirectory(tif, diroff, &dir, NULL);
|
dircount = TIFFFetchDirectory(tif, diroff, &dir, NULL);
|
||||||
if (!dircount)
|
if (!dircount)
|
||||||
{
|
{
|
||||||
|
|
@ -5313,7 +5319,6 @@ int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free any old stuff and reinit. */
|
/* Free any old stuff and reinit. */
|
||||||
(*tif->tif_cleanup)(tif); /* cleanup any previous compression state */
|
|
||||||
TIFFFreeDirectory(tif);
|
TIFFFreeDirectory(tif);
|
||||||
/* Even if custom directories do not need the default settings of a standard
|
/* Even if custom directories do not need the default settings of a standard
|
||||||
* IFD, the pointer to the TIFFSetField() and TIFFGetField() (i.e.
|
* IFD, the pointer to the TIFFSetField() and TIFFGetField() (i.e.
|
||||||
|
|
@ -5344,18 +5349,25 @@ int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff,
|
||||||
TIFFReadDirectoryFindFieldInfo(tif, dp->tdir_tag, &fii);
|
TIFFReadDirectoryFindFieldInfo(tif, dp->tdir_tag, &fii);
|
||||||
if (fii == FAILED_FII)
|
if (fii == FAILED_FII)
|
||||||
{
|
{
|
||||||
TIFFWarningExtR(tif, module,
|
if (tif->tif_warn_about_unknown_tags)
|
||||||
"Unknown field with tag %" PRIu16 " (0x%" PRIx16
|
{
|
||||||
") encountered",
|
TIFFWarningExtR(tif, module,
|
||||||
dp->tdir_tag, dp->tdir_tag);
|
"Unknown field with tag %" PRIu16 " (0x%" PRIx16
|
||||||
|
") encountered",
|
||||||
|
dp->tdir_tag, dp->tdir_tag);
|
||||||
|
}
|
||||||
const TIFFField *fld = _TIFFCreateAnonField(
|
const TIFFField *fld = _TIFFCreateAnonField(
|
||||||
tif, dp->tdir_tag, (TIFFDataType)dp->tdir_type);
|
tif, dp->tdir_tag, (TIFFDataType)dp->tdir_type);
|
||||||
if (fld == NULL || !_TIFFMergeFields(tif, fld, 1))
|
if (fld == NULL || !_TIFFMergeFields(tif, fld, 1))
|
||||||
{
|
{
|
||||||
TIFFWarningExtR(tif, module,
|
if (tif->tif_warn_about_unknown_tags)
|
||||||
"Registering anonymous field with tag %" PRIu16
|
{
|
||||||
" (0x%" PRIx16 ") failed",
|
TIFFWarningExtR(
|
||||||
dp->tdir_tag, dp->tdir_tag);
|
tif, module,
|
||||||
|
"Registering anonymous field with tag %" PRIu16
|
||||||
|
" (0x%" PRIx16 ") failed",
|
||||||
|
dp->tdir_tag, dp->tdir_tag);
|
||||||
|
}
|
||||||
dp->tdir_ignore = TRUE;
|
dp->tdir_ignore = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -6273,19 +6285,19 @@ static int TIFFFetchNormalTag(TIFF *tif, TIFFDirEntry *dp, int recover)
|
||||||
}
|
}
|
||||||
fip = tif->tif_fields[fii];
|
fip = tif->tif_fields[fii];
|
||||||
assert(fip != NULL); /* should not happen */
|
assert(fip != NULL); /* should not happen */
|
||||||
assert(fip->set_field_type !=
|
assert(fip->set_get_field_type !=
|
||||||
TIFF_SETGET_OTHER); /* if so, we shouldn't arrive here but deal with
|
TIFF_SETGET_OTHER); /* if so, we shouldn't arrive here but deal with
|
||||||
this in specialized code */
|
this in specialized code */
|
||||||
assert(fip->set_field_type !=
|
assert(fip->set_get_field_type !=
|
||||||
TIFF_SETGET_INT); /* if so, we shouldn't arrive here as this is only
|
TIFF_SETGET_INT); /* if so, we shouldn't arrive here as this is only
|
||||||
the case for pseudo-tags */
|
the case for pseudo-tags */
|
||||||
err = TIFFReadDirEntryErrOk;
|
err = TIFFReadDirEntryErrOk;
|
||||||
switch (fip->set_field_type)
|
switch (fip->set_get_field_type)
|
||||||
{
|
{
|
||||||
case TIFF_SETGET_UNDEFINED:
|
case TIFF_SETGET_UNDEFINED:
|
||||||
TIFFErrorExtR(
|
TIFFErrorExtR(
|
||||||
tif, "TIFFFetchNormalTag",
|
tif, "TIFFFetchNormalTag",
|
||||||
"Defined set_field_type of custom tag %u (%s) is "
|
"Defined set_get_field_type of custom tag %u (%s) is "
|
||||||
"TIFF_SETGET_UNDEFINED and thus tag is not read from file",
|
"TIFF_SETGET_UNDEFINED and thus tag is not read from file",
|
||||||
fip->field_tag, fip->field_name);
|
fip->field_tag, fip->field_name);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
47
3rdparty/libtiff/tif_dirwrite.c
vendored
47
3rdparty/libtiff/tif_dirwrite.c
vendored
|
|
@ -35,6 +35,9 @@
|
||||||
#define TIFFCvtNativeToIEEEFloat(tif, n, fp)
|
#define TIFFCvtNativeToIEEEFloat(tif, n, fp)
|
||||||
#define TIFFCvtNativeToIEEEDouble(tif, n, dp)
|
#define TIFFCvtNativeToIEEEDouble(tif, n, dp)
|
||||||
#else
|
#else
|
||||||
|
/* If your machine does not support IEEE floating point then you will need to
|
||||||
|
* add support to tif_machdep.c to convert between the native format and
|
||||||
|
* IEEE format. */
|
||||||
extern void TIFFCvtNativeToIEEEFloat(TIFF *tif, uint32_t n, float *fp);
|
extern void TIFFCvtNativeToIEEEFloat(TIFF *tif, uint32_t n, float *fp);
|
||||||
extern void TIFFCvtNativeToIEEEDouble(TIFF *tif, uint32_t n, double *dp);
|
extern void TIFFCvtNativeToIEEEDouble(TIFF *tif, uint32_t n, double *dp);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -534,6 +537,7 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
{
|
{
|
||||||
_TIFFfreeExt(tif, tif->tif_rawdata);
|
_TIFFfreeExt(tif, tif->tif_rawdata);
|
||||||
tif->tif_rawdata = NULL;
|
tif->tif_rawdata = NULL;
|
||||||
|
tif->tif_rawcp = NULL;
|
||||||
tif->tif_rawcc = 0;
|
tif->tif_rawcc = 0;
|
||||||
tif->tif_rawdatasize = 0;
|
tif->tif_rawdatasize = 0;
|
||||||
tif->tif_rawdataoff = 0;
|
tif->tif_rawdataoff = 0;
|
||||||
|
|
@ -562,6 +566,8 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
tif->tif_dir.td_dirdatasize_write = 0;
|
tif->tif_dir.td_dirdatasize_write = 0;
|
||||||
if (isimage)
|
if (isimage)
|
||||||
{
|
{
|
||||||
|
/*-- Step 1: Process named tags for an image with FIELD bits
|
||||||
|
* associated. --*/
|
||||||
if (TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS))
|
if (TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS))
|
||||||
{
|
{
|
||||||
if (!TIFFWriteDirectoryTagShortLong(tif, &ndir, dir,
|
if (!TIFFWriteDirectoryTagShortLong(tif, &ndir, dir,
|
||||||
|
|
@ -860,6 +866,10 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
if (!TIFFWriteDirectoryTagSubifd(tif, &ndir, dir))
|
if (!TIFFWriteDirectoryTagSubifd(tif, &ndir, dir))
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
/*-- Step 2: Process named tags for an image with FIELD bits
|
||||||
|
added by a codec.
|
||||||
|
Attention: There is only code for some field_types,
|
||||||
|
which are actually used by current codecs. --*/
|
||||||
{
|
{
|
||||||
uint32_t n;
|
uint32_t n;
|
||||||
for (n = 0; n < tif->tif_nfields; n++)
|
for (n = 0; n < tif->tif_nfields; n++)
|
||||||
|
|
@ -869,7 +879,7 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
if ((o->field_bit >= FIELD_CODEC) &&
|
if ((o->field_bit >= FIELD_CODEC) &&
|
||||||
(TIFFFieldSet(tif, o->field_bit)))
|
(TIFFFieldSet(tif, o->field_bit)))
|
||||||
{
|
{
|
||||||
switch (o->set_field_type)
|
switch (o->set_get_field_type)
|
||||||
{
|
{
|
||||||
case TIFF_SETGET_ASCII:
|
case TIFF_SETGET_ASCII:
|
||||||
{
|
{
|
||||||
|
|
@ -879,7 +889,7 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
assert(o->field_readcount == TIFF_VARIABLE);
|
assert(o->field_readcount == TIFF_VARIABLE);
|
||||||
assert(o->field_passcount == 0);
|
assert(o->field_passcount == 0);
|
||||||
TIFFGetField(tif, o->field_tag, &pb);
|
TIFFGetField(tif, o->field_tag, &pb);
|
||||||
pa = (uint32_t)(strlen(pb));
|
pa = (uint32_t)(strlen(pb) + 1);
|
||||||
if (!TIFFWriteDirectoryTagAscii(
|
if (!TIFFWriteDirectoryTagAscii(
|
||||||
tif, &ndir, dir, (uint16_t)o->field_tag,
|
tif, &ndir, dir, (uint16_t)o->field_tag,
|
||||||
pa, pb))
|
pa, pb))
|
||||||
|
|
@ -938,6 +948,8 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*-- Step 3: Process custom tags without FIELD bit for an image
|
||||||
|
* or for custom IFDs (e.g. EXIF) with !isimage. --*/
|
||||||
for (m = 0; m < (uint32_t)(tif->tif_dir.td_customValueCount); m++)
|
for (m = 0; m < (uint32_t)(tif->tif_dir.td_customValueCount); m++)
|
||||||
{
|
{
|
||||||
uint16_t tag =
|
uint16_t tag =
|
||||||
|
|
@ -1008,7 +1020,8 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
case TIFF_RATIONAL:
|
case TIFF_RATIONAL:
|
||||||
{
|
{
|
||||||
/*-- Rational2Double: For Rationals evaluate
|
/*-- Rational2Double: For Rationals evaluate
|
||||||
* "set_field_type" to determine internal storage size. */
|
* "set_get_field_type" to determine internal storage size.
|
||||||
|
*/
|
||||||
int tv_size;
|
int tv_size;
|
||||||
tv_size = TIFFFieldSetGetSize(
|
tv_size = TIFFFieldSetGetSize(
|
||||||
tif->tif_dir.td_customValues[m].info);
|
tif->tif_dir.td_customValues[m].info);
|
||||||
|
|
@ -1030,11 +1043,11 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
* tv_size==4 should be set as default. */
|
* tv_size==4 should be set as default. */
|
||||||
if (tv_size != 4)
|
if (tv_size != 4)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif,
|
TIFFErrorExtR(
|
||||||
"TIFFLib: _TIFFWriteDirectorySec()",
|
tif, "TIFFLib: _TIFFWriteDirectorySec()",
|
||||||
"Rational2Double: .set_field_type is "
|
"Rational2Double: .set_get_field_type is "
|
||||||
"not 4 but %d",
|
"not 4 but %d",
|
||||||
tv_size);
|
tv_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1042,7 +1055,8 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
case TIFF_SRATIONAL:
|
case TIFF_SRATIONAL:
|
||||||
{
|
{
|
||||||
/*-- Rational2Double: For Rationals evaluate
|
/*-- Rational2Double: For Rationals evaluate
|
||||||
* "set_field_type" to determine internal storage size. */
|
* "set_get_field_type" to determine internal storage size.
|
||||||
|
*/
|
||||||
int tv_size;
|
int tv_size;
|
||||||
tv_size = TIFFFieldSetGetSize(
|
tv_size = TIFFFieldSetGetSize(
|
||||||
tif->tif_dir.td_customValues[m].info);
|
tif->tif_dir.td_customValues[m].info);
|
||||||
|
|
@ -1064,11 +1078,11 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
* tv_size==4 should be set as default. */
|
* tv_size==4 should be set as default. */
|
||||||
if (tv_size != 4)
|
if (tv_size != 4)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif,
|
TIFFErrorExtR(
|
||||||
"TIFFLib: _TIFFWriteDirectorySec()",
|
tif, "TIFFLib: _TIFFWriteDirectorySec()",
|
||||||
"Rational2Double: .set_field_type is "
|
"Rational2Double: .set_get_field_type is "
|
||||||
"not 4 but %d",
|
"not 4 but %d",
|
||||||
tv_size);
|
tv_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1369,7 +1383,6 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone,
|
||||||
TIFFFreeDirectory(tif);
|
TIFFFreeDirectory(tif);
|
||||||
tif->tif_flags &= ~TIFF_DIRTYDIRECT;
|
tif->tif_flags &= ~TIFF_DIRTYDIRECT;
|
||||||
tif->tif_flags &= ~TIFF_DIRTYSTRIP;
|
tif->tif_flags &= ~TIFF_DIRTYSTRIP;
|
||||||
(*tif->tif_cleanup)(tif);
|
|
||||||
/* Reset directory-related state for subsequent directories. */
|
/* Reset directory-related state for subsequent directories. */
|
||||||
TIFFCreateDirectory(tif);
|
TIFFCreateDirectory(tif);
|
||||||
}
|
}
|
||||||
|
|
@ -2958,7 +2971,7 @@ static int TIFFWriteDirectoryTagCheckedFloatArray(TIFF *tif, uint32_t *ndir,
|
||||||
EvaluateIFDdatasizeWrite(tif, count, 4, ndir);
|
EvaluateIFDdatasizeWrite(tif, count, 4, ndir);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
TIFFCvtNativeToIEEEFloat(tif, count, &value);
|
TIFFCvtNativeToIEEEFloat(tif, count, value);
|
||||||
if (tif->tif_flags & TIFF_SWAB)
|
if (tif->tif_flags & TIFF_SWAB)
|
||||||
TIFFSwabArrayOfFloat(value, count);
|
TIFFSwabArrayOfFloat(value, count);
|
||||||
return (TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_FLOAT, count,
|
return (TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_FLOAT, count,
|
||||||
|
|
@ -2977,7 +2990,7 @@ static int TIFFWriteDirectoryTagCheckedDoubleArray(TIFF *tif, uint32_t *ndir,
|
||||||
EvaluateIFDdatasizeWrite(tif, count, 8, ndir);
|
EvaluateIFDdatasizeWrite(tif, count, 8, ndir);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
TIFFCvtNativeToIEEEDouble(tif, count, &value);
|
TIFFCvtNativeToIEEEDouble(tif, count, value);
|
||||||
if (tif->tif_flags & TIFF_SWAB)
|
if (tif->tif_flags & TIFF_SWAB)
|
||||||
TIFFSwabArrayOfDouble(value, count);
|
TIFFSwabArrayOfDouble(value, count);
|
||||||
return (TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_DOUBLE, count,
|
return (TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_DOUBLE, count,
|
||||||
|
|
|
||||||
127
3rdparty/libtiff/tif_fax3.c
vendored
127
3rdparty/libtiff/tif_fax3.c
vendored
|
|
@ -87,6 +87,10 @@ typedef struct
|
||||||
int EOLcnt; /* count of EOL codes recognized */
|
int EOLcnt; /* count of EOL codes recognized */
|
||||||
int eofReachedCount; /* number of times decode has been called with
|
int eofReachedCount; /* number of times decode has been called with
|
||||||
EOF already reached */
|
EOF already reached */
|
||||||
|
int eolReachedCount; /* number of times decode has been called with
|
||||||
|
EOL already reached */
|
||||||
|
int unexpectedReachedCount; /* number of times decode has been called with
|
||||||
|
"unexpedted" already reached */
|
||||||
TIFFFaxFillFunc fill; /* fill routine */
|
TIFFFaxFillFunc fill; /* fill routine */
|
||||||
uint32_t *runs; /* b&w runs for current/previous row */
|
uint32_t *runs; /* b&w runs for current/previous row */
|
||||||
uint32_t nruns; /* size of the refruns / curruns arrays */
|
uint32_t nruns; /* size of the refruns / curruns arrays */
|
||||||
|
|
@ -174,6 +178,8 @@ static int Fax3PreDecode(TIFF *tif, uint16_t s)
|
||||||
sp->data = 0;
|
sp->data = 0;
|
||||||
sp->EOLcnt = 0; /* force initial scan for EOL */
|
sp->EOLcnt = 0; /* force initial scan for EOL */
|
||||||
sp->eofReachedCount = 0;
|
sp->eofReachedCount = 0;
|
||||||
|
sp->eolReachedCount = 0;
|
||||||
|
sp->unexpectedReachedCount = 0;
|
||||||
/*
|
/*
|
||||||
* Decoder assumes lsb-to-msb bit order. Note that we select
|
* Decoder assumes lsb-to-msb bit order. Note that we select
|
||||||
* this here rather than in Fax3SetupState so that viewers can
|
* this here rather than in Fax3SetupState so that viewers can
|
||||||
|
|
@ -209,7 +215,12 @@ static void Fax3Unexpected(const char *module, TIFF *tif, uint32_t line,
|
||||||
line, isTiled(tif) ? "tile" : "strip",
|
line, isTiled(tif) ? "tile" : "strip",
|
||||||
(isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), a0);
|
(isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), a0);
|
||||||
}
|
}
|
||||||
#define unexpected(table, a0) Fax3Unexpected(module, tif, sp->line, a0)
|
#define unexpected(table, a0) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
Fax3Unexpected(module, tif, sp->line, a0); \
|
||||||
|
++sp->unexpectedReachedCount; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
static void Fax3Extension(const char *module, TIFF *tif, uint32_t line,
|
static void Fax3Extension(const char *module, TIFF *tif, uint32_t line,
|
||||||
uint32_t a0)
|
uint32_t a0)
|
||||||
|
|
@ -233,7 +244,12 @@ static void Fax3BadLength(const char *module, TIFF *tif, uint32_t line,
|
||||||
(isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), a0,
|
(isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), a0,
|
||||||
lastx);
|
lastx);
|
||||||
}
|
}
|
||||||
#define badlength(a0, lastx) Fax3BadLength(module, tif, sp->line, a0, lastx)
|
#define badlength(a0, lastx) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
Fax3BadLength(module, tif, sp->line, a0, lastx); \
|
||||||
|
++sp->eolReachedCount; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
static void Fax3PrematureEOF(const char *module, TIFF *tif, uint32_t line,
|
static void Fax3PrematureEOF(const char *module, TIFF *tif, uint32_t line,
|
||||||
uint32_t a0)
|
uint32_t a0)
|
||||||
|
|
@ -251,8 +267,55 @@ static void Fax3PrematureEOF(const char *module, TIFF *tif, uint32_t line,
|
||||||
++sp->eofReachedCount; \
|
++sp->eofReachedCount; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
static void Fax3TryG3WithoutEOL(const char *module, TIFF *tif, uint32_t line,
|
||||||
|
uint32_t a0)
|
||||||
|
{
|
||||||
|
TIFFWarningExtR(
|
||||||
|
tif, module,
|
||||||
|
"Try to decode (read) fax Group 3 data without EOL at line %" PRIu32
|
||||||
|
" of %s %" PRIu32 " (x %" PRIu32 "). Please check result",
|
||||||
|
line, isTiled(tif) ? "tile" : "strip",
|
||||||
|
(isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), a0);
|
||||||
|
}
|
||||||
|
#define tryG3WithoutEOL(a0) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
Fax3TryG3WithoutEOL(module, tif, sp->line, a0); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define Nop
|
#define Nop
|
||||||
|
|
||||||
|
static int CheckReachedCounters(TIFF *tif, const char *module,
|
||||||
|
Fax3CodecState *sp)
|
||||||
|
{
|
||||||
|
if (sp->eofReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, module,
|
||||||
|
"End of file (EOF) has already been reached %d times "
|
||||||
|
"within that %s.",
|
||||||
|
sp->eofReachedCount, isTiled(tif) ? "tile" : "strip");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (sp->eolReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, module,
|
||||||
|
"Bad line length (EOL) has already been reached %d times "
|
||||||
|
"within that %s",
|
||||||
|
sp->eolReachedCount, isTiled(tif) ? "tile" : "strip");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (sp->unexpectedReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, module,
|
||||||
|
"Bad code word (unexpected) has already been reached %d "
|
||||||
|
"times within that %s",
|
||||||
|
sp->unexpectedReachedCount,
|
||||||
|
isTiled(tif) ? "tile" : "strip");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode the requested amount of G3 1D-encoded data.
|
* Decode the requested amount of G3 1D-encoded data.
|
||||||
* @param buf destination buffer
|
* @param buf destination buffer
|
||||||
|
|
@ -269,14 +332,9 @@ static int Fax3Decode1D(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (sp->eofReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
if (CheckReachedCounters(tif, module, sp))
|
||||||
{
|
|
||||||
TIFFErrorExtR(
|
|
||||||
tif, module,
|
|
||||||
"End of file has already been reached %d times within that strip",
|
|
||||||
sp->eofReachedCount);
|
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
RETRY_WITHOUT_EOL_1D:
|
||||||
CACHE_STATE(tif, sp);
|
CACHE_STATE(tif, sp);
|
||||||
thisrun = sp->curruns;
|
thisrun = sp->curruns;
|
||||||
while (occ > 0)
|
while (occ > 0)
|
||||||
|
|
@ -289,7 +347,7 @@ static int Fax3Decode1D(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
printf("-------------------- %" PRIu32 "\n", tif->tif_row);
|
printf("-------------------- %" PRIu32 "\n", tif->tif_row);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
#endif
|
#endif
|
||||||
SYNC_EOL(EOF1D);
|
SYNC_EOL(EOF1D, RETRY_WITHOUT_EOL_1D);
|
||||||
EXPAND1D(EOF1Da);
|
EXPAND1D(EOF1Da);
|
||||||
(*sp->fill)(buf, thisrun, pa, lastx);
|
(*sp->fill)(buf, thisrun, pa, lastx);
|
||||||
buf += sp->b.rowbytes;
|
buf += sp->b.rowbytes;
|
||||||
|
|
@ -327,14 +385,9 @@ static int Fax3Decode2D(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (sp->eofReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
if (CheckReachedCounters(tif, module, sp))
|
||||||
{
|
|
||||||
TIFFErrorExtR(
|
|
||||||
tif, module,
|
|
||||||
"End of file has already been reached %d times within that strip",
|
|
||||||
sp->eofReachedCount);
|
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
RETRY_WITHOUT_EOL_2D:
|
||||||
CACHE_STATE(tif, sp);
|
CACHE_STATE(tif, sp);
|
||||||
while (occ > 0)
|
while (occ > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -345,7 +398,7 @@ static int Fax3Decode2D(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
printf("\nBitAcc=%08" PRIX32 ", BitsAvail = %d EOLcnt = %d", BitAcc,
|
printf("\nBitAcc=%08" PRIX32 ", BitsAvail = %d EOLcnt = %d", BitAcc,
|
||||||
BitsAvail, EOLcnt);
|
BitsAvail, EOLcnt);
|
||||||
#endif
|
#endif
|
||||||
SYNC_EOL(EOF2D);
|
SYNC_EOL(EOF2D, RETRY_WITHOUT_EOL_2D);
|
||||||
NeedBits8(1, EOF2D);
|
NeedBits8(1, EOF2D);
|
||||||
is1D = GetBits(1); /* 1D/2D-encoding tag bit */
|
is1D = GetBits(1); /* 1D/2D-encoding tag bit */
|
||||||
ClrBits(1);
|
ClrBits(1);
|
||||||
|
|
@ -535,6 +588,15 @@ static int Fax3SetupState(TIFF *tif)
|
||||||
"Bits/sample must be 1 for Group 3/4 encoding/decoding");
|
"Bits/sample must be 1 for Group 3/4 encoding/decoding");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
if (td->td_samplesperpixel != 1 &&
|
||||||
|
td->td_planarconfig != PLANARCONFIG_SEPARATE)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(
|
||||||
|
tif, module,
|
||||||
|
"Samples/pixel shall be 1 for Group 3/4 encoding/decoding, "
|
||||||
|
"or PlanarConfiguration must be set to Separate.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Calculate the scanline/tile widths.
|
* Calculate the scanline/tile widths.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1275,24 +1337,23 @@ static void Fax3Cleanup(TIFF *tif)
|
||||||
#define FIELD_OPTIONS (FIELD_CODEC + 7)
|
#define FIELD_OPTIONS (FIELD_CODEC + 7)
|
||||||
|
|
||||||
static const TIFFField faxFields[] = {
|
static const TIFFField faxFields[] = {
|
||||||
{TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED,
|
{TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, FALSE,
|
||||||
FIELD_PSEUDO, FALSE, FALSE, "FaxMode", NULL},
|
FALSE, "FaxMode", NULL},
|
||||||
{TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_OTHER,
|
{TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_OTHER, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "FaxFillFunc", NULL},
|
FALSE, FALSE, "FaxFillFunc", NULL},
|
||||||
{TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
{TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
||||||
TIFF_SETGET_UINT32, FIELD_BADFAXLINES, TRUE, FALSE, "BadFaxLines", NULL},
|
FIELD_BADFAXLINES, TRUE, FALSE, "BadFaxLines", NULL},
|
||||||
{TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
{TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
||||||
TIFF_SETGET_UINT16, FIELD_CLEANFAXDATA, TRUE, FALSE, "CleanFaxData", NULL},
|
FIELD_CLEANFAXDATA, TRUE, FALSE, "CleanFaxData", NULL},
|
||||||
{TIFFTAG_CONSECUTIVEBADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
{TIFFTAG_CONSECUTIVEBADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
||||||
TIFF_SETGET_UINT32, FIELD_BADFAXRUN, TRUE, FALSE, "ConsecutiveBadFaxLines",
|
FIELD_BADFAXRUN, TRUE, FALSE, "ConsecutiveBadFaxLines", NULL}};
|
||||||
NULL}};
|
|
||||||
static const TIFFField fax3Fields[] = {
|
static const TIFFField fax3Fields[] = {
|
||||||
{TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
{TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
||||||
TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group3Options", NULL},
|
FIELD_OPTIONS, FALSE, FALSE, "Group3Options", NULL},
|
||||||
};
|
};
|
||||||
static const TIFFField fax4Fields[] = {
|
static const TIFFField fax4Fields[] = {
|
||||||
{TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
{TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,
|
||||||
TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group4Options", NULL},
|
FIELD_OPTIONS, FALSE, FALSE, "Group4Options", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int Fax3VSetField(TIFF *tif, uint32_t tag, va_list ap)
|
static int Fax3VSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
|
|
@ -1555,14 +1616,8 @@ static int Fax4Decode(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (sp->eofReachedCount >= EOF_REACHED_COUNT_THRESHOLD)
|
if (CheckReachedCounters(tif, module, sp))
|
||||||
{
|
|
||||||
TIFFErrorExtR(
|
|
||||||
tif, module,
|
|
||||||
"End of file has already been reached %d times within that strip",
|
|
||||||
sp->eofReachedCount);
|
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
|
||||||
CACHE_STATE(tif, sp);
|
CACHE_STATE(tif, sp);
|
||||||
int start = sp->line;
|
int start = sp->line;
|
||||||
while (occ > 0)
|
while (occ > 0)
|
||||||
|
|
@ -1707,6 +1762,8 @@ static int Fax3DecodeRLE(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s)
|
||||||
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
TIFFErrorExtR(tif, module, "Fractional scanlines cannot be read");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
if (CheckReachedCounters(tif, module, sp))
|
||||||
|
return (-1);
|
||||||
CACHE_STATE(tif, sp);
|
CACHE_STATE(tif, sp);
|
||||||
thisrun = sp->curruns;
|
thisrun = sp->curruns;
|
||||||
while (occ > 0)
|
while (occ > 0)
|
||||||
|
|
|
||||||
41
3rdparty/libtiff/tif_fax3.h
vendored
41
3rdparty/libtiff/tif_fax3.h
vendored
|
|
@ -289,30 +289,39 @@ static const char *StateNames[] = {
|
||||||
* is non-zero then we still need to scan for the final flag
|
* is non-zero then we still need to scan for the final flag
|
||||||
* bit that is part of the EOL code.
|
* bit that is part of the EOL code.
|
||||||
*/
|
*/
|
||||||
#define SYNC_EOL(eoflab) \
|
#define SYNC_EOL(eoflab, retrywithouteol) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (EOLcnt == 0) \
|
if (!(sp->b.mode & FAXMODE_NOEOL)) /* skip EOL, if not present */ \
|
||||||
{ \
|
{ \
|
||||||
|
if (EOLcnt == 0) \
|
||||||
|
{ \
|
||||||
|
for (;;) \
|
||||||
|
{ \
|
||||||
|
NeedBits16(11, eoflab); \
|
||||||
|
if (GetBits(11) == 0) \
|
||||||
|
break; /* EOL found */ \
|
||||||
|
ClrBits(1); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
/* Now move after EOL or detect missing EOL. */ \
|
||||||
for (;;) \
|
for (;;) \
|
||||||
{ \
|
{ \
|
||||||
NeedBits16(11, eoflab); \
|
NeedBits8(8, noEOLFound); \
|
||||||
if (GetBits(11) == 0) \
|
if (GetBits(8)) \
|
||||||
break; \
|
break; \
|
||||||
ClrBits(1); \
|
ClrBits(8); \
|
||||||
} \
|
} \
|
||||||
|
while (GetBits(1) == 0) \
|
||||||
|
ClrBits(1); \
|
||||||
|
ClrBits(1); /* EOL bit */ \
|
||||||
|
EOLcnt = 0; /* reset EOL counter/flag */ \
|
||||||
|
break; /* existing EOL skipped, leave macro */ \
|
||||||
|
noEOLFound: \
|
||||||
|
sp->b.mode |= FAXMODE_NOEOL; \
|
||||||
|
tryG3WithoutEOL(a0); \
|
||||||
|
goto retrywithouteol; \
|
||||||
} \
|
} \
|
||||||
for (;;) \
|
|
||||||
{ \
|
|
||||||
NeedBits8(8, eoflab); \
|
|
||||||
if (GetBits(8)) \
|
|
||||||
break; \
|
|
||||||
ClrBits(8); \
|
|
||||||
} \
|
|
||||||
while (GetBits(1) == 0) \
|
|
||||||
ClrBits(1); \
|
|
||||||
ClrBits(1); /* EOL bit */ \
|
|
||||||
EOLcnt = 0; /* reset EOL counter/flag */ \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
197
3rdparty/libtiff/tif_getimage.c
vendored
197
3rdparty/libtiff/tif_getimage.c
vendored
|
|
@ -600,6 +600,27 @@ int TIFFRGBAImageGet(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
"No \"put\" routine setupl; probably can not handle image format");
|
"No \"put\" routine setupl; probably can not handle image format");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
/* Verify raster height against image height.
|
||||||
|
* Width is checked in img->get() function individually. */
|
||||||
|
if (0 <= img->row_offset && (uint32_t)img->row_offset < img->height)
|
||||||
|
{
|
||||||
|
uint32_t hx = img->height - img->row_offset;
|
||||||
|
if (h > hx)
|
||||||
|
{
|
||||||
|
/* Adapt parameters to read only available lines and put image
|
||||||
|
* at the bottom of the raster. */
|
||||||
|
raster += (size_t)(h - hx) * w;
|
||||||
|
h = hx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(img->tif, TIFFFileName(img->tif),
|
||||||
|
"Error in TIFFRGBAImageGet: row offset %d exceeds "
|
||||||
|
"image height %d",
|
||||||
|
img->row_offset, img->height);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return (*img->get)(img, raster, w, h);
|
return (*img->get)(img, raster, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -614,12 +635,10 @@ int TIFFReadRGBAImageOriented(TIFF *tif, uint32_t rwidth, uint32_t rheight,
|
||||||
TIFFRGBAImage img;
|
TIFFRGBAImage img;
|
||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
if (TIFFRGBAImageOK(tif, emsg) && TIFFRGBAImageBegin(&img, tif, stop, emsg))
|
if (TIFFRGBAImageBegin(&img, tif, stop, emsg))
|
||||||
{
|
{
|
||||||
img.req_orientation = (uint16_t)orientation;
|
img.req_orientation = (uint16_t)orientation;
|
||||||
/* XXX verify rwidth and rheight against width and height */
|
ok = TIFFRGBAImageGet(&img, raster, rwidth, rheight);
|
||||||
ok = TIFFRGBAImageGet(&img, raster + (rheight - img.height) * rwidth,
|
|
||||||
rwidth, img.height);
|
|
||||||
TIFFRGBAImageEnd(&img);
|
TIFFRGBAImageEnd(&img);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -726,6 +745,22 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
uint32_t leftmost_tw;
|
uint32_t leftmost_tw;
|
||||||
tmsize_t bufsize;
|
tmsize_t bufsize;
|
||||||
|
|
||||||
|
/* If the raster is smaller than the image,
|
||||||
|
* or if there is a col_offset, adapt the samples to be copied per row. */
|
||||||
|
uint32_t wmin;
|
||||||
|
|
||||||
|
if (0 <= img->col_offset && (uint32_t)img->col_offset < img->width)
|
||||||
|
{
|
||||||
|
wmin = TIFFmin(w, img->width - img->col_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif),
|
||||||
|
"Error in gtTileContig: column offset %d exceeds "
|
||||||
|
"image width %d",
|
||||||
|
img->col_offset, img->width);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
bufsize = TIFFTileSize(tif);
|
bufsize = TIFFTileSize(tif);
|
||||||
if (bufsize == 0)
|
if (bufsize == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -739,7 +774,7 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
flip = setorientation(img);
|
flip = setorientation(img);
|
||||||
if (flip & FLIP_VERTICALLY)
|
if (flip & FLIP_VERTICALLY)
|
||||||
{
|
{
|
||||||
if ((tw + w) > INT_MAX)
|
if (((int64_t)tw + w) > INT_MAX)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
||||||
"unsupported tile size (too wide)");
|
"unsupported tile size (too wide)");
|
||||||
|
|
@ -750,7 +785,7 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (tw > (INT_MAX + w))
|
if (tw > ((int64_t)INT_MAX + w))
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
||||||
"unsupported tile size (too wide)");
|
"unsupported tile size (too wide)");
|
||||||
|
|
@ -771,7 +806,14 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
*/
|
*/
|
||||||
leftmost_fromskew = img->col_offset % tw;
|
leftmost_fromskew = img->col_offset % tw;
|
||||||
leftmost_tw = tw - leftmost_fromskew;
|
leftmost_tw = tw - leftmost_fromskew;
|
||||||
leftmost_toskew = toskew + leftmost_fromskew;
|
int64_t skew_i64 = (int64_t)toskew + leftmost_fromskew;
|
||||||
|
if (skew_i64 > INT_MAX || skew_i64 < INT_MIN)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s %" PRId64, "Invalid skew",
|
||||||
|
skew_i64);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
leftmost_toskew = (int32_t)skew_i64;
|
||||||
for (row = 0; ret != 0 && row < h; row += nrow)
|
for (row = 0; ret != 0 && row < h; row += nrow)
|
||||||
{
|
{
|
||||||
rowstoread = th - (row + img->row_offset) % th;
|
rowstoread = th - (row + img->row_offset) % th;
|
||||||
|
|
@ -781,7 +823,8 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
this_toskew = leftmost_toskew;
|
this_toskew = leftmost_toskew;
|
||||||
tocol = 0;
|
tocol = 0;
|
||||||
col = img->col_offset;
|
col = img->col_offset;
|
||||||
while (tocol < w)
|
/* wmin: only write imagewidth if raster is bigger. */
|
||||||
|
while (tocol < wmin)
|
||||||
{
|
{
|
||||||
if (_TIFFReadTileAndAllocBuffer(tif, (void **)&buf, bufsize, col,
|
if (_TIFFReadTileAndAllocBuffer(tif, (void **)&buf, bufsize, col,
|
||||||
row + img->row_offset, 0,
|
row + img->row_offset, 0,
|
||||||
|
|
@ -793,12 +836,12 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
}
|
}
|
||||||
pos = ((row + img->row_offset) % th) * TIFFTileRowSize(tif) +
|
pos = ((row + img->row_offset) % th) * TIFFTileRowSize(tif) +
|
||||||
((tmsize_t)fromskew * img->samplesperpixel);
|
((tmsize_t)fromskew * img->samplesperpixel);
|
||||||
if (tocol + this_tw > w)
|
if (tocol + this_tw > wmin)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Rightmost tile is clipped on right side.
|
* Rightmost tile is clipped on right side.
|
||||||
*/
|
*/
|
||||||
fromskew = tw - (w - tocol);
|
fromskew = tw - (wmin - tocol);
|
||||||
this_tw = tw - fromskew;
|
this_tw = tw - fromskew;
|
||||||
this_toskew = toskew + fromskew;
|
this_toskew = toskew + fromskew;
|
||||||
}
|
}
|
||||||
|
|
@ -827,7 +870,9 @@ static int gtTileContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
for (line = 0; line < h; line++)
|
for (line = 0; line < h; line++)
|
||||||
{
|
{
|
||||||
uint32_t *left = raster + (line * w);
|
uint32_t *left = raster + (line * w);
|
||||||
uint32_t *right = left + w - 1;
|
/* Use wmin to only flip horizontally data in place and not complete
|
||||||
|
* raster-row. */
|
||||||
|
uint32_t *right = left + wmin - 1;
|
||||||
|
|
||||||
while (left < right)
|
while (left < right)
|
||||||
{
|
{
|
||||||
|
|
@ -874,6 +919,22 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
int32_t leftmost_fromskew;
|
int32_t leftmost_fromskew;
|
||||||
uint32_t leftmost_tw;
|
uint32_t leftmost_tw;
|
||||||
|
|
||||||
|
/* If the raster is smaller than the image,
|
||||||
|
* or if there is a col_offset, adapt the samples to be copied per row. */
|
||||||
|
uint32_t wmin;
|
||||||
|
if (0 <= img->col_offset && (uint32_t)img->col_offset < img->width)
|
||||||
|
{
|
||||||
|
wmin = TIFFmin(w, img->width - img->col_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif),
|
||||||
|
"Error in gtTileSeparate: column offset %d exceeds "
|
||||||
|
"image width %d",
|
||||||
|
img->col_offset, img->width);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
tilesize = TIFFTileSize(tif);
|
tilesize = TIFFTileSize(tif);
|
||||||
bufsize =
|
bufsize =
|
||||||
_TIFFMultiplySSize(tif, alpha ? 4 : 3, tilesize, "gtTileSeparate");
|
_TIFFMultiplySSize(tif, alpha ? 4 : 3, tilesize, "gtTileSeparate");
|
||||||
|
|
@ -888,7 +949,7 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
flip = setorientation(img);
|
flip = setorientation(img);
|
||||||
if (flip & FLIP_VERTICALLY)
|
if (flip & FLIP_VERTICALLY)
|
||||||
{
|
{
|
||||||
if ((tw + w) > INT_MAX)
|
if (((int64_t)tw + w) > INT_MAX)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
||||||
"unsupported tile size (too wide)");
|
"unsupported tile size (too wide)");
|
||||||
|
|
@ -899,7 +960,7 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (tw > (INT_MAX + w))
|
if (tw > ((int64_t)INT_MAX + w))
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s",
|
||||||
"unsupported tile size (too wide)");
|
"unsupported tile size (too wide)");
|
||||||
|
|
@ -933,7 +994,14 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
*/
|
*/
|
||||||
leftmost_fromskew = img->col_offset % tw;
|
leftmost_fromskew = img->col_offset % tw;
|
||||||
leftmost_tw = tw - leftmost_fromskew;
|
leftmost_tw = tw - leftmost_fromskew;
|
||||||
leftmost_toskew = toskew + leftmost_fromskew;
|
int64_t skew_i64 = (int64_t)toskew + leftmost_fromskew;
|
||||||
|
if (skew_i64 > INT_MAX || skew_i64 < INT_MIN)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s %" PRId64, "Invalid skew",
|
||||||
|
skew_i64);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
leftmost_toskew = (int32_t)skew_i64;
|
||||||
for (row = 0; ret != 0 && row < h; row += nrow)
|
for (row = 0; ret != 0 && row < h; row += nrow)
|
||||||
{
|
{
|
||||||
rowstoread = th - (row + img->row_offset) % th;
|
rowstoread = th - (row + img->row_offset) % th;
|
||||||
|
|
@ -943,7 +1011,8 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
this_toskew = leftmost_toskew;
|
this_toskew = leftmost_toskew;
|
||||||
tocol = 0;
|
tocol = 0;
|
||||||
col = img->col_offset;
|
col = img->col_offset;
|
||||||
while (tocol < w)
|
/* wmin: only write imagewidth if raster is bigger. */
|
||||||
|
while (tocol < wmin)
|
||||||
{
|
{
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
{
|
{
|
||||||
|
|
@ -1000,14 +1069,16 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For SEPARATE the pos-offset is per sample and should not be
|
||||||
|
* multiplied by img->samplesperpixel. */
|
||||||
pos = ((row + img->row_offset) % th) * TIFFTileRowSize(tif) +
|
pos = ((row + img->row_offset) % th) * TIFFTileRowSize(tif) +
|
||||||
((tmsize_t)fromskew * img->samplesperpixel);
|
(tmsize_t)fromskew;
|
||||||
if (tocol + this_tw > w)
|
if (tocol + this_tw > wmin)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Rightmost tile is clipped on right side.
|
* Rightmost tile is clipped on right side.
|
||||||
*/
|
*/
|
||||||
fromskew = tw - (w - tocol);
|
fromskew = tw - (wmin - tocol);
|
||||||
this_tw = tw - fromskew;
|
this_tw = tw - fromskew;
|
||||||
this_toskew = toskew + fromskew;
|
this_toskew = toskew + fromskew;
|
||||||
}
|
}
|
||||||
|
|
@ -1036,7 +1107,9 @@ static int gtTileSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
for (line = 0; line < h; line++)
|
for (line = 0; line < h; line++)
|
||||||
{
|
{
|
||||||
uint32_t *left = raster + (line * w);
|
uint32_t *left = raster + (line * w);
|
||||||
uint32_t *right = left + w - 1;
|
/* Use wmin to only flip horizontally data in place and not complete
|
||||||
|
* raster-row. */
|
||||||
|
uint32_t *right = left + wmin - 1;
|
||||||
|
|
||||||
while (left < right)
|
while (left < right)
|
||||||
{
|
{
|
||||||
|
|
@ -1071,10 +1144,28 @@ static int gtStripContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
uint16_t subsamplinghor, subsamplingver;
|
uint16_t subsamplinghor, subsamplingver;
|
||||||
uint32_t imagewidth = img->width;
|
uint32_t imagewidth = img->width;
|
||||||
tmsize_t scanline;
|
tmsize_t scanline;
|
||||||
|
/* fromskew, toskew are the increments within the input image or the raster
|
||||||
|
* from the end of a line to the start of the next line to read or write. */
|
||||||
int32_t fromskew, toskew;
|
int32_t fromskew, toskew;
|
||||||
int ret = 1, flip;
|
int ret = 1, flip;
|
||||||
tmsize_t maxstripsize;
|
tmsize_t maxstripsize;
|
||||||
|
|
||||||
|
/* If the raster is smaller than the image,
|
||||||
|
* or if there is a col_offset, adapt the samples to be copied per row. */
|
||||||
|
uint32_t wmin;
|
||||||
|
if (0 <= img->col_offset && (uint32_t)img->col_offset < imagewidth)
|
||||||
|
{
|
||||||
|
wmin = TIFFmin(w, imagewidth - img->col_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif),
|
||||||
|
"Error in gtStripContig: column offset %d exceeds "
|
||||||
|
"image width %d",
|
||||||
|
img->col_offset, imagewidth);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING, &subsamplinghor,
|
TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING, &subsamplinghor,
|
||||||
&subsamplingver);
|
&subsamplingver);
|
||||||
if (subsamplingver == 0)
|
if (subsamplingver == 0)
|
||||||
|
|
@ -1089,18 +1180,22 @@ static int gtStripContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
flip = setorientation(img);
|
flip = setorientation(img);
|
||||||
if (flip & FLIP_VERTICALLY)
|
if (flip & FLIP_VERTICALLY)
|
||||||
{
|
{
|
||||||
if (w > INT_MAX)
|
if (w > INT_MAX / 2)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "Width overflow");
|
TIFFErrorExtR(tif, TIFFFileName(tif), "Width overflow");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
y = h - 1;
|
y = h - 1;
|
||||||
toskew = -(int32_t)(w + w);
|
/* Skew back to the raster row before the currently written row
|
||||||
|
* -> one raster width plus copied image pixels. */
|
||||||
|
toskew = -(int32_t)(w + wmin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
y = 0;
|
y = 0;
|
||||||
toskew = -(int32_t)(w - w);
|
/* Skew forward to the end of the raster width of the row currently
|
||||||
|
* copied. */
|
||||||
|
toskew = w - wmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
|
TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
|
||||||
|
|
@ -1140,19 +1235,25 @@ static int gtStripContig(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
pos = ((row + img->row_offset) % rowsperstrip) * scanline +
|
pos = ((row + img->row_offset) % rowsperstrip) * scanline +
|
||||||
((tmsize_t)img->col_offset * img->samplesperpixel);
|
((tmsize_t)img->col_offset * img->samplesperpixel);
|
||||||
tmsize_t roffset = (tmsize_t)y * w;
|
tmsize_t roffset = (tmsize_t)y * w;
|
||||||
(*put)(img, raster + roffset, 0, y, w, nrow, fromskew, toskew,
|
(*put)(img, raster + roffset, 0, y, wmin, nrow, fromskew, toskew,
|
||||||
buf + pos);
|
buf + pos);
|
||||||
y += ((flip & FLIP_VERTICALLY) ? -(int32_t)nrow : (int32_t)nrow);
|
y += ((flip & FLIP_VERTICALLY) ? -(int32_t)nrow : (int32_t)nrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flip & FLIP_HORIZONTALLY)
|
if (flip & FLIP_HORIZONTALLY)
|
||||||
{
|
{
|
||||||
|
/* Flips the complete raster matrix horizontally. If raster width is
|
||||||
|
* larger than image width, data are moved horizontally to the right
|
||||||
|
* side.
|
||||||
|
* Use wmin to only flip data in place. */
|
||||||
uint32_t line;
|
uint32_t line;
|
||||||
|
|
||||||
for (line = 0; line < h; line++)
|
for (line = 0; line < h; line++)
|
||||||
{
|
{
|
||||||
uint32_t *left = raster + (line * w);
|
uint32_t *left = raster + (line * w);
|
||||||
uint32_t *right = left + w - 1;
|
/* Use wmin to only flip horizontally data in place and not complete
|
||||||
|
* raster-row. */
|
||||||
|
uint32_t *right = left + wmin - 1;
|
||||||
|
|
||||||
while (left < right)
|
while (left < right)
|
||||||
{
|
{
|
||||||
|
|
@ -1194,6 +1295,22 @@ static int gtStripSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
int ret = 1, flip;
|
int ret = 1, flip;
|
||||||
uint16_t colorchannels;
|
uint16_t colorchannels;
|
||||||
|
|
||||||
|
/* If the raster is smaller than the image,
|
||||||
|
* or if there is a col_offset, adapt the samples to be copied per row. */
|
||||||
|
uint32_t wmin;
|
||||||
|
if (0 <= img->col_offset && (uint32_t)img->col_offset < imagewidth)
|
||||||
|
{
|
||||||
|
wmin = TIFFmin(w, imagewidth - img->col_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, TIFFFileName(tif),
|
||||||
|
"Error in gtStripSeparate: column offset %d exceeds "
|
||||||
|
"image width %d",
|
||||||
|
img->col_offset, imagewidth);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
stripsize = TIFFStripSize(tif);
|
stripsize = TIFFStripSize(tif);
|
||||||
bufsize =
|
bufsize =
|
||||||
_TIFFMultiplySSize(tif, alpha ? 4 : 3, stripsize, "gtStripSeparate");
|
_TIFFMultiplySSize(tif, alpha ? 4 : 3, stripsize, "gtStripSeparate");
|
||||||
|
|
@ -1205,18 +1322,22 @@ static int gtStripSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
flip = setorientation(img);
|
flip = setorientation(img);
|
||||||
if (flip & FLIP_VERTICALLY)
|
if (flip & FLIP_VERTICALLY)
|
||||||
{
|
{
|
||||||
if (w > INT_MAX)
|
if (w > INT_MAX / 2)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "Width overflow");
|
TIFFErrorExtR(tif, TIFFFileName(tif), "Width overflow");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
y = h - 1;
|
y = h - 1;
|
||||||
toskew = -(int32_t)(w + w);
|
/* Skew back to the raster row before the currently written row
|
||||||
|
* -> one raster width plus one image width. */
|
||||||
|
toskew = -(int32_t)(w + wmin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
y = 0;
|
y = 0;
|
||||||
toskew = -(int32_t)(w - w);
|
/* Skew forward to the end of the raster width of the row currently
|
||||||
|
* written. */
|
||||||
|
toskew = w - wmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (img->photometric)
|
switch (img->photometric)
|
||||||
|
|
@ -1312,11 +1433,13 @@ static int gtStripSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For SEPARATE the pos-offset is per sample and should not be
|
||||||
|
* multiplied by img->samplesperpixel. */
|
||||||
pos = ((row + img->row_offset) % rowsperstrip) * scanline +
|
pos = ((row + img->row_offset) % rowsperstrip) * scanline +
|
||||||
((tmsize_t)img->col_offset * img->samplesperpixel);
|
(tmsize_t)img->col_offset;
|
||||||
tmsize_t roffset = (tmsize_t)y * w;
|
tmsize_t roffset = (tmsize_t)y * w;
|
||||||
(*put)(img, raster + roffset, 0, y, w, nrow, fromskew, toskew, p0 + pos,
|
(*put)(img, raster + roffset, 0, y, wmin, nrow, fromskew, toskew,
|
||||||
p1 + pos, p2 + pos, (alpha ? (pa + pos) : NULL));
|
p0 + pos, p1 + pos, p2 + pos, (alpha ? (pa + pos) : NULL));
|
||||||
y += ((flip & FLIP_VERTICALLY) ? -(int32_t)nrow : (int32_t)nrow);
|
y += ((flip & FLIP_VERTICALLY) ? -(int32_t)nrow : (int32_t)nrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1327,7 +1450,9 @@ static int gtStripSeparate(TIFFRGBAImage *img, uint32_t *raster, uint32_t w,
|
||||||
for (line = 0; line < h; line++)
|
for (line = 0; line < h; line++)
|
||||||
{
|
{
|
||||||
uint32_t *left = raster + (line * w);
|
uint32_t *left = raster + (line * w);
|
||||||
uint32_t *right = left + w - 1;
|
/* Use wmin to only flip horizontally data in place and not complete
|
||||||
|
* raster-row. */
|
||||||
|
uint32_t *right = left + wmin - 1;
|
||||||
|
|
||||||
while (left < right)
|
while (left < right)
|
||||||
{
|
{
|
||||||
|
|
@ -3140,8 +3265,8 @@ static int PickSeparateCase(TIFFRGBAImage *img)
|
||||||
case PHOTOMETRIC_SEPARATED:
|
case PHOTOMETRIC_SEPARATED:
|
||||||
if (img->bitspersample == 8 && img->samplesperpixel == 4)
|
if (img->bitspersample == 8 && img->samplesperpixel == 4)
|
||||||
{
|
{
|
||||||
img->alpha =
|
/* Not alpha, but seems like the only way to get 4th band */
|
||||||
1; // Not alpha, but seems like the only way to get 4th band
|
img->alpha = 1;
|
||||||
img->put.separate = putCMYKseparate8bittile;
|
img->put.separate = putCMYKseparate8bittile;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -3251,8 +3376,7 @@ int TIFFReadRGBAStripExt(TIFF *tif, uint32_t row, uint32_t *raster,
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TIFFRGBAImageOK(tif, emsg) &&
|
if (TIFFRGBAImageBegin(&img, tif, stop_on_error, emsg))
|
||||||
TIFFRGBAImageBegin(&img, tif, stop_on_error, emsg))
|
|
||||||
{
|
{
|
||||||
if (row >= img.height)
|
if (row >= img.height)
|
||||||
{
|
{
|
||||||
|
|
@ -3338,8 +3462,7 @@ int TIFFReadRGBATileExt(TIFF *tif, uint32_t col, uint32_t row, uint32_t *raster,
|
||||||
* Setup the RGBA reader.
|
* Setup the RGBA reader.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!TIFFRGBAImageOK(tif, emsg) ||
|
if (!TIFFRGBAImageBegin(&img, tif, stop_on_error, emsg))
|
||||||
!TIFFRGBAImageBegin(&img, tif, stop_on_error, emsg))
|
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, TIFFFileName(tif), "%s", emsg);
|
TIFFErrorExtR(tif, TIFFFileName(tif), "%s", emsg);
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
38
3rdparty/libtiff/tif_jpeg.c
vendored
38
3rdparty/libtiff/tif_jpeg.c
vendored
|
|
@ -90,6 +90,7 @@ int TIFFJPEGIsFullStripRequired_12(TIFF *tif);
|
||||||
|
|
||||||
/* HAVE_JPEGTURBO_DUAL_MODE_8_12 is defined for libjpeg-turbo >= 3.0 which
|
/* HAVE_JPEGTURBO_DUAL_MODE_8_12 is defined for libjpeg-turbo >= 3.0 which
|
||||||
* adds a dual-mode 8/12 bit API in the same library.
|
* adds a dual-mode 8/12 bit API in the same library.
|
||||||
|
* (note: libjpeg-turbo 2.2 was actually released as 3.0)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(HAVE_JPEGTURBO_DUAL_MODE_8_12)
|
#if defined(HAVE_JPEGTURBO_DUAL_MODE_8_12)
|
||||||
|
|
@ -205,6 +206,8 @@ typedef struct
|
||||||
int samplesperclump;
|
int samplesperclump;
|
||||||
|
|
||||||
JPEGOtherSettings otherSettings;
|
JPEGOtherSettings otherSettings;
|
||||||
|
|
||||||
|
int encode_raw_error;
|
||||||
} JPEGState;
|
} JPEGState;
|
||||||
|
|
||||||
#define JState(tif) ((JPEGState *)(tif)->tif_data)
|
#define JState(tif) ((JPEGState *)(tif)->tif_data)
|
||||||
|
|
@ -220,13 +223,13 @@ static int DecodeRowError(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s);
|
||||||
|
|
||||||
static const TIFFField jpegFields[] = {
|
static const TIFFField jpegFields[] = {
|
||||||
{TIFFTAG_JPEGTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,
|
{TIFFTAG_JPEGTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,
|
||||||
TIFF_SETGET_C32_UINT8, FIELD_JPEGTABLES, FALSE, TRUE, "JPEGTables", NULL},
|
FIELD_JPEGTABLES, FALSE, TRUE, "JPEGTables", NULL},
|
||||||
{TIFFTAG_JPEGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_JPEGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL},
|
TRUE, FALSE, "", NULL},
|
||||||
{TIFFTAG_JPEGCOLORMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_JPEGCOLORMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL},
|
FALSE, FALSE, "", NULL},
|
||||||
{TIFFTAG_JPEGTABLESMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_JPEGTABLESMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL}};
|
FALSE, FALSE, "", NULL}};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libjpeg interface layer.
|
* libjpeg interface layer.
|
||||||
|
|
@ -1769,7 +1772,8 @@ static int JPEGDecode(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s)
|
||||||
{
|
{
|
||||||
unsigned char *out_ptr =
|
unsigned char *out_ptr =
|
||||||
((unsigned char *)buf) + iPair * 3;
|
((unsigned char *)buf) + iPair * 3;
|
||||||
JSAMPLE *in_ptr = (JSAMPLE *)(tmpbuf + iPair * 2);
|
TIFF_JSAMPLE *in_ptr =
|
||||||
|
(TIFF_JSAMPLE *)(tmpbuf + iPair * 2);
|
||||||
out_ptr[0] = (unsigned char)((in_ptr[0] & 0xff0) >> 4);
|
out_ptr[0] = (unsigned char)((in_ptr[0] & 0xff0) >> 4);
|
||||||
out_ptr[1] =
|
out_ptr[1] =
|
||||||
(unsigned char)(((in_ptr[0] & 0xf) << 4) |
|
(unsigned char)(((in_ptr[0] & 0xf) << 4) |
|
||||||
|
|
@ -2191,9 +2195,12 @@ static int JPEGPreEncode(TIFF *tif, uint16_t s)
|
||||||
segment_width = TIFFhowmany_32(segment_width, sp->h_sampling);
|
segment_width = TIFFhowmany_32(segment_width, sp->h_sampling);
|
||||||
segment_height = TIFFhowmany_32(segment_height, sp->v_sampling);
|
segment_height = TIFFhowmany_32(segment_height, sp->v_sampling);
|
||||||
}
|
}
|
||||||
if (segment_width > 65535 || segment_height > 65535)
|
if (segment_width > (uint32_t)JPEG_MAX_DIMENSION ||
|
||||||
|
segment_height > (uint32_t)JPEG_MAX_DIMENSION)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module, "Strip/tile too large for JPEG");
|
TIFFErrorExtR(tif, module,
|
||||||
|
"Strip/tile too large for JPEG. Maximum dimension is %d",
|
||||||
|
(int)JPEG_MAX_DIMENSION);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
sp->cinfo.c.image_width = segment_width;
|
sp->cinfo.c.image_width = segment_width;
|
||||||
|
|
@ -2300,6 +2307,7 @@ static int JPEGPreEncode(TIFF *tif, uint16_t s)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
sp->scancount = 0;
|
sp->scancount = 0;
|
||||||
|
sp->encode_raw_error = FALSE;
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
@ -2396,6 +2404,13 @@ static int JPEGEncodeRaw(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s)
|
||||||
|
|
||||||
(void)s;
|
(void)s;
|
||||||
assert(sp != NULL);
|
assert(sp != NULL);
|
||||||
|
|
||||||
|
if (sp->encode_raw_error)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, tif->tif_name, "JPEGEncodeRaw() already failed");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* data is expected to be supplied in multiples of a clumpline */
|
/* data is expected to be supplied in multiples of a clumpline */
|
||||||
/* a clumpline is equivalent to v_sampling desubsampled scanlines */
|
/* a clumpline is equivalent to v_sampling desubsampled scanlines */
|
||||||
/* TODO: the following calculation of bytesperclumpline, should substitute
|
/* TODO: the following calculation of bytesperclumpline, should substitute
|
||||||
|
|
@ -2467,7 +2482,10 @@ static int JPEGEncodeRaw(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s)
|
||||||
{
|
{
|
||||||
int n = sp->cinfo.c.max_v_samp_factor * DCTSIZE;
|
int n = sp->cinfo.c.max_v_samp_factor * DCTSIZE;
|
||||||
if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n)
|
if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n)
|
||||||
|
{
|
||||||
|
sp->encode_raw_error = TRUE;
|
||||||
return (0);
|
return (0);
|
||||||
|
}
|
||||||
sp->scancount = 0;
|
sp->scancount = 0;
|
||||||
}
|
}
|
||||||
tif->tif_row += sp->v_sampling;
|
tif->tif_row += sp->v_sampling;
|
||||||
|
|
|
||||||
62
3rdparty/libtiff/tif_lerc.c
vendored
62
3rdparty/libtiff/tif_lerc.c
vendored
|
|
@ -93,7 +93,6 @@ typedef struct
|
||||||
#define LERCDecoderState(tif) GetLERCState(tif)
|
#define LERCDecoderState(tif) GetLERCState(tif)
|
||||||
#define LERCEncoderState(tif) GetLERCState(tif)
|
#define LERCEncoderState(tif) GetLERCState(tif)
|
||||||
|
|
||||||
static int LERCEncode(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s);
|
|
||||||
static int LERCDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s);
|
static int LERCDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s);
|
||||||
|
|
||||||
static int LERCFixupTags(TIFF *tif)
|
static int LERCFixupTags(TIFF *tif)
|
||||||
|
|
@ -222,7 +221,7 @@ static int SetupBuffers(TIFF *tif, LERCState *sp, const char *module)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module, "Too large uncompressed strip/tile");
|
TIFFErrorExtR(tif, module, "Too large uncompressed strip/tile");
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
||||||
sp->uncompressed_buffer = 0;
|
sp->uncompressed_buffer = NULL;
|
||||||
sp->uncompressed_alloc = 0;
|
sp->uncompressed_alloc = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -230,12 +229,12 @@ static int SetupBuffers(TIFF *tif, LERCState *sp, const char *module)
|
||||||
if (sp->uncompressed_alloc < new_alloc)
|
if (sp->uncompressed_alloc < new_alloc)
|
||||||
{
|
{
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
||||||
sp->uncompressed_buffer = _TIFFmallocExt(tif, new_alloc);
|
sp->uncompressed_buffer = (uint8_t *)_TIFFmallocExt(tif, new_alloc);
|
||||||
if (!sp->uncompressed_buffer)
|
if (!sp->uncompressed_buffer)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module, "Cannot allocate buffer");
|
TIFFErrorExtR(tif, module, "Cannot allocate buffer");
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
||||||
sp->uncompressed_buffer = 0;
|
sp->uncompressed_buffer = NULL;
|
||||||
sp->uncompressed_alloc = 0;
|
sp->uncompressed_alloc = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +266,7 @@ static int SetupBuffers(TIFF *tif, LERCState *sp, const char *module)
|
||||||
TIFFErrorExtR(tif, module, "Cannot allocate buffer");
|
TIFFErrorExtR(tif, module, "Cannot allocate buffer");
|
||||||
sp->mask_size = 0;
|
sp->mask_size = 0;
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer);
|
||||||
sp->uncompressed_buffer = 0;
|
sp->uncompressed_buffer = NULL;
|
||||||
sp->uncompressed_alloc = 0;
|
sp->uncompressed_alloc = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -348,7 +347,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
assert(lerc_data_sizet == (unsigned int)lerc_data_sizet);
|
assert(lerc_data_sizet == (unsigned int)lerc_data_sizet);
|
||||||
lerc_data = sp->compressed_buffer;
|
lerc_data = (uint8_t *)sp->compressed_buffer;
|
||||||
lerc_data_size = (unsigned int)lerc_data_sizet;
|
lerc_data_size = (unsigned int)lerc_data_sizet;
|
||||||
#else
|
#else
|
||||||
z_stream strm;
|
z_stream strm;
|
||||||
|
|
@ -369,7 +368,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s)
|
||||||
strm.avail_in = (uInt)tif->tif_rawcc;
|
strm.avail_in = (uInt)tif->tif_rawcc;
|
||||||
strm.next_in = tif->tif_rawcp;
|
strm.next_in = tif->tif_rawcp;
|
||||||
strm.avail_out = sp->compressed_size;
|
strm.avail_out = sp->compressed_size;
|
||||||
strm.next_out = sp->compressed_buffer;
|
strm.next_out = (Bytef *)sp->compressed_buffer;
|
||||||
zlib_ret = inflate(&strm, Z_FINISH);
|
zlib_ret = inflate(&strm, Z_FINISH);
|
||||||
if (zlib_ret != Z_STREAM_END && zlib_ret != Z_OK)
|
if (zlib_ret != Z_STREAM_END && zlib_ret != Z_OK)
|
||||||
{
|
{
|
||||||
|
|
@ -377,7 +376,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s)
|
||||||
inflateEnd(&strm);
|
inflateEnd(&strm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lerc_data = sp->compressed_buffer;
|
lerc_data = (uint8_t *)sp->compressed_buffer;
|
||||||
lerc_data_size = sp->compressed_size - strm.avail_out;
|
lerc_data_size = sp->compressed_size - strm.avail_out;
|
||||||
inflateEnd(&strm);
|
inflateEnd(&strm);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -396,7 +395,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
lerc_data = sp->compressed_buffer;
|
lerc_data = (uint8_t *)sp->compressed_buffer;
|
||||||
lerc_data_size = (unsigned int)zstd_ret;
|
lerc_data_size = (unsigned int)zstd_ret;
|
||||||
#else
|
#else
|
||||||
TIFFErrorExtR(tif, module, "ZSTD support missing");
|
TIFFErrorExtR(tif, module, "ZSTD support missing");
|
||||||
|
|
@ -568,7 +567,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s)
|
||||||
{
|
{
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer_multiband);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer_multiband);
|
||||||
sp->uncompressed_buffer_multiband =
|
sp->uncompressed_buffer_multiband =
|
||||||
_TIFFmallocExt(tif, num_bytes_needed);
|
(uint8_t *)_TIFFmallocExt(tif, num_bytes_needed);
|
||||||
if (!sp->uncompressed_buffer_multiband)
|
if (!sp->uncompressed_buffer_multiband)
|
||||||
{
|
{
|
||||||
sp->uncompressed_buffer_multiband_alloc = 0;
|
sp->uncompressed_buffer_multiband_alloc = 0;
|
||||||
|
|
@ -752,7 +751,7 @@ static int LERCDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
assert(sp != NULL);
|
assert(sp != NULL);
|
||||||
assert(sp->state == LSTATE_INIT_DECODE);
|
assert(sp->state == LSTATE_INIT_DECODE);
|
||||||
|
|
||||||
if (sp->uncompressed_buffer == 0)
|
if (sp->uncompressed_buffer == NULL)
|
||||||
{
|
{
|
||||||
memset(op, 0, (size_t)occ);
|
memset(op, 0, (size_t)occ);
|
||||||
TIFFErrorExtR(tif, module, "Uncompressed buffer not allocated");
|
TIFFErrorExtR(tif, module, "Uncompressed buffer not allocated");
|
||||||
|
|
@ -773,6 +772,8 @@ static int LERCDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef LERC_READ_ONLY
|
||||||
|
|
||||||
static int LERCSetupEncode(TIFF *tif)
|
static int LERCSetupEncode(TIFF *tif)
|
||||||
{
|
{
|
||||||
LERCState *sp = LERCEncoderState(tif);
|
LERCState *sp = LERCEncoderState(tif);
|
||||||
|
|
@ -1005,7 +1006,7 @@ static int LERCPostEncode(TIFF *tif)
|
||||||
{
|
{
|
||||||
_TIFFfreeExt(tif, sp->uncompressed_buffer_multiband);
|
_TIFFfreeExt(tif, sp->uncompressed_buffer_multiband);
|
||||||
sp->uncompressed_buffer_multiband =
|
sp->uncompressed_buffer_multiband =
|
||||||
_TIFFmallocExt(tif, num_bytes_needed);
|
(uint8_t *)_TIFFmallocExt(tif, num_bytes_needed);
|
||||||
if (!sp->uncompressed_buffer_multiband)
|
if (!sp->uncompressed_buffer_multiband)
|
||||||
{
|
{
|
||||||
sp->uncompressed_buffer_multiband_alloc = 0;
|
sp->uncompressed_buffer_multiband_alloc = 0;
|
||||||
|
|
@ -1126,7 +1127,8 @@ static int LERCPostEncode(TIFF *tif)
|
||||||
sp->uncompressed_buffer_multiband, sp->lerc_version,
|
sp->uncompressed_buffer_multiband, sp->lerc_version,
|
||||||
GetLercDataType(tif), 1, sp->segment_width, sp->segment_height,
|
GetLercDataType(tif), 1, sp->segment_width, sp->segment_height,
|
||||||
dst_nbands, dst_nbands, sp->mask_buffer, sp->maxzerror,
|
dst_nbands, dst_nbands, sp->mask_buffer, sp->maxzerror,
|
||||||
sp->compressed_buffer, sp->compressed_size, &numBytesWritten);
|
(unsigned char *)sp->compressed_buffer, sp->compressed_size,
|
||||||
|
&numBytesWritten);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1139,7 +1141,8 @@ static int LERCPostEncode(TIFF *tif)
|
||||||
use_mask ? 1 : 0,
|
use_mask ? 1 : 0,
|
||||||
#endif
|
#endif
|
||||||
use_mask ? sp->mask_buffer : NULL, sp->maxzerror,
|
use_mask ? sp->mask_buffer : NULL, sp->maxzerror,
|
||||||
sp->compressed_buffer, sp->compressed_size, &numBytesWritten);
|
(unsigned char *)sp->compressed_buffer, sp->compressed_size,
|
||||||
|
&numBytesWritten);
|
||||||
}
|
}
|
||||||
if (lerc_ret != 0)
|
if (lerc_ret != 0)
|
||||||
{
|
{
|
||||||
|
|
@ -1271,7 +1274,7 @@ static int LERCPostEncode(TIFF *tif)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
uint8_t *tif_rawdata_backup = tif->tif_rawdata;
|
uint8_t *tif_rawdata_backup = tif->tif_rawdata;
|
||||||
tif->tif_rawdata = sp->compressed_buffer;
|
tif->tif_rawdata = (uint8_t *)sp->compressed_buffer;
|
||||||
tif->tif_rawcc = numBytesWritten;
|
tif->tif_rawcc = numBytesWritten;
|
||||||
ret = TIFFFlushData1(tif);
|
ret = TIFFFlushData1(tif);
|
||||||
tif->tif_rawdata = tif_rawdata_backup;
|
tif->tif_rawdata = tif_rawdata_backup;
|
||||||
|
|
@ -1282,11 +1285,13 @@ static int LERCPostEncode(TIFF *tif)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* LERC_READ_ONLY */
|
||||||
|
|
||||||
static void LERCCleanup(TIFF *tif)
|
static void LERCCleanup(TIFF *tif)
|
||||||
{
|
{
|
||||||
LERCState *sp = GetLERCState(tif);
|
LERCState *sp = GetLERCState(tif);
|
||||||
|
|
||||||
assert(sp != 0);
|
assert(sp != NULL);
|
||||||
|
|
||||||
tif->tif_tagmethods.vgetfield = sp->vgetparent;
|
tif->tif_tagmethods.vgetfield = sp->vgetparent;
|
||||||
tif->tif_tagmethods.vsetfield = sp->vsetparent;
|
tif->tif_tagmethods.vsetfield = sp->vsetparent;
|
||||||
|
|
@ -1311,21 +1316,18 @@ static void LERCCleanup(TIFF *tif)
|
||||||
|
|
||||||
static const TIFFField LERCFields[] = {
|
static const TIFFField LERCFields[] = {
|
||||||
{TIFFTAG_LERC_PARAMETERS, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG, 0,
|
{TIFFTAG_LERC_PARAMETERS, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG, 0,
|
||||||
TIFF_SETGET_C32_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, FALSE, TRUE,
|
TIFF_SETGET_C32_UINT32, FIELD_CUSTOM, FALSE, TRUE,
|
||||||
"LercParameters", NULL},
|
(char *)"LercParameters", NULL},
|
||||||
{TIFFTAG_LERC_MAXZERROR, 0, 0, TIFF_ANY, 0, TIFF_SETGET_DOUBLE,
|
{TIFFTAG_LERC_MAXZERROR, 0, 0, TIFF_ANY, 0, TIFF_SETGET_DOUBLE,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "LercMaximumError",
|
FIELD_PSEUDO, TRUE, FALSE, (char *)"LercMaximumError", NULL},
|
||||||
NULL},
|
{TIFFTAG_LERC_VERSION, 0, 0, TIFF_ANY, 0, TIFF_SETGET_UINT32, FIELD_PSEUDO,
|
||||||
{TIFFTAG_LERC_VERSION, 0, 0, TIFF_ANY, 0, TIFF_SETGET_UINT32,
|
FALSE, FALSE, (char *)"LercVersion", NULL},
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "LercVersion", NULL},
|
|
||||||
{TIFFTAG_LERC_ADD_COMPRESSION, 0, 0, TIFF_ANY, 0, TIFF_SETGET_UINT32,
|
{TIFFTAG_LERC_ADD_COMPRESSION, 0, 0, TIFF_ANY, 0, TIFF_SETGET_UINT32,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE,
|
FIELD_PSEUDO, FALSE, FALSE, (char *)"LercAdditionalCompression", NULL},
|
||||||
"LercAdditionalCompression", NULL},
|
{TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
{TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
FALSE, (char *)"ZSTD zstd_compress_level", NULL},
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE,
|
{TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
"ZSTD zstd_compress_level", NULL},
|
FALSE, (char *)"", NULL},
|
||||||
{TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int LERCVSetFieldBase(TIFF *tif, uint32_t tag, ...)
|
static int LERCVSetFieldBase(TIFF *tif, uint32_t tag, ...)
|
||||||
|
|
@ -1517,12 +1519,14 @@ int TIFFInitLERC(TIFF *tif, int scheme)
|
||||||
tif->tif_decoderow = LERCDecode;
|
tif->tif_decoderow = LERCDecode;
|
||||||
tif->tif_decodestrip = LERCDecode;
|
tif->tif_decodestrip = LERCDecode;
|
||||||
tif->tif_decodetile = LERCDecode;
|
tif->tif_decodetile = LERCDecode;
|
||||||
|
#ifndef LERC_READ_ONLY
|
||||||
tif->tif_setupencode = LERCSetupEncode;
|
tif->tif_setupencode = LERCSetupEncode;
|
||||||
tif->tif_preencode = LERCPreEncode;
|
tif->tif_preencode = LERCPreEncode;
|
||||||
tif->tif_postencode = LERCPostEncode;
|
tif->tif_postencode = LERCPostEncode;
|
||||||
tif->tif_encoderow = LERCEncode;
|
tif->tif_encoderow = LERCEncode;
|
||||||
tif->tif_encodestrip = LERCEncode;
|
tif->tif_encodestrip = LERCEncode;
|
||||||
tif->tif_encodetile = LERCEncode;
|
tif->tif_encodetile = LERCEncode;
|
||||||
|
#endif
|
||||||
tif->tif_cleanup = LERCCleanup;
|
tif->tif_cleanup = LERCCleanup;
|
||||||
|
|
||||||
/* Default values for codec-specific fields */
|
/* Default values for codec-specific fields */
|
||||||
|
|
|
||||||
29
3rdparty/libtiff/tif_luv.c
vendored
29
3rdparty/libtiff/tif_luv.c
vendored
|
|
@ -145,9 +145,11 @@
|
||||||
* quantization errors into noise.
|
* quantization errors into noise.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* State block for each open TIFF
|
* State block for each open TIFF
|
||||||
|
|
@ -770,13 +772,26 @@ static int LogLuvEncodeTile(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
||||||
#undef exp2 /* Conflict with C'99 function */
|
#undef exp2 /* Conflict with C'99 function */
|
||||||
#define exp2(x) exp(M_LN2 *(x))
|
#define exp2(x) exp(M_LN2 *(x))
|
||||||
|
|
||||||
|
#define TIFF_RAND_MAX 32767
|
||||||
|
|
||||||
|
// From POSIX.1-2001 as an example of an implementation of rand()
|
||||||
|
static uint32_t _TIFFRand()
|
||||||
|
{
|
||||||
|
static uint32_t nCounter = 0;
|
||||||
|
if (!nCounter)
|
||||||
|
nCounter = (uint32_t)(time(NULL) & UINT32_MAX);
|
||||||
|
++nCounter;
|
||||||
|
uint32_t nCounterLocal =
|
||||||
|
(uint32_t)(((uint64_t)(nCounter)*1103515245U + 12345U) & UINT32_MAX);
|
||||||
|
nCounter = nCounterLocal;
|
||||||
|
return (nCounterLocal / 65536U) % (TIFF_RAND_MAX + 1);
|
||||||
|
};
|
||||||
|
|
||||||
static int tiff_itrunc(double x, int m)
|
static int tiff_itrunc(double x, int m)
|
||||||
{
|
{
|
||||||
if (m == SGILOGENCODE_NODITHER)
|
if (m == SGILOGENCODE_NODITHER)
|
||||||
return (int)x;
|
return (int)x;
|
||||||
/* Silence CoverityScan warning about bad crypto function */
|
return (int)(x + _TIFFRand() * (1. / TIFF_RAND_MAX) - .5);
|
||||||
/* coverity[dont_call] */
|
|
||||||
return (int)(x + rand() * (1. / RAND_MAX) - .5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !LOGLUV_PUBLIC
|
#if !LOGLUV_PUBLIC
|
||||||
|
|
@ -1774,10 +1789,10 @@ static int LogLuvVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField LogLuvFields[] = {
|
static const TIFFField LogLuvFields[] = {
|
||||||
{TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT,
|
{TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "SGILogDataFmt", NULL},
|
TRUE, FALSE, "SGILogDataFmt", NULL},
|
||||||
{TIFFTAG_SGILOGENCODE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT,
|
{TIFFTAG_SGILOGENCODE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "SGILogEncode", NULL}};
|
TRUE, FALSE, "SGILogEncode", NULL}};
|
||||||
|
|
||||||
int TIFFInitSGILog(TIFF *tif, int scheme)
|
int TIFFInitSGILog(TIFF *tif, int scheme)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
5
3rdparty/libtiff/tif_lzma.c
vendored
5
3rdparty/libtiff/tif_lzma.c
vendored
|
|
@ -450,9 +450,8 @@ static int LZMAVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField lzmaFields[] = {
|
static const TIFFField lzmaFields[] = {
|
||||||
{TIFFTAG_LZMAPRESET, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_LZMAPRESET, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE,
|
FALSE, "LZMA2 Compression Preset", NULL},
|
||||||
"LZMA2 Compression Preset", NULL},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int TIFFInitLZMA(TIFF *tif, int scheme)
|
int TIFFInitLZMA(TIFF *tif, int scheme)
|
||||||
|
|
|
||||||
12
3rdparty/libtiff/tif_lzw.c
vendored
12
3rdparty/libtiff/tif_lzw.c
vendored
|
|
@ -168,7 +168,6 @@ static int LZWDecode(TIFF *tif, uint8_t *op0, tmsize_t occ0, uint16_t s);
|
||||||
#ifdef LZW_COMPAT
|
#ifdef LZW_COMPAT
|
||||||
static int LZWDecodeCompat(TIFF *tif, uint8_t *op0, tmsize_t occ0, uint16_t s);
|
static int LZWDecodeCompat(TIFF *tif, uint8_t *op0, tmsize_t occ0, uint16_t s);
|
||||||
#endif
|
#endif
|
||||||
static void cl_hash(LZWCodecState *);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LZW Decoder.
|
* LZW Decoder.
|
||||||
|
|
@ -733,6 +732,7 @@ after_loop:
|
||||||
if (occ > 0)
|
if (occ > 0)
|
||||||
{
|
{
|
||||||
memset(op, 0, (size_t)occ);
|
memset(op, 0, (size_t)occ);
|
||||||
|
sp->read_error = 1;
|
||||||
TIFFErrorExtR(tif, module,
|
TIFFErrorExtR(tif, module,
|
||||||
"Not enough data at scanline %" PRIu32 " (short %" PRIu64
|
"Not enough data at scanline %" PRIu32 " (short %" PRIu64
|
||||||
" bytes)",
|
" bytes)",
|
||||||
|
|
@ -1017,6 +1017,10 @@ static int LZWDecodeCompat(TIFF *tif, uint8_t *op0, tmsize_t occ0, uint16_t s)
|
||||||
}
|
}
|
||||||
#endif /* LZW_COMPAT */
|
#endif /* LZW_COMPAT */
|
||||||
|
|
||||||
|
#ifndef LZW_READ_ONLY
|
||||||
|
|
||||||
|
static void cl_hash(LZWCodecState *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LZW Encoding.
|
* LZW Encoding.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1373,11 +1377,13 @@ static void cl_hash(LZWCodecState *sp)
|
||||||
hp->hash = -1;
|
hp->hash = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static void LZWCleanup(TIFF *tif)
|
static void LZWCleanup(TIFF *tif)
|
||||||
{
|
{
|
||||||
(void)TIFFPredictorCleanup(tif);
|
(void)TIFFPredictorCleanup(tif);
|
||||||
|
|
||||||
assert(tif->tif_data != 0);
|
assert(tif->tif_data != NULL);
|
||||||
|
|
||||||
if (LZWDecoderState(tif)->dec_codetab)
|
if (LZWDecoderState(tif)->dec_codetab)
|
||||||
_TIFFfreeExt(tif, LZWDecoderState(tif)->dec_codetab);
|
_TIFFfreeExt(tif, LZWDecoderState(tif)->dec_codetab);
|
||||||
|
|
@ -1416,12 +1422,14 @@ int TIFFInitLZW(TIFF *tif, int scheme)
|
||||||
tif->tif_decoderow = LZWDecode;
|
tif->tif_decoderow = LZWDecode;
|
||||||
tif->tif_decodestrip = LZWDecode;
|
tif->tif_decodestrip = LZWDecode;
|
||||||
tif->tif_decodetile = LZWDecode;
|
tif->tif_decodetile = LZWDecode;
|
||||||
|
#ifndef LZW_READ_ONLY
|
||||||
tif->tif_setupencode = LZWSetupEncode;
|
tif->tif_setupencode = LZWSetupEncode;
|
||||||
tif->tif_preencode = LZWPreEncode;
|
tif->tif_preencode = LZWPreEncode;
|
||||||
tif->tif_postencode = LZWPostEncode;
|
tif->tif_postencode = LZWPostEncode;
|
||||||
tif->tif_encoderow = LZWEncode;
|
tif->tif_encoderow = LZWEncode;
|
||||||
tif->tif_encodestrip = LZWEncode;
|
tif->tif_encodestrip = LZWEncode;
|
||||||
tif->tif_encodetile = LZWEncode;
|
tif->tif_encodetile = LZWEncode;
|
||||||
|
#endif
|
||||||
tif->tif_cleanup = LZWCleanup;
|
tif->tif_cleanup = LZWCleanup;
|
||||||
/*
|
/*
|
||||||
* Setup predictor setup.
|
* Setup predictor setup.
|
||||||
|
|
|
||||||
35
3rdparty/libtiff/tif_ojpeg.c
vendored
35
3rdparty/libtiff/tif_ojpeg.c
vendored
|
|
@ -181,26 +181,25 @@
|
||||||
|
|
||||||
static const TIFFField ojpegFields[] = {
|
static const TIFFField ojpegFields[] = {
|
||||||
{TIFFTAG_JPEGIFOFFSET, 1, 1, TIFF_LONG8, 0, TIFF_SETGET_UINT64,
|
{TIFFTAG_JPEGIFOFFSET, 1, 1, TIFF_LONG8, 0, TIFF_SETGET_UINT64,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGINTERCHANGEFORMAT, TRUE, FALSE,
|
FIELD_OJPEG_JPEGINTERCHANGEFORMAT, TRUE, FALSE, "JpegInterchangeFormat",
|
||||||
"JpegInterchangeFormat", NULL},
|
|
||||||
{TIFFTAG_JPEGIFBYTECOUNT, 1, 1, TIFF_LONG8, 0, TIFF_SETGET_UINT64,
|
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH, TRUE,
|
|
||||||
FALSE, "JpegInterchangeFormatLength", NULL},
|
|
||||||
{TIFFTAG_JPEGQTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
|
||||||
TIFF_SETGET_C32_UINT64, TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGQTABLES,
|
|
||||||
FALSE, TRUE, "JpegQTables", NULL},
|
|
||||||
{TIFFTAG_JPEGDCTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
|
||||||
TIFF_SETGET_C32_UINT64, TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGDCTABLES,
|
|
||||||
FALSE, TRUE, "JpegDcTables", NULL},
|
|
||||||
{TIFFTAG_JPEGACTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
|
||||||
TIFF_SETGET_C32_UINT64, TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGACTABLES,
|
|
||||||
FALSE, TRUE, "JpegAcTables", NULL},
|
|
||||||
{TIFFTAG_JPEGPROC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGPROC, FALSE, FALSE, "JpegProc",
|
|
||||||
NULL},
|
NULL},
|
||||||
|
{TIFFTAG_JPEGIFBYTECOUNT, 1, 1, TIFF_LONG8, 0, TIFF_SETGET_UINT64,
|
||||||
|
FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH, TRUE, FALSE,
|
||||||
|
"JpegInterchangeFormatLength", NULL},
|
||||||
|
{TIFFTAG_JPEGQTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
||||||
|
TIFF_SETGET_C32_UINT64, FIELD_OJPEG_JPEGQTABLES, FALSE, TRUE,
|
||||||
|
"JpegQTables", NULL},
|
||||||
|
{TIFFTAG_JPEGDCTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
||||||
|
TIFF_SETGET_C32_UINT64, FIELD_OJPEG_JPEGDCTABLES, FALSE, TRUE,
|
||||||
|
"JpegDcTables", NULL},
|
||||||
|
{TIFFTAG_JPEGACTABLES, TIFF_VARIABLE2, TIFF_VARIABLE2, TIFF_LONG8, 0,
|
||||||
|
TIFF_SETGET_C32_UINT64, FIELD_OJPEG_JPEGACTABLES, FALSE, TRUE,
|
||||||
|
"JpegAcTables", NULL},
|
||||||
|
{TIFFTAG_JPEGPROC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
||||||
|
FIELD_OJPEG_JPEGPROC, FALSE, FALSE, "JpegProc", NULL},
|
||||||
{TIFFTAG_JPEGRESTARTINTERVAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
{TIFFTAG_JPEGRESTARTINTERVAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_OJPEG_JPEGRESTARTINTERVAL, FALSE, FALSE,
|
FIELD_OJPEG_JPEGRESTARTINTERVAL, FALSE, FALSE, "JpegRestartInterval",
|
||||||
"JpegRestartInterval", NULL},
|
NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef LIBJPEG_ENCAP_EXTERNAL
|
#ifndef LIBJPEG_ENCAP_EXTERNAL
|
||||||
|
|
|
||||||
14
3rdparty/libtiff/tif_open.c
vendored
14
3rdparty/libtiff/tif_open.c
vendored
|
|
@ -37,7 +37,7 @@
|
||||||
/*
|
/*
|
||||||
* Dummy functions to fill the omitted client procedures.
|
* Dummy functions to fill the omitted client procedures.
|
||||||
*/
|
*/
|
||||||
static int _tiffDummyMapProc(thandle_t fd, void **pbase, toff_t *psize)
|
int _tiffDummyMapProc(thandle_t fd, void **pbase, toff_t *psize)
|
||||||
{
|
{
|
||||||
(void)fd;
|
(void)fd;
|
||||||
(void)pbase;
|
(void)pbase;
|
||||||
|
|
@ -45,7 +45,7 @@ static int _tiffDummyMapProc(thandle_t fd, void **pbase, toff_t *psize)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _tiffDummyUnmapProc(thandle_t fd, void *base, toff_t size)
|
void _tiffDummyUnmapProc(thandle_t fd, void *base, toff_t size)
|
||||||
{
|
{
|
||||||
(void)fd;
|
(void)fd;
|
||||||
(void)base;
|
(void)base;
|
||||||
|
|
@ -109,6 +109,15 @@ void TIFFOpenOptionsSetMaxCumulatedMemAlloc(TIFFOpenOptions *opts,
|
||||||
opts->max_cumulated_mem_alloc = max_cumulated_mem_alloc;
|
opts->max_cumulated_mem_alloc = max_cumulated_mem_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Whether a warning should be emitted when encountering a unknown tag.
|
||||||
|
* Default is FALSE since libtiff 4.7.1
|
||||||
|
*/
|
||||||
|
void TIFFOpenOptionsSetWarnAboutUnknownTags(TIFFOpenOptions *opts,
|
||||||
|
int warn_about_unknown_tags)
|
||||||
|
{
|
||||||
|
opts->warn_about_unknown_tags = warn_about_unknown_tags;
|
||||||
|
}
|
||||||
|
|
||||||
void TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
|
void TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
|
||||||
TIFFErrorHandlerExtR handler,
|
TIFFErrorHandlerExtR handler,
|
||||||
void *errorhandler_user_data)
|
void *errorhandler_user_data)
|
||||||
|
|
@ -386,6 +395,7 @@ TIFF *TIFFClientOpenExt(const char *name, const char *mode,
|
||||||
tif->tif_warnhandler_user_data = opts->warnhandler_user_data;
|
tif->tif_warnhandler_user_data = opts->warnhandler_user_data;
|
||||||
tif->tif_max_single_mem_alloc = opts->max_single_mem_alloc;
|
tif->tif_max_single_mem_alloc = opts->max_single_mem_alloc;
|
||||||
tif->tif_max_cumulated_mem_alloc = opts->max_cumulated_mem_alloc;
|
tif->tif_max_cumulated_mem_alloc = opts->max_cumulated_mem_alloc;
|
||||||
|
tif->tif_warn_about_unknown_tags = opts->warn_about_unknown_tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc)
|
if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc)
|
||||||
|
|
|
||||||
8
3rdparty/libtiff/tif_packbits.c
vendored
8
3rdparty/libtiff/tif_packbits.c
vendored
|
|
@ -31,6 +31,8 @@
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef PACKBITS_READ_ONLY
|
||||||
|
|
||||||
static int PackBitsPreEncode(TIFF *tif, uint16_t s)
|
static int PackBitsPreEncode(TIFF *tif, uint16_t s)
|
||||||
{
|
{
|
||||||
(void)s;
|
(void)s;
|
||||||
|
|
@ -78,7 +80,7 @@ static int PackBitsEncode(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s)
|
||||||
op = tif->tif_rawcp;
|
op = tif->tif_rawcp;
|
||||||
ep = tif->tif_rawdata + tif->tif_rawdatasize;
|
ep = tif->tif_rawdata + tif->tif_rawdatasize;
|
||||||
state = BASE;
|
state = BASE;
|
||||||
lastliteral = 0;
|
lastliteral = NULL;
|
||||||
while (cc > 0)
|
while (cc > 0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
@ -231,6 +233,8 @@ static int PackBitsEncodeChunk(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static int PackBitsDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
static int PackBitsDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
{
|
{
|
||||||
static const char module[] = "PackBitsDecode";
|
static const char module[] = "PackBitsDecode";
|
||||||
|
|
@ -314,11 +318,13 @@ int TIFFInitPackBits(TIFF *tif, int scheme)
|
||||||
tif->tif_decoderow = PackBitsDecode;
|
tif->tif_decoderow = PackBitsDecode;
|
||||||
tif->tif_decodestrip = PackBitsDecode;
|
tif->tif_decodestrip = PackBitsDecode;
|
||||||
tif->tif_decodetile = PackBitsDecode;
|
tif->tif_decodetile = PackBitsDecode;
|
||||||
|
#ifndef PACKBITS_READ_ONLY
|
||||||
tif->tif_preencode = PackBitsPreEncode;
|
tif->tif_preencode = PackBitsPreEncode;
|
||||||
tif->tif_postencode = PackBitsPostEncode;
|
tif->tif_postencode = PackBitsPostEncode;
|
||||||
tif->tif_encoderow = PackBitsEncode;
|
tif->tif_encoderow = PackBitsEncode;
|
||||||
tif->tif_encodestrip = PackBitsEncodeChunk;
|
tif->tif_encodestrip = PackBitsEncodeChunk;
|
||||||
tif->tif_encodetile = PackBitsEncodeChunk;
|
tif->tif_encodetile = PackBitsEncodeChunk;
|
||||||
|
#endif
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
#endif /* PACKBITS_SUPPORT */
|
#endif /* PACKBITS_SUPPORT */
|
||||||
|
|
|
||||||
8
3rdparty/libtiff/tif_pixarlog.c
vendored
8
3rdparty/libtiff/tif_pixarlog.c
vendored
|
|
@ -1596,10 +1596,10 @@ static int PixarLogVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField pixarlogFields[] = {
|
static const TIFFField pixarlogFields[] = {
|
||||||
{TIFFTAG_PIXARLOGDATAFMT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_PIXARLOGDATAFMT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL},
|
FALSE, FALSE, "", NULL},
|
||||||
{TIFFTAG_PIXARLOGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_PIXARLOGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL}};
|
FALSE, FALSE, "", NULL}};
|
||||||
|
|
||||||
int TIFFInitPixarLog(TIFF *tif, int scheme)
|
int TIFFInitPixarLog(TIFF *tif, int scheme)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
181
3rdparty/libtiff/tif_predict.c
vendored
181
3rdparty/libtiff/tif_predict.c
vendored
|
|
@ -30,6 +30,10 @@
|
||||||
#include "tif_predict.h"
|
#include "tif_predict.h"
|
||||||
#include "tiffiop.h"
|
#include "tiffiop.h"
|
||||||
|
|
||||||
|
#if defined(__x86_64__) || defined(_M_X64)
|
||||||
|
#include <emmintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PredictorState(tif) ((TIFFPredictorState *)(tif)->tif_data)
|
#define PredictorState(tif) ((TIFFPredictorState *)(tif)->tif_data)
|
||||||
|
|
||||||
static int horAcc8(TIFF *tif, uint8_t *cp0, tmsize_t cc);
|
static int horAcc8(TIFF *tif, uint8_t *cp0, tmsize_t cc);
|
||||||
|
|
@ -208,16 +212,12 @@ static int PredictorSetupDecode(TIFF *tif)
|
||||||
/*
|
/*
|
||||||
* The data should not be swapped outside of the floating
|
* The data should not be swapped outside of the floating
|
||||||
* point predictor, the accumulation routine should return
|
* point predictor, the accumulation routine should return
|
||||||
* byres in the native order.
|
* bytes in the native order.
|
||||||
*/
|
*/
|
||||||
if (tif->tif_flags & TIFF_SWAB)
|
if (tif->tif_flags & TIFF_SWAB)
|
||||||
{
|
{
|
||||||
tif->tif_postdecode = _TIFFNoPostDecode;
|
tif->tif_postdecode = _TIFFNoPostDecode;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Allocate buffer to keep the decoded bytes before
|
|
||||||
* rearranging in the right order
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -305,6 +305,15 @@ static int PredictorSetupEncode(TIFF *tif)
|
||||||
sp->encodetile = tif->tif_encodetile;
|
sp->encodetile = tif->tif_encodetile;
|
||||||
tif->tif_encodetile = PredictorEncodeTile;
|
tif->tif_encodetile = PredictorEncodeTile;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* The data should not be swapped outside of the floating
|
||||||
|
* point predictor, the differentiation routine should return
|
||||||
|
* bytes in the native order.
|
||||||
|
*/
|
||||||
|
if (tif->tif_flags & TIFF_SWAB)
|
||||||
|
{
|
||||||
|
tif->tif_postdecode = _TIFFNoPostDecode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -343,7 +352,7 @@ static int horAcc8(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
{
|
{
|
||||||
tmsize_t stride = PredictorState(tif)->stride;
|
tmsize_t stride = PredictorState(tif)->stride;
|
||||||
|
|
||||||
unsigned char *cp = (unsigned char *)cp0;
|
uint8_t *cp = cp0;
|
||||||
if ((cc % stride) != 0)
|
if ((cc % stride) != 0)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, "horAcc8", "%s", "(cc%stride)!=0");
|
TIFFErrorExtR(tif, "horAcc8", "%s", "(cc%stride)!=0");
|
||||||
|
|
@ -355,32 +364,48 @@ static int horAcc8(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
/*
|
/*
|
||||||
* Pipeline the most common cases.
|
* Pipeline the most common cases.
|
||||||
*/
|
*/
|
||||||
if (stride == 3)
|
if (stride == 1)
|
||||||
{
|
{
|
||||||
unsigned int cr = cp[0];
|
uint32_t acc = cp[0];
|
||||||
unsigned int cg = cp[1];
|
tmsize_t i = stride;
|
||||||
unsigned int cb = cp[2];
|
for (; i < cc - 3; i += 4)
|
||||||
|
{
|
||||||
|
cp[i + 0] = (uint8_t)((acc += cp[i + 0]) & 0xff);
|
||||||
|
cp[i + 1] = (uint8_t)((acc += cp[i + 1]) & 0xff);
|
||||||
|
cp[i + 2] = (uint8_t)((acc += cp[i + 2]) & 0xff);
|
||||||
|
cp[i + 3] = (uint8_t)((acc += cp[i + 3]) & 0xff);
|
||||||
|
}
|
||||||
|
for (; i < cc; i++)
|
||||||
|
{
|
||||||
|
cp[i + 0] = (uint8_t)((acc += cp[i + 0]) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (stride == 3)
|
||||||
|
{
|
||||||
|
uint32_t cr = cp[0];
|
||||||
|
uint32_t cg = cp[1];
|
||||||
|
uint32_t cb = cp[2];
|
||||||
tmsize_t i = stride;
|
tmsize_t i = stride;
|
||||||
for (; i < cc; i += stride)
|
for (; i < cc; i += stride)
|
||||||
{
|
{
|
||||||
cp[i + 0] = (unsigned char)((cr += cp[i + 0]) & 0xff);
|
cp[i + 0] = (uint8_t)((cr += cp[i + 0]) & 0xff);
|
||||||
cp[i + 1] = (unsigned char)((cg += cp[i + 1]) & 0xff);
|
cp[i + 1] = (uint8_t)((cg += cp[i + 1]) & 0xff);
|
||||||
cp[i + 2] = (unsigned char)((cb += cp[i + 2]) & 0xff);
|
cp[i + 2] = (uint8_t)((cb += cp[i + 2]) & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (stride == 4)
|
else if (stride == 4)
|
||||||
{
|
{
|
||||||
unsigned int cr = cp[0];
|
uint32_t cr = cp[0];
|
||||||
unsigned int cg = cp[1];
|
uint32_t cg = cp[1];
|
||||||
unsigned int cb = cp[2];
|
uint32_t cb = cp[2];
|
||||||
unsigned int ca = cp[3];
|
uint32_t ca = cp[3];
|
||||||
tmsize_t i = stride;
|
tmsize_t i = stride;
|
||||||
for (; i < cc; i += stride)
|
for (; i < cc; i += stride)
|
||||||
{
|
{
|
||||||
cp[i + 0] = (unsigned char)((cr += cp[i + 0]) & 0xff);
|
cp[i + 0] = (uint8_t)((cr += cp[i + 0]) & 0xff);
|
||||||
cp[i + 1] = (unsigned char)((cg += cp[i + 1]) & 0xff);
|
cp[i + 1] = (uint8_t)((cg += cp[i + 1]) & 0xff);
|
||||||
cp[i + 2] = (unsigned char)((cb += cp[i + 2]) & 0xff);
|
cp[i + 2] = (uint8_t)((cb += cp[i + 2]) & 0xff);
|
||||||
cp[i + 3] = (unsigned char)((ca += cp[i + 3]) & 0xff);
|
cp[i + 3] = (uint8_t)((ca += cp[i + 3]) & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -389,7 +414,7 @@ static int horAcc8(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
REPEAT4(stride,
|
REPEAT4(stride,
|
||||||
cp[stride] = (unsigned char)((cp[stride] + *cp) & 0xff);
|
cp[stride] = (uint8_t)((cp[stride] + *cp) & 0xff);
|
||||||
cp++)
|
cp++)
|
||||||
cc -= stride;
|
cc -= stride;
|
||||||
} while (cc > 0);
|
} while (cc > 0);
|
||||||
|
|
@ -512,7 +537,7 @@ static int fpAcc(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
uint32_t bps = tif->tif_dir.td_bitspersample / 8;
|
uint32_t bps = tif->tif_dir.td_bitspersample / 8;
|
||||||
tmsize_t wc = cc / bps;
|
tmsize_t wc = cc / bps;
|
||||||
tmsize_t count = cc;
|
tmsize_t count = cc;
|
||||||
uint8_t *cp = (uint8_t *)cp0;
|
uint8_t *cp = cp0;
|
||||||
uint8_t *tmp;
|
uint8_t *tmp;
|
||||||
|
|
||||||
if (cc % (bps * stride) != 0)
|
if (cc % (bps * stride) != 0)
|
||||||
|
|
@ -525,17 +550,85 @@ static int fpAcc(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (count > stride)
|
if (stride == 1)
|
||||||
{
|
{
|
||||||
REPEAT4(stride,
|
/* Optimization of general case */
|
||||||
cp[stride] = (unsigned char)((cp[stride] + cp[0]) & 0xff);
|
#define OP \
|
||||||
cp++)
|
do \
|
||||||
count -= stride;
|
{ \
|
||||||
|
cp[1] = (uint8_t)((cp[1] + cp[0]) & 0xff); \
|
||||||
|
++cp; \
|
||||||
|
} while (0)
|
||||||
|
for (; count > 8; count -= 8)
|
||||||
|
{
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
OP;
|
||||||
|
}
|
||||||
|
for (; count > 1; count -= 1)
|
||||||
|
{
|
||||||
|
OP;
|
||||||
|
}
|
||||||
|
#undef OP
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (count > stride)
|
||||||
|
{
|
||||||
|
REPEAT4(stride, cp[stride] = (uint8_t)((cp[stride] + cp[0]) & 0xff);
|
||||||
|
cp++)
|
||||||
|
count -= stride;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_TIFFmemcpy(tmp, cp0, cc);
|
_TIFFmemcpy(tmp, cp0, cc);
|
||||||
cp = (uint8_t *)cp0;
|
cp = (uint8_t *)cp0;
|
||||||
for (count = 0; count < wc; count++)
|
count = 0;
|
||||||
|
|
||||||
|
#if defined(__x86_64__) || defined(_M_X64)
|
||||||
|
if (bps == 4)
|
||||||
|
{
|
||||||
|
/* Optimization of general case */
|
||||||
|
for (; count + 15 < wc; count += 16)
|
||||||
|
{
|
||||||
|
/* Interlace 4*16 byte values */
|
||||||
|
|
||||||
|
__m128i xmm0 =
|
||||||
|
_mm_loadu_si128((const __m128i *)(tmp + count + 3 * wc));
|
||||||
|
__m128i xmm1 =
|
||||||
|
_mm_loadu_si128((const __m128i *)(tmp + count + 2 * wc));
|
||||||
|
__m128i xmm2 =
|
||||||
|
_mm_loadu_si128((const __m128i *)(tmp + count + 1 * wc));
|
||||||
|
__m128i xmm3 =
|
||||||
|
_mm_loadu_si128((const __m128i *)(tmp + count + 0 * wc));
|
||||||
|
/* (xmm0_0, xmm1_0, xmm0_1, xmm1_1, xmm0_2, xmm1_2, ...) */
|
||||||
|
__m128i tmp0 = _mm_unpacklo_epi8(xmm0, xmm1);
|
||||||
|
/* (xmm0_8, xmm1_8, xmm0_9, xmm1_9, xmm0_10, xmm1_10, ...) */
|
||||||
|
__m128i tmp1 = _mm_unpackhi_epi8(xmm0, xmm1);
|
||||||
|
/* (xmm2_0, xmm3_0, xmm2_1, xmm3_1, xmm2_2, xmm3_2, ...) */
|
||||||
|
__m128i tmp2 = _mm_unpacklo_epi8(xmm2, xmm3);
|
||||||
|
/* (xmm2_8, xmm3_8, xmm2_9, xmm3_9, xmm2_10, xmm3_10, ...) */
|
||||||
|
__m128i tmp3 = _mm_unpackhi_epi8(xmm2, xmm3);
|
||||||
|
/* (xmm0_0, xmm1_0, xmm2_0, xmm3_0, xmm0_1, xmm1_1, xmm2_1, xmm3_1,
|
||||||
|
* ...) */
|
||||||
|
__m128i tmp2_0 = _mm_unpacklo_epi16(tmp0, tmp2);
|
||||||
|
__m128i tmp2_1 = _mm_unpackhi_epi16(tmp0, tmp2);
|
||||||
|
__m128i tmp2_2 = _mm_unpacklo_epi16(tmp1, tmp3);
|
||||||
|
__m128i tmp2_3 = _mm_unpackhi_epi16(tmp1, tmp3);
|
||||||
|
_mm_storeu_si128((__m128i *)(cp + 4 * count + 0 * 16), tmp2_0);
|
||||||
|
_mm_storeu_si128((__m128i *)(cp + 4 * count + 1 * 16), tmp2_1);
|
||||||
|
_mm_storeu_si128((__m128i *)(cp + 4 * count + 2 * 16), tmp2_2);
|
||||||
|
_mm_storeu_si128((__m128i *)(cp + 4 * count + 3 * 16), tmp2_3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (; count < wc; count++)
|
||||||
{
|
{
|
||||||
uint32_t byte;
|
uint32_t byte;
|
||||||
for (byte = 0; byte < bps; byte++)
|
for (byte = 0; byte < bps; byte++)
|
||||||
|
|
@ -857,16 +950,38 @@ static int fpDiff(TIFF *tif, uint8_t *cp0, tmsize_t cc)
|
||||||
|
|
||||||
static int PredictorEncodeRow(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
static int PredictorEncodeRow(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
||||||
{
|
{
|
||||||
|
static const char module[] = "PredictorEncodeRow";
|
||||||
TIFFPredictorState *sp = PredictorState(tif);
|
TIFFPredictorState *sp = PredictorState(tif);
|
||||||
|
uint8_t *working_copy;
|
||||||
|
int result_code;
|
||||||
|
|
||||||
assert(sp != NULL);
|
assert(sp != NULL);
|
||||||
assert(sp->encodepfunc != NULL);
|
assert(sp->encodepfunc != NULL);
|
||||||
assert(sp->encoderow != NULL);
|
assert(sp->encoderow != NULL);
|
||||||
|
|
||||||
/* XXX horizontal differencing alters user's data XXX */
|
/*
|
||||||
if (!(*sp->encodepfunc)(tif, bp, cc))
|
* Do predictor manipulation in a working buffer to avoid altering
|
||||||
|
* the callers buffer, like for PredictorEncodeTile().
|
||||||
|
* https://gitlab.com/libtiff/libtiff/-/issues/5
|
||||||
|
*/
|
||||||
|
working_copy = (uint8_t *)_TIFFmallocExt(tif, cc);
|
||||||
|
if (working_copy == NULL)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, module,
|
||||||
|
"Out of memory allocating %" PRId64 " byte temp buffer.",
|
||||||
|
(int64_t)cc);
|
||||||
return 0;
|
return 0;
|
||||||
return (*sp->encoderow)(tif, bp, cc, s);
|
}
|
||||||
|
memcpy(working_copy, bp, cc);
|
||||||
|
|
||||||
|
if (!(*sp->encodepfunc)(tif, working_copy, cc))
|
||||||
|
{
|
||||||
|
_TIFFfreeExt(tif, working_copy);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
result_code = (*sp->encoderow)(tif, working_copy, cc, s);
|
||||||
|
_TIFFfreeExt(tif, working_copy);
|
||||||
|
return result_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int PredictorEncodeTile(TIFF *tif, uint8_t *bp0, tmsize_t cc0,
|
static int PredictorEncodeTile(TIFF *tif, uint8_t *bp0, tmsize_t cc0,
|
||||||
|
|
@ -923,7 +1038,7 @@ static int PredictorEncodeTile(TIFF *tif, uint8_t *bp0, tmsize_t cc0,
|
||||||
|
|
||||||
static const TIFFField predictFields[] = {
|
static const TIFFField predictFields[] = {
|
||||||
{TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
{TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,
|
||||||
TIFF_SETGET_UINT16, FIELD_PREDICTOR, FALSE, FALSE, "Predictor", NULL},
|
FIELD_PREDICTOR, FALSE, FALSE, "Predictor", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int PredictorVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
static int PredictorVSetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
|
|
|
||||||
3
3rdparty/libtiff/tif_print.c
vendored
3
3rdparty/libtiff/tif_print.c
vendored
|
|
@ -677,7 +677,8 @@ void TIFFPrintDirectory(TIFF *tif, FILE *fd, long flags)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*--: Rational2Double: For Rationals evaluate
|
/*--: Rational2Double: For Rationals evaluate
|
||||||
* "set_field_type" to determine internal storage size. */
|
* "set_get_field_type" to determine internal storage size.
|
||||||
|
*/
|
||||||
int tv_size = TIFFFieldSetGetSize(fip);
|
int tv_size = TIFFFieldSetGetSize(fip);
|
||||||
raw_data = _TIFFmallocExt(tif, tv_size * value_count);
|
raw_data = _TIFFmallocExt(tif, tv_size * value_count);
|
||||||
mem_alloc = 1;
|
mem_alloc = 1;
|
||||||
|
|
|
||||||
34
3rdparty/libtiff/tif_read.c
vendored
34
3rdparty/libtiff/tif_read.c
vendored
|
|
@ -351,15 +351,14 @@ static int TIFFSeek(TIFF *tif, uint32_t row, uint16_t sample)
|
||||||
* chunk strip */
|
* chunk strip */
|
||||||
whole_strip = 1;
|
whole_strip = 1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
whole_strip = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!whole_strip)
|
if (!whole_strip)
|
||||||
{
|
{
|
||||||
/* 16 is for YCbCr mode where we may need to read 16 */
|
/* 16 is for YCbCr mode where we may need to read 16 */
|
||||||
/* lines at a time to get a decompressed line, and 5000 */
|
/* lines at a time to get a decompressed line, and 5000 */
|
||||||
/* is some constant value, for example for JPEG tables */
|
/* is some constant value, for example for JPEG tables */
|
||||||
|
|
||||||
|
/* coverity[dead_error_line:SUPPRESS] */
|
||||||
if (tif->tif_scanlinesize < TIFF_TMSIZE_T_MAX / 16 &&
|
if (tif->tif_scanlinesize < TIFF_TMSIZE_T_MAX / 16 &&
|
||||||
tif->tif_scanlinesize * 16 < TIFF_TMSIZE_T_MAX - 5000)
|
tif->tif_scanlinesize * 16 < TIFF_TMSIZE_T_MAX - 5000)
|
||||||
{
|
{
|
||||||
|
|
@ -370,6 +369,9 @@ static int TIFFSeek(TIFF *tif, uint32_t row, uint16_t sample)
|
||||||
read_ahead = tif->tif_scanlinesize;
|
read_ahead = tif->tif_scanlinesize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
whole_strip = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we haven't loaded this strip, do so now, possibly
|
* If we haven't loaded this strip, do so now, possibly
|
||||||
|
|
@ -383,18 +385,22 @@ static int TIFFSeek(TIFF *tif, uint32_t row, uint16_t sample)
|
||||||
if (!TIFFFillStrip(tif, strip))
|
if (!TIFFFillStrip(tif, strip))
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
#if defined(CHUNKY_STRIP_READ_SUPPORT)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!TIFFFillStripPartial(tif, strip, read_ahead, 1))
|
if (!TIFFFillStripPartial(tif, strip, read_ahead, 1))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CHUNKY_STRIP_READ_SUPPORT)
|
||||||
/*
|
/*
|
||||||
** If we already have some data loaded, do we need to read some more?
|
** If we already have some data loaded, do we need to read some more?
|
||||||
*/
|
*/
|
||||||
else if (!whole_strip)
|
else if (!whole_strip)
|
||||||
{
|
{
|
||||||
|
/* coverity[dead_error_line:SUPPRESS] */
|
||||||
if (((tif->tif_rawdata + tif->tif_rawdataloaded) - tif->tif_rawcp) <
|
if (((tif->tif_rawdata + tif->tif_rawdataloaded) - tif->tif_rawcp) <
|
||||||
read_ahead &&
|
read_ahead &&
|
||||||
(uint64_t)tif->tif_rawdataoff + tif->tif_rawdataloaded <
|
(uint64_t)tif->tif_rawdataoff + tif->tif_rawdataloaded <
|
||||||
|
|
@ -404,6 +410,7 @@ static int TIFFSeek(TIFF *tif, uint32_t row, uint16_t sample)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (row < tif->tif_row)
|
if (row < tif->tif_row)
|
||||||
{
|
{
|
||||||
|
|
@ -466,7 +473,9 @@ int TIFFReadScanline(TIFF *tif, void *buf, uint32_t row, uint16_t sample)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset(buf, 0, (size_t)tif->tif_scanlinesize);
|
/* See TIFFReadEncodedStrip comment regarding TIFFTAG_FAXFILLFUNC. */
|
||||||
|
if (buf)
|
||||||
|
memset(buf, 0, (size_t)tif->tif_scanlinesize);
|
||||||
}
|
}
|
||||||
return (e > 0 ? 1 : -1);
|
return (e > 0 ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
|
@ -554,7 +563,10 @@ tmsize_t TIFFReadEncodedStrip(TIFF *tif, uint32_t strip, void *buf,
|
||||||
stripsize = size;
|
stripsize = size;
|
||||||
if (!TIFFFillStrip(tif, strip))
|
if (!TIFFFillStrip(tif, strip))
|
||||||
{
|
{
|
||||||
memset(buf, 0, (size_t)stripsize);
|
/* The output buf may be NULL, in particular if TIFFTAG_FAXFILLFUNC
|
||||||
|
is being used. Thus, memset must be conditional on buf not NULL. */
|
||||||
|
if (buf)
|
||||||
|
memset(buf, 0, (size_t)stripsize);
|
||||||
return ((tmsize_t)(-1));
|
return ((tmsize_t)(-1));
|
||||||
}
|
}
|
||||||
if ((*tif->tif_decodestrip)(tif, buf, stripsize, plane) <= 0)
|
if ((*tif->tif_decodestrip)(tif, buf, stripsize, plane) <= 0)
|
||||||
|
|
@ -976,7 +988,9 @@ tmsize_t TIFFReadEncodedTile(TIFF *tif, uint32_t tile, void *buf, tmsize_t size)
|
||||||
size = tilesize;
|
size = tilesize;
|
||||||
if (!TIFFFillTile(tif, tile))
|
if (!TIFFFillTile(tif, tile))
|
||||||
{
|
{
|
||||||
memset(buf, 0, (size_t)size);
|
/* See TIFFReadEncodedStrip comment regarding TIFFTAG_FAXFILLFUNC. */
|
||||||
|
if (buf)
|
||||||
|
memset(buf, 0, (size_t)size);
|
||||||
return ((tmsize_t)(-1));
|
return ((tmsize_t)(-1));
|
||||||
}
|
}
|
||||||
else if ((*tif->tif_decodetile)(tif, (uint8_t *)buf, size,
|
else if ((*tif->tif_decodetile)(tif, (uint8_t *)buf, size,
|
||||||
|
|
@ -1569,7 +1583,9 @@ int TIFFReadFromUserBuffer(TIFF *tif, uint32_t strile, void *inbuf,
|
||||||
if (!TIFFStartTile(tif, strile))
|
if (!TIFFStartTile(tif, strile))
|
||||||
{
|
{
|
||||||
ret = 0;
|
ret = 0;
|
||||||
memset(outbuf, 0, (size_t)outsize);
|
/* See related TIFFReadEncodedStrip comment. */
|
||||||
|
if (outbuf)
|
||||||
|
memset(outbuf, 0, (size_t)outsize);
|
||||||
}
|
}
|
||||||
else if (!(*tif->tif_decodetile)(
|
else if (!(*tif->tif_decodetile)(
|
||||||
tif, (uint8_t *)outbuf, outsize,
|
tif, (uint8_t *)outbuf, outsize,
|
||||||
|
|
@ -1596,7 +1612,9 @@ int TIFFReadFromUserBuffer(TIFF *tif, uint32_t strile, void *inbuf,
|
||||||
if (!TIFFStartStrip(tif, strile))
|
if (!TIFFStartStrip(tif, strile))
|
||||||
{
|
{
|
||||||
ret = 0;
|
ret = 0;
|
||||||
memset(outbuf, 0, (size_t)outsize);
|
/* See related TIFFReadEncodedStrip comment. */
|
||||||
|
if (outbuf)
|
||||||
|
memset(outbuf, 0, (size_t)outsize);
|
||||||
}
|
}
|
||||||
else if (!(*tif->tif_decodestrip)(
|
else if (!(*tif->tif_decodestrip)(
|
||||||
tif, (uint8_t *)outbuf, outsize,
|
tif, (uint8_t *)outbuf, outsize,
|
||||||
|
|
|
||||||
12
3rdparty/libtiff/tif_stream.cxx
vendored
12
3rdparty/libtiff/tif_stream.cxx
vendored
|
|
@ -87,8 +87,8 @@ extern "C"
|
||||||
static uint64_t _tiffisSizeProc(thandle_t fd);
|
static uint64_t _tiffisSizeProc(thandle_t fd);
|
||||||
static int _tiffosCloseProc(thandle_t fd);
|
static int _tiffosCloseProc(thandle_t fd);
|
||||||
static int _tiffisCloseProc(thandle_t fd);
|
static int _tiffisCloseProc(thandle_t fd);
|
||||||
static int _tiffDummyMapProc(thandle_t, void **base, toff_t *size);
|
static int _tiffDummyMapProcCxx(thandle_t, void **base, toff_t *size);
|
||||||
static void _tiffDummyUnmapProc(thandle_t, void *base, toff_t size);
|
static void _tiffDummyUnmapProcCxx(thandle_t, void *base, toff_t size);
|
||||||
static TIFF *_tiffStreamOpen(const char *name, const char *mode, void *fd);
|
static TIFF *_tiffStreamOpen(const char *name, const char *mode, void *fd);
|
||||||
|
|
||||||
struct tiffis_data
|
struct tiffis_data
|
||||||
|
|
@ -324,14 +324,14 @@ extern "C"
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _tiffDummyMapProc(thandle_t, void **base, toff_t *size)
|
static int _tiffDummyMapProcCxx(thandle_t, void **base, toff_t *size)
|
||||||
{
|
{
|
||||||
(void)base;
|
(void)base;
|
||||||
(void)size;
|
(void)size;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _tiffDummyUnmapProc(thandle_t, void *base, toff_t size)
|
static void _tiffDummyUnmapProcCxx(thandle_t, void *base, toff_t size)
|
||||||
{
|
{
|
||||||
(void)base;
|
(void)base;
|
||||||
(void)size;
|
(void)size;
|
||||||
|
|
@ -354,7 +354,7 @@ extern "C"
|
||||||
tif = TIFFClientOpen(
|
tif = TIFFClientOpen(
|
||||||
name, mode, reinterpret_cast<thandle_t>(data), _tiffosReadProc,
|
name, mode, reinterpret_cast<thandle_t>(data), _tiffosReadProc,
|
||||||
_tiffosWriteProc, _tiffosSeekProc, _tiffosCloseProc,
|
_tiffosWriteProc, _tiffosSeekProc, _tiffosCloseProc,
|
||||||
_tiffosSizeProc, _tiffDummyMapProc, _tiffDummyUnmapProc);
|
_tiffosSizeProc, _tiffDummyMapProcCxx, _tiffDummyUnmapProcCxx);
|
||||||
if (!tif)
|
if (!tif)
|
||||||
{
|
{
|
||||||
delete data;
|
delete data;
|
||||||
|
|
@ -369,7 +369,7 @@ extern "C"
|
||||||
tif = TIFFClientOpen(
|
tif = TIFFClientOpen(
|
||||||
name, mode, reinterpret_cast<thandle_t>(data), _tiffisReadProc,
|
name, mode, reinterpret_cast<thandle_t>(data), _tiffisReadProc,
|
||||||
_tiffisWriteProc, _tiffisSeekProc, _tiffisCloseProc,
|
_tiffisWriteProc, _tiffisSeekProc, _tiffisCloseProc,
|
||||||
_tiffisSizeProc, _tiffDummyMapProc, _tiffDummyUnmapProc);
|
_tiffisSizeProc, _tiffDummyMapProcCxx, _tiffDummyUnmapProcCxx);
|
||||||
if (!tif)
|
if (!tif)
|
||||||
{
|
{
|
||||||
delete data;
|
delete data;
|
||||||
|
|
|
||||||
3
3rdparty/libtiff/tif_strip.c
vendored
3
3rdparty/libtiff/tif_strip.c
vendored
|
|
@ -40,7 +40,8 @@ uint32_t TIFFComputeStrip(TIFF *tif, uint32_t row, uint16_t sample)
|
||||||
|
|
||||||
if (td->td_rowsperstrip == 0)
|
if (td->td_rowsperstrip == 0)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module, "Cannot compute strip: RowsPerStrip is zero");
|
TIFFErrorExtR(tif, module,
|
||||||
|
"Cannot compute strip: RowsPerStrip is zero");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strip = row / td->td_rowsperstrip;
|
strip = row / td->td_rowsperstrip;
|
||||||
|
|
|
||||||
4
3rdparty/libtiff/tif_unix.c
vendored
4
3rdparty/libtiff/tif_unix.c
vendored
|
|
@ -91,6 +91,8 @@ static tmsize_t _tiffReadProc(thandle_t fd, void *buf, tmsize_t size)
|
||||||
}
|
}
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return (tmsize_t)-1;
|
return (tmsize_t)-1;
|
||||||
|
/* Silence Coverity Scan warning about unsigned to signed underflow. */
|
||||||
|
/* coverity[return_overflow:SUPPRESS] */
|
||||||
return (tmsize_t)bytes_read;
|
return (tmsize_t)bytes_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -120,6 +122,8 @@ static tmsize_t _tiffWriteProc(thandle_t fd, void *buf, tmsize_t size)
|
||||||
}
|
}
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return (tmsize_t)-1;
|
return (tmsize_t)-1;
|
||||||
|
/* Silence Coverity Scan warning about unsigned to signed underflow. */
|
||||||
|
/* coverity[return_overflow:SUPPRESS] */
|
||||||
return (tmsize_t)bytes_written;
|
return (tmsize_t)bytes_written;
|
||||||
/* return ((tmsize_t) write(fdh.fd, buf, bytes_total)); */
|
/* return ((tmsize_t) write(fdh.fd, buf, bytes_total)); */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
3rdparty/libtiff/tif_webp.c
vendored
12
3rdparty/libtiff/tif_webp.c
vendored
|
|
@ -836,14 +836,12 @@ static int TWebPVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField TWebPFields[] = {
|
static const TIFFField TWebPFields[] = {
|
||||||
{TIFFTAG_WEBP_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_WEBP_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "WEBP quality", NULL},
|
FALSE, "WEBP quality", NULL},
|
||||||
{TIFFTAG_WEBP_LOSSLESS, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_WEBP_LOSSLESS, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "WEBP lossless/lossy",
|
TRUE, FALSE, "WEBP lossless/lossy", NULL},
|
||||||
NULL},
|
|
||||||
{TIFFTAG_WEBP_LOSSLESS_EXACT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_WEBP_LOSSLESS_EXACT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "WEBP exact lossless",
|
FIELD_PSEUDO, TRUE, FALSE, "WEBP exact lossless", NULL},
|
||||||
NULL},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int TIFFInitWebP(TIFF *tif, int scheme)
|
int TIFFInitWebP(TIFF *tif, int scheme)
|
||||||
|
|
|
||||||
15
3rdparty/libtiff/tif_win32.c
vendored
15
3rdparty/libtiff/tif_win32.c
vendored
|
|
@ -158,14 +158,6 @@ static uint64_t _tiffSizeProc(thandle_t fd)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _tiffDummyMapProc(thandle_t fd, void **pbase, toff_t *psize)
|
|
||||||
{
|
|
||||||
(void)fd;
|
|
||||||
(void)pbase;
|
|
||||||
(void)psize;
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* From "Hermann Josef Hill" <lhill@rhein-zeitung.de>:
|
* From "Hermann Josef Hill" <lhill@rhein-zeitung.de>:
|
||||||
*
|
*
|
||||||
|
|
@ -201,13 +193,6 @@ static int _tiffMapProc(thandle_t fd, void **pbase, toff_t *psize)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _tiffDummyUnmapProc(thandle_t fd, void *base, toff_t size)
|
|
||||||
{
|
|
||||||
(void)fd;
|
|
||||||
(void)base;
|
|
||||||
(void)size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _tiffUnmapProc(thandle_t fd, void *base, toff_t size)
|
static void _tiffUnmapProc(thandle_t fd, void *base, toff_t size)
|
||||||
{
|
{
|
||||||
(void)fd;
|
(void)fd;
|
||||||
|
|
|
||||||
5
3rdparty/libtiff/tif_write.c
vendored
5
3rdparty/libtiff/tif_write.c
vendored
|
|
@ -573,8 +573,13 @@ int TIFFSetupStrips(TIFF *tif)
|
||||||
}
|
}
|
||||||
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
|
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
|
||||||
td->td_stripsperimage /= td->td_samplesperpixel;
|
td->td_stripsperimage /= td->td_samplesperpixel;
|
||||||
|
|
||||||
|
if (td->td_stripoffset_p != NULL)
|
||||||
|
_TIFFfreeExt(tif, td->td_stripoffset_p);
|
||||||
td->td_stripoffset_p = (uint64_t *)_TIFFCheckMalloc(
|
td->td_stripoffset_p = (uint64_t *)_TIFFCheckMalloc(
|
||||||
tif, td->td_nstrips, sizeof(uint64_t), "for \"StripOffsets\" array");
|
tif, td->td_nstrips, sizeof(uint64_t), "for \"StripOffsets\" array");
|
||||||
|
if (td->td_stripbytecount_p != NULL)
|
||||||
|
_TIFFfreeExt(tif, td->td_stripbytecount_p);
|
||||||
td->td_stripbytecount_p = (uint64_t *)_TIFFCheckMalloc(
|
td->td_stripbytecount_p = (uint64_t *)_TIFFCheckMalloc(
|
||||||
tif, td->td_nstrips, sizeof(uint64_t), "for \"StripByteCounts\" array");
|
tif, td->td_nstrips, sizeof(uint64_t), "for \"StripByteCounts\" array");
|
||||||
if (td->td_stripoffset_p == NULL || td->td_stripbytecount_p == NULL)
|
if (td->td_stripoffset_p == NULL || td->td_stripbytecount_p == NULL)
|
||||||
|
|
|
||||||
70
3rdparty/libtiff/tif_zip.c
vendored
70
3rdparty/libtiff/tif_zip.c
vendored
|
|
@ -128,6 +128,16 @@ static int ZIPSetupDecode(TIFF *tif)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint64_t TIFF_MIN_UINT64(uint64_t a, uint64_t b)
|
||||||
|
{
|
||||||
|
return a < b ? a : b;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uInt TIFF_CLAMP_UINT64_TO_INT32_MAX(uint64_t v)
|
||||||
|
{
|
||||||
|
return (uInt)TIFF_MIN_UINT64(v, INT32_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup state for decoding a strip.
|
* Setup state for decoding a strip.
|
||||||
*/
|
*/
|
||||||
|
|
@ -149,9 +159,7 @@ static int ZIPPreDecode(TIFF *tif, uint16_t s)
|
||||||
we need to simplify this code to reflect a ZLib that is likely updated
|
we need to simplify this code to reflect a ZLib that is likely updated
|
||||||
to deal with 8byte memory sizes, though this code will respond
|
to deal with 8byte memory sizes, though this code will respond
|
||||||
appropriately even before we simplify it */
|
appropriately even before we simplify it */
|
||||||
sp->stream.avail_in = (uint64_t)tif->tif_rawcc < 0xFFFFFFFFU
|
sp->stream.avail_in = TIFF_CLAMP_UINT64_TO_INT32_MAX(tif->tif_rawcc);
|
||||||
? (uInt)tif->tif_rawcc
|
|
||||||
: 0xFFFFFFFFU;
|
|
||||||
if (inflateReset(&sp->stream) == Z_OK)
|
if (inflateReset(&sp->stream) == Z_OK)
|
||||||
{
|
{
|
||||||
sp->read_error = 0;
|
sp->read_error = 0;
|
||||||
|
|
@ -267,14 +275,10 @@ static int ZIPDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int state;
|
int state;
|
||||||
uInt avail_in_before = (uint64_t)tif->tif_rawcc <= 0xFFFFFFFFU
|
uInt avail_in_before = TIFF_CLAMP_UINT64_TO_INT32_MAX(tif->tif_rawcc);
|
||||||
? (uInt)tif->tif_rawcc
|
uInt avail_out_before = TIFF_CLAMP_UINT64_TO_INT32_MAX(occ);
|
||||||
: 0xFFFFFFFFU;
|
|
||||||
uInt avail_out_before =
|
|
||||||
(uint64_t)occ < 0xFFFFFFFFU ? (uInt)occ : 0xFFFFFFFFU;
|
|
||||||
sp->stream.avail_in = avail_in_before;
|
sp->stream.avail_in = avail_in_before;
|
||||||
sp->stream.avail_out = avail_out_before;
|
sp->stream.avail_out = avail_out_before;
|
||||||
/* coverity[overrun-buffer-arg] */
|
|
||||||
state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
|
state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
|
||||||
tif->tif_rawcc -= (avail_in_before - sp->stream.avail_in);
|
tif->tif_rawcc -= (avail_in_before - sp->stream.avail_in);
|
||||||
occ -= (avail_out_before - sp->stream.avail_out);
|
occ -= (avail_out_before - sp->stream.avail_out);
|
||||||
|
|
@ -282,7 +286,7 @@ static int ZIPDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
break;
|
break;
|
||||||
if (state == Z_DATA_ERROR)
|
if (state == Z_DATA_ERROR)
|
||||||
{
|
{
|
||||||
memset(sp->stream.next_out, 0, sp->stream.avail_out);
|
memset(sp->stream.next_out, 0, (size_t)occ);
|
||||||
TIFFErrorExtR(tif, module, "Decoding error at scanline %lu, %s",
|
TIFFErrorExtR(tif, module, "Decoding error at scanline %lu, %s",
|
||||||
(unsigned long)tif->tif_row, SAFE_MSG(sp));
|
(unsigned long)tif->tif_row, SAFE_MSG(sp));
|
||||||
sp->read_error = 1;
|
sp->read_error = 1;
|
||||||
|
|
@ -290,7 +294,7 @@ static int ZIPDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
}
|
}
|
||||||
if (state != Z_OK)
|
if (state != Z_OK)
|
||||||
{
|
{
|
||||||
memset(sp->stream.next_out, 0, sp->stream.avail_out);
|
memset(sp->stream.next_out, 0, (size_t)occ);
|
||||||
TIFFErrorExtR(tif, module, "ZLib error: %s", SAFE_MSG(sp));
|
TIFFErrorExtR(tif, module, "ZLib error: %s", SAFE_MSG(sp));
|
||||||
sp->read_error = 1;
|
sp->read_error = 1;
|
||||||
return (0);
|
return (0);
|
||||||
|
|
@ -302,7 +306,7 @@ static int ZIPDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s)
|
||||||
"Not enough data at scanline %lu (short %" PRIu64
|
"Not enough data at scanline %lu (short %" PRIu64
|
||||||
" bytes)",
|
" bytes)",
|
||||||
(unsigned long)tif->tif_row, (uint64_t)occ);
|
(unsigned long)tif->tif_row, (uint64_t)occ);
|
||||||
memset(sp->stream.next_out, 0, sp->stream.avail_out);
|
memset(sp->stream.next_out, 0, (size_t)occ);
|
||||||
sp->read_error = 1;
|
sp->read_error = 1;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
@ -481,10 +485,8 @@ static int ZIPEncode(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
||||||
appropriately even before we simplify it */
|
appropriately even before we simplify it */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
uInt avail_in_before =
|
uInt avail_in_before = TIFF_CLAMP_UINT64_TO_INT32_MAX(cc);
|
||||||
(uint64_t)cc <= 0xFFFFFFFFU ? (uInt)cc : 0xFFFFFFFFU;
|
|
||||||
sp->stream.avail_in = avail_in_before;
|
sp->stream.avail_in = avail_in_before;
|
||||||
/* coverity[overrun-buffer-arg] */
|
|
||||||
if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK)
|
if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK)
|
||||||
{
|
{
|
||||||
TIFFErrorExtR(tif, module, "Encoder error: %s", SAFE_MSG(sp));
|
TIFFErrorExtR(tif, module, "Encoder error: %s", SAFE_MSG(sp));
|
||||||
|
|
@ -496,9 +498,8 @@ static int ZIPEncode(TIFF *tif, uint8_t *bp, tmsize_t cc, uint16_t s)
|
||||||
if (!TIFFFlushData1(tif))
|
if (!TIFFFlushData1(tif))
|
||||||
return 0;
|
return 0;
|
||||||
sp->stream.next_out = tif->tif_rawdata;
|
sp->stream.next_out = tif->tif_rawdata;
|
||||||
sp->stream.avail_out = (uint64_t)tif->tif_rawdatasize <= 0xFFFFFFFFU
|
sp->stream.avail_out =
|
||||||
? (uInt)tif->tif_rawdatasize
|
TIFF_CLAMP_UINT64_TO_INT32_MAX(tif->tif_rawdatasize);
|
||||||
: 0xFFFFFFFFU;
|
|
||||||
}
|
}
|
||||||
cc -= (avail_in_before - sp->stream.avail_in);
|
cc -= (avail_in_before - sp->stream.avail_in);
|
||||||
} while (cc > 0);
|
} while (cc > 0);
|
||||||
|
|
@ -672,12 +673,31 @@ static int ZIPVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField zipFields[] = {
|
static const TIFFField zipFields[] = {
|
||||||
{TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL},
|
FALSE, "", NULL},
|
||||||
{TIFFTAG_DEFLATE_SUBCODEC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_DEFLATE_SUBCODEC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL},
|
TRUE, FALSE, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void *TIFF_zalloc(void *opaque, unsigned int items, unsigned int size)
|
||||||
|
{
|
||||||
|
static const char module[] = "TIFF_zalloc";
|
||||||
|
TIFF *tif = opaque;
|
||||||
|
|
||||||
|
if (items > ~(size_t)0 / size)
|
||||||
|
{
|
||||||
|
TIFFErrorExtR(tif, module, "Overflow");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _TIFFmallocExt(tif, items * size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TIFF_zfree(void *opaque, void *ptr)
|
||||||
|
{
|
||||||
|
_TIFFfreeExt((TIFF *)opaque, ptr);
|
||||||
|
}
|
||||||
|
|
||||||
int TIFFInitZIP(TIFF *tif, int scheme)
|
int TIFFInitZIP(TIFF *tif, int scheme)
|
||||||
{
|
{
|
||||||
static const char module[] = "TIFFInitZIP";
|
static const char module[] = "TIFFInitZIP";
|
||||||
|
|
@ -706,9 +726,9 @@ int TIFFInitZIP(TIFF *tif, int scheme)
|
||||||
if (tif->tif_data == NULL)
|
if (tif->tif_data == NULL)
|
||||||
goto bad;
|
goto bad;
|
||||||
sp = GetZIPState(tif);
|
sp = GetZIPState(tif);
|
||||||
sp->stream.zalloc = NULL;
|
sp->stream.zalloc = TIFF_zalloc;
|
||||||
sp->stream.zfree = NULL;
|
sp->stream.zfree = TIFF_zfree;
|
||||||
sp->stream.opaque = NULL;
|
sp->stream.opaque = tif;
|
||||||
sp->stream.data_type = Z_BINARY;
|
sp->stream.data_type = Z_BINARY;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
5
3rdparty/libtiff/tif_zstd.c
vendored
5
3rdparty/libtiff/tif_zstd.c
vendored
|
|
@ -363,9 +363,8 @@ static int ZSTDVGetField(TIFF *tif, uint32_t tag, va_list ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TIFFField ZSTDFields[] = {
|
static const TIFFField ZSTDFields[] = {
|
||||||
{TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
|
{TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, FIELD_PSEUDO, TRUE,
|
||||||
TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "ZSTD compression_level",
|
FALSE, "ZSTD compression_level", NULL},
|
||||||
NULL},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int TIFFInitZSTD(TIFF *tif, int scheme)
|
int TIFFInitZSTD(TIFF *tif, int scheme)
|
||||||
|
|
|
||||||
1
3rdparty/libtiff/tiff.h
vendored
1
3rdparty/libtiff/tiff.h
vendored
|
|
@ -216,6 +216,7 @@ typedef enum
|
||||||
#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */
|
#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */
|
||||||
#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */
|
#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */
|
||||||
#define COMPRESSION_JXL 50002 /* JPEGXL: WARNING not registered in Adobe-maintained registry */
|
#define COMPRESSION_JXL 50002 /* JPEGXL: WARNING not registered in Adobe-maintained registry */
|
||||||
|
#define COMPRESSION_JXL_DNG_1_7 52546 /* JPEGXL from DNG 1.7 specification */
|
||||||
#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */
|
#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */
|
||||||
#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */
|
#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */
|
||||||
#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */
|
#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */
|
||||||
|
|
|
||||||
2
3rdparty/libtiff/tiffconf.h.cmake.in
vendored
2
3rdparty/libtiff/tiffconf.h.cmake.in
vendored
|
|
@ -89,7 +89,7 @@
|
||||||
/* Support NeXT 2-bit RLE algorithm */
|
/* Support NeXT 2-bit RLE algorithm */
|
||||||
#cmakedefine NEXT_SUPPORT 1
|
#cmakedefine NEXT_SUPPORT 1
|
||||||
|
|
||||||
/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation
|
/* Support Old JPEG compression (read contrib/ojpeg/README first! Compilation
|
||||||
fails with unpatched IJG JPEG library) */
|
fails with unpatched IJG JPEG library) */
|
||||||
#cmakedefine OJPEG_SUPPORT 1
|
#cmakedefine OJPEG_SUPPORT 1
|
||||||
|
|
||||||
|
|
|
||||||
28
3rdparty/libtiff/tiffio.h
vendored
28
3rdparty/libtiff/tiffio.h
vendored
|
|
@ -45,12 +45,14 @@ typedef struct tiff TIFF;
|
||||||
* to pass tag types and values uses the types defined in
|
* to pass tag types and values uses the types defined in
|
||||||
* tiff.h directly.
|
* tiff.h directly.
|
||||||
*
|
*
|
||||||
* NB: ttag_t is unsigned int and not unsigned short because
|
* NB: ttag_t -> deprecated and replaced by uint32_t
|
||||||
|
* is unsigned int and not unsigned short because
|
||||||
* ANSI C requires that the type before the ellipsis be a
|
* ANSI C requires that the type before the ellipsis be a
|
||||||
* promoted type (i.e. one of int, unsigned int, pointer,
|
* promoted type (i.e. one of int, unsigned int, pointer,
|
||||||
* or double) and because we defined pseudo-tags that are
|
* or double) and because we defined pseudo-tags that are
|
||||||
* outside the range of legal Aldus-assigned tags.
|
* outside the range of legal Aldus-assigned tags.
|
||||||
* NB: tsize_t is signed and not unsigned because some functions
|
* NB: tsize_t -> deprecated and replaced by tmsize_t
|
||||||
|
* is signed and not unsigned because some functions
|
||||||
* return -1.
|
* return -1.
|
||||||
* NB: toff_t is not off_t for many reasons; TIFFs max out at
|
* NB: toff_t is not off_t for many reasons; TIFFs max out at
|
||||||
* 32-bit file offsets, and BigTIFF maxes out at 64-bit
|
* 32-bit file offsets, and BigTIFF maxes out at 64-bit
|
||||||
|
|
@ -66,10 +68,11 @@ typedef TIFF_SSIZE_T tmsize_t;
|
||||||
#define TIFF_TMSIZE_T_MAX (tmsize_t)(SIZE_MAX >> 1)
|
#define TIFF_TMSIZE_T_MAX (tmsize_t)(SIZE_MAX >> 1)
|
||||||
|
|
||||||
typedef uint64_t toff_t; /* file offset */
|
typedef uint64_t toff_t; /* file offset */
|
||||||
|
typedef uint32_t tdir_t; /* directory index */
|
||||||
|
|
||||||
/* the following are deprecated and should be replaced by their defining
|
/* the following are deprecated and should be replaced by their defining
|
||||||
counterparts */
|
counterparts */
|
||||||
typedef uint32_t ttag_t; /* directory tag */
|
typedef uint32_t ttag_t; /* directory tag */
|
||||||
typedef uint32_t tdir_t; /* directory index */
|
|
||||||
typedef uint16_t tsample_t; /* sample number */
|
typedef uint16_t tsample_t; /* sample number */
|
||||||
typedef uint32_t tstrile_t; /* strip or tile number */
|
typedef uint32_t tstrile_t; /* strip or tile number */
|
||||||
typedef tstrile_t tstrip_t; /* strip number */
|
typedef tstrile_t tstrip_t; /* strip number */
|
||||||
|
|
@ -151,6 +154,18 @@ typedef struct
|
||||||
float d_gammaB;
|
float d_gammaB;
|
||||||
} TIFFDisplay;
|
} TIFFDisplay;
|
||||||
|
|
||||||
|
/* YCbCr->RGB support for TIFFYCbCrToRGBInit() and TIFFYCbCrToRGB()
|
||||||
|
* Attention:
|
||||||
|
* Functions TIFFYCbCrToRGBInit() and TIFFYCbCrToRGB() require a user provided
|
||||||
|
* large memory buffer, where several tables can be setup.
|
||||||
|
* The pointers to these tables are stored in the structure TIFFYCbCrToRGB,
|
||||||
|
* which is located at the beginning of the buffer. Thus, this memory has to be
|
||||||
|
* allocated as follows:
|
||||||
|
* TIFFYCbCrToRGB *ycbcr = (TIFFYCbCrToRGB *)_TIFFmalloc(
|
||||||
|
* TIFFroundup_32(sizeof(TIFFYCbCrToRGB), sizeof(long)) +
|
||||||
|
* 4 * 256 * sizeof(TIFFRGBValue) + 2 * 256 * sizeof(int) +
|
||||||
|
* 3 * 256 * sizeof(int32_t));
|
||||||
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{ /* YCbCr->RGB support */
|
{ /* YCbCr->RGB support */
|
||||||
TIFFRGBValue *clamptab; /* range clamping table */
|
TIFFRGBValue *clamptab; /* range clamping table */
|
||||||
|
|
@ -508,6 +523,9 @@ extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
|
||||||
TIFFOpenOptionsSetMaxCumulatedMemAlloc(TIFFOpenOptions *opts,
|
TIFFOpenOptionsSetMaxCumulatedMemAlloc(TIFFOpenOptions *opts,
|
||||||
tmsize_t max_cumulated_mem_alloc);
|
tmsize_t max_cumulated_mem_alloc);
|
||||||
extern void
|
extern void
|
||||||
|
TIFFOpenOptionsSetWarnAboutUnknownTags(TIFFOpenOptions *opts,
|
||||||
|
int warn_about_unknown_tags);
|
||||||
|
extern void
|
||||||
TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
|
TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
|
||||||
TIFFErrorHandlerExtR handler,
|
TIFFErrorHandlerExtR handler,
|
||||||
void *errorhandler_user_data);
|
void *errorhandler_user_data);
|
||||||
|
|
@ -590,7 +608,7 @@ extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
|
||||||
extern uint64_t TIFFGetStrileByteCountWithErr(TIFF *tif, uint32_t strile,
|
extern uint64_t TIFFGetStrileByteCountWithErr(TIFF *tif, uint32_t strile,
|
||||||
int *pbErr);
|
int *pbErr);
|
||||||
|
|
||||||
#ifdef LOGLUV_PUBLIC
|
#if LOGLUV_PUBLIC
|
||||||
#define U_NEU 0.210526316
|
#define U_NEU 0.210526316
|
||||||
#define V_NEU 0.473684211
|
#define V_NEU 0.473684211
|
||||||
#define UVSCALE 410.
|
#define UVSCALE 410.
|
||||||
|
|
@ -634,7 +652,7 @@ extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ttag_t field_tag; /* field's tag */
|
uint32_t field_tag; /* field's tag */
|
||||||
short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
|
short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
|
||||||
short field_writecount; /* write count/TIFF_VARIABLE */
|
short field_writecount; /* write count/TIFF_VARIABLE */
|
||||||
TIFFDataType field_type; /* type of associated data */
|
TIFFDataType field_type; /* type of associated data */
|
||||||
|
|
|
||||||
4
3rdparty/libtiff/tiffiop.h
vendored
4
3rdparty/libtiff/tiffiop.h
vendored
|
|
@ -258,6 +258,7 @@ struct tiff
|
||||||
tmsize_t tif_max_single_mem_alloc; /* in bytes. 0 for unlimited */
|
tmsize_t tif_max_single_mem_alloc; /* in bytes. 0 for unlimited */
|
||||||
tmsize_t tif_max_cumulated_mem_alloc; /* in bytes. 0 for unlimited */
|
tmsize_t tif_max_cumulated_mem_alloc; /* in bytes. 0 for unlimited */
|
||||||
tmsize_t tif_cur_cumulated_mem_alloc; /* in bytes */
|
tmsize_t tif_cur_cumulated_mem_alloc; /* in bytes */
|
||||||
|
int tif_warn_about_unknown_tags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TIFFOpenOptions
|
struct TIFFOpenOptions
|
||||||
|
|
@ -268,6 +269,7 @@ struct TIFFOpenOptions
|
||||||
void *warnhandler_user_data; /* may be NULL */
|
void *warnhandler_user_data; /* may be NULL */
|
||||||
tmsize_t max_single_mem_alloc; /* in bytes. 0 for unlimited */
|
tmsize_t max_single_mem_alloc; /* in bytes. 0 for unlimited */
|
||||||
tmsize_t max_cumulated_mem_alloc; /* in bytes. 0 for unlimited */
|
tmsize_t max_cumulated_mem_alloc; /* in bytes. 0 for unlimited */
|
||||||
|
int warn_about_unknown_tags;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */
|
#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */
|
||||||
|
|
@ -398,6 +400,8 @@ typedef size_t TIFFIOSize_t;
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
extern int _tiffDummyMapProc(thandle_t fd, void **pbase, toff_t *psize);
|
||||||
|
extern void _tiffDummyUnmapProc(thandle_t fd, void *base, toff_t size);
|
||||||
extern int _TIFFgetMode(TIFFOpenOptions *opts, thandle_t clientdata,
|
extern int _TIFFgetMode(TIFFOpenOptions *opts, thandle_t clientdata,
|
||||||
const char *mode, const char *module);
|
const char *mode, const char *module);
|
||||||
extern int _TIFFNoRowEncode(TIFF *tif, uint8_t *pp, tmsize_t cc,
|
extern int _TIFFNoRowEncode(TIFF *tif, uint8_t *pp, tmsize_t cc,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user