Compare commits
No commits in common. "c8" and "c8s" have entirely different histories.
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
SOURCES/tiff-4.0.9.tar.gz
|
||||
/tiff-4.0.9.tar.gz
|
||||
|
@ -1 +0,0 @@
|
||||
87d4543579176cc568668617c22baceccd568296 SOURCES/tiff-4.0.9.tar.gz
|
7
gating.yaml
Normal file
7
gating.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-8
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
||||
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
|
1
sources
Normal file
1
sources
Normal file
@ -0,0 +1 @@
|
||||
SHA512 (tiff-4.0.9.tar.gz) = 04f3d5eefccf9c1a0393659fe27f3dddd31108c401ba0dc587bca152a1c1f6bc844ba41622ff5572da8cc278593eff8c402b44e7af0a0090e91d326c2d79f6cd
|
8
tests/libtiff/CMakeLists.txt
Normal file
8
tests/libtiff/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 2.8.9)
|
||||
cmake_policy(VERSION 2.8.9)
|
||||
|
||||
project(tiff-test-suite C)
|
||||
enable_testing()
|
||||
|
||||
add_subdirectory(tools)
|
||||
add_subdirectory(test)
|
8
tests/libtiff/README
Normal file
8
tests/libtiff/README
Normal file
@ -0,0 +1,8 @@
|
||||
libtiff test suite modified to run against installed libtiff.so
|
||||
|
||||
All files except the following are taken unmodified from upstream tarball:
|
||||
|
||||
tif_config.h
|
||||
CMakeLists.txt
|
||||
test/CMakeLists.txt
|
||||
tools/CMakeLists.txt
|
309
tests/libtiff/libtiff/tif_dir.h
Normal file
309
tests/libtiff/libtiff/tif_dir.h
Normal file
@ -0,0 +1,309 @@
|
||||
/* $Id: tif_dir.h,v 1.55 2017-06-01 12:44:04 erouault Exp $ */
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIFFDIR_
|
||||
#define _TIFFDIR_
|
||||
/*
|
||||
* ``Library-private'' Directory-related Definitions.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
const TIFFField *info;
|
||||
int count;
|
||||
void *value;
|
||||
} TIFFTagValue;
|
||||
|
||||
/*
|
||||
* TIFF Image File Directories are comprised of a table of field
|
||||
* descriptors of the form shown below. The table is sorted in
|
||||
* ascending order by tag. The values associated with each entry are
|
||||
* disjoint and may appear anywhere in the file (so long as they are
|
||||
* placed on a word boundary).
|
||||
*
|
||||
* If the value is 4 bytes or less, in ClassicTIFF, or 8 bytes or less in
|
||||
* BigTIFF, then it is placed in the offset field to save space. If so,
|
||||
* it is left-justified in the offset field.
|
||||
*/
|
||||
typedef struct {
|
||||
uint16 tdir_tag; /* see below */
|
||||
uint16 tdir_type; /* data type; see below */
|
||||
uint64 tdir_count; /* number of items; length in spec */
|
||||
union {
|
||||
uint16 toff_short;
|
||||
uint32 toff_long;
|
||||
uint64 toff_long8;
|
||||
} tdir_offset; /* either offset or the data itself if fits */
|
||||
} TIFFDirEntry;
|
||||
|
||||
/*
|
||||
* Internal format of a TIFF directory entry.
|
||||
*/
|
||||
typedef struct {
|
||||
#define FIELD_SETLONGS 4
|
||||
/* bit vector of fields that are set */
|
||||
unsigned long td_fieldsset[FIELD_SETLONGS];
|
||||
|
||||
uint32 td_imagewidth, td_imagelength, td_imagedepth;
|
||||
uint32 td_tilewidth, td_tilelength, td_tiledepth;
|
||||
uint32 td_subfiletype;
|
||||
uint16 td_bitspersample;
|
||||
uint16 td_sampleformat;
|
||||
uint16 td_compression;
|
||||
uint16 td_photometric;
|
||||
uint16 td_threshholding;
|
||||
uint16 td_fillorder;
|
||||
uint16 td_orientation;
|
||||
uint16 td_samplesperpixel;
|
||||
uint32 td_rowsperstrip;
|
||||
uint16 td_minsamplevalue, td_maxsamplevalue;
|
||||
double* td_sminsamplevalue;
|
||||
double* td_smaxsamplevalue;
|
||||
float td_xresolution, td_yresolution;
|
||||
uint16 td_resolutionunit;
|
||||
uint16 td_planarconfig;
|
||||
float td_xposition, td_yposition;
|
||||
uint16 td_pagenumber[2];
|
||||
uint16* td_colormap[3];
|
||||
uint16 td_halftonehints[2];
|
||||
uint16 td_extrasamples;
|
||||
uint16* td_sampleinfo;
|
||||
/* even though the name is misleading, td_stripsperimage is the number
|
||||
* of striles (=strips or tiles) per plane, and td_nstrips the total
|
||||
* number of striles */
|
||||
uint32 td_stripsperimage;
|
||||
uint32 td_nstrips; /* size of offset & bytecount arrays */
|
||||
uint64* td_stripoffset;
|
||||
uint64* td_stripbytecount;
|
||||
int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */
|
||||
#if defined(DEFER_STRILE_LOAD)
|
||||
TIFFDirEntry td_stripoffset_entry; /* for deferred loading */
|
||||
TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */
|
||||
#endif
|
||||
uint16 td_nsubifd;
|
||||
uint64* td_subifd;
|
||||
/* YCbCr parameters */
|
||||
uint16 td_ycbcrsubsampling[2];
|
||||
uint16 td_ycbcrpositioning;
|
||||
/* Colorimetry parameters */
|
||||
uint16* td_transferfunction[3];
|
||||
float* td_refblackwhite;
|
||||
/* CMYK parameters */
|
||||
int td_inknameslen;
|
||||
char* td_inknames;
|
||||
|
||||
int td_customValueCount;
|
||||
TIFFTagValue *td_customValues;
|
||||
} TIFFDirectory;
|
||||
|
||||
/*
|
||||
* Field flags used to indicate fields that have been set in a directory, and
|
||||
* to reference fields when manipulating a directory.
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIELD_IGNORE is used to signify tags that are to be processed but otherwise
|
||||
* ignored. This permits antiquated tags to be quietly read and discarded.
|
||||
* Note that a bit *is* allocated for ignored tags; this is understood by the
|
||||
* directory reading logic which uses this fact to avoid special-case handling
|
||||
*/
|
||||
#define FIELD_IGNORE 0
|
||||
|
||||
/* multi-item fields */
|
||||
#define FIELD_IMAGEDIMENSIONS 1
|
||||
#define FIELD_TILEDIMENSIONS 2
|
||||
#define FIELD_RESOLUTION 3
|
||||
#define FIELD_POSITION 4
|
||||
|
||||
/* single-item fields */
|
||||
#define FIELD_SUBFILETYPE 5
|
||||
#define FIELD_BITSPERSAMPLE 6
|
||||
#define FIELD_COMPRESSION 7
|
||||
#define FIELD_PHOTOMETRIC 8
|
||||
#define FIELD_THRESHHOLDING 9
|
||||
#define FIELD_FILLORDER 10
|
||||
#define FIELD_ORIENTATION 15
|
||||
#define FIELD_SAMPLESPERPIXEL 16
|
||||
#define FIELD_ROWSPERSTRIP 17
|
||||
#define FIELD_MINSAMPLEVALUE 18
|
||||
#define FIELD_MAXSAMPLEVALUE 19
|
||||
#define FIELD_PLANARCONFIG 20
|
||||
#define FIELD_RESOLUTIONUNIT 22
|
||||
#define FIELD_PAGENUMBER 23
|
||||
#define FIELD_STRIPBYTECOUNTS 24
|
||||
#define FIELD_STRIPOFFSETS 25
|
||||
#define FIELD_COLORMAP 26
|
||||
#define FIELD_EXTRASAMPLES 31
|
||||
#define FIELD_SAMPLEFORMAT 32
|
||||
#define FIELD_SMINSAMPLEVALUE 33
|
||||
#define FIELD_SMAXSAMPLEVALUE 34
|
||||
#define FIELD_IMAGEDEPTH 35
|
||||
#define FIELD_TILEDEPTH 36
|
||||
#define FIELD_HALFTONEHINTS 37
|
||||
#define FIELD_YCBCRSUBSAMPLING 39
|
||||
#define FIELD_YCBCRPOSITIONING 40
|
||||
#define FIELD_REFBLACKWHITE 41
|
||||
#define FIELD_TRANSFERFUNCTION 44
|
||||
#define FIELD_INKNAMES 46
|
||||
#define FIELD_SUBIFD 49
|
||||
/* FIELD_CUSTOM (see tiffio.h) 65 */
|
||||
/* end of support for well-known tags; codec-private tags follow */
|
||||
#define FIELD_CODEC 66 /* base of codec-private tags */
|
||||
|
||||
|
||||
/*
|
||||
* Pseudo-tags don't normally need field bits since they are not written to an
|
||||
* output file (by definition). The library also has express logic to always
|
||||
* query a codec for a pseudo-tag so allocating a field bit for one is a
|
||||
* waste. If codec wants to promote the notion of a pseudo-tag being ``set''
|
||||
* or ``unset'' then it can do using internal state flags without polluting
|
||||
* the field bit space defined for real tags.
|
||||
*/
|
||||
#define FIELD_PSEUDO 0
|
||||
|
||||
#define FIELD_LAST (32*FIELD_SETLONGS-1)
|
||||
|
||||
#define BITn(n) (((unsigned long)1L)<<((n)&0x1f))
|
||||
#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32])
|
||||
#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field))
|
||||
#define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field))
|
||||
#define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field))
|
||||
|
||||
#define FieldSet(fields, f) (fields[(f)/32] & BITn(f))
|
||||
#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f))
|
||||
|
||||
typedef enum {
|
||||
TIFF_SETGET_UNDEFINED = 0,
|
||||
TIFF_SETGET_ASCII = 1,
|
||||
TIFF_SETGET_UINT8 = 2,
|
||||
TIFF_SETGET_SINT8 = 3,
|
||||
TIFF_SETGET_UINT16 = 4,
|
||||
TIFF_SETGET_SINT16 = 5,
|
||||
TIFF_SETGET_UINT32 = 6,
|
||||
TIFF_SETGET_SINT32 = 7,
|
||||
TIFF_SETGET_UINT64 = 8,
|
||||
TIFF_SETGET_SINT64 = 9,
|
||||
TIFF_SETGET_FLOAT = 10,
|
||||
TIFF_SETGET_DOUBLE = 11,
|
||||
TIFF_SETGET_IFD8 = 12,
|
||||
TIFF_SETGET_INT = 13,
|
||||
TIFF_SETGET_UINT16_PAIR = 14,
|
||||
TIFF_SETGET_C0_ASCII = 15,
|
||||
TIFF_SETGET_C0_UINT8 = 16,
|
||||
TIFF_SETGET_C0_SINT8 = 17,
|
||||
TIFF_SETGET_C0_UINT16 = 18,
|
||||
TIFF_SETGET_C0_SINT16 = 19,
|
||||
TIFF_SETGET_C0_UINT32 = 20,
|
||||
TIFF_SETGET_C0_SINT32 = 21,
|
||||
TIFF_SETGET_C0_UINT64 = 22,
|
||||
TIFF_SETGET_C0_SINT64 = 23,
|
||||
TIFF_SETGET_C0_FLOAT = 24,
|
||||
TIFF_SETGET_C0_DOUBLE = 25,
|
||||
TIFF_SETGET_C0_IFD8 = 26,
|
||||
TIFF_SETGET_C16_ASCII = 27,
|
||||
TIFF_SETGET_C16_UINT8 = 28,
|
||||
TIFF_SETGET_C16_SINT8 = 29,
|
||||
TIFF_SETGET_C16_UINT16 = 30,
|
||||
TIFF_SETGET_C16_SINT16 = 31,
|
||||
TIFF_SETGET_C16_UINT32 = 32,
|
||||
TIFF_SETGET_C16_SINT32 = 33,
|
||||
TIFF_SETGET_C16_UINT64 = 34,
|
||||
TIFF_SETGET_C16_SINT64 = 35,
|
||||
TIFF_SETGET_C16_FLOAT = 36,
|
||||
TIFF_SETGET_C16_DOUBLE = 37,
|
||||
TIFF_SETGET_C16_IFD8 = 38,
|
||||
TIFF_SETGET_C32_ASCII = 39,
|
||||
TIFF_SETGET_C32_UINT8 = 40,
|
||||
TIFF_SETGET_C32_SINT8 = 41,
|
||||
TIFF_SETGET_C32_UINT16 = 42,
|
||||
TIFF_SETGET_C32_SINT16 = 43,
|
||||
TIFF_SETGET_C32_UINT32 = 44,
|
||||
TIFF_SETGET_C32_SINT32 = 45,
|
||||
TIFF_SETGET_C32_UINT64 = 46,
|
||||
TIFF_SETGET_C32_SINT64 = 47,
|
||||
TIFF_SETGET_C32_FLOAT = 48,
|
||||
TIFF_SETGET_C32_DOUBLE = 49,
|
||||
TIFF_SETGET_C32_IFD8 = 50,
|
||||
TIFF_SETGET_OTHER = 51
|
||||
} TIFFSetGetFieldType;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern const TIFFFieldArray* _TIFFGetFields(void);
|
||||
extern const TIFFFieldArray* _TIFFGetExifFields(void);
|
||||
extern void _TIFFSetupFields(TIFF* tif, const TIFFFieldArray* infoarray);
|
||||
extern void _TIFFPrintFieldInfo(TIFF*, FILE*);
|
||||
|
||||
extern int _TIFFFillStriles(TIFF*);
|
||||
|
||||
typedef enum {
|
||||
tfiatImage,
|
||||
tfiatExif,
|
||||
tfiatOther
|
||||
} TIFFFieldArrayType;
|
||||
|
||||
struct _TIFFFieldArray {
|
||||
TIFFFieldArrayType type; /* array type, will be used to determine if IFD is image and such */
|
||||
uint32 allocated_size; /* 0 if array is constant, other if modified by future definition extension support */
|
||||
uint32 count; /* number of elements in fields array */
|
||||
TIFFField* fields; /* actual field info */
|
||||
};
|
||||
|
||||
struct _TIFFField {
|
||||
uint32 field_tag; /* field's tag */
|
||||
short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
|
||||
short field_writecount; /* write count/TIFF_VARIABLE */
|
||||
TIFFDataType field_type; /* type of associated data */
|
||||
uint32 reserved; /* reserved for future extension */
|
||||
TIFFSetGetFieldType set_field_type; /* type to be passed to TIFFSetField */
|
||||
TIFFSetGetFieldType get_field_type; /* type to be passed to TIFFGetField */
|
||||
unsigned short field_bit; /* bit in fieldsset bit vector */
|
||||
unsigned char field_oktochange; /* if true, can change while writing */
|
||||
unsigned char field_passcount; /* if true, pass dir count on set */
|
||||
char* field_name; /* ASCII name */
|
||||
TIFFFieldArray* field_subfields; /* if field points to child ifds, child ifd field definition array */
|
||||
};
|
||||
|
||||
extern int _TIFFMergeFields(TIFF*, const TIFFField[], uint32);
|
||||
extern const TIFFField* _TIFFFindOrRegisterField(TIFF *, uint32, TIFFDataType);
|
||||
extern TIFFField* _TIFFCreateAnonField(TIFF *, uint32, TIFFDataType);
|
||||
extern int _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
#endif /* _TIFFDIR_ */
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
||||
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 8
|
||||
* fill-column: 78
|
||||
* End:
|
||||
*/
|
451
tests/libtiff/libtiff/tiffiop.h
Normal file
451
tests/libtiff/libtiff/tiffiop.h
Normal file
@ -0,0 +1,451 @@
|
||||
/* $Id: tiffiop.h,v 1.95 2017-09-07 14:02:52 erouault Exp $ */
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIFFIOP_
|
||||
#define _TIFFIOP_
|
||||
/*
|
||||
* ``Library-private'' definitions.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ASSERT_H
|
||||
# include <assert.h>
|
||||
#else
|
||||
# define assert(x)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SEARCH_H
|
||||
# include <search.h>
|
||||
#else
|
||||
extern void *lfind(const void *, const void *, size_t *, size_t,
|
||||
int (*)(const void *, const void *));
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_SNPRINTF) && !defined(HAVE__SNPRINTF)
|
||||
#undef snprintf
|
||||
#define snprintf _TIFF_snprintf_f
|
||||
extern int snprintf(char* str, size_t size, const char* format, ...);
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
#include "tif_dir.h"
|
||||
|
||||
#ifndef STRIP_SIZE_DEFAULT
|
||||
# define STRIP_SIZE_DEFAULT 8192
|
||||
#endif
|
||||
|
||||
#define streq(a,b) (strcmp(a,b) == 0)
|
||||
#define strneq(a,b,n) (strncmp(a,b,n) == 0)
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
|
||||
#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
|
||||
|
||||
typedef struct client_info {
|
||||
struct client_info *next;
|
||||
void *data;
|
||||
char *name;
|
||||
} TIFFClientInfoLink;
|
||||
|
||||
/*
|
||||
* Typedefs for ``method pointers'' used internally.
|
||||
* these are deprecated and provided only for backwards compatibility.
|
||||
*/
|
||||
typedef unsigned char tidataval_t; /* internal image data value type */
|
||||
typedef tidataval_t* tidata_t; /* reference to internal image data */
|
||||
|
||||
typedef void (*TIFFVoidMethod)(TIFF*);
|
||||
typedef int (*TIFFBoolMethod)(TIFF*);
|
||||
typedef int (*TIFFPreMethod)(TIFF*, uint16);
|
||||
typedef int (*TIFFCodeMethod)(TIFF* tif, uint8* buf, tmsize_t size, uint16 sample);
|
||||
typedef int (*TIFFSeekMethod)(TIFF*, uint32);
|
||||
typedef void (*TIFFPostMethod)(TIFF* tif, uint8* buf, tmsize_t size);
|
||||
typedef uint32 (*TIFFStripMethod)(TIFF*, uint32);
|
||||
typedef void (*TIFFTileMethod)(TIFF*, uint32*, uint32*);
|
||||
|
||||
struct tiff {
|
||||
char* tif_name; /* name of open file */
|
||||
int tif_fd; /* open file descriptor */
|
||||
int tif_mode; /* open mode (O_*) */
|
||||
uint32 tif_flags;
|
||||
#define TIFF_FILLORDER 0x00003U /* natural bit fill order for machine */
|
||||
#define TIFF_DIRTYHEADER 0x00004U /* header must be written on close */
|
||||
#define TIFF_DIRTYDIRECT 0x00008U /* current directory must be written */
|
||||
#define TIFF_BUFFERSETUP 0x00010U /* data buffers setup */
|
||||
#define TIFF_CODERSETUP 0x00020U /* encoder/decoder setup done */
|
||||
#define TIFF_BEENWRITING 0x00040U /* written 1+ scanlines to file */
|
||||
#define TIFF_SWAB 0x00080U /* byte swap file information */
|
||||
#define TIFF_NOBITREV 0x00100U /* inhibit bit reversal logic */
|
||||
#define TIFF_MYBUFFER 0x00200U /* my raw data buffer; free on close */
|
||||
#define TIFF_ISTILED 0x00400U /* file is tile, not strip- based */
|
||||
#define TIFF_MAPPED 0x00800U /* file is mapped into memory */
|
||||
#define TIFF_POSTENCODE 0x01000U /* need call to postencode routine */
|
||||
#define TIFF_INSUBIFD 0x02000U /* currently writing a subifd */
|
||||
#define TIFF_UPSAMPLED 0x04000U /* library is doing data up-sampling */
|
||||
#define TIFF_STRIPCHOP 0x08000U /* enable strip chopping support */
|
||||
#define TIFF_HEADERONLY 0x10000U /* read header only, do not process the first directory */
|
||||
#define TIFF_NOREADRAW 0x20000U /* skip reading of raw uncompressed image data */
|
||||
#define TIFF_INCUSTOMIFD 0x40000U /* currently writing a custom IFD */
|
||||
#define TIFF_BIGTIFF 0x80000U /* read/write bigtiff */
|
||||
#define TIFF_BUF4WRITE 0x100000U /* rawcc bytes are for writing */
|
||||
#define TIFF_DIRTYSTRIP 0x200000U /* stripoffsets/stripbytecount dirty*/
|
||||
#define TIFF_PERSAMPLE 0x400000U /* get/set per sample tags as arrays */
|
||||
#define TIFF_BUFFERMMAP 0x800000U /* read buffer (tif_rawdata) points into mmap() memory */
|
||||
uint64 tif_diroff; /* file offset of current directory */
|
||||
uint64 tif_nextdiroff; /* file offset of following directory */
|
||||
uint64* tif_dirlist; /* list of offsets to already seen directories to prevent IFD looping */
|
||||
uint16 tif_dirlistsize; /* number of entries in offset list */
|
||||
uint16 tif_dirnumber; /* number of already seen directories */
|
||||
TIFFDirectory tif_dir; /* internal rep of current directory */
|
||||
TIFFDirectory tif_customdir; /* custom IFDs are separated from the main ones */
|
||||
union {
|
||||
TIFFHeaderCommon common;
|
||||
TIFFHeaderClassic classic;
|
||||
TIFFHeaderBig big;
|
||||
} tif_header;
|
||||
uint16 tif_header_size; /* file's header block and its length */
|
||||
uint32 tif_row; /* current scanline */
|
||||
uint16 tif_curdir; /* current directory (index) */
|
||||
uint32 tif_curstrip; /* current strip for read/write */
|
||||
uint64 tif_curoff; /* current offset for read/write */
|
||||
uint64 tif_dataoff; /* current offset for writing dir */
|
||||
/* SubIFD support */
|
||||
uint16 tif_nsubifd; /* remaining subifds to write */
|
||||
uint64 tif_subifdoff; /* offset for patching SubIFD link */
|
||||
/* tiling support */
|
||||
uint32 tif_col; /* current column (offset by row too) */
|
||||
uint32 tif_curtile; /* current tile for read/write */
|
||||
tmsize_t tif_tilesize; /* # of bytes in a tile */
|
||||
/* compression scheme hooks */
|
||||
int tif_decodestatus;
|
||||
TIFFBoolMethod tif_fixuptags; /* called in TIFFReadDirectory */
|
||||
TIFFBoolMethod tif_setupdecode; /* called once before predecode */
|
||||
TIFFPreMethod tif_predecode; /* pre- row/strip/tile decoding */
|
||||
TIFFBoolMethod tif_setupencode; /* called once before preencode */
|
||||
int tif_encodestatus;
|
||||
TIFFPreMethod tif_preencode; /* pre- row/strip/tile encoding */
|
||||
TIFFBoolMethod tif_postencode; /* post- row/strip/tile encoding */
|
||||
TIFFCodeMethod tif_decoderow; /* scanline decoding routine */
|
||||
TIFFCodeMethod tif_encoderow; /* scanline encoding routine */
|
||||
TIFFCodeMethod tif_decodestrip; /* strip decoding routine */
|
||||
TIFFCodeMethod tif_encodestrip; /* strip encoding routine */
|
||||
TIFFCodeMethod tif_decodetile; /* tile decoding routine */
|
||||
TIFFCodeMethod tif_encodetile; /* tile encoding routine */
|
||||
TIFFVoidMethod tif_close; /* cleanup-on-close routine */
|
||||
TIFFSeekMethod tif_seek; /* position within a strip routine */
|
||||
TIFFVoidMethod tif_cleanup; /* cleanup state routine */
|
||||
TIFFStripMethod tif_defstripsize; /* calculate/constrain strip size */
|
||||
TIFFTileMethod tif_deftilesize; /* calculate/constrain tile size */
|
||||
uint8* tif_data; /* compression scheme private data */
|
||||
/* input/output buffering */
|
||||
tmsize_t tif_scanlinesize; /* # of bytes in a scanline */
|
||||
tmsize_t tif_scanlineskew; /* scanline skew for reading strips */
|
||||
uint8* tif_rawdata; /* raw data buffer */
|
||||
tmsize_t tif_rawdatasize; /* # of bytes in raw data buffer */
|
||||
tmsize_t tif_rawdataoff; /* rawdata offset within strip */
|
||||
tmsize_t tif_rawdataloaded;/* amount of data in rawdata */
|
||||
uint8* tif_rawcp; /* current spot in raw buffer */
|
||||
tmsize_t tif_rawcc; /* bytes unread from raw buffer */
|
||||
/* memory-mapped file support */
|
||||
uint8* tif_base; /* base of mapped file */
|
||||
tmsize_t tif_size; /* size of mapped file region (bytes, thus tmsize_t) */
|
||||
TIFFMapFileProc tif_mapproc; /* map file method */
|
||||
TIFFUnmapFileProc tif_unmapproc; /* unmap file method */
|
||||
/* input/output callback methods */
|
||||
thandle_t tif_clientdata; /* callback parameter */
|
||||
TIFFReadWriteProc tif_readproc; /* read method */
|
||||
TIFFReadWriteProc tif_writeproc; /* write method */
|
||||
TIFFSeekProc tif_seekproc; /* lseek method */
|
||||
TIFFCloseProc tif_closeproc; /* close method */
|
||||
TIFFSizeProc tif_sizeproc; /* filesize method */
|
||||
/* post-decoding support */
|
||||
TIFFPostMethod tif_postdecode; /* post decoding routine */
|
||||
/* tag support */
|
||||
TIFFField** tif_fields; /* sorted table of registered tags */
|
||||
size_t tif_nfields; /* # entries in registered tag table */
|
||||
const TIFFField* tif_foundfield; /* cached pointer to already found tag */
|
||||
TIFFTagMethods tif_tagmethods; /* tag get/set/print routines */
|
||||
TIFFClientInfoLink* tif_clientinfo; /* extra client information. */
|
||||
/* Backward compatibility stuff. We need these two fields for
|
||||
* setting up an old tag extension scheme. */
|
||||
TIFFFieldArray* tif_fieldscompat;
|
||||
size_t tif_nfieldscompat;
|
||||
};
|
||||
|
||||
#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */
|
||||
|
||||
#define isTiled(tif) (((tif)->tif_flags & TIFF_ISTILED) != 0)
|
||||
#define isMapped(tif) (((tif)->tif_flags & TIFF_MAPPED) != 0)
|
||||
#define isFillOrder(tif, o) (((tif)->tif_flags & (o)) != 0)
|
||||
#define isUpSampled(tif) (((tif)->tif_flags & TIFF_UPSAMPLED) != 0)
|
||||
#define TIFFReadFile(tif, buf, size) \
|
||||
((*(tif)->tif_readproc)((tif)->tif_clientdata,(buf),(size)))
|
||||
#define TIFFWriteFile(tif, buf, size) \
|
||||
((*(tif)->tif_writeproc)((tif)->tif_clientdata,(buf),(size)))
|
||||
#define TIFFSeekFile(tif, off, whence) \
|
||||
((*(tif)->tif_seekproc)((tif)->tif_clientdata,(off),(whence)))
|
||||
#define TIFFCloseFile(tif) \
|
||||
((*(tif)->tif_closeproc)((tif)->tif_clientdata))
|
||||
#define TIFFGetFileSize(tif) \
|
||||
((*(tif)->tif_sizeproc)((tif)->tif_clientdata))
|
||||
#define TIFFMapFileContents(tif, paddr, psize) \
|
||||
((*(tif)->tif_mapproc)((tif)->tif_clientdata,(paddr),(psize)))
|
||||
#define TIFFUnmapFileContents(tif, addr, size) \
|
||||
((*(tif)->tif_unmapproc)((tif)->tif_clientdata,(addr),(size)))
|
||||
|
||||
/*
|
||||
* Default Read/Seek/Write definitions.
|
||||
*/
|
||||
#ifndef ReadOK
|
||||
#define ReadOK(tif, buf, size) \
|
||||
(TIFFReadFile((tif),(buf),(size))==(size))
|
||||
#endif
|
||||
#ifndef SeekOK
|
||||
#define SeekOK(tif, off) _TIFFSeekOK(tif, off)
|
||||
#endif
|
||||
#ifndef WriteOK
|
||||
#define WriteOK(tif, buf, size) \
|
||||
(TIFFWriteFile((tif),(buf),(size))==(size))
|
||||
#endif
|
||||
|
||||
/* NB: the uint32 casts are to silence certain ANSI-C compilers */
|
||||
#define TIFFhowmany_32(x, y) (((uint32)x < (0xffffffff - (uint32)(y-1))) ? \
|
||||
((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) : \
|
||||
0U)
|
||||
/* Variant of TIFFhowmany_32() that doesn't return 0 if x close to MAXUINT. */
|
||||
/* Caution: TIFFhowmany_32_maxuint_compat(x,y)*y might overflow */
|
||||
#define TIFFhowmany_32_maxuint_compat(x, y) \
|
||||
(((uint32)(x) / (uint32)(y)) + ((((uint32)(x) % (uint32)(y)) != 0) ? 1 : 0))
|
||||
#define TIFFhowmany8_32(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3)
|
||||
#define TIFFroundup_32(x, y) (TIFFhowmany_32(x,y)*(y))
|
||||
#define TIFFhowmany_64(x, y) ((((uint64)(x))+(((uint64)(y))-1))/((uint64)(y)))
|
||||
#define TIFFhowmany8_64(x) (((x)&0x07)?((uint64)(x)>>3)+1:(uint64)(x)>>3)
|
||||
#define TIFFroundup_64(x, y) (TIFFhowmany_64(x,y)*(y))
|
||||
|
||||
/* Safe multiply which returns zero if there is an *unsigned* integer overflow. This macro is not safe for *signed* integer types */
|
||||
#define TIFFSafeMultiply(t,v,m) ((((t)(m) != (t)0) && (((t)(((v)*(m))/(m))) == (t)(v))) ? (t)((v)*(m)) : (t)0)
|
||||
|
||||
#define TIFFmax(A,B) ((A)>(B)?(A):(B))
|
||||
#define TIFFmin(A,B) ((A)<(B)?(A):(B))
|
||||
|
||||
#define TIFFArrayCount(a) (sizeof (a) / sizeof ((a)[0]))
|
||||
|
||||
/*
|
||||
Support for large files.
|
||||
|
||||
Windows read/write APIs support only 'unsigned int' rather than 'size_t'.
|
||||
Windows off_t is only 32-bit, even in 64-bit builds.
|
||||
*/
|
||||
#if defined(HAVE_FSEEKO)
|
||||
/*
|
||||
Use fseeko() and ftello() if they are available since they use
|
||||
'off_t' rather than 'long'. It is wrong to use fseeko() and
|
||||
ftello() only on systems with special LFS support since some systems
|
||||
(e.g. FreeBSD) support a 64-bit off_t by default.
|
||||
|
||||
For MinGW, __MSVCRT_VERSION__ must be at least 0x800 to expose these
|
||||
interfaces. The MinGW compiler must support the requested version. MinGW
|
||||
does not distribute the CRT (it is supplied by Microsoft) so the correct CRT
|
||||
must be available on the target computer in order for the program to run.
|
||||
*/
|
||||
#if defined(HAVE_FSEEKO)
|
||||
# define fseek(stream,offset,whence) fseeko(stream,offset,whence)
|
||||
# define ftell(stream,offset,whence) ftello(stream,offset,whence)
|
||||
#endif
|
||||
#endif
|
||||
#if defined(__WIN32__) && \
|
||||
!(defined(_MSC_VER) && _MSC_VER < 1400) && \
|
||||
!(defined(__MSVCRT_VERSION__) && __MSVCRT_VERSION__ < 0x800)
|
||||
typedef unsigned int TIFFIOSize_t;
|
||||
#define _TIFF_lseek_f(fildes,offset,whence) _lseeki64(fildes,/* __int64 */ offset,whence)
|
||||
/* #define _TIFF_tell_f(fildes) /\* __int64 *\/ _telli64(fildes) */
|
||||
#define _TIFF_fseek_f(stream,offset,whence) _fseeki64(stream,/* __int64 */ offset,whence)
|
||||
#define _TIFF_fstat_f(fildes,stat_buff) _fstati64(fildes,/* struct _stati64 */ stat_buff)
|
||||
/* #define _TIFF_ftell_f(stream) /\* __int64 *\/ _ftelli64(stream) */
|
||||
/* #define _TIFF_stat_f(path,stat_buff) _stati64(path,/\* struct _stati64 *\/ stat_buff) */
|
||||
#define _TIFF_stat_s struct _stati64
|
||||
#define _TIFF_off_t __int64
|
||||
#else
|
||||
typedef size_t TIFFIOSize_t;
|
||||
#define _TIFF_lseek_f(fildes,offset,whence) lseek(fildes,offset,whence)
|
||||
/* #define _TIFF_tell_f(fildes) (_TIFF_lseek_f(fildes,0,SEEK_CUR)) */
|
||||
#define _TIFF_fseek_f(stream,offset,whence) fseek(stream,offset,whence)
|
||||
#define _TIFF_fstat_f(fildes,stat_buff) fstat(fildes,stat_buff)
|
||||
/* #define _TIFF_ftell_f(stream) ftell(stream) */
|
||||
/* #define _TIFF_stat_f(path,stat_buff) stat(path,stat_buff) */
|
||||
#define _TIFF_stat_s struct stat
|
||||
#define _TIFF_off_t off_t
|
||||
#endif
|
||||
|
||||
#if __clang_major__ >= 4 || (__clang_major__ == 3 && __clang_minor__ >= 8)
|
||||
#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow")))
|
||||
#else
|
||||
#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
extern int _TIFFgetMode(const char* mode, const char* module);
|
||||
extern int _TIFFNoRowEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern int _TIFFNoStripEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern int _TIFFNoTileEncode(TIFF*, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern int _TIFFNoRowDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern int _TIFFNoStripDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern int _TIFFNoTileDecode(TIFF*, uint8* pp, tmsize_t cc, uint16 s);
|
||||
extern void _TIFFNoPostDecode(TIFF* tif, uint8* buf, tmsize_t cc);
|
||||
extern int _TIFFNoPreCode(TIFF* tif, uint16 s);
|
||||
extern int _TIFFNoSeek(TIFF* tif, uint32 off);
|
||||
extern void _TIFFSwab16BitData(TIFF* tif, uint8* buf, tmsize_t cc);
|
||||
extern void _TIFFSwab24BitData(TIFF* tif, uint8* buf, tmsize_t cc);
|
||||
extern void _TIFFSwab32BitData(TIFF* tif, uint8* buf, tmsize_t cc);
|
||||
extern void _TIFFSwab64BitData(TIFF* tif, uint8* buf, tmsize_t cc);
|
||||
extern int TIFFFlushData1(TIFF* tif);
|
||||
extern int TIFFDefaultDirectory(TIFF* tif);
|
||||
extern void _TIFFSetDefaultCompressionState(TIFF* tif);
|
||||
extern int _TIFFRewriteField(TIFF *, uint16, TIFFDataType, tmsize_t, void *);
|
||||
extern int TIFFSetCompressionScheme(TIFF* tif, int scheme);
|
||||
extern int TIFFSetDefaultCompressionState(TIFF* tif);
|
||||
extern uint32 _TIFFDefaultStripSize(TIFF* tif, uint32 s);
|
||||
extern void _TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th);
|
||||
extern int _TIFFDataSize(TIFFDataType type);
|
||||
|
||||
extern void _TIFFsetByteArray(void**, void*, uint32);
|
||||
extern void _TIFFsetString(char**, char*);
|
||||
extern void _TIFFsetShortArray(uint16**, uint16*, uint32);
|
||||
extern void _TIFFsetLongArray(uint32**, uint32*, uint32);
|
||||
extern void _TIFFsetFloatArray(float**, float*, uint32);
|
||||
extern void _TIFFsetDoubleArray(double**, double*, uint32);
|
||||
|
||||
extern void _TIFFprintAscii(FILE*, const char*);
|
||||
extern void _TIFFprintAsciiTag(FILE*, const char*, const char*);
|
||||
|
||||
extern TIFFErrorHandler _TIFFwarningHandler;
|
||||
extern TIFFErrorHandler _TIFFerrorHandler;
|
||||
extern TIFFErrorHandlerExt _TIFFwarningHandlerExt;
|
||||
extern TIFFErrorHandlerExt _TIFFerrorHandlerExt;
|
||||
|
||||
extern uint32 _TIFFMultiply32(TIFF*, uint32, uint32, const char*);
|
||||
extern uint64 _TIFFMultiply64(TIFF*, uint64, uint64, const char*);
|
||||
extern tmsize_t _TIFFMultiplySSize(TIFF*, tmsize_t, tmsize_t, const char*);
|
||||
extern tmsize_t _TIFFCastUInt64ToSSize(TIFF*, uint64, const char*);
|
||||
extern void* _TIFFCheckMalloc(TIFF*, tmsize_t, tmsize_t, const char*);
|
||||
extern void* _TIFFCheckRealloc(TIFF*, void*, tmsize_t, tmsize_t, const char*);
|
||||
|
||||
extern double _TIFFUInt64ToDouble(uint64);
|
||||
extern float _TIFFUInt64ToFloat(uint64);
|
||||
|
||||
extern tmsize_t
|
||||
_TIFFReadEncodedStripAndAllocBuffer(TIFF* tif, uint32 strip,
|
||||
void **buf, tmsize_t bufsizetoalloc,
|
||||
tmsize_t size_to_read);
|
||||
extern tmsize_t
|
||||
_TIFFReadEncodedTileAndAllocBuffer(TIFF* tif, uint32 tile,
|
||||
void **buf, tmsize_t bufsizetoalloc,
|
||||
tmsize_t size_to_read);
|
||||
extern tmsize_t
|
||||
_TIFFReadTileAndAllocBuffer(TIFF* tif,
|
||||
void **buf, tmsize_t bufsizetoalloc,
|
||||
uint32 x, uint32 y, uint32 z, uint16 s);
|
||||
extern int _TIFFSeekOK(TIFF* tif, toff_t off);
|
||||
|
||||
extern int TIFFInitDumpMode(TIFF*, int);
|
||||
#ifdef PACKBITS_SUPPORT
|
||||
extern int TIFFInitPackBits(TIFF*, int);
|
||||
#endif
|
||||
#ifdef CCITT_SUPPORT
|
||||
extern int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int);
|
||||
extern int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int);
|
||||
#endif
|
||||
#ifdef THUNDER_SUPPORT
|
||||
extern int TIFFInitThunderScan(TIFF*, int);
|
||||
#endif
|
||||
#ifdef NEXT_SUPPORT
|
||||
extern int TIFFInitNeXT(TIFF*, int);
|
||||
#endif
|
||||
#ifdef LZW_SUPPORT
|
||||
extern int TIFFInitLZW(TIFF*, int);
|
||||
#endif
|
||||
#ifdef OJPEG_SUPPORT
|
||||
extern int TIFFInitOJPEG(TIFF*, int);
|
||||
#endif
|
||||
#ifdef JPEG_SUPPORT
|
||||
extern int TIFFInitJPEG(TIFF*, int);
|
||||
extern int TIFFJPEGIsFullStripRequired(TIFF*);
|
||||
#endif
|
||||
#ifdef JBIG_SUPPORT
|
||||
extern int TIFFInitJBIG(TIFF*, int);
|
||||
#endif
|
||||
#ifdef ZIP_SUPPORT
|
||||
extern int TIFFInitZIP(TIFF*, int);
|
||||
#endif
|
||||
#ifdef PIXARLOG_SUPPORT
|
||||
extern int TIFFInitPixarLog(TIFF*, int);
|
||||
#endif
|
||||
#ifdef LOGLUV_SUPPORT
|
||||
extern int TIFFInitSGILog(TIFF*, int);
|
||||
#endif
|
||||
#ifdef LZMA_SUPPORT
|
||||
extern int TIFFInitLZMA(TIFF*, int);
|
||||
#endif
|
||||
#ifdef VMS
|
||||
extern const TIFFCodec _TIFFBuiltinCODECS[];
|
||||
#else
|
||||
extern TIFFCodec _TIFFBuiltinCODECS[];
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
#endif /* _TIFFIOP_ */
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 8
|
||||
* fill-column: 78
|
||||
* End:
|
||||
*/
|
270
tests/libtiff/test/CMakeLists.txt
Normal file
270
tests/libtiff/test/CMakeLists.txt
Normal file
@ -0,0 +1,270 @@
|
||||
find_package(TIFF REQUIRED)
|
||||
find_package(JPEG REQUIRED)
|
||||
|
||||
include_directories(${TIFF_INCLUDES}
|
||||
${JPEG_INCLUDES}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/.."
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../libtiff")
|
||||
|
||||
# This list should contain all of the TIFF files in the 'images'
|
||||
# subdirectory which are intended to be used as input images for
|
||||
# tests. All of these files should use the extension ".tiff".
|
||||
set(TIFFIMAGES
|
||||
images/logluv-3c-16b.tiff
|
||||
images/minisblack-1c-16b.tiff
|
||||
images/minisblack-1c-8b.tiff
|
||||
images/minisblack-2c-8b-alpha.tiff
|
||||
images/miniswhite-1c-1b.tiff
|
||||
images/palette-1c-1b.tiff
|
||||
images/palette-1c-4b.tiff
|
||||
images/palette-1c-8b.tiff
|
||||
images/rgb-3c-16b.tiff
|
||||
images/rgb-3c-8b.tiff
|
||||
images/quad-tile.jpg.tiff
|
||||
images/quad-lzw-compat.tiff)
|
||||
|
||||
# All uncompressed image files
|
||||
set(UNCOMPRESSEDIMAGES
|
||||
images/minisblack-1c-16b.tiff
|
||||
images/minisblack-1c-8b.tiff
|
||||
images/miniswhite-1c-1b.tiff
|
||||
images/palette-1c-1b.tiff
|
||||
images/palette-1c-4b.tiff
|
||||
images/palette-1c-8b.tiff
|
||||
images/rgb-3c-8b.tiff)
|
||||
|
||||
add_executable(ascii_tag ascii_tag.c)
|
||||
target_link_libraries(ascii_tag tiff)
|
||||
|
||||
add_executable(long_tag long_tag.c check_tag.c)
|
||||
target_link_libraries(long_tag tiff)
|
||||
|
||||
add_executable(short_tag short_tag.c check_tag.c)
|
||||
target_link_libraries(short_tag tiff)
|
||||
|
||||
add_executable(strip_rw strip_rw.c strip.c test_arrays.c test_arrays.h)
|
||||
target_link_libraries(strip_rw tiff)
|
||||
|
||||
add_executable(rewrite rewrite_tag.c)
|
||||
target_link_libraries(rewrite tiff)
|
||||
|
||||
add_executable(raw_decode raw_decode.c)
|
||||
target_link_libraries(raw_decode tiff)
|
||||
|
||||
add_executable(custom_dir custom_dir.c)
|
||||
target_link_libraries(custom_dir tiff)
|
||||
|
||||
add_test(NAME "ascii_tag"
|
||||
COMMAND "$<TARGET_FILE:ascii_tag>")
|
||||
|
||||
add_test(NAME "long_tag"
|
||||
COMMAND "$<TARGET_FILE:long_tag>")
|
||||
|
||||
add_test(NAME "short_tag"
|
||||
COMMAND "$<TARGET_FILE:short_tag>")
|
||||
|
||||
add_test(NAME "strip_rw"
|
||||
COMMAND "$<TARGET_FILE:strip_rw>")
|
||||
|
||||
add_test(NAME "rewrite"
|
||||
COMMAND "$<TARGET_FILE:rewrite>")
|
||||
|
||||
add_test(NAME "raw_decode"
|
||||
COMMAND "$<TARGET_FILE:raw_decode>")
|
||||
|
||||
add_test(NAME "custom_dir"
|
||||
COMMAND "$<TARGET_FILE:custom_dir>")
|
||||
|
||||
set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output")
|
||||
file(MAKE_DIRECTORY "${TEST_OUTPUT}")
|
||||
|
||||
set(tiff_test_extra_args
|
||||
"-DTIFFCP=tiffcp"
|
||||
"-DTIFFINFO=tiffinfo"
|
||||
"-DTIFFSPLIT=tiffsplit")
|
||||
|
||||
macro(tiff_test_convert name command1 command2 command3 infile outfile validate)
|
||||
add_test(NAME "${name}"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
"-DCONVERT_COMMAND1=${command1}"
|
||||
"-DCONVERT_COMMAND2=${command2}"
|
||||
"-DCONVERT_COMMAND3=${command3}"
|
||||
"-DINFILE=${infile}"
|
||||
"-DOUTFILE=${outfile}"
|
||||
"-DVALIDATE=${validate}"
|
||||
${tiff_test_extra_args}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/TiffTest.cmake")
|
||||
endmacro()
|
||||
|
||||
macro(tiff_test_stdout name command infile outfile)
|
||||
add_test(NAME "${name}"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
"-DSTDOUT_COMMAND=${command}"
|
||||
"-DINFILE=${infile}"
|
||||
"-DOUTFILE=${outfile}"
|
||||
${tiff_test_extra_args}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/TiffTest.cmake")
|
||||
endmacro()
|
||||
|
||||
macro(tiff_test_reader name command infile)
|
||||
add_test(NAME "${name}"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
"-DREADER_COMMAND=${command}"
|
||||
"-DINFILE=${infile}"
|
||||
${tiff_test_extra_args}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/TiffTest.cmake")
|
||||
endmacro()
|
||||
|
||||
macro(add_convert_test_multi commandname1 commandname2 commandname3
|
||||
categoryname commandargs1 commandargs2 commandargs3
|
||||
image validate)
|
||||
string(REPLACE " " "^" escaped_commandargs1 "${commandargs1}")
|
||||
string(REPLACE " " "^" escaped_commandargs2 "${commandargs2}")
|
||||
string(REPLACE " " "^" escaped_commandargs3 "${commandargs3}")
|
||||
get_filename_component(name "${image}" NAME)
|
||||
get_filename_component(base "${image}" NAME_WE)
|
||||
set(testname "${commandname1}-${categoryname}-${base}")
|
||||
if(${commandname1} MATCHES ".+")
|
||||
set(command1
|
||||
"${commandname1}^${escaped_commandargs1}")
|
||||
else()
|
||||
set(command1)
|
||||
endif()
|
||||
if(${commandname2} MATCHES ".+")
|
||||
set(command2
|
||||
"${commandname2}^${escaped_commandargs2}")
|
||||
else()
|
||||
set(command2)
|
||||
endif()
|
||||
if(${commandname3} MATCHES ".+")
|
||||
set(command3
|
||||
"${commandname3}^${escaped_commandargs3}")
|
||||
else()
|
||||
set(command3)
|
||||
endif()
|
||||
set(infile "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
|
||||
set(outfile "${TEST_OUTPUT}/${commandname1}-${categoryname}-${name}")
|
||||
string(REGEX REPLACE "\\.tiff\$" "" name "${name}")
|
||||
tiff_test_convert("${testname}" "${command1}" "${command2}" "${command3}"
|
||||
"${infile}" "${outfile}" "${validate}")
|
||||
endmacro()
|
||||
|
||||
macro(add_convert_test commandname
|
||||
categoryname commandargs
|
||||
image validate)
|
||||
add_convert_test_multi("${commandname}" "" ""
|
||||
"${categoryname}" "${commandargs}" "" ""
|
||||
"${image}" "${validate}")
|
||||
endmacro()
|
||||
|
||||
macro(add_convert_tests_multi commandname commandname2 commandname3
|
||||
categoryname
|
||||
commandargs1 commandargs2 commandargs3
|
||||
images validate)
|
||||
foreach(file ${${images}})
|
||||
add_convert_test_multi("${commandname1}" "${commandname2}"
|
||||
"${commandname3}" "${categoryname}"
|
||||
"${commandargs1}" "${commandargs2}"
|
||||
"${commandargs3}" "${file}" "${validate}")
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
macro(add_convert_tests commandname categoryname commandargs images validate)
|
||||
foreach(file ${${images}})
|
||||
add_convert_test("${commandname}" "${categoryname}"
|
||||
"${commandargs}" "${file}" "${validate}")
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
macro(add_stdout_test commandname categoryname commandargs image)
|
||||
string(REPLACE " " "^" escaped_commandargs "${commandargs}")
|
||||
get_filename_component(name "${image}" NAME)
|
||||
get_filename_component(base "${image}" NAME_WE)
|
||||
set(testname "${commandname}-${categoryname}-${base}")
|
||||
set(command "${commandname}^${escaped_commandargs}")
|
||||
set(infile "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
|
||||
set(outfile "${TEST_OUTPUT}/${commandname}-${categoryname}-${name}")
|
||||
string(REGEX REPLACE "\\.tiff\$" "" name "${name}")
|
||||
tiff_test_stdout("${testname}" "${command}" "${infile}" "${outfile}")
|
||||
endmacro()
|
||||
|
||||
macro(add_reader_test commandname commandargs image)
|
||||
string(REPLACE " " "^" escaped_commandargs "${commandargs}")
|
||||
get_filename_component(name "${image}" NAME)
|
||||
get_filename_component(base "${image}" NAME_WE)
|
||||
set(testname "${commandname}-${base}")
|
||||
set(command "${commandname}^${escaped_commandargs}")
|
||||
set(infile "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
|
||||
string(REGEX REPLACE "\\.tiff\$" "" name "${name}")
|
||||
tiff_test_reader("${testname}" "${command}" "${infile}")
|
||||
endmacro()
|
||||
|
||||
# PPM
|
||||
add_convert_test(ppm2tiff miniswhite "" "images/miniswhite-1c-1b.pbm" TRUE)
|
||||
add_convert_test(ppm2tiff minisblack "" "images/minisblack-1c-8b.pgm" TRUE)
|
||||
add_convert_test(ppm2tiff rgb "" "images/rgb-3c-8b.ppm" TRUE)
|
||||
|
||||
# tiffcp
|
||||
add_convert_test(tiffcp g3 "-c g3" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp g31d "-c g3:1d" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp g31dfill "-c g3:1d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp g32d "-c g3:2d" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp g32dfill "-c g3:2d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp g4 "-c g4" "images/miniswhite-1c-1b.tiff" FALSE)
|
||||
add_convert_test(tiffcp none "-c none" "images/quad-lzw-compat.tiff" FALSE)
|
||||
add_convert_test_multi(tiffcp tiffcp "" logluv "-c none" "-c sgilog" ""
|
||||
"images/logluv-3c-16b.tiff" FALSE)
|
||||
add_convert_test_multi(tiffcp "$<TARGET_FILE:thumbnail>" "" thumbnail "-c g3:1d" "" ""
|
||||
"images/miniswhite-1c-1b.tiff" FALSE)
|
||||
|
||||
# tiffdump
|
||||
add_reader_test(tiffdump "" "images/miniswhite-1c-1b.tiff")
|
||||
|
||||
# tiffinfo
|
||||
add_reader_test(tiffinfo "-c -D -d -j -s" "images/minisblack-1c-16b.tiff")
|
||||
|
||||
# tiffcp split/join
|
||||
foreach(image ${UNCOMPRESSEDIMAGES})
|
||||
list(APPEND ESCAPED_UNCOMPRESSED "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
|
||||
endforeach()
|
||||
string(REPLACE ";" "^" ESCAPED_UNCOMPRESSED "${ESCAPED_UNCOMPRESSED}")
|
||||
add_test(NAME "tiffcp-split"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
"-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
|
||||
"-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-conjoined.tif"
|
||||
"-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-split-"
|
||||
${tiff_test_extra_args}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
|
||||
add_test(NAME "tiffcp-split-join"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
"-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
|
||||
"-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-join-conjoined.tif"
|
||||
"-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-join-split-"
|
||||
"-DRECONJOINED=${TEST_OUTPUT}/tiffcp-split-join-reconjoined.tif"
|
||||
${tiff_test_extra_args}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
|
||||
|
||||
# PDF
|
||||
add_stdout_test(tiff2pdf default "" "images/miniswhite-1c-1b.tiff" TRUE)
|
||||
|
||||
# PS
|
||||
add_stdout_test(tiff2ps PS1 "-a -p -1" "images/miniswhite-1c-1b.tiff" TRUE)
|
||||
add_stdout_test(tiff2ps PS2 "-a -p -2" "images/miniswhite-1c-1b.tiff" TRUE)
|
||||
add_stdout_test(tiff2ps PS3 "-a -p -3" "images/miniswhite-1c-1b.tiff" TRUE)
|
||||
add_stdout_test(tiff2ps EPS1 "-e -1" "images/miniswhite-1c-1b.tiff" TRUE)
|
||||
|
||||
# BW
|
||||
add_convert_test(tiff2bw default "" "images/palette-1c-8b.tiff" TRUE)
|
||||
add_convert_test(tiff2bw default "" "images/quad-lzw-compat.tiff" TRUE)
|
||||
add_convert_test(tiff2bw default "" "images/rgb-3c-8b.tiff" TRUE)
|
||||
|
||||
# RGBA
|
||||
add_convert_tests(tiff2rgba default "" TIFFIMAGES TRUE)
|
||||
# Test rotations
|
||||
add_convert_tests(tiffcrop R90 "-R90" TIFFIMAGES TRUE)
|
||||
# Test flip (mirror)
|
||||
add_convert_tests(tiffcrop doubleflip "-F both" TIFFIMAGES TRUE)
|
||||
# Test extracting a section 60 pixels wide and 60 pixels high
|
||||
add_convert_tests(tiffcrop extract "-U px -E top -X 60 -Y 60" TIFFIMAGES TRUE)
|
||||
# Test extracting the first and fourth quarters from the left side.
|
||||
add_convert_tests(tiffcrop extractz14 "-E left -Z1:4,2:4" TIFFIMAGES TRUE)
|
34
tests/libtiff/test/TiffSplitTest.cmake
Normal file
34
tests/libtiff/test/TiffSplitTest.cmake
Normal file
@ -0,0 +1,34 @@
|
||||
# CMake tests for libtiff
|
||||
#
|
||||
# Copyright © 2015 Open Microscopy Environment / University of Dundee
|
||||
# Written by Roger Leigh <rleigh@codelibre.net>
|
||||
#
|
||||
# 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.
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/TiffTestCommon.cmake)
|
||||
|
||||
string(REPLACE "^" ";" TESTFILES "${TESTFILES}")
|
||||
|
||||
test_convert_multi("${TIFFCP}" "${TESTFILES}" "${CONJOINED}")
|
||||
test_convert("${TIFFSPLIT}" "${CONJOINED}" "${SPLITFILE}")
|
||||
if (RECONJOINED)
|
||||
file(GLOB SPLITFILES "${SPLITFILE}*")
|
||||
test_convert_multi("${TIFFCP}" "${SPLITFILES}" "${RECONJOINED}")
|
||||
endif()
|
63
tests/libtiff/test/TiffTest.cmake
Normal file
63
tests/libtiff/test/TiffTest.cmake
Normal file
@ -0,0 +1,63 @@
|
||||
# CMake tests for libtiff
|
||||
#
|
||||
# Copyright © 2015 Open Microscopy Environment / University of Dundee
|
||||
# Written by Roger Leigh <rleigh@codelibre.net>
|
||||
#
|
||||
# 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.
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/TiffTestCommon.cmake)
|
||||
|
||||
string(REPLACE "^" ";" CONVERT_COMMAND1 "${CONVERT_COMMAND1}")
|
||||
string(REPLACE "^" ";" CONVERT_COMMAND2 "${CONVERT_COMMAND2}")
|
||||
string(REPLACE "^" ";" CONVERT_COMMAND3 "${CONVERT_COMMAND3}")
|
||||
string(REPLACE "^" ";" STDOUT_COMMAND "${STDOUT_COMMAND}")
|
||||
string(REPLACE "^" ";" READER_COMMAND "${READER_COMMAND}")
|
||||
|
||||
if(CONVERT_COMMAND1)
|
||||
test_convert("${CONVERT_COMMAND1}" "${INFILE}" "${OUTFILE}")
|
||||
if(VALIDATE)
|
||||
tiffinfo_validate("${OUTFILE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
get_filename_component(base "${OUTFILE}" NAME)
|
||||
get_filename_component(ext "${OUTFILE}" EXT)
|
||||
|
||||
if(CONVERT_COMMAND2)
|
||||
test_convert("${CONVERT_COMMAND2}" "${OUTFILE}" "${base}-2${ext}")
|
||||
if(VALIDATE)
|
||||
tiffinfo_validate("${base}-2${ext}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONVERT_COMMAND3)
|
||||
test_convert("${CONVERT_COMMAND3}" "${base}-2${ext}" "${base}-3${ext}")
|
||||
if(VALIDATE)
|
||||
tiffinfo_validate("${base}-3${ext}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(STDOUT_COMMAND)
|
||||
test_stdout("${STDOUT_COMMAND}" "${INFILE}" "${OUTFILE}")
|
||||
endif()
|
||||
|
||||
if(READER_COMMAND)
|
||||
test_reader("${READER_COMMAND}" "${INFILE}")
|
||||
endif()
|
108
tests/libtiff/test/TiffTestCommon.cmake
Normal file
108
tests/libtiff/test/TiffTestCommon.cmake
Normal file
@ -0,0 +1,108 @@
|
||||
# CMake tests for libtiff (common functionality)
|
||||
#
|
||||
# Copyright © 2015 Open Microscopy Environment / University of Dundee
|
||||
# Written by Roger Leigh <rleigh@codelibre.net>
|
||||
#
|
||||
# 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.
|
||||
|
||||
#
|
||||
# Test a simple convert-like command.
|
||||
#
|
||||
# test_convert command infile outfile
|
||||
macro(test_convert command infile outfile)
|
||||
file(TO_NATIVE_PATH "${infile}" native_infile)
|
||||
file(TO_NATIVE_PATH "${outfile}" native_outfile)
|
||||
file(REMOVE "${outfile}")
|
||||
message(STATUS Running "${MEMCHECK} ${command} ${native_infile} ${native_outfile}")
|
||||
execute_process(COMMAND ${MEMCHECK} ${command} "${native_infile}" "${native_outfile}"
|
||||
RESULT_VARIABLE TEST_STATUS)
|
||||
if(TEST_STATUS)
|
||||
message(FATAL_ERROR "Returned failed status ${TEST_STATUS}! Output (if any) is in \"${native_outfile}\"")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Test a simple convert-like command.
|
||||
#
|
||||
# test_convert command infile outfile
|
||||
macro(test_convert_multi command infile outfile)
|
||||
foreach(file ${infile})
|
||||
file(TO_NATIVE_PATH "${file}" native_file)
|
||||
list(APPEND native_infile "${native_file}")
|
||||
endforeach()
|
||||
file(TO_NATIVE_PATH "${outfile}" native_outfile)
|
||||
file(REMOVE "${outfile}")
|
||||
message(STATUS Running "${MEMCHECK} ${command} ${native_infile} ${native_outfile}")
|
||||
execute_process(COMMAND ${MEMCHECK} ${command} ${native_infile} "${native_outfile}"
|
||||
RESULT_VARIABLE TEST_STATUS)
|
||||
if(TEST_STATUS)
|
||||
message(FATAL_ERROR "Returned failed status ${TEST_STATUS}! Output (if any) is in \"${native_outfile}\"")
|
||||
endif()
|
||||
endmacro()
|
||||
#
|
||||
# Test a simple command which sends output to stdout
|
||||
#
|
||||
# test_stdout command infile outfile
|
||||
macro(test_stdout command infile outfile)
|
||||
file(TO_NATIVE_PATH "${infile}" native_infile)
|
||||
file(TO_NATIVE_PATH "${outfile}" native_outfile)
|
||||
file(REMOVE "${outfile}")
|
||||
message(STATUS "Running ${MEMCHECK} ${command} ${native_infile} > ${native_outfile}")
|
||||
execute_process(COMMAND ${MEMCHECK} ${command} "${native_infile}"
|
||||
OUTPUT_FILE "${outfile}"
|
||||
RESULT_VARIABLE TEST_STATUS)
|
||||
if(TEST_STATUS)
|
||||
message(FATAL_ERROR "Returned failed status ${TEST_STATUS}! Output (if any) is in \"${native_outfile}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Execute a simple command (e.g. tiffinfo) with one input file
|
||||
#
|
||||
# test_exec command infile
|
||||
macro(test_reader command infile)
|
||||
file(TO_NATIVE_PATH "${infile}" native_infile)
|
||||
message(STATUS "Running ${MEMCHECK} ${command} ${native_infile}")
|
||||
execute_process(COMMAND ${MEMCHECK} ${command} "${native_infile}"
|
||||
RESULT_VARIABLE TEST_STATUS)
|
||||
if(TEST_STATUS)
|
||||
message(FATAL_ERROR "Returned failed status ${TEST_STATUS}! Output (if any) is in \"${native_outfile}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Execute tiffinfo on a specified file to validate it
|
||||
#
|
||||
# tiffinfo_validate infile
|
||||
macro(tiffinfo_validate file)
|
||||
test_reader("${TIFFINFO};-D" "${file}")
|
||||
endmacro()
|
||||
|
||||
# Add the directory containing libtiff to the PATH (Windows only)
|
||||
if(WIN32)
|
||||
get_filename_component(LIBTIFF_DIR "${LIBTIFF}" DIRECTORY)
|
||||
file(TO_NATIVE_PATH "${LIBTIFF_DIR}" LIBTIFF_DIR)
|
||||
set(ENV{PATH} "${LIBTIFF_DIR};$ENV{PATH}")
|
||||
endif()
|
||||
if(CYGWIN)
|
||||
get_filename_component(LIBTIFF_DIR "${LIBTIFF}" DIRECTORY)
|
||||
file(TO_NATIVE_PATH "${LIBTIFF_DIR}" LIBTIFF_DIR)
|
||||
set(ENV{PATH} "${LIBTIFF_DIR}:$ENV{PATH}")
|
||||
endif()
|
177
tests/libtiff/test/ascii_tag.c
Normal file
177
tests/libtiff/test/ascii_tag.c
Normal file
@ -0,0 +1,177 @@
|
||||
/* $Id: ascii_tag.c,v 1.8 2013-12-17 14:41:57 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Module to test ASCII tags read/write functions.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
static const char filename[] = "ascii_test.tiff";
|
||||
|
||||
static const struct {
|
||||
ttag_t tag;
|
||||
const char *value;
|
||||
} ascii_tags[] = {
|
||||
{ TIFFTAG_DOCUMENTNAME, "Test TIFF image" },
|
||||
{ TIFFTAG_IMAGEDESCRIPTION, "Temporary test image" },
|
||||
{ TIFFTAG_MAKE, "This is not scanned image" },
|
||||
{ TIFFTAG_MODEL, "No scanner" },
|
||||
{ TIFFTAG_PAGENAME, "Test page" },
|
||||
{ TIFFTAG_SOFTWARE, "Libtiff library" },
|
||||
{ TIFFTAG_DATETIME, "2004:09:10 16:09:00" },
|
||||
{ TIFFTAG_ARTIST, "Andrey V. Kiselev" },
|
||||
{ TIFFTAG_HOSTCOMPUTER, "Debian GNU/Linux (Sarge)" },
|
||||
{ TIFFTAG_TARGETPRINTER, "No printer" },
|
||||
{ TIFFTAG_COPYRIGHT, "Copyright (c) 2004, Andrey Kiselev" },
|
||||
{ TIFFTAG_FAXSUBADDRESS, "Fax subaddress" },
|
||||
/* DGN tags */
|
||||
{ TIFFTAG_UNIQUECAMERAMODEL, "No camera" },
|
||||
{ TIFFTAG_CAMERASERIALNUMBER, "1234567890" }
|
||||
};
|
||||
#define NTAGS (sizeof (ascii_tags) / sizeof (ascii_tags[0]))
|
||||
|
||||
static const char ink_names[] = "Red\0Green\0Blue";
|
||||
const int ink_names_size = 15;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
TIFF *tif;
|
||||
size_t i;
|
||||
unsigned char buf[] = { 0, 127, 255 };
|
||||
char *value;
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
tif = TIFFOpen(filename, "w");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 1)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, sizeof(buf))) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)) {
|
||||
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < NTAGS; i++) {
|
||||
if (!TIFFSetField(tif, ascii_tags[i].tag,
|
||||
ascii_tags[i].value)) {
|
||||
fprintf(stderr, "Can't set tag %lu.\n",
|
||||
(unsigned long)ascii_tags[i].tag);
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
/* InkNames tag has special form, so we handle it separately. */
|
||||
if (!TIFFSetField(tif, TIFFTAG_NUMBEROFINKS, 3)) {
|
||||
fprintf (stderr, "Can't set tag %d (NUMBEROFINKS).\n",
|
||||
TIFFTAG_NUMBEROFINKS);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_INKNAMES, ink_names_size, ink_names)) {
|
||||
fprintf (stderr, "Can't set tag %d (INKNAMES).\n",
|
||||
TIFFTAG_INKNAMES);
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/* Write dummy pixel data. */
|
||||
if (TIFFWriteScanline(tif, buf, 0, 0) == -1) {
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Ok, now test whether we can read written values. */
|
||||
tif = TIFFOpen(filename, "r");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < NTAGS; i++) {
|
||||
if (!TIFFGetField(tif, ascii_tags[i].tag, &value)
|
||||
|| strcmp(value, ascii_tags[i].value)) {
|
||||
fprintf(stderr, "Can't get tag %lu.\n",
|
||||
(unsigned long)ascii_tags[i].tag);
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
if (!TIFFGetField(tif, TIFFTAG_INKNAMES, &value)
|
||||
|| memcmp(value, ink_names, ink_names_size)) {
|
||||
fprintf (stderr, "Can't get tag %d (INKNAMES).\n",
|
||||
TIFFTAG_INKNAMES);
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* All tests passed; delete file and exit with success status. */
|
||||
unlink(filename);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/*
|
||||
* Something goes wrong; close file and return unsuccessful status.
|
||||
* Do not remove the file for further manual investigation.
|
||||
*/
|
||||
TIFFClose(tif);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
91
tests/libtiff/test/check_tag.c
Normal file
91
tests/libtiff/test/check_tag.c
Normal file
@ -0,0 +1,91 @@
|
||||
/* $Id: check_tag.c,v 1.3 2008/04/15 14:19:37 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Helper testing routines.
|
||||
*/
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
int
|
||||
CheckShortField(TIFF *tif, const ttag_t field, const uint16 value)
|
||||
{
|
||||
uint16 tmp = 123;
|
||||
|
||||
if (!TIFFGetField(tif, field, &tmp)) {
|
||||
fprintf (stderr, "Problem fetching tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
if (tmp != value) {
|
||||
fprintf (stderr, "Wrong SHORT value fetched for tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
CheckShortPairedField(TIFF *tif, const ttag_t field, const uint16 *values)
|
||||
{
|
||||
uint16 tmp[2] = { 123, 456 };
|
||||
|
||||
if (!TIFFGetField(tif, field, tmp, tmp + 1)) {
|
||||
fprintf (stderr, "Problem fetching tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
if (tmp[0] != values[0] || tmp[1] != values[1]) {
|
||||
fprintf (stderr, "Wrong SHORT PAIR fetched for tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
CheckLongField(TIFF *tif, const ttag_t field, const uint32 value)
|
||||
{
|
||||
uint32 tmp = 123;
|
||||
|
||||
if (!TIFFGetField(tif, field, &tmp)) {
|
||||
fprintf (stderr, "Problem fetching tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
if (tmp != value) {
|
||||
fprintf (stderr, "Wrong LONG value fetched for tag %lu.\n",
|
||||
(unsigned long) field);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
247
tests/libtiff/test/custom_dir.c
Normal file
247
tests/libtiff/test/custom_dir.c
Normal file
@ -0,0 +1,247 @@
|
||||
/* $Id: custom_dir.c,v 1.3 2013-12-17 14:41:58 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2012, Frank Warmerdam <warmerdam@pobox.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Module to handling of custom directories like EXIF.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
#include "tif_dir.h"
|
||||
#include "tifftest.h"
|
||||
|
||||
static const char filename[] = "custom_dir.tif";
|
||||
|
||||
#define SPP 3 /* Samples per pixel */
|
||||
const uint16 width = 1;
|
||||
const uint16 length = 1;
|
||||
const uint16 bps = 8;
|
||||
const uint16 photometric = PHOTOMETRIC_RGB;
|
||||
const uint16 rows_per_strip = 1;
|
||||
const uint16 planarconfig = PLANARCONFIG_CONTIG;
|
||||
|
||||
static TIFFField
|
||||
customFields[] = {
|
||||
{ TIFFTAG_IMAGEWIDTH, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Custom1", NULL },
|
||||
{ TIFFTAG_DOTRANGE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Custom2", NULL },
|
||||
};
|
||||
|
||||
static TIFFFieldArray customFieldArray = { tfiatOther, 0, 2, customFields };
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
TIFF *tif;
|
||||
unsigned char buf[SPP] = { 0, 127, 255 };
|
||||
uint64 dir_offset = 0, dir_offset2 = 0;
|
||||
uint64 read_dir_offset = 0, read_dir_offset2 = 0;
|
||||
uint64 *dir_offset2_ptr = NULL;
|
||||
char *ascii_value;
|
||||
uint16 count16 = 0;
|
||||
|
||||
|
||||
/* We write the main directory as a simple image. */
|
||||
tif = TIFFOpen(filename, "w+");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, SPP)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, planarconfig)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric)) {
|
||||
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/* Write dummy pixel data. */
|
||||
if (TIFFWriteScanline(tif, buf, 0, 0) == -1) {
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFWriteDirectory( tif )) {
|
||||
fprintf (stderr, "TIFFWriteDirectory() failed.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now create an EXIF directory.
|
||||
*/
|
||||
if (TIFFCreateEXIFDirectory(tif) != 0) {
|
||||
fprintf (stderr, "TIFFCreateEXIFDirectory() failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFSetField( tif, EXIFTAG_SPECTRALSENSITIVITY, "EXIF Spectral Sensitivity")) {
|
||||
fprintf (stderr, "Can't write SPECTRALSENSITIVITY\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFWriteCustomDirectory( tif, &dir_offset )) {
|
||||
fprintf (stderr, "TIFFWriteCustomDirectory() with EXIF failed.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now create a custom directory with tags that conflict with mainline
|
||||
* TIFF tags.
|
||||
*/
|
||||
|
||||
TIFFFreeDirectory( tif );
|
||||
if (TIFFCreateCustomDirectory(tif, &customFieldArray) != 0) {
|
||||
fprintf (stderr, "TIFFCreateEXIFDirectory() failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFSetField( tif, TIFFTAG_IMAGEWIDTH, "*Custom1")) { /* not really IMAGEWIDTH */
|
||||
fprintf (stderr, "Can't write pseudo-IMAGEWIDTH.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFSetField( tif, TIFFTAG_DOTRANGE, "*Custom2")) { /* not really DOTWIDTH */
|
||||
fprintf (stderr, "Can't write pseudo-DOTWIDTH.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFWriteCustomDirectory( tif, &dir_offset2 )) {
|
||||
fprintf (stderr, "TIFFWriteCustomDirectory() with EXIF failed.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* Go back to the first directory, and add the EXIFIFD pointer.
|
||||
*/
|
||||
TIFFSetDirectory(tif, 0);
|
||||
TIFFSetField(tif, TIFFTAG_EXIFIFD, dir_offset );
|
||||
TIFFSetField(tif, TIFFTAG_SUBIFD, 1, &dir_offset2 );
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Ok, now test whether we can read written values in the EXIF directory. */
|
||||
tif = TIFFOpen(filename, "r");
|
||||
|
||||
TIFFGetField(tif, TIFFTAG_EXIFIFD, &read_dir_offset );
|
||||
if( read_dir_offset != dir_offset ) {
|
||||
fprintf (stderr, "Did not get expected EXIFIFD.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFGetField(tif, TIFFTAG_SUBIFD, &count16, &dir_offset2_ptr );
|
||||
read_dir_offset2 = dir_offset2_ptr[0];
|
||||
if( read_dir_offset2 != dir_offset2 || count16 != 1) {
|
||||
fprintf (stderr, "Did not get expected SUBIFD.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if( !TIFFReadEXIFDirectory(tif, read_dir_offset) ) {
|
||||
fprintf (stderr, "TIFFReadEXIFDirectory() failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFGetField( tif, EXIFTAG_SPECTRALSENSITIVITY, &ascii_value) ) {
|
||||
fprintf (stderr, "reading SPECTRALSENSITIVITY failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if( strcmp(ascii_value,"EXIF Spectral Sensitivity") != 0) {
|
||||
fprintf (stderr, "got wrong SPECTRALSENSITIVITY value.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/* Try reading the Custom directory */
|
||||
|
||||
if( !TIFFReadCustomDirectory(tif, read_dir_offset2, &customFieldArray) ) {
|
||||
fprintf (stderr, "TIFFReadCustomDirectory() failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &ascii_value) ) {
|
||||
fprintf (stderr, "reading pseudo-IMAGEWIDTH failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if( strcmp(ascii_value,"*Custom1") != 0) {
|
||||
fprintf (stderr, "got wrong pseudo-IMAGEWIDTH value.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!TIFFGetField( tif, TIFFTAG_DOTRANGE, &ascii_value) ) {
|
||||
fprintf (stderr, "reading pseudo-DOTRANGE failed.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if( strcmp(ascii_value,"*Custom2") != 0) {
|
||||
fprintf (stderr, "got wrong pseudo-DOTRANGE value.\n" );
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* All tests passed; delete file and exit with success status. */
|
||||
unlink(filename);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/*
|
||||
* Something goes wrong; close file and return unsuccessful status.
|
||||
* Do not remove the file for further manual investigation.
|
||||
*/
|
||||
TIFFClose(tif);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
29
tests/libtiff/test/images/README.txt
Normal file
29
tests/libtiff/test/images/README.txt
Normal file
@ -0,0 +1,29 @@
|
||||
The test files in this directory mostly have dimension 157x151.
|
||||
The naming convention is
|
||||
|
||||
photometric-channels-bits.tiff
|
||||
|
||||
minisblack-1c-16b.tiff
|
||||
minisblack-1c-8b.tiff
|
||||
miniswhite-1c-1b.tiff
|
||||
palette-1c-1b.tiff
|
||||
palette-1c-4b.tiff
|
||||
palette-1c-8b.tiff
|
||||
rgb-3c-16b.tiff
|
||||
rgb-3c-8b.tiff
|
||||
|
||||
logluv-3c-16b.tiff: logluv compression/photometric interp
|
||||
minisblack-2c-8b-alpha.tiff: grey+alpha
|
||||
|
||||
BMP files (anchient BMPv2 since v3 does not work):
|
||||
|
||||
palette-1c-8b.bmp
|
||||
rgb-3c-8b.bmp
|
||||
|
||||
GIF files (anchient GIF '87 since modern GIF does not work):
|
||||
palette-1c-8b.gif
|
||||
|
||||
PNM files:
|
||||
minisblack-1c-8b.pgm
|
||||
miniswhite-1c-1b.pbm
|
||||
rgb-3c-8b.ppm
|
BIN
tests/libtiff/test/images/logluv-3c-16b.tiff
Normal file
BIN
tests/libtiff/test/images/logluv-3c-16b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/minisblack-1c-16b.tiff
Normal file
BIN
tests/libtiff/test/images/minisblack-1c-16b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/minisblack-1c-8b.pgm
Normal file
BIN
tests/libtiff/test/images/minisblack-1c-8b.pgm
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/minisblack-1c-8b.tiff
Normal file
BIN
tests/libtiff/test/images/minisblack-1c-8b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/minisblack-2c-8b-alpha.tiff
Normal file
BIN
tests/libtiff/test/images/minisblack-2c-8b-alpha.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/miniswhite-1c-1b.pbm
Normal file
BIN
tests/libtiff/test/images/miniswhite-1c-1b.pbm
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/miniswhite-1c-1b.tiff
Normal file
BIN
tests/libtiff/test/images/miniswhite-1c-1b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/palette-1c-1b.tiff
Normal file
BIN
tests/libtiff/test/images/palette-1c-1b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/palette-1c-4b.tiff
Normal file
BIN
tests/libtiff/test/images/palette-1c-4b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/palette-1c-8b.tiff
Normal file
BIN
tests/libtiff/test/images/palette-1c-8b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/quad-lzw-compat.tiff
Normal file
BIN
tests/libtiff/test/images/quad-lzw-compat.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/quad-tile.jpg.tiff
Normal file
BIN
tests/libtiff/test/images/quad-tile.jpg.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/rgb-3c-16b.tiff
Normal file
BIN
tests/libtiff/test/images/rgb-3c-16b.tiff
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/rgb-3c-8b.ppm
Normal file
BIN
tests/libtiff/test/images/rgb-3c-8b.ppm
Normal file
Binary file not shown.
BIN
tests/libtiff/test/images/rgb-3c-8b.tiff
Normal file
BIN
tests/libtiff/test/images/rgb-3c-8b.tiff
Normal file
Binary file not shown.
156
tests/libtiff/test/long_tag.c
Normal file
156
tests/libtiff/test/long_tag.c
Normal file
@ -0,0 +1,156 @@
|
||||
/* $Id: long_tag.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Module to test LONG tags read/write functions.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
extern int CheckLongField(TIFF *, ttag_t, uint32);
|
||||
|
||||
const char *filename = "long_test.tiff";
|
||||
|
||||
static struct Tags {
|
||||
ttag_t tag;
|
||||
short count;
|
||||
uint32 value;
|
||||
} long_tags[] = {
|
||||
{ TIFFTAG_SUBFILETYPE, 1, FILETYPE_REDUCEDIMAGE|FILETYPE_PAGE|FILETYPE_MASK }
|
||||
};
|
||||
#define NTAGS (sizeof (long_tags) / sizeof (long_tags[0]))
|
||||
|
||||
const uint32 width = 1;
|
||||
const uint32 length = 1;
|
||||
const uint32 rows_per_strip = 1;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
TIFF *tif;
|
||||
unsigned int i;
|
||||
unsigned char buf[3] = { 0, 127, 255 };
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
tif = TIFFOpen(filename, "w");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)) {
|
||||
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < NTAGS; i++) {
|
||||
if (!TIFFSetField(tif, long_tags[i].tag,
|
||||
long_tags[i].value)) {
|
||||
fprintf(stderr, "Can't set tag %d.\n",
|
||||
(int)long_tags[i].tag);
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
/* Write dummy pixel data. */
|
||||
if (TIFFWriteScanline(tif, buf, 0, 0) == -1) {
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Ok, now test whether we can read written values. */
|
||||
tif = TIFFOpen(filename, "r");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_IMAGEWIDTH, width) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_IMAGELENGTH, length) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip) < 0)
|
||||
goto failure;
|
||||
|
||||
for (i = 0; i < NTAGS; i++) {
|
||||
if (CheckLongField(tif, long_tags[i].tag,
|
||||
long_tags[i].value) < 0)
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* All tests passed; delete file and exit with success status. */
|
||||
unlink(filename);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/* Something goes wrong; close file and return unsuccessful status. */
|
||||
TIFFClose(tif);
|
||||
unlink(filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
304
tests/libtiff/test/raw_decode.c
Normal file
304
tests/libtiff/test/raw_decode.c
Normal file
@ -0,0 +1,304 @@
|
||||
/* $Id: raw_decode.c,v 1.7 2015-08-16 20:08:21 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2012, Frank Warmerdam <warmerdam@pobox.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* The objective of this test suite is to test the JPEGRawDecode()
|
||||
* interface via TIFReadEncodedTile(). This function with YCbCr subsampling
|
||||
* is a frequent source of bugs.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
/*
|
||||
Libjpeg's jmorecfg.h defines INT16 and INT32, but only if XMD_H is
|
||||
not defined. Unfortunately, the MinGW and Borland compilers include
|
||||
a typedef for INT32, which causes a conflict. MSVC does not include
|
||||
a conficting typedef given the headers which are included.
|
||||
*/
|
||||
#if defined(__BORLANDC__) || defined(__MINGW32__)
|
||||
# define XMD_H 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
The windows RPCNDR.H file defines boolean, but defines it with the
|
||||
unsigned char size. You should compile JPEG library using appropriate
|
||||
definitions in jconfig.h header, but many users compile library in wrong
|
||||
way. That causes errors of the following type:
|
||||
|
||||
"JPEGLib: JPEG parameter struct mismatch: library thinks size is 432,
|
||||
caller expects 464"
|
||||
|
||||
For such users we wil fix the problem here. See install.doc file from
|
||||
the JPEG library distribution for details.
|
||||
*/
|
||||
|
||||
/* Define "boolean" as unsigned char, not int, per Windows custom. */
|
||||
#if defined(__WIN32__) && !defined(__MINGW32__)
|
||||
# ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
|
||||
typedef unsigned char boolean;
|
||||
# endif
|
||||
# define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
|
||||
#endif
|
||||
#include "jpeglib.h" /* Needed for JPEG_LIB_VERSION */
|
||||
|
||||
static unsigned char cluster_0[] = { 0, 0, 2, 0, 138, 139 };
|
||||
static unsigned char cluster_64[] = { 0, 0, 9, 6, 134, 119 };
|
||||
static unsigned char cluster_128[] = { 44, 40, 63, 59, 230, 95 };
|
||||
|
||||
static int check_cluster( int cluster, unsigned char *buffer, unsigned char *expected_cluster ) {
|
||||
unsigned char *target = buffer + cluster*6;
|
||||
|
||||
if (memcmp(target, expected_cluster, 6) == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
fprintf( stderr, "Cluster %d did not match expected results.\n", cluster );
|
||||
fprintf( stderr,
|
||||
"Expect: %3d %3d %3d %3d\n"
|
||||
" %3d %3d\n",
|
||||
expected_cluster[0], expected_cluster[1],
|
||||
expected_cluster[4], expected_cluster[5],
|
||||
expected_cluster[2], expected_cluster[3] );
|
||||
fprintf( stderr,
|
||||
" Got: %3d %3d %3d %3d\n"
|
||||
" %3d %3d\n",
|
||||
target[0], target[1],
|
||||
target[4], target[5],
|
||||
target[2], target[3] );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int check_rgb_pixel( int pixel,
|
||||
int min_red, int max_red,
|
||||
int min_green, int max_green,
|
||||
int min_blue, int max_blue,
|
||||
unsigned char *buffer ) {
|
||||
unsigned char *rgb = buffer + 3 * pixel;
|
||||
|
||||
if( rgb[0] >= min_red && rgb[0] <= max_red &&
|
||||
rgb[1] >= min_green && rgb[1] <= max_green &&
|
||||
rgb[2] >= min_blue && rgb[2] <= max_blue ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
fprintf( stderr, "Pixel %d did not match expected results.\n", pixel );
|
||||
fprintf( stderr, "Got R=%d (expected %d..%d), G=%d (expected %d..%d), B=%d (expected %d..%d)\n",
|
||||
rgb[0], min_red, max_red,
|
||||
rgb[1], min_green, max_green,
|
||||
rgb[2], min_blue, max_blue );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int check_rgba_pixel( int pixel,
|
||||
int min_red, int max_red,
|
||||
int min_green, int max_green,
|
||||
int min_blue, int max_blue,
|
||||
int min_alpha, int max_alpha,
|
||||
uint32 *buffer ) {
|
||||
/* RGBA images are upside down - adjust for normal ordering */
|
||||
int adjusted_pixel = pixel % 128 + (127 - (pixel/128)) * 128;
|
||||
uint32 rgba = buffer[adjusted_pixel];
|
||||
|
||||
if( TIFFGetR(rgba) >= (uint32) min_red &&
|
||||
TIFFGetR(rgba) <= (uint32) max_red &&
|
||||
TIFFGetG(rgba) >= (uint32) min_green &&
|
||||
TIFFGetG(rgba) <= (uint32) max_green &&
|
||||
TIFFGetB(rgba) >= (uint32) min_blue &&
|
||||
TIFFGetB(rgba) <= (uint32) max_blue &&
|
||||
TIFFGetA(rgba) >= (uint32) min_alpha &&
|
||||
TIFFGetA(rgba) <= (uint32) max_alpha ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
fprintf( stderr, "Pixel %d did not match expected results.\n", pixel );
|
||||
fprintf( stderr, "Got R=%d (expected %d..%d), G=%d (expected %d..%d), B=%d (expected %d..%d), A=%d (expected %d..%d)\n",
|
||||
TIFFGetR(rgba), min_red, max_red,
|
||||
TIFFGetG(rgba), min_green, max_green,
|
||||
TIFFGetB(rgba), min_blue, max_blue,
|
||||
TIFFGetA(rgba), min_alpha, max_alpha );
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
TIFF *tif;
|
||||
static const char *srcfilerel = "images/quad-tile.jpg.tiff";
|
||||
char *srcdir = NULL;
|
||||
char srcfile[1024];
|
||||
unsigned short h, v;
|
||||
int status;
|
||||
unsigned char *buffer;
|
||||
uint32 *rgba_buffer;
|
||||
tsize_t sz, szout;
|
||||
unsigned int pixel_status = 0;
|
||||
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
|
||||
if ((srcdir = getenv("srcdir")) == NULL) {
|
||||
srcdir = ".";
|
||||
}
|
||||
if ((strlen(srcdir) + 1 + strlen(srcfilerel)) >= sizeof(srcfile)) {
|
||||
fprintf( stderr, "srcdir too long %s\n", srcdir);
|
||||
exit( 1 );
|
||||
}
|
||||
strcpy(srcfile,srcdir);
|
||||
strcat(srcfile,"/");
|
||||
strcat(srcfile,srcfilerel);
|
||||
|
||||
tif = TIFFOpen(srcfile,"r");
|
||||
if ( tif == NULL ) {
|
||||
fprintf( stderr, "Could not open %s\n", srcfile);
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
status = TIFFGetField(tif,TIFFTAG_YCBCRSUBSAMPLING, &h, &v);
|
||||
if ( status == 0 || h != 2 || v != 2) {
|
||||
fprintf( stderr, "Could not retrieve subsampling tag.\n" );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* What is the appropriate size of a YCbCr encoded tile?
|
||||
*/
|
||||
sz = TIFFTileSize(tif);
|
||||
if( sz != 24576) {
|
||||
fprintf(stderr, "tiles are %d bytes\n", (int)sz);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
buffer = (unsigned char *) malloc(sz);
|
||||
|
||||
/*
|
||||
* Read a tile in decompressed form, but still YCbCr subsampled.
|
||||
*/
|
||||
szout = TIFFReadEncodedTile(tif,9,buffer,sz);
|
||||
if (szout != sz) {
|
||||
fprintf( stderr,
|
||||
"Did not get expected result code from TIFFReadEncodedTile()(%d instead of %d)\n",
|
||||
(int) szout, (int) sz );
|
||||
return 1;
|
||||
}
|
||||
|
||||
if( check_cluster( 0, buffer, cluster_0 )
|
||||
|| check_cluster( 64, buffer, cluster_64 )
|
||||
|| check_cluster( 128, buffer, cluster_128 ) ) {
|
||||
exit(1);
|
||||
}
|
||||
free(buffer);
|
||||
|
||||
/*
|
||||
* Read a tile using the built-in conversion to RGB format provided by the JPEG library.
|
||||
*/
|
||||
TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
|
||||
|
||||
sz = TIFFTileSize(tif);
|
||||
if( sz != 128*128*3) {
|
||||
fprintf(stderr, "tiles are %d bytes\n", (int)sz);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
buffer = (unsigned char *) malloc(sz);
|
||||
|
||||
szout = TIFFReadEncodedTile(tif,9,buffer,sz);
|
||||
if (szout != sz) {
|
||||
fprintf( stderr,
|
||||
"Did not get expected result code from TIFFReadEncodedTile()(%d instead of %d)\n",
|
||||
(int) szout, (int) sz );
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* JPEG decoding is inherently inexact, so we can't test for exact
|
||||
* pixel values. (Well, if we knew exactly which libjpeg version
|
||||
* we were using, and with what settings, we could expect specific
|
||||
* values ... but it's not worth the trouble to keep track of.)
|
||||
* Hence, use ranges of expected values. The ranges may need to be
|
||||
* widened over time as more versions of libjpeg appear.
|
||||
*/
|
||||
pixel_status |= check_rgb_pixel( 0, 15, 18, 0, 0, 18, 41, buffer );
|
||||
pixel_status |= check_rgb_pixel( 64, 0, 0, 0, 0, 0, 2, buffer );
|
||||
pixel_status |= check_rgb_pixel( 512, 5, 6, 34, 36, 182, 196, buffer );
|
||||
|
||||
free( buffer );
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/*
|
||||
* Reopen and test reading using the RGBA interface.
|
||||
*/
|
||||
tif = TIFFOpen(srcfile,"r");
|
||||
|
||||
sz = 128 * 128 * sizeof(uint32);
|
||||
rgba_buffer = (uint32 *) malloc(sz);
|
||||
|
||||
if (!TIFFReadRGBATile( tif, 1*128, 2*128, rgba_buffer )) {
|
||||
fprintf( stderr, "TIFFReadRGBATile() returned failure code.\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Currently TIFFReadRGBATile() just uses JPEGCOLORMODE_RGB so this
|
||||
* trivally matches the last results. Eventually we should actually
|
||||
* accomplish it from the YCbCr subsampled buffer ourselves in which
|
||||
* case the results may be subtly different but similar.
|
||||
*/
|
||||
pixel_status |= check_rgba_pixel( 0, 15, 18, 0, 0, 18, 41, 255, 255,
|
||||
rgba_buffer );
|
||||
pixel_status |= check_rgba_pixel( 64, 0, 0, 0, 0, 0, 2, 255, 255,
|
||||
rgba_buffer );
|
||||
pixel_status |= check_rgba_pixel( 512, 5, 6, 34, 36, 182, 196, 255, 255,
|
||||
rgba_buffer );
|
||||
|
||||
free( rgba_buffer );
|
||||
TIFFClose(tif);
|
||||
|
||||
if (pixel_status) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 8
|
||||
* fill-column: 78
|
||||
* End:
|
||||
*/
|
344
tests/libtiff/test/rewrite_tag.c
Normal file
344
tests/libtiff/test/rewrite_tag.c
Normal file
@ -0,0 +1,344 @@
|
||||
/* $Id: rewrite_tag.c,v 1.9 2015-08-23 14:23:00 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007, Frank Warmerdam <warmerdam@pobox.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Module to test _TIFFRewriteField().
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
#include "tiffiop.h"
|
||||
|
||||
const uint32 width = 10;
|
||||
const uint32 length = 40;
|
||||
const uint32 rows_per_strip = 1;
|
||||
|
||||
int test_packbits()
|
||||
|
||||
{
|
||||
TIFF *tif;
|
||||
int i;
|
||||
unsigned char buf[10] = {0,0,0,0,0,0,0,0,0,0};
|
||||
|
||||
int length = 20;
|
||||
const char *filename = "test_packbits.tif";
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
tif = TIFFOpen(filename, "w");
|
||||
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS)) {
|
||||
fprintf (stderr, "Can't set Compression tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < length; i++ )
|
||||
{
|
||||
if( !TIFFWriteEncodedStrip( tif, i, buf, 10 ) )
|
||||
{
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
|
||||
tif = TIFFOpen(filename, "r+");
|
||||
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
buf[3] = 17;
|
||||
buf[6] = 12;
|
||||
|
||||
if( !TIFFWriteEncodedStrip( tif, 6, buf, 10 ) )
|
||||
{
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
unlink(filename);
|
||||
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/* Something goes wrong; close file and return unsuccessful status. */
|
||||
TIFFClose(tif);
|
||||
/* unlink(filename); */
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* rewrite_test() */
|
||||
/************************************************************************/
|
||||
int rewrite_test( const char *filename, int length, int bigtiff,
|
||||
uint64 base_value )
|
||||
|
||||
{
|
||||
TIFF *tif;
|
||||
int i;
|
||||
unsigned char buf[10] = {5,6,7,8,9,10,11,12,13,14};
|
||||
uint64 *rowoffset, *rowbytes;
|
||||
uint64 *upd_rowoffset;
|
||||
uint64 *upd_bytecount;
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
if( bigtiff )
|
||||
tif = TIFFOpen(filename, "w8");
|
||||
else
|
||||
tif = TIFFOpen(filename, "w4");
|
||||
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS)) {
|
||||
fprintf (stderr, "Can't set Compression tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < length; i++ )
|
||||
{
|
||||
if( TIFFWriteScanline( tif, buf, i, 0 ) == -1 )
|
||||
{
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Ok, now test whether we can read written values. */
|
||||
tif = TIFFOpen(filename, "r+");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if( !TIFFGetField( tif, TIFFTAG_STRIPOFFSETS, &rowoffset ) )
|
||||
{
|
||||
fprintf (stderr, "Can't fetch STRIPOFFSETS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if( !TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &rowbytes ) )
|
||||
{
|
||||
fprintf (stderr, "Can't fetch STRIPBYTECOUNTS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
upd_rowoffset = (uint64 *) _TIFFmalloc(sizeof(uint64) * length);
|
||||
for( i = 0; i < length; i++ )
|
||||
upd_rowoffset[i] = base_value + i*10;
|
||||
|
||||
if( !_TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8,
|
||||
length, upd_rowoffset ) )
|
||||
{
|
||||
fprintf (stderr, "Can't rewrite STRIPOFFSETS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
_TIFFfree( upd_rowoffset );
|
||||
|
||||
upd_bytecount = (uint64 *) _TIFFmalloc(sizeof(uint64) * length);
|
||||
for( i = 0; i < length; i++ )
|
||||
upd_bytecount[i] = 100 + i*10;
|
||||
|
||||
if( !_TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8,
|
||||
length, upd_bytecount ) )
|
||||
{
|
||||
fprintf (stderr, "Can't rewrite STRIPBYTECOUNTS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
_TIFFfree( upd_bytecount );
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Reopen file and read back to verify contents */
|
||||
|
||||
tif = TIFFOpen(filename, "r");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if( !TIFFGetField( tif, TIFFTAG_STRIPOFFSETS, &rowoffset ) )
|
||||
{
|
||||
fprintf (stderr, "Can't fetch STRIPOFFSETS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for( i = 0; i < length; i++ )
|
||||
{
|
||||
uint64 expect = base_value + i*10;
|
||||
|
||||
if( rowoffset[i] != expect )
|
||||
{
|
||||
fprintf( stderr,
|
||||
"%s:STRIPOFFSETS[%d]: Got %X:%08X instead of %X:%08X.\n",
|
||||
filename, i,
|
||||
(int) (rowoffset[i] >> 32),
|
||||
(int) (rowoffset[i]&0xFFFFFFFF),
|
||||
(int) (expect >> 32),
|
||||
(int) (expect & 0xFFFFFFFF) );
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
if( !TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &rowbytes ) )
|
||||
{
|
||||
fprintf (stderr, "Can't fetch STRIPBYTECOUNTS.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for( i = 0; i < length; i++ )
|
||||
{
|
||||
uint64 expect = 100 + i*10;
|
||||
|
||||
if( rowbytes[i] != expect )
|
||||
{
|
||||
fprintf( stderr,
|
||||
"%s:STRIPBYTECOUNTS[%d]: Got %X:%08X instead of %X:%08X.\n",
|
||||
filename, i,
|
||||
(int) (rowbytes[i] >> 32),
|
||||
(int) (rowbytes[i] & 0xFFFFFFFF),
|
||||
(int) (expect >> 32),
|
||||
(int) (expect & 0xFFFFFFFF) );
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
TIFFClose( tif );
|
||||
|
||||
/* All tests passed; delete file and exit with success status. */
|
||||
unlink(filename);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/* Something goes wrong; close file and return unsuccessful status. */
|
||||
TIFFClose(tif);
|
||||
/* unlink(filename); */
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* main() */
|
||||
/************************************************************************/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int failure = 0;
|
||||
|
||||
failure |= test_packbits();
|
||||
|
||||
/* test fairly normal use */
|
||||
failure |= rewrite_test( "rewrite1.tif", 10, 0, 100 );
|
||||
failure |= rewrite_test( "rewrite2.tif", 10, 1, 100 );
|
||||
|
||||
/* test case of fitting all in directory entry */
|
||||
failure |= rewrite_test( "rewrite3.tif", 1, 0, 100 );
|
||||
failure |= rewrite_test( "rewrite4.tif", 1, 1, 100 );
|
||||
|
||||
/* test with very large values that don't fit in 4bytes (bigtiff only) */
|
||||
failure |= rewrite_test( "rewrite5.tif", 1000, 1, 0x6000000000ULL );
|
||||
failure |= rewrite_test( "rewrite6.tif", 1, 1, 0x6000000000ULL );
|
||||
|
||||
return failure;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
205
tests/libtiff/test/short_tag.c
Normal file
205
tests/libtiff/test/short_tag.c
Normal file
@ -0,0 +1,205 @@
|
||||
/* $Id: short_tag.c,v 1.9 2013-12-17 14:41:58 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Module to test SHORT tags read/write functions.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
#include "tifftest.h"
|
||||
|
||||
static const char filename[] = "short_test.tiff";
|
||||
|
||||
#define SPP 3 /* Samples per pixel */
|
||||
const uint16 width = 1;
|
||||
const uint16 length = 1;
|
||||
const uint16 bps = 8;
|
||||
const uint16 photometric = PHOTOMETRIC_RGB;
|
||||
const uint16 rows_per_strip = 1;
|
||||
const uint16 planarconfig = PLANARCONFIG_CONTIG;
|
||||
|
||||
static const struct {
|
||||
const ttag_t tag;
|
||||
const uint16 value;
|
||||
} short_single_tags[] = {
|
||||
{ TIFFTAG_COMPRESSION, COMPRESSION_NONE },
|
||||
{ TIFFTAG_FILLORDER, FILLORDER_MSB2LSB },
|
||||
{ TIFFTAG_ORIENTATION, ORIENTATION_BOTRIGHT },
|
||||
{ TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH },
|
||||
{ TIFFTAG_MINSAMPLEVALUE, 23 },
|
||||
{ TIFFTAG_MAXSAMPLEVALUE, 241 },
|
||||
{ TIFFTAG_INKSET, INKSET_MULTIINK },
|
||||
{ TIFFTAG_NUMBEROFINKS, SPP },
|
||||
{ TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT }
|
||||
};
|
||||
#define NSINGLETAGS (sizeof(short_single_tags) / sizeof(short_single_tags[0]))
|
||||
|
||||
static const struct {
|
||||
const ttag_t tag;
|
||||
const uint16 values[2];
|
||||
} short_paired_tags[] = {
|
||||
{ TIFFTAG_PAGENUMBER, {1, 1} },
|
||||
{ TIFFTAG_HALFTONEHINTS, {0, 255} },
|
||||
{ TIFFTAG_DOTRANGE, {8, 16} },
|
||||
{ TIFFTAG_YCBCRSUBSAMPLING, {2, 1} }
|
||||
};
|
||||
#define NPAIREDTAGS (sizeof(short_paired_tags) / sizeof(short_paired_tags[0]))
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
TIFF *tif;
|
||||
size_t i;
|
||||
unsigned char buf[SPP] = { 0, 127, 255 };
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
tif = TIFFOpen(filename, "w");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, SPP)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, planarconfig)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric)) {
|
||||
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < NSINGLETAGS; i++) {
|
||||
if (!TIFFSetField(tif, short_single_tags[i].tag,
|
||||
short_single_tags[i].value)) {
|
||||
fprintf(stderr, "Can't set tag %lu.\n",
|
||||
(unsigned long)short_single_tags[i].tag);
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < NPAIREDTAGS; i++) {
|
||||
if (!TIFFSetField(tif, short_paired_tags[i].tag,
|
||||
short_paired_tags[i].values[0],
|
||||
short_paired_tags[i].values[1])) {
|
||||
fprintf(stderr, "Can't set tag %lu.\n",
|
||||
(unsigned long)short_paired_tags[i].tag);
|
||||
goto failure;
|
||||
}
|
||||
}
|
||||
|
||||
/* Write dummy pixel data. */
|
||||
if (TIFFWriteScanline(tif, buf, 0, 0) == -1) {
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* Ok, now test whether we can read written values. */
|
||||
tif = TIFFOpen(filename, "r");
|
||||
if (!tif) {
|
||||
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_IMAGEWIDTH, width) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_IMAGELENGTH, length) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckShortField(tif, TIFFTAG_BITSPERSAMPLE, bps) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckShortField(tif, TIFFTAG_PHOTOMETRIC, photometric) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckShortField(tif, TIFFTAG_SAMPLESPERPIXEL, SPP) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckLongField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip) < 0)
|
||||
goto failure;
|
||||
|
||||
if (CheckShortField(tif, TIFFTAG_PLANARCONFIG, planarconfig) < 0)
|
||||
goto failure;
|
||||
|
||||
for (i = 0; i < NSINGLETAGS; i++) {
|
||||
if (CheckShortField(tif, short_single_tags[i].tag,
|
||||
short_single_tags[i].value) < 0)
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (i = 0; i < NPAIREDTAGS; i++) {
|
||||
if (CheckShortPairedField(tif, short_paired_tags[i].tag,
|
||||
short_paired_tags[i].values) < 0)
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
|
||||
/* All tests passed; delete file and exit with success status. */
|
||||
unlink(filename);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
/*
|
||||
* Something goes wrong; close file and return unsuccessful status.
|
||||
* Do not remove the file for further manual investigation.
|
||||
*/
|
||||
TIFFClose(tif);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
290
tests/libtiff/test/strip.c
Normal file
290
tests/libtiff/test/strip.c
Normal file
@ -0,0 +1,290 @@
|
||||
/* $Id: strip.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Functions to test strip interface of libtiff.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
int
|
||||
write_strips(TIFF *tif, const tdata_t array, const tsize_t size)
|
||||
{
|
||||
tstrip_t strip, nstrips;
|
||||
tsize_t stripsize, offset;
|
||||
|
||||
stripsize = TIFFStripSize(tif);
|
||||
if (!stripsize) {
|
||||
fprintf (stderr, "Wrong size of strip.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
nstrips = TIFFNumberOfStrips(tif);
|
||||
for (offset = 0, strip = 0;
|
||||
offset < size && strip < nstrips;
|
||||
offset+=stripsize, strip++) {
|
||||
/*
|
||||
* Properly write last strip.
|
||||
*/
|
||||
tsize_t bufsize = size - offset;
|
||||
if (bufsize > stripsize)
|
||||
bufsize = stripsize;
|
||||
|
||||
if (TIFFWriteEncodedStrip(tif, strip, (char *)array + offset,
|
||||
bufsize) != bufsize) {
|
||||
fprintf (stderr, "Can't write strip %lu.\n",
|
||||
(unsigned long)strip);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
read_strips(TIFF *tif, const tdata_t array, const tsize_t size)
|
||||
{
|
||||
tstrip_t strip, nstrips;
|
||||
tsize_t stripsize, offset;
|
||||
tdata_t buf = NULL;
|
||||
|
||||
stripsize = TIFFStripSize(tif);
|
||||
if (!stripsize) {
|
||||
fprintf (stderr, "Wrong size of strip.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
buf = _TIFFmalloc(stripsize);
|
||||
if (!buf) {
|
||||
fprintf (stderr, "Can't allocate space for strip buffer.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
nstrips = TIFFNumberOfStrips(tif);
|
||||
for (offset = 0, strip = 0;
|
||||
offset < size && strip < nstrips;
|
||||
offset+=stripsize, strip++) {
|
||||
/*
|
||||
* Properly read last strip.
|
||||
*/
|
||||
tsize_t bufsize = size - offset;
|
||||
if (bufsize > stripsize)
|
||||
bufsize = stripsize;
|
||||
|
||||
if (TIFFReadEncodedStrip(tif, strip, buf, -1) != bufsize) {
|
||||
fprintf (stderr, "Can't read strip %lu.\n",
|
||||
(unsigned long)strip);
|
||||
return -1;
|
||||
}
|
||||
if (memcmp(buf, (char *)array + offset, bufsize) != 0) {
|
||||
fprintf (stderr, "Wrong data read for strip %lu.\n",
|
||||
(unsigned long)strip);
|
||||
_TIFFfree(buf);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
_TIFFfree(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
create_image_striped(const char *name, uint32 width, uint32 length,
|
||||
uint32 rowsperstrip, uint16 compression,
|
||||
uint16 spp, uint16 bps, uint16 photometric,
|
||||
uint16 sampleformat, uint16 planarconfig,
|
||||
const tdata_t array, const tsize_t size)
|
||||
{
|
||||
TIFF *tif;
|
||||
|
||||
/* Test whether we can write tags. */
|
||||
tif = TIFFOpen(name, "w");
|
||||
if (!tif)
|
||||
goto openfailure;
|
||||
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
|
||||
fprintf (stderr, "Can't set ImageWidth tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
|
||||
fprintf (stderr, "Can't set ImageLength tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps)) {
|
||||
fprintf (stderr, "Can't set BitsPerSample tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, spp)) {
|
||||
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip)) {
|
||||
fprintf (stderr, "Can't set RowsPerStrip tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, planarconfig)) {
|
||||
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric)) {
|
||||
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (write_strips(tif, array, size) < 0) {
|
||||
fprintf (stderr, "Can't write image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
TIFFClose(tif);
|
||||
openfailure:
|
||||
fprintf (stderr, "Can't create test TIFF file %s:\n"
|
||||
" ImageWidth=%ld, ImageLength=%ld, RowsPerStrip=%ld, Compression=%d,\n"
|
||||
" BitsPerSample=%d, SamplesPerPixel=%d, SampleFormat=%d,\n"
|
||||
" PlanarConfiguration=%d, PhotometricInterpretation=%d.\n",
|
||||
name, (long) width, (long) length, (long) rowsperstrip,
|
||||
compression, bps, spp, sampleformat, planarconfig,
|
||||
photometric);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
read_image_striped(const char *name, uint32 width, uint32 length,
|
||||
uint32 rowsperstrip, uint16 compression,
|
||||
uint16 spp, uint16 bps, uint16 photometric,
|
||||
uint16 sampleformat, uint16 planarconfig,
|
||||
const tdata_t array, const tsize_t size)
|
||||
{
|
||||
TIFF *tif;
|
||||
uint16 value_u16;
|
||||
uint32 value_u32;
|
||||
|
||||
/* Test whether we can read written values. */
|
||||
tif = TIFFOpen(name, "r");
|
||||
if (!tif)
|
||||
goto openfailure;
|
||||
|
||||
if (TIFFIsTiled(tif)) {
|
||||
fprintf (stderr, "Can't read image %s, it is tiled.\n",
|
||||
name);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &value_u32)
|
||||
|| value_u32 != width) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_IMAGEWIDTH);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &value_u32)
|
||||
|| value_u32 != length) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_IMAGELENGTH);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &value_u16)
|
||||
|| value_u16 != bps) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_BITSPERSAMPLE);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &value_u16)
|
||||
|| value_u16 != photometric) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_PHOTOMETRIC);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &value_u16)
|
||||
|| value_u16 != spp) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_SAMPLESPERPIXEL);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &value_u32)
|
||||
|| value_u32 != rowsperstrip) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_ROWSPERSTRIP);
|
||||
goto failure;
|
||||
}
|
||||
if (!TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &value_u16)
|
||||
|| value_u16 != planarconfig) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_PLANARCONFIG);
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (read_strips(tif, array, size) < 0) {
|
||||
fprintf (stderr, "Can't read image data.\n");
|
||||
goto failure;
|
||||
}
|
||||
|
||||
TIFFClose(tif);
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
TIFFClose(tif);
|
||||
openfailure:
|
||||
fprintf (stderr, "Can't read test TIFF file %s:\n"
|
||||
" ImageWidth=%ld, ImageLength=%ld, RowsPerStrip=%ld, Compression=%d,\n"
|
||||
" BitsPerSample=%d, SamplesPerPixel=%d, SampleFormat=%d,\n"
|
||||
" PlanarConfiguration=%d, PhotometricInterpretation=%d.\n",
|
||||
name, (long) width, (long) length, (long) rowsperstrip,
|
||||
compression, bps, spp, sampleformat, planarconfig,
|
||||
photometric);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
write_scanlines(TIFF *tif, const tdata_t array, const tsize_t size)
|
||||
{
|
||||
uint32 length, row;
|
||||
tsize_t scanlinesize, offset;
|
||||
(void) size;
|
||||
|
||||
if (!TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &length)) {
|
||||
fprintf (stderr, "Can't get tag %d.\n", TIFFTAG_IMAGELENGTH);
|
||||
return -1;
|
||||
}
|
||||
|
||||
scanlinesize = TIFFScanlineSize(tif);
|
||||
if (!scanlinesize) {
|
||||
fprintf (stderr, "Wrong size of scanline.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (offset = 0, row = 0; row < length; offset+=scanlinesize, row++) {
|
||||
if (TIFFWriteScanline(tif, (char *)array + offset, row, 0) == -1) {
|
||||
fprintf (stderr,
|
||||
"Can't write image data at row %lu.\n", (long) row);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
157
tests/libtiff/test/strip_rw.c
Normal file
157
tests/libtiff/test/strip_rw.c
Normal file
@ -0,0 +1,157 @@
|
||||
/* $Id: strip_rw.c,v 1.6 2008/03/28 01:42:07 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Test libtiff input/output routines.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
#include "test_arrays.h"
|
||||
|
||||
extern int
|
||||
create_image_striped(const char *, uint32, uint32, uint32, uint16, uint16,
|
||||
uint16, uint16, uint16, uint16, const tdata_t,
|
||||
const tsize_t);
|
||||
extern int
|
||||
read_image_striped(const char *, uint32, uint32, uint32, uint16, uint16,
|
||||
uint16, uint16, uint16, uint16, const tdata_t,
|
||||
const tsize_t);
|
||||
|
||||
const char *filename = "strip_test.tiff";
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
uint32 rowsperstrip;
|
||||
uint16 compression;
|
||||
uint16 spp, bps, photometric, sampleformat, planarconfig;
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
|
||||
/*
|
||||
* Test two special cases: image consisting from single line and image
|
||||
* consisting from single column.
|
||||
*/
|
||||
rowsperstrip = 1;
|
||||
compression = COMPRESSION_NONE;
|
||||
spp = 1;
|
||||
bps = 8;
|
||||
photometric = PHOTOMETRIC_MINISBLACK;
|
||||
sampleformat = SAMPLEFORMAT_UINT;
|
||||
planarconfig = PLANARCONFIG_CONTIG;
|
||||
|
||||
if (create_image_striped(filename, XSIZE * YSIZE, 1, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't create TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
if (read_image_striped(filename, XSIZE * YSIZE, 1, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't read TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
unlink(filename);
|
||||
|
||||
if (create_image_striped(filename, 1, XSIZE * YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't create TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
if (read_image_striped(filename, 1, XSIZE * YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't read TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
unlink(filename);
|
||||
|
||||
/*
|
||||
* Test one-channel image with different parameters.
|
||||
*/
|
||||
rowsperstrip = 1;
|
||||
spp = 1;
|
||||
bps = 8;
|
||||
photometric = PHOTOMETRIC_MINISBLACK;
|
||||
sampleformat = SAMPLEFORMAT_UINT;
|
||||
planarconfig = PLANARCONFIG_CONTIG;
|
||||
|
||||
if (create_image_striped(filename, XSIZE, YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't create TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
if (read_image_striped(filename, XSIZE, YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't read TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
unlink(filename);
|
||||
|
||||
rowsperstrip = YSIZE;
|
||||
if (create_image_striped(filename, XSIZE, YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't create TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
if (read_image_striped(filename, XSIZE, YSIZE, rowsperstrip,
|
||||
compression, spp, bps, photometric,
|
||||
sampleformat, planarconfig,
|
||||
(const tdata_t) byte_array1, byte_array1_size) < 0) {
|
||||
fprintf (stderr, "Can't read TIFF file %s.\n", filename);
|
||||
goto failure;
|
||||
}
|
||||
unlink(filename);
|
||||
|
||||
return 0;
|
||||
|
||||
failure:
|
||||
unlink(filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
829
tests/libtiff/test/test_arrays.c
Normal file
829
tests/libtiff/test/test_arrays.c
Normal file
@ -0,0 +1,829 @@
|
||||
/* $Id: test_arrays.c,v 1.3 2006/03/23 14:54:02 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Numerical arrays used to test libtiff's read/write functions.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "test_arrays.h"
|
||||
|
||||
const unsigned char byte_array1[XSIZE * YSIZE]=
|
||||
{
|
||||
86, 84, 86, 90, 89, 85, 90, 78, 77, 79, 75, 77, 79, 86,
|
||||
87, 83, 82, 87, 89, 88, 86, 87, 88, 87, 81, 84, 85, 85,
|
||||
84, 86, 88, 91, 96, 95, 97, 95, 89,
|
||||
85, 82, 81, 88, 89, 85, 89, 83, 74, 79, 76, 77, 80, 87,
|
||||
87, 84, 84, 88, 90, 89, 87, 85, 87, 88, 83, 80, 82, 84,
|
||||
85, 87, 90, 95, 96, 95, 95, 92, 90,
|
||||
85, 81, 79, 84, 90, 87, 88, 88, 73, 79, 75, 76, 79, 88,
|
||||
88, 87, 85, 90, 92, 89, 88, 88, 87, 86, 84, 82, 82, 83,
|
||||
87, 89, 93, 94, 93, 93, 92, 92, 96,
|
||||
85, 82, 76, 80, 88, 89, 88, 89, 73, 80, 75, 75, 77, 89,
|
||||
92, 93, 91, 89, 94, 92, 90, 89, 88, 84, 84, 82, 82, 85,
|
||||
88, 91, 94, 93, 93, 89, 90, 96, 96,
|
||||
87, 83, 75, 77, 83, 89, 90, 90, 74, 78, 76, 76, 76, 84,
|
||||
94, 100, 89, 92, 94, 92, 90, 89, 90, 85, 84, 83, 83, 87,
|
||||
91, 92, 88, 92, 91, 88, 90, 97, 95,
|
||||
89, 83, 74, 77, 82, 84, 90, 92, 78, 72, 76, 75, 75, 81,
|
||||
95, 101, 95, 92, 95, 93, 90, 89, 90, 87, 86, 84, 86, 88,
|
||||
90, 90, 87, 90, 89, 90, 89, 98, 98,
|
||||
92, 84, 75, 76, 81, 81, 86, 91, 81, 72, 74, 74, 75, 81,
|
||||
104, 108, 93, 92, 95, 94, 88, 87, 89, 87, 85, 85, 88, 89,
|
||||
93, 91, 88, 88, 91, 88, 91, 106, 108,
|
||||
93, 89, 78, 75, 77, 80, 85, 86, 85, 73, 72, 73, 74, 79,
|
||||
102, 101, 88, 92, 93, 91, 87, 87, 86, 87, 85, 86, 88, 89,
|
||||
94, 94, 90, 88, 85, 86, 98, 109, 113,
|
||||
92, 93, 83, 76, 74, 79, 84, 85, 81, 75, 72, 73, 74, 79,
|
||||
105, 86, 86, 92, 96, 98, 104, 86, 85, 85, 85, 88, 90, 90,
|
||||
93, 92, 88, 87, 86, 89, 97, 110, 109,
|
||||
92, 93, 89, 78, 79, 78, 89, 84, 75, 76, 73, 72, 73, 78,
|
||||
105, 83, 82, 88, 83, 107, 95, 84, 85, 84, 86, 87, 90, 91,
|
||||
92, 90, 88, 87, 89, 90, 91, 99, 107,
|
||||
96, 94, 91, 82, 84, 86, 91, 87, 75, 74, 73, 73, 73, 77,
|
||||
101, 86, 83, 89, 92, 99, 98, 86, 86, 87, 83, 84, 89, 89,
|
||||
92, 92, 92, 96, 96, 87, 91, 90, 98,
|
||||
96, 97, 94, 87, 88, 89, 92, 90, 79, 72, 73, 73, 74, 77,
|
||||
100, 92, 84, 86, 98, 100, 92, 87, 88, 88, 84, 83, 87, 89,
|
||||
91, 94, 94, 96, 93, 87, 87, 84, 109,
|
||||
93, 92, 95, 92, 94, 93, 92, 91, 82, 72, 73, 74, 74, 76,
|
||||
95, 89, 85, 84, 102, 89, 85, 88, 94, 86, 82, 83, 82, 91,
|
||||
94, 97, 90, 92, 85, 90, 85, 79, 125,
|
||||
89, 96, 94, 90, 94, 95, 91, 91, 85, 76, 72, 73, 74, 75,
|
||||
88, 100, 83, 84, 84, 83, 85, 88, 90, 85, 84, 83, 84, 88,
|
||||
92, 93, 90, 89, 84, 90, 94, 79, 139,
|
||||
93, 97, 97, 93, 92, 95, 91, 90, 87, 81, 74, 73, 73, 74,
|
||||
85, 97, 95, 95, 89, 86, 86, 92, 87, 85, 84, 90, 86, 85,
|
||||
91, 87, 87, 86, 93, 124, 140, 106, 143,
|
||||
101, 95, 97, 97, 96, 95, 84, 88, 87, 82, 78, 73, 73, 74,
|
||||
82, 92, 104, 95, 88, 89, 87, 89, 86, 85, 86, 87, 87, 81,
|
||||
81, 83, 91, 106, 131, 153, 151, 123, 133,
|
||||
99, 101, 102, 99, 96, 90, 83, 82, 85, 84, 79, 76, 74, 74,
|
||||
78, 81, 89, 96, 90, 93, 88, 88, 86, 88, 89, 95, 89, 82,
|
||||
81, 85, 104, 118, 141, 160, 129, 137, 147,
|
||||
103, 104, 98, 99, 90, 88, 81, 76, 81, 83, 79, 77, 75, 75,
|
||||
75, 76, 80, 90, 94, 87, 86, 87, 92, 85, 85, 85, 87, 87,
|
||||
89, 91, 112, 115, 145, 154, 145, 141, 147,
|
||||
106, 103, 100, 99, 92, 82, 78, 75, 78, 81, 79, 77, 77, 78,
|
||||
78, 76, 77, 81, 89, 87, 84, 84, 90, 86, 85, 84, 80, 85,
|
||||
97, 104, 119, 119, 149, 147, 144, 146, 152,
|
||||
107, 105, 103, 100, 93, 83, 78, 74, 74, 79, 78, 77, 76, 78,
|
||||
80, 79, 76, 78, 83, 84, 81, 81, 84, 83, 82, 78, 78, 85,
|
||||
86, 97, 105, 114, 145, 146, 148, 147, 150,
|
||||
107, 105, 103, 97, 92, 84, 72, 72, 75, 77, 76, 75, 76, 79,
|
||||
80, 80, 77, 76, 82, 81, 80, 81, 80, 80, 80, 77, 74, 74,
|
||||
73, 77, 91, 110, 132, 141, 152, 152, 145,
|
||||
107, 105, 103, 96, 92, 86, 73, 71, 73, 75, 75, 76, 76, 78,
|
||||
80, 80, 80, 98, 80, 80, 82, 82, 80, 78, 76, 73, 71, 72,
|
||||
71, 74, 80, 108, 119, 136, 158, 142, 137,
|
||||
107, 104, 101, 97, 85, 87, 75, 70, 70, 74, 74, 75, 77, 78,
|
||||
80, 82, 110, 117, 110, 78, 81, 83, 81, 78, 76, 73, 71, 69,
|
||||
68, 71, 74, 95, 120, 138, 148, 143, 139
|
||||
};
|
||||
|
||||
const size_t byte_array1_size = sizeof(byte_array1);
|
||||
|
||||
const unsigned char byte_array2[YSIZE * XSIZE] =
|
||||
{
|
||||
77, 73, 76, 80, 79, 75, 82, 65, 62, 64, 59, 59, 61, 72,
|
||||
70, 67, 65, 70, 71, 70, 68, 66, 65, 67, 66, 66, 66, 66,
|
||||
66, 66, 66, 66, 66, 65, 63, 63, 62,
|
||||
75, 71, 71, 79, 81, 75, 81, 73, 59, 65, 60, 60, 64, 73,
|
||||
73, 68, 66, 70, 72, 71, 68, 66, 66, 67, 66, 66, 66, 67,
|
||||
67, 67, 66, 67, 66, 64, 63, 63, 63,
|
||||
76, 71, 66, 73, 81, 78, 80, 79, 59, 66, 60, 59, 62, 74,
|
||||
74, 71, 67, 70, 73, 71, 68, 66, 65, 65, 66, 66, 67, 67,
|
||||
67, 67, 67, 67, 66, 64, 64, 64, 64,
|
||||
76, 72, 64, 68, 79, 81, 80, 80, 59, 68, 60, 59, 60, 75,
|
||||
75, 73, 67, 68, 73, 72, 68, 66, 65, 63, 67, 67, 67, 67,
|
||||
68, 67, 67, 66, 65, 64, 65, 65, 65,
|
||||
79, 72, 63, 66, 73, 80, 83, 82, 60, 65, 61, 61, 60, 66,
|
||||
75, 75, 65, 70, 73, 72, 68, 66, 65, 64, 68, 67, 68, 68,
|
||||
68, 67, 67, 66, 65, 65, 65, 66, 65,
|
||||
81, 73, 62, 65, 72, 74, 82, 85, 66, 59, 62, 60, 60, 63,
|
||||
75, 76, 68, 69, 72, 72, 68, 66, 66, 65, 67, 68, 68, 68,
|
||||
68, 68, 66, 66, 64, 66, 65, 66, 66,
|
||||
84, 74, 64, 64, 70, 71, 78, 84, 70, 58, 60, 59, 59, 63,
|
||||
75, 80, 73, 67, 72, 72, 68, 66, 66, 65, 66, 68, 68, 68,
|
||||
68, 68, 66, 65, 65, 65, 66, 67, 68,
|
||||
87, 81, 66, 63, 65, 68, 76, 76, 75, 59, 58, 59, 59, 60,
|
||||
71, 92, 65, 64, 74, 72, 69, 67, 65, 65, 65, 68, 69, 68,
|
||||
69, 67, 65, 65, 65, 65, 67, 68, 69,
|
||||
86, 86, 73, 64, 62, 67, 75, 76, 70, 61, 58, 58, 59, 60,
|
||||
81, 68, 59, 63, 74, 90, 99, 67, 65, 65, 64, 67, 68, 68,
|
||||
68, 67, 65, 65, 66, 65, 66, 68, 68,
|
||||
85, 85, 80, 66, 67, 67, 81, 74, 62, 63, 59, 58, 58, 60,
|
||||
93, 61, 59, 59, 68, 115, 76, 67, 66, 64, 64, 66, 68, 68,
|
||||
68, 66, 65, 65, 66, 65, 64, 65, 69,
|
||||
90, 87, 83, 71, 74, 77, 83, 79, 63, 60, 59, 59, 58, 58,
|
||||
90, 61, 59, 59, 67, 80, 71, 68, 66, 64, 63, 63, 68, 68,
|
||||
68, 66, 65, 66, 67, 65, 64, 62, 87,
|
||||
91, 92, 86, 76, 78, 81, 85, 82, 67, 59, 59, 59, 59, 60,
|
||||
88, 72, 59, 60, 74, 80, 70, 67, 66, 64, 62, 60, 65, 68,
|
||||
67, 66, 65, 67, 66, 64, 62, 59, 111,
|
||||
84, 84, 87, 85, 87, 85, 84, 84, 72, 59, 59, 59, 59, 59,
|
||||
73, 71, 62, 59, 100, 70, 70, 67, 66, 64, 60, 58, 58, 67,
|
||||
68, 66, 65, 66, 64, 63, 59, 56, 131,
|
||||
80, 90, 87, 83, 88, 89, 84, 83, 76, 64, 59, 59, 59, 58,
|
||||
59, 97, 64, 62, 71, 68, 70, 73, 66, 63, 61, 58, 58, 62,
|
||||
67, 66, 64, 65, 63, 63, 61, 57, 149,
|
||||
86, 91, 92, 87, 85, 88, 83, 81, 78, 69, 61, 59, 59, 59,
|
||||
59, 61, 83, 72, 67, 67, 69, 69, 66, 64, 61, 72, 56, 57,
|
||||
64, 64, 64, 64, 65, 115, 150, 93, 151,
|
||||
97, 89, 91, 92, 89, 88, 74, 80, 78, 71, 65, 59, 58, 59,
|
||||
58, 59, 71, 72, 67, 70, 70, 69, 67, 64, 63, 66, 56, 54,
|
||||
57, 59, 64, 87, 139, 162, 160, 128, 141,
|
||||
94, 96, 97, 94, 89, 82, 71, 70, 76, 73, 67, 61, 59, 59,
|
||||
58, 59, 61, 71, 67, 75, 70, 68, 70, 65, 63, 63, 59, 56,
|
||||
54, 55, 90, 121, 149, 168, 138, 144, 157,
|
||||
99, 100, 93, 93, 82, 80, 70, 62, 70, 72, 67, 63, 60, 60,
|
||||
58, 58, 60, 68, 70, 70, 69, 68, 79, 68, 64, 62, 60, 59,
|
||||
57, 57, 88, 120, 151, 162, 154, 149, 155,
|
||||
103, 99, 95, 94, 84, 73, 67, 62, 65, 69, 67, 64, 63, 64,
|
||||
63, 59, 60, 65, 71, 69, 69, 67, 78, 65, 63, 61, 59, 61,
|
||||
60, 68, 100, 128, 155, 155, 152, 155, 164,
|
||||
104, 102, 99, 95, 86, 74, 67, 61, 61, 66, 65, 63, 63, 64,
|
||||
65, 63, 60, 63, 70, 69, 67, 67, 67, 65, 62, 60, 58, 57,
|
||||
62, 58, 71, 117, 150, 154, 157, 155, 163,
|
||||
104, 101, 99, 91, 84, 74, 59, 59, 62, 64, 63, 61, 62, 64,
|
||||
64, 64, 61, 60, 69, 68, 67, 69, 67, 65, 62, 59, 58, 57,
|
||||
57, 56, 59, 104, 137, 147, 159, 161, 158,
|
||||
104, 101, 99, 90, 85, 77, 60, 57, 60, 62, 62, 62, 63, 64,
|
||||
65, 65, 66, 100, 67, 67, 69, 69, 67, 65, 63, 60, 58, 56,
|
||||
54, 55, 56, 77, 122, 142, 166, 157, 150,
|
||||
104, 101, 97, 92, 77, 79, 64, 57, 57, 62, 62, 62, 64, 65,
|
||||
66, 65, 115, 138, 129, 64, 68, 70, 68, 66, 64, 60, 58, 56,
|
||||
53, 53, 56, 62, 115, 143, 157, 156, 159
|
||||
};
|
||||
|
||||
const size_t byte_array2_size = sizeof(byte_array2);
|
||||
|
||||
const unsigned char byte_array3[YSIZE * XSIZE] =
|
||||
{
|
||||
211, 221, 216, 201, 205, 216, 195, 236, 244, 237, 250, 250, 248, 218,
|
||||
223, 232, 236, 224, 221, 221, 227, 231, 232, 227, 229, 227, 227, 225,
|
||||
227, 225, 226, 226, 226, 228, 234, 234, 234, 216, 226, 228, 205, 200,
|
||||
214, 198, 215, 250, 233, 247, 250, 242, 219, 220, 229, 235, 225, 217,
|
||||
220, 227, 232, 230, 228, 229, 228, 227, 224, 225, 223, 226, 225, 226,
|
||||
230, 233, 233, 234, 213, 227, 237, 220, 200, 204, 202, 201, 248, 231,
|
||||
246, 250, 245, 214, 215, 223, 232, 225, 218, 218, 225, 230, 232, 231,
|
||||
229, 227, 225, 224, 223, 226, 224, 225, 228, 229, 230, 232, 231, 215,
|
||||
223, 242, 233, 206, 200, 201, 197, 250, 227, 250, 249, 248, 211, 212,
|
||||
216, 233, 229, 216, 218, 225, 230, 232, 237, 226, 224, 224, 223, 225,
|
||||
225, 224, 225, 228, 229, 231, 229, 231, 208, 220, 247, 238, 221, 202,
|
||||
194, 194, 245, 237, 247, 247, 249, 234, 210, 212, 237, 222, 219, 217,
|
||||
226, 229, 232, 235, 222, 222, 223, 223, 223, 224, 224, 227, 226, 229,
|
||||
229, 228, 231, 200, 221, 247, 239, 224, 217, 196, 189, 229, 248, 245,
|
||||
248, 250, 241, 210, 210, 230, 225, 218, 218, 224, 230, 230, 229, 224,
|
||||
222, 222, 222, 222, 223, 225, 226, 231, 226, 228, 229, 230, 191, 216,
|
||||
246, 245, 226, 228, 207, 191, 221, 251, 248, 249, 251, 245, 214, 214,
|
||||
233, 229, 217, 217, 224, 229, 230, 229, 225, 220, 223, 221, 222, 224,
|
||||
224, 227, 230, 227, 226, 229, 230, 187, 199, 238, 248, 242, 231, 213,
|
||||
211, 209, 246, 248, 251, 251, 250, 226, 215, 236, 237, 217, 215, 222,
|
||||
226, 229, 229, 227, 222, 222, 223, 222, 225, 227, 228, 226, 227, 228,
|
||||
228, 230, 188, 189, 221, 243, 247, 237, 215, 209, 223, 241, 248, 248,
|
||||
250, 248, 228, 234, 251, 239, 219, 210, 205, 224, 229, 228, 230, 221,
|
||||
223, 223, 222, 226, 229, 228, 224, 227, 229, 230, 232, 190, 190, 201,
|
||||
235, 236, 238, 198, 214, 243, 238, 248, 248, 250, 249, 215, 244, 250,
|
||||
250, 240, 168, 220, 224, 228, 230, 231, 226, 221, 224, 223, 226, 230,
|
||||
227, 226, 226, 230, 233, 234, 179, 185, 195, 224, 215, 210, 195, 204,
|
||||
239, 245, 250, 250, 252, 254, 216, 243, 249, 249, 233, 210, 215, 223,
|
||||
227, 230, 234, 234, 224, 223, 223, 227, 230, 226, 226, 228, 231, 235,
|
||||
212, 178, 174, 190, 211, 207, 199, 189, 194, 230, 250, 250, 250, 253,
|
||||
253, 222, 225, 250, 248, 218, 216, 217, 225, 226, 232, 239, 242, 229,
|
||||
223, 224, 229, 230, 225, 228, 230, 236, 241, 183, 194, 194, 185, 190,
|
||||
185, 190, 191, 191, 219, 250, 251, 250, 253, 254, 241, 225, 246, 249,
|
||||
198, 217, 220, 224, 225, 234, 241, 242, 246, 224, 223, 227, 229, 227,
|
||||
228, 234, 237, 245, 149, 203, 178, 182, 193, 185, 179, 191, 194, 211,
|
||||
236, 252, 252, 254, 254, 253, 192, 240, 244, 235, 224, 220, 229, 224,
|
||||
236, 239, 243, 244, 236, 224, 229, 230, 229, 231, 230, 233, 244, 128,
|
||||
188, 177, 171, 184, 191, 182, 196, 197, 208, 224, 247, 253, 255, 252,
|
||||
250, 248, 226, 216, 228, 230, 220, 220, 227, 234, 237, 231, 247, 244,
|
||||
231, 231, 229, 228, 229, 182, 128, 196, 118, 160, 182, 174, 172, 179,
|
||||
183, 216, 203, 206, 220, 236, 253, 254, 253, 253, 249, 225, 219, 232,
|
||||
230, 220, 224, 227, 233, 237, 234, 244, 250, 245, 240, 224, 212, 174,
|
||||
123, 124, 176, 127, 171, 163, 161, 167, 177, 198, 221, 228, 212, 215,
|
||||
233, 245, 252, 255, 253, 252, 251, 223, 231, 216, 222, 227, 231, 231,
|
||||
234, 227, 238, 245, 249, 244, 210, 177, 124, 129, 134, 124, 113, 156,
|
||||
155, 172, 168, 197, 201, 224, 247, 224, 219, 233, 242, 249, 250, 252,
|
||||
254, 252, 230, 230, 224, 224, 225, 225, 227, 232, 232, 235, 239, 239,
|
||||
241, 213, 178, 131, 128, 128, 120, 114, 149, 157, 165, 168, 191, 218,
|
||||
231, 246, 237, 226, 234, 241, 243, 239, 244, 252, 249, 237, 225, 226,
|
||||
224, 227, 220, 229, 235, 235, 239, 238, 236, 230, 204, 177, 125, 131,
|
||||
127, 117, 111, 146, 151, 158, 166, 187, 215, 230, 246, 246, 231, 238,
|
||||
243, 246, 243, 241, 244, 253, 245, 226, 226, 229, 229, 229, 231, 236,
|
||||
238, 241, 240, 241, 235, 224, 188, 134, 123, 127, 116, 116, 144, 151,
|
||||
158, 173, 190, 214, 251, 250, 243, 236, 242, 249, 246, 241, 241, 244,
|
||||
251, 251, 228, 230, 230, 226, 232, 231, 236, 241, 243, 244, 243, 243,
|
||||
235, 200, 150, 128, 122, 119, 117, 144, 151, 156, 176, 190, 207, 246,
|
||||
253, 244, 239, 244, 246, 244, 242, 240, 243, 249, 198, 239, 234, 226,
|
||||
226, 228, 234, 238, 241, 244, 245, 247, 250, 244, 219, 182, 138, 118,
|
||||
118, 116, 143, 150, 162, 173, 208, 205, 238, 253, 251, 241, 244, 244,
|
||||
242, 243, 238, 246, 193, 146, 173, 246, 231, 223, 230, 232, 236, 240,
|
||||
245, 247, 252, 252, 245, 233, 195, 138, 114, 118, 108
|
||||
};
|
||||
|
||||
const size_t byte_array3_size = sizeof(byte_array3);
|
||||
|
||||
const float array_float1[YSIZE * XSIZE] =
|
||||
{
|
||||
234.866, 229.404, 234.866, 245.790, 243.059, 232.135, 245.790, 213.018,
|
||||
210.287, 215.749, 204.825, 210.287, 215.749, 234.866, 237.597, 226.673,
|
||||
223.942, 237.597, 243.059, 240.328, 234.866, 237.597, 240.328, 237.597,
|
||||
221.211, 229.404, 232.135, 232.135, 229.404, 234.866, 240.328, 248.521,
|
||||
262.176, 259.445, 264.907, 259.445, 243.059,
|
||||
232.135, 223.942, 221.211, 240.328, 243.059, 232.135, 243.059, 226.673,
|
||||
202.094, 215.749, 207.556, 210.287, 218.480, 237.597, 237.597, 229.404,
|
||||
229.404, 240.328, 245.790, 243.059, 237.597, 232.135, 237.597, 240.328,
|
||||
226.673, 218.480, 223.942, 229.404, 232.135, 237.597, 245.790, 259.445,
|
||||
262.176, 259.445, 259.445, 251.252, 245.790,
|
||||
232.135, 221.211, 215.749, 229.404, 245.790, 237.597, 240.328, 240.328,
|
||||
199.363, 215.749, 204.825, 207.556, 215.749, 240.328, 240.328, 237.597,
|
||||
232.135, 245.790, 251.252, 243.059, 240.328, 240.328, 237.597, 234.866,
|
||||
229.404, 223.942, 223.942, 226.673, 237.597, 243.059, 253.983, 256.714,
|
||||
253.983, 253.983, 251.252, 251.252, 262.176,
|
||||
232.135, 223.942, 207.556, 218.480, 240.328, 243.059, 240.328, 243.059,
|
||||
199.363, 218.480, 204.825, 204.825, 210.287, 243.059, 251.252, 253.983,
|
||||
248.521, 243.059, 256.714, 251.252, 245.790, 243.059, 240.328, 229.404,
|
||||
229.404, 223.942, 223.942, 232.135, 240.328, 248.521, 256.714, 253.983,
|
||||
253.983, 243.059, 245.790, 262.176, 262.176,
|
||||
237.597, 226.673, 204.825, 210.287, 226.673, 243.059, 245.790, 245.790,
|
||||
202.094, 213.018, 207.556, 207.556, 207.556, 229.404, 256.714, 273.100,
|
||||
243.059, 251.252, 256.714, 251.252, 245.790, 243.059, 245.790, 232.135,
|
||||
229.404, 226.673, 226.673, 237.597, 248.521, 251.252, 240.328, 251.252,
|
||||
248.521, 240.328, 245.790, 264.907, 259.445,
|
||||
243.059, 226.673, 202.094, 210.287, 223.942, 229.404, 245.790, 251.252,
|
||||
213.018, 196.632, 207.556, 204.825, 204.825, 221.211, 259.445, 275.831,
|
||||
259.445, 251.252, 259.445, 253.983, 245.790, 243.059, 245.790, 237.597,
|
||||
234.866, 229.404, 234.866, 240.328, 245.790, 245.790, 237.597, 245.790,
|
||||
243.059, 245.790, 243.059, 267.638, 267.638,
|
||||
251.252, 229.404, 204.825, 207.556, 221.211, 221.211, 234.866, 248.521,
|
||||
221.211, 196.632, 202.094, 202.094, 204.825, 221.211, 284.024, 294.948,
|
||||
253.983, 251.252, 259.445, 256.714, 240.328, 237.597, 243.059, 237.597,
|
||||
232.135, 232.135, 240.328, 243.059, 253.983, 248.521, 240.328, 240.328,
|
||||
248.521, 240.328, 248.521, 289.486, 294.948,
|
||||
253.983, 243.059, 213.018, 204.825, 210.287, 218.480, 232.135, 234.866,
|
||||
232.135, 199.363, 196.632, 199.363, 202.094, 215.749, 278.562, 275.831,
|
||||
240.328, 251.252, 253.983, 248.521, 237.597, 237.597, 234.866, 237.597,
|
||||
232.135, 234.866, 240.328, 243.059, 256.714, 256.714, 245.790, 240.328,
|
||||
232.135, 234.866, 267.638, 297.679, 308.603,
|
||||
251.252, 253.983, 226.673, 207.556, 202.094, 215.749, 229.404, 232.135,
|
||||
221.211, 204.825, 196.632, 199.363, 202.094, 215.749, 286.755, 234.866,
|
||||
234.866, 251.252, 262.176, 267.638, 284.024, 234.866, 232.135, 232.135,
|
||||
232.135, 240.328, 245.790, 245.790, 253.983, 251.252, 240.328, 237.597,
|
||||
234.866, 243.059, 264.907, 300.410, 297.679,
|
||||
251.252, 253.983, 243.059, 213.018, 215.749, 213.018, 243.059, 229.404,
|
||||
204.825, 207.556, 199.363, 196.632, 199.363, 213.018, 286.755, 226.673,
|
||||
223.942, 240.328, 226.673, 292.217, 259.445, 229.404, 232.135, 229.404,
|
||||
234.866, 237.597, 245.790, 248.521, 251.252, 245.790, 240.328, 237.597,
|
||||
243.059, 245.790, 248.521, 270.369, 292.217,
|
||||
262.176, 256.714, 248.521, 223.942, 229.404, 234.866, 248.521, 237.597,
|
||||
204.825, 202.094, 199.363, 199.363, 199.363, 210.287, 275.831, 234.866,
|
||||
226.673, 243.059, 251.252, 270.369, 267.638, 234.866, 234.866, 237.597,
|
||||
226.673, 229.404, 243.059, 243.059, 251.252, 251.252, 251.252, 262.176,
|
||||
262.176, 237.597, 248.521, 245.790, 267.638,
|
||||
262.176, 264.907, 256.714, 237.597, 240.328, 243.059, 251.252, 245.790,
|
||||
215.749, 196.632, 199.363, 199.363, 202.094, 210.287, 273.100, 251.252,
|
||||
229.404, 234.866, 267.638, 273.100, 251.252, 237.597, 240.328, 240.328,
|
||||
229.404, 226.673, 237.597, 243.059, 248.521, 256.714, 256.714, 262.176,
|
||||
253.983, 237.597, 237.597, 229.404, 297.679,
|
||||
253.983, 251.252, 259.445, 251.252, 256.714, 253.983, 251.252, 248.521,
|
||||
223.942, 196.632, 199.363, 202.094, 202.094, 207.556, 259.445, 243.059,
|
||||
232.135, 229.404, 278.562, 243.059, 232.135, 240.328, 256.714, 234.866,
|
||||
223.942, 226.673, 223.942, 248.521, 256.714, 264.907, 245.790, 251.252,
|
||||
232.135, 245.790, 232.135, 215.749, 341.375,
|
||||
243.059, 262.176, 256.714, 245.790, 256.714, 259.445, 248.521, 248.521,
|
||||
232.135, 207.556, 196.632, 199.363, 202.094, 204.825, 240.328, 273.100,
|
||||
226.673, 229.404, 229.404, 226.673, 232.135, 240.328, 245.790, 232.135,
|
||||
229.404, 226.673, 229.404, 240.328, 251.252, 253.983, 245.790, 243.059,
|
||||
229.404, 245.790, 256.714, 215.749, 379.609,
|
||||
253.983, 264.907, 264.907, 253.983, 251.252, 259.445, 248.521, 245.790,
|
||||
237.597, 221.211, 202.094, 199.363, 199.363, 202.094, 232.135, 264.907,
|
||||
259.445, 259.445, 243.059, 234.866, 234.866, 251.252, 237.597, 232.135,
|
||||
229.404, 245.790, 234.866, 232.135, 248.521, 237.597, 237.597, 234.866,
|
||||
253.983, 338.644, 382.340, 289.486, 390.533,
|
||||
275.831, 259.445, 264.907, 264.907, 262.176, 259.445, 229.404, 240.328,
|
||||
237.597, 223.942, 213.018, 199.363, 199.363, 202.094, 223.942, 251.252,
|
||||
284.024, 259.445, 240.328, 243.059, 237.597, 243.059, 234.866, 232.135,
|
||||
234.866, 237.597, 237.597, 221.211, 221.211, 226.673, 248.521, 289.486,
|
||||
357.761, 417.843, 412.381, 335.913, 363.223,
|
||||
270.369, 275.831, 278.562, 270.369, 262.176, 245.790, 226.673, 223.942,
|
||||
232.135, 229.404, 215.749, 207.556, 202.094, 202.094, 213.018, 221.211,
|
||||
243.059, 262.176, 245.790, 253.983, 240.328, 240.328, 234.866, 240.328,
|
||||
243.059, 259.445, 243.059, 223.942, 221.211, 232.135, 284.024, 322.258,
|
||||
385.071, 436.960, 352.299, 374.147, 401.457,
|
||||
281.293, 284.024, 267.638, 270.369, 245.790, 240.328, 221.211, 207.556,
|
||||
221.211, 226.673, 215.749, 210.287, 204.825, 204.825, 204.825, 207.556,
|
||||
218.480, 245.790, 256.714, 237.597, 234.866, 237.597, 251.252, 232.135,
|
||||
232.135, 232.135, 237.597, 237.597, 243.059, 248.521, 305.872, 314.065,
|
||||
395.995, 420.574, 395.995, 385.071, 401.457,
|
||||
289.486, 281.293, 273.100, 270.369, 251.252, 223.942, 213.018, 204.825,
|
||||
213.018, 221.211, 215.749, 210.287, 210.287, 213.018, 213.018, 207.556,
|
||||
210.287, 221.211, 243.059, 237.597, 229.404, 229.404, 245.790, 234.866,
|
||||
232.135, 229.404, 218.480, 232.135, 264.907, 284.024, 324.989, 324.989,
|
||||
406.919, 401.457, 393.264, 398.726, 415.112,
|
||||
292.217, 286.755, 281.293, 273.100, 253.983, 226.673, 213.018, 202.094,
|
||||
202.094, 215.749, 213.018, 210.287, 207.556, 213.018, 218.480, 215.749,
|
||||
207.556, 213.018, 226.673, 229.404, 221.211, 221.211, 229.404, 226.673,
|
||||
223.942, 213.018, 213.018, 232.135, 234.866, 264.907, 286.755, 311.334,
|
||||
395.995, 398.726, 404.188, 401.457, 409.650,
|
||||
292.217, 286.755, 281.293, 264.907, 251.252, 229.404, 196.632, 196.632,
|
||||
204.825, 210.287, 207.556, 204.825, 207.556, 215.749, 218.480, 218.480,
|
||||
210.287, 207.556, 223.942, 221.211, 218.480, 221.211, 218.480, 218.480,
|
||||
218.480, 210.287, 202.094, 202.094, 199.363, 210.287, 248.521, 300.410,
|
||||
360.492, 385.071, 415.112, 415.112, 395.995,
|
||||
292.217, 286.755, 281.293, 262.176, 251.252, 234.866, 199.363, 193.901,
|
||||
199.363, 204.825, 204.825, 207.556, 207.556, 213.018, 218.480, 218.480,
|
||||
218.480, 267.638, 218.480, 218.480, 223.942, 223.942, 218.480, 213.018,
|
||||
207.556, 199.363, 193.901, 196.632, 193.901, 202.094, 218.480, 294.948,
|
||||
324.989, 371.416, 431.498, 387.802, 374.147,
|
||||
292.217, 284.024, 275.831, 264.907, 232.135, 237.597, 204.825, 191.170,
|
||||
191.170, 202.094, 202.094, 204.825, 210.287, 213.018, 218.480, 223.942,
|
||||
300.410, 319.527, 300.410, 213.018, 221.211, 226.673, 221.211, 213.018,
|
||||
207.556, 199.363, 193.901, 188.439, 185.708, 193.901, 202.094, 259.445,
|
||||
327.720, 376.878, 404.188, 390.533, 379.609
|
||||
};
|
||||
|
||||
const size_t array_float1_size = sizeof(array_float1);
|
||||
|
||||
const float array_float2[YSIZE * XSIZE] =
|
||||
{
|
||||
210.287, 199.363, 207.556, 218.480, 215.749, 204.825, 223.942, 177.515,
|
||||
169.322, 174.784, 161.129, 161.129, 166.591, 196.632, 191.170, 182.977,
|
||||
177.515, 191.170, 193.901, 191.170, 185.708, 180.246, 177.515, 182.977,
|
||||
180.246, 180.246, 180.246, 180.246, 180.246, 180.246, 180.246, 180.246,
|
||||
180.246, 177.515, 172.053, 172.053, 169.322,
|
||||
204.825, 193.901, 193.901, 215.749, 221.211, 204.825, 221.211, 199.363,
|
||||
161.129, 177.515, 163.860, 163.860, 174.784, 199.363, 199.363, 185.708,
|
||||
180.246, 191.170, 196.632, 193.901, 185.708, 180.246, 180.246, 182.977,
|
||||
180.246, 180.246, 180.246, 182.977, 182.977, 182.977, 180.246, 182.977,
|
||||
180.246, 174.784, 172.053, 172.053, 172.053,
|
||||
207.556, 193.901, 180.246, 199.363, 221.211, 213.018, 218.480, 215.749,
|
||||
161.129, 180.246, 163.860, 161.129, 169.322, 202.094, 202.094, 193.901,
|
||||
182.977, 191.170, 199.363, 193.901, 185.708, 180.246, 177.515, 177.515,
|
||||
180.246, 180.246, 182.977, 182.977, 182.977, 182.977, 182.977, 182.977,
|
||||
180.246, 174.784, 174.784, 174.784, 174.784,
|
||||
207.556, 196.632, 174.784, 185.708, 215.749, 221.211, 218.480, 218.480,
|
||||
161.129, 185.708, 163.860, 161.129, 163.860, 204.825, 204.825, 199.363,
|
||||
182.977, 185.708, 199.363, 196.632, 185.708, 180.246, 177.515, 172.053,
|
||||
182.977, 182.977, 182.977, 182.977, 185.708, 182.977, 182.977, 180.246,
|
||||
177.515, 174.784, 177.515, 177.515, 177.515,
|
||||
215.749, 196.632, 172.053, 180.246, 199.363, 218.480, 226.673, 223.942,
|
||||
163.860, 177.515, 166.591, 166.591, 163.860, 180.246, 204.825, 204.825,
|
||||
177.515, 191.170, 199.363, 196.632, 185.708, 180.246, 177.515, 174.784,
|
||||
185.708, 182.977, 185.708, 185.708, 185.708, 182.977, 182.977, 180.246,
|
||||
177.515, 177.515, 177.515, 180.246, 177.515,
|
||||
221.211, 199.363, 169.322, 177.515, 196.632, 202.094, 223.942, 232.135,
|
||||
180.246, 161.129, 169.322, 163.860, 163.860, 172.053, 204.825, 207.556,
|
||||
185.708, 188.439, 196.632, 196.632, 185.708, 180.246, 180.246, 177.515,
|
||||
182.977, 185.708, 185.708, 185.708, 185.708, 185.708, 180.246, 180.246,
|
||||
174.784, 180.246, 177.515, 180.246, 180.246,
|
||||
229.404, 202.094, 174.784, 174.784, 191.170, 193.901, 213.018, 229.404,
|
||||
191.170, 158.398, 163.860, 161.129, 161.129, 172.053, 204.825, 218.480,
|
||||
199.363, 182.977, 196.632, 196.632, 185.708, 180.246, 180.246, 177.515,
|
||||
180.246, 185.708, 185.708, 185.708, 185.708, 185.708, 180.246, 177.515,
|
||||
177.515, 177.515, 180.246, 182.977, 185.708,
|
||||
237.597, 221.211, 180.246, 172.053, 177.515, 185.708, 207.556, 207.556,
|
||||
204.825, 161.129, 158.398, 161.129, 161.129, 163.860, 193.901, 251.252,
|
||||
177.515, 174.784, 202.094, 196.632, 188.439, 182.977, 177.515, 177.515,
|
||||
177.515, 185.708, 188.439, 185.708, 188.439, 182.977, 177.515, 177.515,
|
||||
177.515, 177.515, 182.977, 185.708, 188.439,
|
||||
234.866, 234.866, 199.363, 174.784, 169.322, 182.977, 204.825, 207.556,
|
||||
191.170, 166.591, 158.398, 158.398, 161.129, 163.860, 221.211, 185.708,
|
||||
161.129, 172.053, 202.094, 245.790, 270.369, 182.977, 177.515, 177.515,
|
||||
174.784, 182.977, 185.708, 185.708, 185.708, 182.977, 177.515, 177.515,
|
||||
180.246, 177.515, 180.246, 185.708, 185.708,
|
||||
232.135, 232.135, 218.480, 180.246, 182.977, 182.977, 221.211, 202.094,
|
||||
169.322, 172.053, 161.129, 158.398, 158.398, 163.860, 253.983, 166.591,
|
||||
161.129, 161.129, 185.708, 314.065, 207.556, 182.977, 180.246, 174.784,
|
||||
174.784, 180.246, 185.708, 185.708, 185.708, 180.246, 177.515, 177.515,
|
||||
180.246, 177.515, 174.784, 177.515, 188.439,
|
||||
245.790, 237.597, 226.673, 193.901, 202.094, 210.287, 226.673, 215.749,
|
||||
172.053, 163.860, 161.129, 161.129, 158.398, 158.398, 245.790, 166.591,
|
||||
161.129, 161.129, 182.977, 218.480, 193.901, 185.708, 180.246, 174.784,
|
||||
172.053, 172.053, 185.708, 185.708, 185.708, 180.246, 177.515, 180.246,
|
||||
182.977, 177.515, 174.784, 169.322, 237.597,
|
||||
248.521, 251.252, 234.866, 207.556, 213.018, 221.211, 232.135, 223.942,
|
||||
182.977, 161.129, 161.129, 161.129, 161.129, 163.860, 240.328, 196.632,
|
||||
161.129, 163.860, 202.094, 218.480, 191.170, 182.977, 180.246, 174.784,
|
||||
169.322, 163.860, 177.515, 185.708, 182.977, 180.246, 177.515, 182.977,
|
||||
180.246, 174.784, 169.322, 161.129, 303.141,
|
||||
229.404, 229.404, 237.597, 232.135, 237.597, 232.135, 229.404, 229.404,
|
||||
196.632, 161.129, 161.129, 161.129, 161.129, 161.129, 199.363, 193.901,
|
||||
169.322, 161.129, 273.100, 191.170, 191.170, 182.977, 180.246, 174.784,
|
||||
163.860, 158.398, 158.398, 182.977, 185.708, 180.246, 177.515, 180.246,
|
||||
174.784, 172.053, 161.129, 152.936, 357.761,
|
||||
218.480, 245.790, 237.597, 226.673, 240.328, 243.059, 229.404, 226.673,
|
||||
207.556, 174.784, 161.129, 161.129, 161.129, 158.398, 161.129, 264.907,
|
||||
174.784, 169.322, 193.901, 185.708, 191.170, 199.363, 180.246, 172.053,
|
||||
166.591, 158.398, 158.398, 169.322, 182.977, 180.246, 174.784, 177.515,
|
||||
172.053, 172.053, 166.591, 155.667, 406.919,
|
||||
234.866, 248.521, 251.252, 237.597, 232.135, 240.328, 226.673, 221.211,
|
||||
213.018, 188.439, 166.591, 161.129, 161.129, 161.129, 161.129, 166.591,
|
||||
226.673, 196.632, 182.977, 182.977, 188.439, 188.439, 180.246, 174.784,
|
||||
166.591, 196.632, 152.936, 155.667, 174.784, 174.784, 174.784, 174.784,
|
||||
177.515, 314.065, 409.650, 253.983, 412.381,
|
||||
264.907, 243.059, 248.521, 251.252, 243.059, 240.328, 202.094, 218.480,
|
||||
213.018, 193.901, 177.515, 161.129, 158.398, 161.129, 158.398, 161.129,
|
||||
193.901, 196.632, 182.977, 191.170, 191.170, 188.439, 182.977, 174.784,
|
||||
172.053, 180.246, 152.936, 147.474, 155.667, 161.129, 174.784, 237.597,
|
||||
379.609, 442.422, 436.960, 349.568, 385.071,
|
||||
256.714, 262.176, 264.907, 256.714, 243.059, 223.942, 193.901, 191.170,
|
||||
207.556, 199.363, 182.977, 166.591, 161.129, 161.129, 158.398, 161.129,
|
||||
166.591, 193.901, 182.977, 204.825, 191.170, 185.708, 191.170, 177.515,
|
||||
172.053, 172.053, 161.129, 152.936, 147.474, 150.205, 245.790, 330.451,
|
||||
406.919, 458.808, 376.878, 393.264, 428.767,
|
||||
270.369, 273.100, 253.983, 253.983, 223.942, 218.480, 191.170, 169.322,
|
||||
191.170, 196.632, 182.977, 172.053, 163.860, 163.860, 158.398, 158.398,
|
||||
163.860, 185.708, 191.170, 191.170, 188.439, 185.708, 215.749, 185.708,
|
||||
174.784, 169.322, 163.860, 161.129, 155.667, 155.667, 240.328, 327.720,
|
||||
412.381, 442.422, 420.574, 406.919, 423.305,
|
||||
281.293, 270.369, 259.445, 256.714, 229.404, 199.363, 182.977, 169.322,
|
||||
177.515, 188.439, 182.977, 174.784, 172.053, 174.784, 172.053, 161.129,
|
||||
163.860, 177.515, 193.901, 188.439, 188.439, 182.977, 213.018, 177.515,
|
||||
172.053, 166.591, 161.129, 166.591, 163.860, 185.708, 273.100, 349.568,
|
||||
423.305, 423.305, 415.112, 423.305, 447.884,
|
||||
284.024, 278.562, 270.369, 259.445, 234.866, 202.094, 182.977, 166.591,
|
||||
166.591, 180.246, 177.515, 172.053, 172.053, 174.784, 177.515, 172.053,
|
||||
163.860, 172.053, 191.170, 188.439, 182.977, 182.977, 182.977, 177.515,
|
||||
169.322, 163.860, 158.398, 155.667, 169.322, 158.398, 193.901, 319.527,
|
||||
409.650, 420.574, 428.767, 423.305, 445.153,
|
||||
284.024, 275.831, 270.369, 248.521, 229.404, 202.094, 161.129, 161.129,
|
||||
169.322, 174.784, 172.053, 166.591, 169.322, 174.784, 174.784, 174.784,
|
||||
166.591, 163.860, 188.439, 185.708, 182.977, 188.439, 182.977, 177.515,
|
||||
169.322, 161.129, 158.398, 155.667, 155.667, 152.936, 161.129, 284.024,
|
||||
374.147, 401.457, 434.229, 439.691, 431.498,
|
||||
284.024, 275.831, 270.369, 245.790, 232.135, 210.287, 163.860, 155.667,
|
||||
163.860, 169.322, 169.322, 169.322, 172.053, 174.784, 177.515, 177.515,
|
||||
180.246, 273.100, 182.977, 182.977, 188.439, 188.439, 182.977, 177.515,
|
||||
172.053, 163.860, 158.398, 152.936, 147.474, 150.205, 152.936, 210.287,
|
||||
333.182, 387.802, 453.346, 428.767, 409.650,
|
||||
284.024, 275.831, 264.907, 251.252, 210.287, 215.749, 174.784, 155.667,
|
||||
155.667, 169.322, 169.322, 169.322, 174.784, 177.515, 180.246, 177.515,
|
||||
314.065, 376.878, 352.299, 174.784, 185.708, 191.170, 185.708, 180.246,
|
||||
174.784, 163.860, 158.398, 152.936, 144.743, 144.743, 152.936, 169.322,
|
||||
314.065, 390.533, 428.767, 426.036, 434.229
|
||||
};
|
||||
|
||||
const size_t array_float2_size = sizeof(array_float2);
|
||||
|
||||
const double array_double1[YSIZE * XSIZE] =
|
||||
{
|
||||
148.914762, 145.451628, 148.914762, 155.841030, 154.109463, 147.183195,
|
||||
155.841030, 135.062226, 133.330659, 136.793793, 129.867525, 133.330659,
|
||||
136.793793, 148.914762, 150.646329, 143.720061, 141.988494, 150.646329,
|
||||
154.109463, 152.377896, 148.914762, 150.646329, 152.377896, 150.646329,
|
||||
140.256927, 145.451628, 147.183195, 147.183195, 145.451628, 148.914762,
|
||||
152.377896, 157.572597, 166.230432, 164.498865, 167.961999, 164.498865,
|
||||
154.109463,
|
||||
147.183195, 141.988494, 140.256927, 152.377896, 154.109463, 147.183195,
|
||||
154.109463, 143.720061, 128.135958, 136.793793, 131.599092, 133.330659,
|
||||
138.525360, 150.646329, 150.646329, 145.451628, 145.451628, 152.377896,
|
||||
155.841030, 154.109463, 150.646329, 147.183195, 150.646329, 152.377896,
|
||||
143.720061, 138.525360, 141.988494, 145.451628, 147.183195, 150.646329,
|
||||
155.841030, 164.498865, 166.230432, 164.498865, 164.498865, 159.304164,
|
||||
155.841030,
|
||||
147.183195, 140.256927, 136.793793, 145.451628, 155.841030, 150.646329,
|
||||
152.377896, 152.377896, 126.404391, 136.793793, 129.867525, 131.599092,
|
||||
136.793793, 152.377896, 152.377896, 150.646329, 147.183195, 155.841030,
|
||||
159.304164, 154.109463, 152.377896, 152.377896, 150.646329, 148.914762,
|
||||
145.451628, 141.988494, 141.988494, 143.720061, 150.646329, 154.109463,
|
||||
161.035731, 162.767298, 161.035731, 161.035731, 159.304164, 159.304164,
|
||||
166.230432,
|
||||
147.183195, 141.988494, 131.599092, 138.525360, 152.377896, 154.109463,
|
||||
152.377896, 154.109463, 126.404391, 138.525360, 129.867525, 129.867525,
|
||||
133.330659, 154.109463, 159.304164, 161.035731, 157.572597, 154.109463,
|
||||
162.767298, 159.304164, 155.841030, 154.109463, 152.377896, 145.451628,
|
||||
145.451628, 141.988494, 141.988494, 147.183195, 152.377896, 157.572597,
|
||||
162.767298, 161.035731, 161.035731, 154.109463, 155.841030, 166.230432,
|
||||
166.230432,
|
||||
150.646329, 143.720061, 129.867525, 133.330659, 143.720061, 154.109463,
|
||||
155.841030, 155.841030, 128.135958, 135.062226, 131.599092, 131.599092,
|
||||
131.599092, 145.451628, 162.767298, 173.156700, 154.109463, 159.304164,
|
||||
162.767298, 159.304164, 155.841030, 154.109463, 155.841030, 147.183195,
|
||||
145.451628, 143.720061, 143.720061, 150.646329, 157.572597, 159.304164,
|
||||
152.377896, 159.304164, 157.572597, 152.377896, 155.841030, 167.961999,
|
||||
164.498865,
|
||||
154.109463, 143.720061, 128.135958, 133.330659, 141.988494, 145.451628,
|
||||
155.841030, 159.304164, 135.062226, 124.672824, 131.599092, 129.867525,
|
||||
129.867525, 140.256927, 164.498865, 174.888267, 164.498865, 159.304164,
|
||||
164.498865, 161.035731, 155.841030, 154.109463, 155.841030, 150.646329,
|
||||
148.914762, 145.451628, 148.914762, 152.377896, 155.841030, 155.841030,
|
||||
150.646329, 155.841030, 154.109463, 155.841030, 154.109463, 169.693566,
|
||||
169.693566,
|
||||
159.304164, 145.451628, 129.867525, 131.599092, 140.256927, 140.256927,
|
||||
148.914762, 157.572597, 140.256927, 124.672824, 128.135958, 128.135958,
|
||||
129.867525, 140.256927, 180.082968, 187.009236, 161.035731, 159.304164,
|
||||
164.498865, 162.767298, 152.377896, 150.646329, 154.109463, 150.646329,
|
||||
147.183195, 147.183195, 152.377896, 154.109463, 161.035731, 157.572597,
|
||||
152.377896, 152.377896, 157.572597, 152.377896, 157.572597, 183.546102,
|
||||
187.009236,
|
||||
161.035731, 154.109463, 135.062226, 129.867525, 133.330659, 138.525360,
|
||||
147.183195, 148.914762, 147.183195, 126.404391, 124.672824, 126.404391,
|
||||
128.135958, 136.793793, 176.619834, 174.888267, 152.377896, 159.304164,
|
||||
161.035731, 157.572597, 150.646329, 150.646329, 148.914762, 150.646329,
|
||||
147.183195, 148.914762, 152.377896, 154.109463, 162.767298, 162.767298,
|
||||
155.841030, 152.377896, 147.183195, 148.914762, 169.693566, 188.740803,
|
||||
195.667071,
|
||||
159.304164, 161.035731, 143.720061, 131.599092, 128.135958, 136.793793,
|
||||
145.451628, 147.183195, 140.256927, 129.867525, 124.672824, 126.404391,
|
||||
128.135958, 136.793793, 181.814535, 148.914762, 148.914762, 159.304164,
|
||||
166.230432, 169.693566, 180.082968, 148.914762, 147.183195, 147.183195,
|
||||
147.183195, 152.377896, 155.841030, 155.841030, 161.035731, 159.304164,
|
||||
152.377896, 150.646329, 148.914762, 154.109463, 167.961999, 190.472370,
|
||||
188.740803,
|
||||
159.304164, 161.035731, 154.109463, 135.062226, 136.793793, 135.062226,
|
||||
154.109463, 145.451628, 129.867525, 131.599092, 126.404391, 124.672824,
|
||||
126.404391, 135.062226, 181.814535, 143.720061, 141.988494, 152.377896,
|
||||
143.720061, 185.277669, 164.498865, 145.451628, 147.183195, 145.451628,
|
||||
148.914762, 150.646329, 155.841030, 157.572597, 159.304164, 155.841030,
|
||||
152.377896, 150.646329, 154.109463, 155.841030, 157.572597, 171.425133,
|
||||
185.277669,
|
||||
166.230432, 162.767298, 157.572597, 141.988494, 145.451628, 148.914762,
|
||||
157.572597, 150.646329, 129.867525, 128.135958, 126.404391, 126.404391,
|
||||
126.404391, 133.330659, 174.888267, 148.914762, 143.720061, 154.109463,
|
||||
159.304164, 171.425133, 169.693566, 148.914762, 148.914762, 150.646329,
|
||||
143.720061, 145.451628, 154.109463, 154.109463, 159.304164, 159.304164,
|
||||
159.304164, 166.230432, 166.230432, 150.646329, 157.572597, 155.841030,
|
||||
169.693566,
|
||||
166.230432, 167.961999, 162.767298, 150.646329, 152.377896, 154.109463,
|
||||
159.304164, 155.841030, 136.793793, 124.672824, 126.404391, 126.404391,
|
||||
128.135958, 133.330659, 173.156700, 159.304164, 145.451628, 148.914762,
|
||||
169.693566, 173.156700, 159.304164, 150.646329, 152.377896, 152.377896,
|
||||
145.451628, 143.720061, 150.646329, 154.109463, 157.572597, 162.767298,
|
||||
162.767298, 166.230432, 161.035731, 150.646329, 150.646329, 145.451628,
|
||||
188.740803,
|
||||
161.035731, 159.304164, 164.498865, 159.304164, 162.767298, 161.035731,
|
||||
159.304164, 157.572597, 141.988494, 124.672824, 126.404391, 128.135958,
|
||||
128.135958, 131.599092, 164.498865, 154.109463, 147.183195, 145.451628,
|
||||
176.619834, 154.109463, 147.183195, 152.377896, 162.767298, 148.914762,
|
||||
141.988494, 143.720061, 141.988494, 157.572597, 162.767298, 167.961999,
|
||||
155.841030, 159.304164, 147.183195, 155.841030, 147.183195, 136.793793,
|
||||
216.445875,
|
||||
154.109463, 166.230432, 162.767298, 155.841030, 162.767298, 164.498865,
|
||||
157.572597, 157.572597, 147.183195, 131.599092, 124.672824, 126.404391,
|
||||
128.135958, 129.867525, 152.377896, 173.156700, 143.720061, 145.451628,
|
||||
145.451628, 143.720061, 147.183195, 152.377896, 155.841030, 147.183195,
|
||||
145.451628, 143.720061, 145.451628, 152.377896, 159.304164, 161.035731,
|
||||
155.841030, 154.109463, 145.451628, 155.841030, 162.767298, 136.793793,
|
||||
240.687813,
|
||||
161.035731, 167.961999, 167.961999, 161.035731, 159.304164, 164.498865,
|
||||
157.572597, 155.841030, 150.646329, 140.256927, 128.135958, 126.404391,
|
||||
126.404391, 128.135958, 147.183195, 167.961999, 164.498865, 164.498865,
|
||||
154.109463, 148.914762, 148.914762, 159.304164, 150.646329, 147.183195,
|
||||
145.451628, 155.841030, 148.914762, 147.183195, 157.572597, 150.646329,
|
||||
150.646329, 148.914762, 161.035731, 214.714308, 242.419380, 183.546102,
|
||||
247.614081,
|
||||
174.888267, 164.498865, 167.961999, 167.961999, 166.230432, 164.498865,
|
||||
145.451628, 152.377896, 150.646329, 141.988494, 135.062226, 126.404391,
|
||||
126.404391, 128.135958, 141.988494, 159.304164, 180.082968, 164.498865,
|
||||
152.377896, 154.109463, 150.646329, 154.109463, 148.914762, 147.183195,
|
||||
148.914762, 150.646329, 150.646329, 140.256927, 140.256927, 143.720061,
|
||||
157.572597, 183.546102, 226.835277, 264.929751, 261.466617, 212.982741,
|
||||
230.298411,
|
||||
171.425133, 174.888267, 176.619834, 171.425133, 166.230432, 155.841030,
|
||||
143.720061, 141.988494, 147.183195, 145.451628, 136.793793, 131.599092,
|
||||
128.135958, 128.135958, 135.062226, 140.256927, 154.109463, 166.230432,
|
||||
155.841030, 161.035731, 152.377896, 152.377896, 148.914762, 152.377896,
|
||||
154.109463, 164.498865, 154.109463, 141.988494, 140.256927, 147.183195,
|
||||
180.082968, 204.324906, 244.150947, 277.050720, 223.372143, 237.224679,
|
||||
254.540349,
|
||||
178.351401, 180.082968, 169.693566, 171.425133, 155.841030, 152.377896,
|
||||
140.256927, 131.599092, 140.256927, 143.720061, 136.793793, 133.330659,
|
||||
129.867525, 129.867525, 129.867525, 131.599092, 138.525360, 155.841030,
|
||||
162.767298, 150.646329, 148.914762, 150.646329, 159.304164, 147.183195,
|
||||
147.183195, 147.183195, 150.646329, 150.646329, 154.109463, 157.572597,
|
||||
193.935504, 199.130205, 251.077215, 266.661318, 251.077215, 244.150947,
|
||||
254.540349,
|
||||
183.546102, 178.351401, 173.156700, 171.425133, 159.304164, 141.988494,
|
||||
135.062226, 129.867525, 135.062226, 140.256927, 136.793793, 133.330659,
|
||||
133.330659, 135.062226, 135.062226, 131.599092, 133.330659, 140.256927,
|
||||
154.109463, 150.646329, 145.451628, 145.451628, 155.841030, 148.914762,
|
||||
147.183195, 145.451628, 138.525360, 147.183195, 167.961999, 180.082968,
|
||||
206.056473, 206.056473, 258.003483, 254.540349, 249.345648, 252.808782,
|
||||
263.198184,
|
||||
185.277669, 181.814535, 178.351401, 173.156700, 161.035731, 143.720061,
|
||||
135.062226, 128.135958, 128.135958, 136.793793, 135.062226, 133.330659,
|
||||
131.599092, 135.062226, 138.525360, 136.793793, 131.599092, 135.062226,
|
||||
143.720061, 145.451628, 140.256927, 140.256927, 145.451628, 143.720061,
|
||||
141.988494, 135.062226, 135.062226, 147.183195, 148.914762, 167.961999,
|
||||
181.814535, 197.398638, 251.077215, 252.808782, 256.271916, 254.540349,
|
||||
259.735050,
|
||||
185.277669, 181.814535, 178.351401, 167.961999, 159.304164, 145.451628,
|
||||
124.672824, 124.672824, 129.867525, 133.330659, 131.599092, 129.867525,
|
||||
131.599092, 136.793793, 138.525360, 138.525360, 133.330659, 131.599092,
|
||||
141.988494, 140.256927, 138.525360, 140.256927, 138.525360, 138.525360,
|
||||
138.525360, 133.330659, 128.135958, 128.135958, 126.404391, 133.330659,
|
||||
157.572597, 190.472370, 228.566844, 244.150947, 263.198184, 263.198184,
|
||||
251.077215,
|
||||
185.277669, 181.814535, 178.351401, 166.230432, 159.304164, 148.914762,
|
||||
126.404391, 122.941257, 126.404391, 129.867525, 129.867525, 131.599092,
|
||||
131.599092, 135.062226, 138.525360, 138.525360, 138.525360, 169.693566,
|
||||
138.525360, 138.525360, 141.988494, 141.988494, 138.525360, 135.062226,
|
||||
131.599092, 126.404391, 122.941257, 124.672824, 122.941257, 128.135958,
|
||||
138.525360, 187.009236, 206.056473, 235.493112, 273.587586, 245.882514,
|
||||
237.224679,
|
||||
185.277669, 180.082968, 174.888267, 167.961999, 147.183195, 150.646329,
|
||||
129.867525, 121.209690, 121.209690, 128.135958, 128.135958, 129.867525,
|
||||
133.330659, 135.062226, 138.525360, 141.988494, 190.472370, 202.593339,
|
||||
190.472370, 135.062226, 140.256927, 143.720061, 140.256927, 135.062226,
|
||||
131.599092, 126.404391, 122.941257, 119.478123, 117.746556, 122.941257,
|
||||
128.135958, 164.498865, 207.788040, 238.956246, 256.271916, 247.614081,
|
||||
240.687813
|
||||
};
|
||||
|
||||
const size_t array_double1_size = sizeof(array_double1);
|
||||
|
||||
const double array_double2[YSIZE * XSIZE] =
|
||||
{
|
||||
133.330659, 126.404391, 131.599092, 138.525360, 136.793793, 129.867525,
|
||||
141.988494, 112.551855, 107.357154, 110.820288, 102.162453, 102.162453,
|
||||
105.625587, 124.672824, 121.209690, 116.014989, 112.551855, 121.209690,
|
||||
122.941257, 121.209690, 117.746556, 114.283422, 112.551855, 116.014989,
|
||||
114.283422, 114.283422, 114.283422, 114.283422, 114.283422, 114.283422,
|
||||
114.283422, 114.283422, 114.283422, 112.551855, 109.088721, 109.088721,
|
||||
107.357154,
|
||||
129.867525, 122.941257, 122.941257, 136.793793, 140.256927, 129.867525,
|
||||
140.256927, 126.404391, 102.162453, 112.551855, 103.894020, 103.894020,
|
||||
110.820288, 126.404391, 126.404391, 117.746556, 114.283422, 121.209690,
|
||||
124.672824, 122.941257, 117.746556, 114.283422, 114.283422, 116.014989,
|
||||
114.283422, 114.283422, 114.283422, 116.014989, 116.014989, 116.014989,
|
||||
114.283422, 116.014989, 114.283422, 110.820288, 109.088721, 109.088721,
|
||||
109.088721,
|
||||
131.599092, 122.941257, 114.283422, 126.404391, 140.256927, 135.062226,
|
||||
138.525360, 136.793793, 102.162453, 114.283422, 103.894020, 102.162453,
|
||||
107.357154, 128.135958, 128.135958, 122.941257, 116.014989, 121.209690,
|
||||
126.404391, 122.941257, 117.746556, 114.283422, 112.551855, 112.551855,
|
||||
114.283422, 114.283422, 116.014989, 116.014989, 116.014989, 116.014989,
|
||||
116.014989, 116.014989, 114.283422, 110.820288, 110.820288, 110.820288,
|
||||
110.820288,
|
||||
131.599092, 124.672824, 110.820288, 117.746556, 136.793793, 140.256927,
|
||||
138.525360, 138.525360, 102.162453, 117.746556, 103.894020, 102.162453,
|
||||
103.894020, 129.867525, 129.867525, 126.404391, 116.014989, 117.746556,
|
||||
126.404391, 124.672824, 117.746556, 114.283422, 112.551855, 109.088721,
|
||||
116.014989, 116.014989, 116.014989, 116.014989, 117.746556, 116.014989,
|
||||
116.014989, 114.283422, 112.551855, 110.820288, 112.551855, 112.551855,
|
||||
112.551855,
|
||||
136.793793, 124.672824, 109.088721, 114.283422, 126.404391, 138.525360,
|
||||
143.720061, 141.988494, 103.894020, 112.551855, 105.625587, 105.625587,
|
||||
103.894020, 114.283422, 129.867525, 129.867525, 112.551855, 121.209690,
|
||||
126.404391, 124.672824, 117.746556, 114.283422, 112.551855, 110.820288,
|
||||
117.746556, 116.014989, 117.746556, 117.746556, 117.746556, 116.014989,
|
||||
116.014989, 114.283422, 112.551855, 112.551855, 112.551855, 114.283422,
|
||||
112.551855,
|
||||
140.256927, 126.404391, 107.357154, 112.551855, 124.672824, 128.135958,
|
||||
141.988494, 147.183195, 114.283422, 102.162453, 107.357154, 103.894020,
|
||||
103.894020, 109.088721, 129.867525, 131.599092, 117.746556, 119.478123,
|
||||
124.672824, 124.672824, 117.746556, 114.283422, 114.283422, 112.551855,
|
||||
116.014989, 117.746556, 117.746556, 117.746556, 117.746556, 117.746556,
|
||||
114.283422, 114.283422, 110.820288, 114.283422, 112.551855, 114.283422,
|
||||
114.283422,
|
||||
145.451628, 128.135958, 110.820288, 110.820288, 121.209690, 122.941257,
|
||||
135.062226, 145.451628, 121.209690, 100.430886, 103.894020, 102.162453,
|
||||
102.162453, 109.088721, 129.867525, 138.525360, 126.404391, 116.014989,
|
||||
124.672824, 124.672824, 117.746556, 114.283422, 114.283422, 112.551855,
|
||||
114.283422, 117.746556, 117.746556, 117.746556, 117.746556, 117.746556,
|
||||
114.283422, 112.551855, 112.551855, 112.551855, 114.283422, 116.014989,
|
||||
117.746556,
|
||||
150.646329, 140.256927, 114.283422, 109.088721, 112.551855, 117.746556,
|
||||
131.599092, 131.599092, 129.867525, 102.162453, 100.430886, 102.162453,
|
||||
102.162453, 103.894020, 122.941257, 159.304164, 112.551855, 110.820288,
|
||||
128.135958, 124.672824, 119.478123, 116.014989, 112.551855, 112.551855,
|
||||
112.551855, 117.746556, 119.478123, 117.746556, 119.478123, 116.014989,
|
||||
112.551855, 112.551855, 112.551855, 112.551855, 116.014989, 117.746556,
|
||||
119.478123,
|
||||
148.914762, 148.914762, 126.404391, 110.820288, 107.357154, 116.014989,
|
||||
129.867525, 131.599092, 121.209690, 105.625587, 100.430886, 100.430886,
|
||||
102.162453, 103.894020, 140.256927, 117.746556, 102.162453, 109.088721,
|
||||
128.135958, 155.841030, 171.425133, 116.014989, 112.551855, 112.551855,
|
||||
110.820288, 116.014989, 117.746556, 117.746556, 117.746556, 116.014989,
|
||||
112.551855, 112.551855, 114.283422, 112.551855, 114.283422, 117.746556,
|
||||
117.746556,
|
||||
147.183195, 147.183195, 138.525360, 114.283422, 116.014989, 116.014989,
|
||||
140.256927, 128.135958, 107.357154, 109.088721, 102.162453, 100.430886,
|
||||
100.430886, 103.894020, 161.035731, 105.625587, 102.162453, 102.162453,
|
||||
117.746556, 199.130205, 131.599092, 116.014989, 114.283422, 110.820288,
|
||||
110.820288, 114.283422, 117.746556, 117.746556, 117.746556, 114.283422,
|
||||
112.551855, 112.551855, 114.283422, 112.551855, 110.820288, 112.551855,
|
||||
119.478123,
|
||||
155.841030, 150.646329, 143.720061, 122.941257, 128.135958, 133.330659,
|
||||
143.720061, 136.793793, 109.088721, 103.894020, 102.162453, 102.162453,
|
||||
100.430886, 100.430886, 155.841030, 105.625587, 102.162453, 102.162453,
|
||||
116.014989, 138.525360, 122.941257, 117.746556, 114.283422, 110.820288,
|
||||
109.088721, 109.088721, 117.746556, 117.746556, 117.746556, 114.283422,
|
||||
112.551855, 114.283422, 116.014989, 112.551855, 110.820288, 107.357154,
|
||||
150.646329,
|
||||
157.572597, 159.304164, 148.914762, 131.599092, 135.062226, 140.256927,
|
||||
147.183195, 141.988494, 116.014989, 102.162453, 102.162453, 102.162453,
|
||||
102.162453, 103.894020, 152.377896, 124.672824, 102.162453, 103.894020,
|
||||
128.135958, 138.525360, 121.209690, 116.014989, 114.283422, 110.820288,
|
||||
107.357154, 103.894020, 112.551855, 117.746556, 116.014989, 114.283422,
|
||||
112.551855, 116.014989, 114.283422, 110.820288, 107.357154, 102.162453,
|
||||
192.203937,
|
||||
145.451628, 145.451628, 150.646329, 147.183195, 150.646329, 147.183195,
|
||||
145.451628, 145.451628, 124.672824, 102.162453, 102.162453, 102.162453,
|
||||
102.162453, 102.162453, 126.404391, 122.941257, 107.357154, 102.162453,
|
||||
173.156700, 121.209690, 121.209690, 116.014989, 114.283422, 110.820288,
|
||||
103.894020, 100.430886, 100.430886, 116.014989, 117.746556, 114.283422,
|
||||
112.551855, 114.283422, 110.820288, 109.088721, 102.162453, 96.967752,
|
||||
226.835277,
|
||||
138.525360, 155.841030, 150.646329, 143.720061, 152.377896, 154.109463,
|
||||
145.451628, 143.720061, 131.599092, 110.820288, 102.162453, 102.162453,
|
||||
102.162453, 100.430886, 102.162453, 167.961999, 110.820288, 107.357154,
|
||||
122.941257, 117.746556, 121.209690, 126.404391, 114.283422, 109.088721,
|
||||
105.625587, 100.430886, 100.430886, 107.357154, 116.014989, 114.283422,
|
||||
110.820288, 112.551855, 109.088721, 109.088721, 105.625587, 98.699319,
|
||||
258.003483,
|
||||
148.914762, 157.572597, 159.304164, 150.646329, 147.183195, 152.377896,
|
||||
143.720061, 140.256927, 135.062226, 119.478123, 105.625587, 102.162453,
|
||||
102.162453, 102.162453, 102.162453, 105.625587, 143.720061, 124.672824,
|
||||
116.014989, 116.014989, 119.478123, 119.478123, 114.283422, 110.820288,
|
||||
105.625587, 124.672824, 96.967752, 98.699319, 110.820288, 110.820288,
|
||||
110.820288, 110.820288, 112.551855, 199.130205, 259.735050, 161.035731,
|
||||
261.466617,
|
||||
167.961999, 154.109463, 157.572597, 159.304164, 154.109463, 152.377896,
|
||||
128.135958, 138.525360, 135.062226, 122.941257, 112.551855, 102.162453,
|
||||
100.430886, 102.162453, 100.430886, 102.162453, 122.941257, 124.672824,
|
||||
116.014989, 121.209690, 121.209690, 119.478123, 116.014989, 110.820288,
|
||||
109.088721, 114.283422, 96.967752, 93.504618, 98.699319, 102.162453,
|
||||
110.820288, 150.646329, 240.687813, 280.513854, 277.050720, 221.640576,
|
||||
244.150947,
|
||||
162.767298, 166.230432, 167.961999, 162.767298, 154.109463, 141.988494,
|
||||
122.941257, 121.209690, 131.599092, 126.404391, 116.014989, 105.625587,
|
||||
102.162453, 102.162453, 100.430886, 102.162453, 105.625587, 122.941257,
|
||||
116.014989, 129.867525, 121.209690, 117.746556, 121.209690, 112.551855,
|
||||
109.088721, 109.088721, 102.162453, 96.967752, 93.504618, 95.236185,
|
||||
155.841030, 209.519607, 258.003483, 290.903256, 238.956246, 249.345648,
|
||||
271.856019,
|
||||
171.425133, 173.156700, 161.035731, 161.035731, 141.988494, 138.525360,
|
||||
121.209690, 107.357154, 121.209690, 124.672824, 116.014989, 109.088721,
|
||||
103.894020, 103.894020, 100.430886, 100.430886, 103.894020, 117.746556,
|
||||
121.209690, 121.209690, 119.478123, 117.746556, 136.793793, 117.746556,
|
||||
110.820288, 107.357154, 103.894020, 102.162453, 98.699319, 98.699319,
|
||||
152.377896, 207.788040, 261.466617, 280.513854, 266.661318, 258.003483,
|
||||
268.392885,
|
||||
178.351401, 171.425133, 164.498865, 162.767298, 145.451628, 126.404391,
|
||||
116.014989, 107.357154, 112.551855, 119.478123, 116.014989, 110.820288,
|
||||
109.088721, 110.820288, 109.088721, 102.162453, 103.894020, 112.551855,
|
||||
122.941257, 119.478123, 119.478123, 116.014989, 135.062226, 112.551855,
|
||||
109.088721, 105.625587, 102.162453, 105.625587, 103.894020, 117.746556,
|
||||
173.156700, 221.640576, 268.392885, 268.392885, 263.198184, 268.392885,
|
||||
283.976988,
|
||||
180.082968, 176.619834, 171.425133, 164.498865, 148.914762, 128.135958,
|
||||
116.014989, 105.625587, 105.625587, 114.283422, 112.551855, 109.088721,
|
||||
109.088721, 110.820288, 112.551855, 109.088721, 103.894020, 109.088721,
|
||||
121.209690, 119.478123, 116.014989, 116.014989, 116.014989, 112.551855,
|
||||
107.357154, 103.894020, 100.430886, 98.699319, 107.357154, 100.430886,
|
||||
122.941257, 202.593339, 259.735050, 266.661318, 271.856019, 268.392885,
|
||||
282.245421,
|
||||
180.082968, 174.888267, 171.425133, 157.572597, 145.451628, 128.135958,
|
||||
102.162453, 102.162453, 107.357154, 110.820288, 109.088721, 105.625587,
|
||||
107.357154, 110.820288, 110.820288, 110.820288, 105.625587, 103.894020,
|
||||
119.478123, 117.746556, 116.014989, 119.478123, 116.014989, 112.551855,
|
||||
107.357154, 102.162453, 100.430886, 98.699319, 98.699319, 96.967752,
|
||||
102.162453, 180.082968, 237.224679, 254.540349, 275.319153, 278.782287,
|
||||
273.587586,
|
||||
180.082968, 174.888267, 171.425133, 155.841030, 147.183195, 133.330659,
|
||||
103.894020, 98.699319, 103.894020, 107.357154, 107.357154, 107.357154,
|
||||
109.088721, 110.820288, 112.551855, 112.551855, 114.283422, 173.156700,
|
||||
116.014989, 116.014989, 119.478123, 119.478123, 116.014989, 112.551855,
|
||||
109.088721, 103.894020, 100.430886, 96.967752, 93.504618, 95.236185,
|
||||
96.967752, 133.330659, 211.251174, 245.882514, 287.440122, 271.856019,
|
||||
259.735050,
|
||||
180.082968, 174.888267, 167.961999, 159.304164, 133.330659, 136.793793,
|
||||
110.820288, 98.699319, 98.699319, 107.357154, 107.357154, 107.357154,
|
||||
110.820288, 112.551855, 114.283422, 112.551855, 199.130205, 238.956246,
|
||||
223.372143, 110.820288, 117.746556, 121.209690, 117.746556, 114.283422,
|
||||
110.820288, 103.894020, 100.430886, 96.967752, 91.773051, 91.773051,
|
||||
96.967752, 107.357154, 199.130205, 247.614081, 271.856019, 270.124452,
|
||||
275.319153
|
||||
};
|
||||
|
||||
const size_t array_double2_size = sizeof(array_double2);
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
63
tests/libtiff/test/test_arrays.h
Normal file
63
tests/libtiff/test/test_arrays.h
Normal file
@ -0,0 +1,63 @@
|
||||
/* $Id: test_arrays.h,v 1.3 2006/03/23 14:54:02 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Few declarations for the test numerical arrays.
|
||||
*/
|
||||
|
||||
#ifndef _TEST_ARRAYS_
|
||||
#define _TEST_ARRAYS_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#define XSIZE 37
|
||||
#define YSIZE 23
|
||||
|
||||
extern const unsigned char byte_array1[];
|
||||
extern const size_t byte_array1_size;
|
||||
|
||||
extern const unsigned char byte_array2[];
|
||||
extern const size_t byte_array2_size;
|
||||
|
||||
extern const unsigned char byte_array3[];
|
||||
extern const size_t byte_array3_size;
|
||||
|
||||
extern const float array_float1[];
|
||||
extern const size_t array_float1_size;
|
||||
|
||||
extern const float array_float2[];
|
||||
extern const size_t array_float2_size;
|
||||
|
||||
extern const double array_double1[];
|
||||
extern const size_t array_double1_size;
|
||||
|
||||
extern const double array_double2[];
|
||||
extern const size_t array_double2_size;
|
||||
|
||||
#endif /* _TEST_ARRAYS_ */
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
42
tests/libtiff/test/tifftest.h
Normal file
42
tests/libtiff/test/tifftest.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* $Id: tifftest.h,v 1.1 2008/04/15 14:18:36 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008, Andrey Kiselev <dron@ak4719.spb.edu>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIFFTEST_
|
||||
#define _TIFFTEST_
|
||||
|
||||
/*
|
||||
* TIFF Library
|
||||
*
|
||||
* Header file for helper testing routines.
|
||||
*/
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
int CheckShortField(TIFF *, const ttag_t, const uint16);
|
||||
int CheckShortPairedField(TIFF *, const ttag_t, const uint16*);
|
||||
int CheckLongField(TIFF *, const ttag_t, const uint32);
|
||||
|
||||
#endif /* _TIFFTEST_ */
|
||||
|
4
tests/libtiff/tif_config.h
Normal file
4
tests/libtiff/tif_config.h
Normal file
@ -0,0 +1,4 @@
|
||||
#include <tiffconf.h>
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_GETOPT 1
|
8
tests/libtiff/tools/CMakeLists.txt
Normal file
8
tests/libtiff/tools/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
find_package(TIFF REQUIRED)
|
||||
|
||||
include_directories(${TIFF_INCLUDES}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/.."
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../libtiff")
|
||||
|
||||
add_executable(thumbnail thumbnail.c)
|
||||
target_link_libraries(thumbnail m tiff)
|
691
tests/libtiff/tools/thumbnail.c
Normal file
691
tests/libtiff/tools/thumbnail.c
Normal file
@ -0,0 +1,691 @@
|
||||
/* $Id: thumbnail.c,v 1.21 2015-06-21 01:09:10 bfriesen Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994-1997 Sam Leffler
|
||||
* Copyright (c) 1994-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.
|
||||
*/
|
||||
|
||||
#include "tif_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef NEED_LIBPORT
|
||||
# include "libport.h"
|
||||
#endif
|
||||
|
||||
#include "tiffio.h"
|
||||
|
||||
#ifndef HAVE_GETOPT
|
||||
extern int getopt(int, char**, char*);
|
||||
#endif
|
||||
|
||||
#define streq(a,b) (strcmp(a,b) == 0)
|
||||
|
||||
#ifndef TIFFhowmany8
|
||||
# define TIFFhowmany8(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3)
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
EXP50,
|
||||
EXP60,
|
||||
EXP70,
|
||||
EXP80,
|
||||
EXP90,
|
||||
EXP,
|
||||
LINEAR
|
||||
} Contrast;
|
||||
|
||||
static uint32 tnw = 216; /* thumbnail width */
|
||||
static uint32 tnh = 274; /* thumbnail height */
|
||||
static Contrast contrast = LINEAR; /* current contrast */
|
||||
static uint8* thumbnail;
|
||||
|
||||
static int cpIFD(TIFF*, TIFF*);
|
||||
static int generateThumbnail(TIFF*, TIFF*);
|
||||
static void initScale();
|
||||
static void usage(void);
|
||||
|
||||
#if !HAVE_DECL_OPTARG
|
||||
extern char* optarg;
|
||||
extern int optind;
|
||||
#endif
|
||||
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
{
|
||||
TIFF* in;
|
||||
TIFF* out;
|
||||
int c;
|
||||
|
||||
while ((c = getopt(argc, argv, "w:h:c:")) != -1) {
|
||||
switch (c) {
|
||||
case 'w': tnw = strtoul(optarg, NULL, 0); break;
|
||||
case 'h': tnh = strtoul(optarg, NULL, 0); break;
|
||||
case 'c': contrast = streq(optarg, "exp50") ? EXP50 :
|
||||
streq(optarg, "exp60") ? EXP60 :
|
||||
streq(optarg, "exp70") ? EXP70 :
|
||||
streq(optarg, "exp80") ? EXP80 :
|
||||
streq(optarg, "exp90") ? EXP90 :
|
||||
streq(optarg, "exp") ? EXP :
|
||||
streq(optarg, "linear")? LINEAR :
|
||||
EXP;
|
||||
break;
|
||||
default: usage();
|
||||
}
|
||||
}
|
||||
if (argc-optind != 2)
|
||||
usage();
|
||||
|
||||
out = TIFFOpen(argv[optind+1], "w");
|
||||
if (out == NULL)
|
||||
return 2;
|
||||
in = TIFFOpen(argv[optind], "r");
|
||||
if( in == NULL )
|
||||
return 2;
|
||||
|
||||
thumbnail = (uint8*) _TIFFmalloc(tnw * tnh);
|
||||
if (!thumbnail) {
|
||||
TIFFError(TIFFFileName(in),
|
||||
"Can't allocate space for thumbnail buffer.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (in != NULL) {
|
||||
initScale();
|
||||
do {
|
||||
if (!generateThumbnail(in, out))
|
||||
goto bad;
|
||||
if (!cpIFD(in, out) || !TIFFWriteDirectory(out))
|
||||
goto bad;
|
||||
} while (TIFFReadDirectory(in));
|
||||
(void) TIFFClose(in);
|
||||
}
|
||||
(void) TIFFClose(out);
|
||||
return 0;
|
||||
bad:
|
||||
(void) TIFFClose(out);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define CopyField(tag, v) \
|
||||
if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v)
|
||||
#define CopyField2(tag, v1, v2) \
|
||||
if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2)
|
||||
#define CopyField3(tag, v1, v2, v3) \
|
||||
if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3)
|
||||
#define CopyField4(tag, v1, v2, v3, v4) \
|
||||
if (TIFFGetField(in, tag, &v1, &v2, &v3, &v4)) TIFFSetField(out, tag, v1, v2, v3, v4)
|
||||
|
||||
static void
|
||||
cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type)
|
||||
{
|
||||
switch (type) {
|
||||
case TIFF_SHORT:
|
||||
if (count == 1) {
|
||||
uint16 shortv;
|
||||
CopyField(tag, shortv);
|
||||
} else if (count == 2) {
|
||||
uint16 shortv1, shortv2;
|
||||
CopyField2(tag, shortv1, shortv2);
|
||||
} else if (count == 4) {
|
||||
uint16 *tr, *tg, *tb, *ta;
|
||||
CopyField4(tag, tr, tg, tb, ta);
|
||||
} else if (count == (uint16) -1) {
|
||||
uint16 shortv1;
|
||||
uint16* shortav;
|
||||
CopyField2(tag, shortv1, shortav);
|
||||
}
|
||||
break;
|
||||
case TIFF_LONG:
|
||||
{ uint32 longv;
|
||||
CopyField(tag, longv);
|
||||
}
|
||||
break;
|
||||
case TIFF_LONG8:
|
||||
{ uint64 longv8;
|
||||
CopyField(tag, longv8);
|
||||
}
|
||||
break;
|
||||
case TIFF_SLONG8:
|
||||
{ int64 longv8;
|
||||
CopyField(tag, longv8);
|
||||
}
|
||||
break;
|
||||
case TIFF_RATIONAL:
|
||||
if (count == 1) {
|
||||
float floatv;
|
||||
CopyField(tag, floatv);
|
||||
} else if (count == (uint16) -1) {
|
||||
float* floatav;
|
||||
CopyField(tag, floatav);
|
||||
}
|
||||
break;
|
||||
case TIFF_ASCII:
|
||||
{ char* stringv;
|
||||
CopyField(tag, stringv);
|
||||
}
|
||||
break;
|
||||
case TIFF_DOUBLE:
|
||||
if (count == 1) {
|
||||
double doublev;
|
||||
CopyField(tag, doublev);
|
||||
} else if (count == (uint16) -1) {
|
||||
double* doubleav;
|
||||
CopyField(tag, doubleav);
|
||||
}
|
||||
break;
|
||||
case TIFF_IFD8:
|
||||
{ toff_t ifd8;
|
||||
CopyField(tag, ifd8);
|
||||
}
|
||||
break; default:
|
||||
TIFFError(TIFFFileName(in),
|
||||
"Data type %d is not supported, tag %d skipped.",
|
||||
tag, type);
|
||||
}
|
||||
}
|
||||
|
||||
#undef CopyField4
|
||||
#undef CopyField3
|
||||
#undef CopyField2
|
||||
#undef CopyField
|
||||
|
||||
static struct cpTag {
|
||||
uint16 tag;
|
||||
uint16 count;
|
||||
TIFFDataType type;
|
||||
} tags[] = {
|
||||
{ TIFFTAG_IMAGEWIDTH, 1, TIFF_LONG },
|
||||
{ TIFFTAG_IMAGELENGTH, 1, TIFF_LONG },
|
||||
{ TIFFTAG_BITSPERSAMPLE, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_COMPRESSION, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_FILLORDER, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_SAMPLESPERPIXEL, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_ROWSPERSTRIP, 1, TIFF_LONG },
|
||||
{ TIFFTAG_PLANARCONFIG, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_GROUP3OPTIONS, 1, TIFF_LONG },
|
||||
{ TIFFTAG_SUBFILETYPE, 1, TIFF_LONG },
|
||||
{ TIFFTAG_PHOTOMETRIC, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_THRESHHOLDING, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_DOCUMENTNAME, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_IMAGEDESCRIPTION, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_MAKE, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_MODEL, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_ORIENTATION, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_MINSAMPLEVALUE, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_MAXSAMPLEVALUE, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_XRESOLUTION, 1, TIFF_RATIONAL },
|
||||
{ TIFFTAG_YRESOLUTION, 1, TIFF_RATIONAL },
|
||||
{ TIFFTAG_PAGENAME, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_XPOSITION, 1, TIFF_RATIONAL },
|
||||
{ TIFFTAG_YPOSITION, 1, TIFF_RATIONAL },
|
||||
{ TIFFTAG_GROUP4OPTIONS, 1, TIFF_LONG },
|
||||
{ TIFFTAG_RESOLUTIONUNIT, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_PAGENUMBER, 2, TIFF_SHORT },
|
||||
{ TIFFTAG_SOFTWARE, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_DATETIME, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_ARTIST, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_WHITEPOINT, 2, TIFF_RATIONAL },
|
||||
{ TIFFTAG_PRIMARYCHROMATICITIES, (uint16) -1,TIFF_RATIONAL },
|
||||
{ TIFFTAG_HALFTONEHINTS, 2, TIFF_SHORT },
|
||||
{ TIFFTAG_BADFAXLINES, 1, TIFF_LONG },
|
||||
{ TIFFTAG_CLEANFAXDATA, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_CONSECUTIVEBADFAXLINES, 1, TIFF_LONG },
|
||||
{ TIFFTAG_INKSET, 1, TIFF_SHORT },
|
||||
/*{ TIFFTAG_INKNAMES, 1, TIFF_ASCII },*/ /* Needs much more complicated logic. See tiffcp */
|
||||
{ TIFFTAG_DOTRANGE, 2, TIFF_SHORT },
|
||||
{ TIFFTAG_TARGETPRINTER, 1, TIFF_ASCII },
|
||||
{ TIFFTAG_SAMPLEFORMAT, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_YCBCRCOEFFICIENTS, (uint16) -1,TIFF_RATIONAL },
|
||||
{ TIFFTAG_YCBCRSUBSAMPLING, 2, TIFF_SHORT },
|
||||
{ TIFFTAG_YCBCRPOSITIONING, 1, TIFF_SHORT },
|
||||
{ TIFFTAG_REFERENCEBLACKWHITE, (uint16) -1,TIFF_RATIONAL },
|
||||
{ TIFFTAG_EXTRASAMPLES, (uint16) -1, TIFF_SHORT },
|
||||
};
|
||||
#define NTAGS (sizeof (tags) / sizeof (tags[0]))
|
||||
|
||||
static void
|
||||
cpTags(TIFF* in, TIFF* out)
|
||||
{
|
||||
struct cpTag *p;
|
||||
for (p = tags; p < &tags[NTAGS]; p++)
|
||||
{
|
||||
/* Horrible: but TIFFGetField() expects 2 arguments to be passed */
|
||||
/* if we request a tag that is defined in a codec, but that codec */
|
||||
/* isn't used */
|
||||
if( p->tag == TIFFTAG_GROUP3OPTIONS )
|
||||
{
|
||||
uint16 compression;
|
||||
if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
|
||||
compression != COMPRESSION_CCITTFAX3 )
|
||||
continue;
|
||||
}
|
||||
if( p->tag == TIFFTAG_GROUP4OPTIONS )
|
||||
{
|
||||
uint16 compression;
|
||||
if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
|
||||
compression != COMPRESSION_CCITTFAX4 )
|
||||
continue;
|
||||
}
|
||||
cpTag(in, out, p->tag, p->count, p->type);
|
||||
}
|
||||
}
|
||||
#undef NTAGS
|
||||
|
||||
static int
|
||||
cpStrips(TIFF* in, TIFF* out)
|
||||
{
|
||||
tsize_t bufsize = TIFFStripSize(in);
|
||||
unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize);
|
||||
|
||||
if (buf) {
|
||||
tstrip_t s, ns = TIFFNumberOfStrips(in);
|
||||
uint64 *bytecounts;
|
||||
|
||||
TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts);
|
||||
for (s = 0; s < ns; s++) {
|
||||
if (bytecounts[s] > (uint64) bufsize) {
|
||||
buf = (unsigned char *)_TIFFrealloc(buf, (tmsize_t)bytecounts[s]);
|
||||
if (!buf)
|
||||
goto bad;
|
||||
bufsize = (tmsize_t)bytecounts[s];
|
||||
}
|
||||
if (TIFFReadRawStrip(in, s, buf, (tmsize_t)bytecounts[s]) < 0 ||
|
||||
TIFFWriteRawStrip(out, s, buf, (tmsize_t)bytecounts[s]) < 0) {
|
||||
_TIFFfree(buf);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
_TIFFfree(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bad:
|
||||
TIFFError(TIFFFileName(in),
|
||||
"Can't allocate space for strip buffer.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
cpTiles(TIFF* in, TIFF* out)
|
||||
{
|
||||
tsize_t bufsize = TIFFTileSize(in);
|
||||
unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize);
|
||||
|
||||
if (buf) {
|
||||
ttile_t t, nt = TIFFNumberOfTiles(in);
|
||||
uint64 *bytecounts;
|
||||
|
||||
TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts);
|
||||
for (t = 0; t < nt; t++) {
|
||||
if (bytecounts[t] > (uint64) bufsize) {
|
||||
buf = (unsigned char *)_TIFFrealloc(buf, (tmsize_t)bytecounts[t]);
|
||||
if (!buf)
|
||||
goto bad;
|
||||
bufsize = (tmsize_t)bytecounts[t];
|
||||
}
|
||||
if (TIFFReadRawTile(in, t, buf, (tmsize_t)bytecounts[t]) < 0 ||
|
||||
TIFFWriteRawTile(out, t, buf, (tmsize_t)bytecounts[t]) < 0) {
|
||||
_TIFFfree(buf);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
_TIFFfree(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bad:
|
||||
TIFFError(TIFFFileName(in),
|
||||
"Can't allocate space for tile buffer.");
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
cpIFD(TIFF* in, TIFF* out)
|
||||
{
|
||||
cpTags(in, out);
|
||||
if (TIFFIsTiled(in)) {
|
||||
if (!cpTiles(in, out))
|
||||
return (0);
|
||||
} else {
|
||||
if (!cpStrips(in, out))
|
||||
return (0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
static uint16 photometric; /* current photometric of raster */
|
||||
static uint16 filterWidth; /* filter width in pixels */
|
||||
static uint32 stepSrcWidth; /* src image stepping width */
|
||||
static uint32 stepDstWidth; /* dest stepping width */
|
||||
static uint8* src0; /* horizontal bit stepping (start) */
|
||||
static uint8* src1; /* horizontal bit stepping (middle) */
|
||||
static uint8* src2; /* horizontal bit stepping (end) */
|
||||
static uint32* rowoff; /* row offset for stepping */
|
||||
static uint8 cmap[256]; /* colormap indexes */
|
||||
static uint8 bits[256]; /* count of bits set */
|
||||
|
||||
static void
|
||||
setupBitsTables()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 256; i++) {
|
||||
int n = 0;
|
||||
if (i&0x01) n++;
|
||||
if (i&0x02) n++;
|
||||
if (i&0x04) n++;
|
||||
if (i&0x08) n++;
|
||||
if (i&0x10) n++;
|
||||
if (i&0x20) n++;
|
||||
if (i&0x40) n++;
|
||||
if (i&0x80) n++;
|
||||
bits[i] = n;
|
||||
}
|
||||
}
|
||||
|
||||
static int clamp(float v, int low, int high)
|
||||
{ return (v < low ? low : v > high ? high : (int)v); }
|
||||
|
||||
#ifndef M_E
|
||||
#define M_E 2.7182818284590452354
|
||||
#endif
|
||||
|
||||
static void
|
||||
expFill(float pct[], uint32 p, uint32 n)
|
||||
{
|
||||
uint32 i;
|
||||
uint32 c = (p * n) / 100;
|
||||
for (i = 1; i < c; i++)
|
||||
pct[i] = (float) (1-exp(i/((double)(n-1)))/ M_E);
|
||||
for (; i < n; i++)
|
||||
pct[i] = 0.;
|
||||
}
|
||||
|
||||
static void
|
||||
setupCmap()
|
||||
{
|
||||
float pct[256]; /* known to be large enough */
|
||||
uint32 i;
|
||||
pct[0] = 1; /* force white */
|
||||
switch (contrast) {
|
||||
case EXP50: expFill(pct, 50, 256); break;
|
||||
case EXP60: expFill(pct, 60, 256); break;
|
||||
case EXP70: expFill(pct, 70, 256); break;
|
||||
case EXP80: expFill(pct, 80, 256); break;
|
||||
case EXP90: expFill(pct, 90, 256); break;
|
||||
case EXP: expFill(pct, 100, 256); break;
|
||||
case LINEAR:
|
||||
for (i = 1; i < 256; i++)
|
||||
pct[i] = 1-((float)i)/(256-1);
|
||||
break;
|
||||
}
|
||||
switch (photometric) {
|
||||
case PHOTOMETRIC_MINISWHITE:
|
||||
for (i = 0; i < 256; i++)
|
||||
cmap[i] = clamp(255*pct[(256-1)-i], 0, 255);
|
||||
break;
|
||||
case PHOTOMETRIC_MINISBLACK:
|
||||
for (i = 0; i < 256; i++)
|
||||
cmap[i] = clamp(255*pct[i], 0, 255);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
initScale()
|
||||
{
|
||||
src0 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw);
|
||||
src1 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw);
|
||||
src2 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw);
|
||||
rowoff = (uint32*) _TIFFmalloc(sizeof (uint32) * tnw);
|
||||
filterWidth = 0;
|
||||
stepDstWidth = stepSrcWidth = 0;
|
||||
setupBitsTables();
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the horizontal accumulation parameteres
|
||||
* according to the widths of the src and dst images.
|
||||
*/
|
||||
static void
|
||||
setupStepTables(uint32 sw)
|
||||
{
|
||||
if (stepSrcWidth != sw || stepDstWidth != tnw) {
|
||||
int step = sw;
|
||||
int limit = tnw;
|
||||
int err = 0;
|
||||
uint32 sx = 0;
|
||||
uint32 x;
|
||||
int fw;
|
||||
uint8 b;
|
||||
for (x = 0; x < tnw; x++) {
|
||||
uint32 sx0 = sx;
|
||||
err += step;
|
||||
while (err >= limit) {
|
||||
err -= limit;
|
||||
sx++;
|
||||
}
|
||||
rowoff[x] = sx0 >> 3;
|
||||
fw = sx - sx0; /* width */
|
||||
b = (fw < 8) ? 0xff<<(8-fw) : 0xff;
|
||||
src0[x] = b >> (sx0&7);
|
||||
fw -= 8 - (sx0&7);
|
||||
if (fw < 0)
|
||||
fw = 0;
|
||||
src1[x] = fw >> 3;
|
||||
fw -= (fw>>3)<<3;
|
||||
src2[x] = 0xff << (8-fw);
|
||||
}
|
||||
stepSrcWidth = sw;
|
||||
stepDstWidth = tnw;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
setrow(uint8* row, uint32 nrows, const uint8* rows[])
|
||||
{
|
||||
uint32 x;
|
||||
uint32 area = nrows * filterWidth;
|
||||
for (x = 0; x < tnw; x++) {
|
||||
uint32 mask0 = src0[x];
|
||||
uint32 fw = src1[x];
|
||||
uint32 mask1 = src1[x];
|
||||
uint32 off = rowoff[x];
|
||||
uint32 acc = 0;
|
||||
uint32 y, i;
|
||||
for (y = 0; y < nrows; y++) {
|
||||
const uint8* src = rows[y] + off;
|
||||
acc += bits[*src++ & mask0];
|
||||
switch (fw) {
|
||||
default:
|
||||
for (i = fw; i > 8; i--)
|
||||
acc += bits[*src++];
|
||||
/* fall thru... */
|
||||
case 8: acc += bits[*src++];
|
||||
case 7: acc += bits[*src++];
|
||||
case 6: acc += bits[*src++];
|
||||
case 5: acc += bits[*src++];
|
||||
case 4: acc += bits[*src++];
|
||||
case 3: acc += bits[*src++];
|
||||
case 2: acc += bits[*src++];
|
||||
case 1: acc += bits[*src++];
|
||||
case 0: break;
|
||||
}
|
||||
acc += bits[*src & mask1];
|
||||
}
|
||||
*row++ = cmap[(255*acc)/area];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Install the specified image. The
|
||||
* image is resized to fit the display page using
|
||||
* a box filter. The resultant pixels are mapped
|
||||
* with a user-selectable contrast curve.
|
||||
*/
|
||||
static void
|
||||
setImage1(const uint8* br, uint32 rw, uint32 rh)
|
||||
{
|
||||
int step = rh;
|
||||
int limit = tnh;
|
||||
int err = 0;
|
||||
int bpr = TIFFhowmany8(rw);
|
||||
int sy = 0;
|
||||
uint8* row = thumbnail;
|
||||
uint32 dy;
|
||||
for (dy = 0; dy < tnh; dy++) {
|
||||
const uint8* rows[256];
|
||||
uint32 nrows = 1;
|
||||
fprintf(stderr, "bpr=%d, sy=%d, bpr*sy=%d\n", bpr, sy, bpr*sy);
|
||||
rows[0] = br + bpr*sy;
|
||||
err += step;
|
||||
while (err >= limit) {
|
||||
err -= limit;
|
||||
sy++;
|
||||
if (err >= limit)
|
||||
{
|
||||
/* We should perhaps error loudly, but I can't make sense of that */
|
||||
/* code... */
|
||||
if( nrows == 256 )
|
||||
break;
|
||||
rows[nrows++] = br + bpr*sy;
|
||||
}
|
||||
}
|
||||
setrow(row, nrows, rows);
|
||||
row += tnw;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
setImage(const uint8* br, uint32 rw, uint32 rh)
|
||||
{
|
||||
filterWidth = (uint16) ceil((double) rw / (double) tnw);
|
||||
setupStepTables(rw);
|
||||
setImage1(br, rw, rh);
|
||||
}
|
||||
|
||||
static int
|
||||
generateThumbnail(TIFF* in, TIFF* out)
|
||||
{
|
||||
unsigned char* raster;
|
||||
unsigned char* rp;
|
||||
uint32 sw, sh, rps;
|
||||
uint16 bps, spp;
|
||||
tsize_t rowsize, rastersize;
|
||||
tstrip_t s, ns = TIFFNumberOfStrips(in);
|
||||
toff_t diroff[1];
|
||||
|
||||
TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &sw);
|
||||
TIFFGetField(in, TIFFTAG_IMAGELENGTH, &sh);
|
||||
TIFFGetFieldDefaulted(in, TIFFTAG_BITSPERSAMPLE, &bps);
|
||||
TIFFGetFieldDefaulted(in, TIFFTAG_SAMPLESPERPIXEL, &spp);
|
||||
TIFFGetFieldDefaulted(in, TIFFTAG_ROWSPERSTRIP, &rps);
|
||||
if (spp != 1 || bps != 1)
|
||||
return 0;
|
||||
rowsize = TIFFScanlineSize(in);
|
||||
rastersize = sh * rowsize;
|
||||
fprintf(stderr, "rastersize=%u\n", (unsigned int)rastersize);
|
||||
/* +3 : add a few guard bytes since setrow() can read a bit */
|
||||
/* outside buffer */
|
||||
raster = (unsigned char*)_TIFFmalloc(rastersize+3);
|
||||
if (!raster) {
|
||||
TIFFError(TIFFFileName(in),
|
||||
"Can't allocate space for raster buffer.");
|
||||
return 0;
|
||||
}
|
||||
raster[rastersize] = 0;
|
||||
raster[rastersize+1] = 0;
|
||||
raster[rastersize+2] = 0;
|
||||
rp = raster;
|
||||
for (s = 0; s < ns; s++) {
|
||||
(void) TIFFReadEncodedStrip(in, s, rp, -1);
|
||||
rp += rps * rowsize;
|
||||
}
|
||||
TIFFGetField(in, TIFFTAG_PHOTOMETRIC, &photometric);
|
||||
setupCmap();
|
||||
setImage(raster, sw, sh);
|
||||
_TIFFfree(raster);
|
||||
|
||||
TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_REDUCEDIMAGE);
|
||||
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) tnw);
|
||||
TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) tnh);
|
||||
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, (uint16) 8);
|
||||
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, (uint16) 1);
|
||||
TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS);
|
||||
TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
|
||||
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
|
||||
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
|
||||
cpTag(in, out, TIFFTAG_SOFTWARE, (uint16) -1, TIFF_ASCII);
|
||||
cpTag(in, out, TIFFTAG_IMAGEDESCRIPTION, (uint16) -1, TIFF_ASCII);
|
||||
cpTag(in, out, TIFFTAG_DATETIME, (uint16) -1, TIFF_ASCII);
|
||||
cpTag(in, out, TIFFTAG_HOSTCOMPUTER, (uint16) -1, TIFF_ASCII);
|
||||
diroff[0] = 0UL;
|
||||
TIFFSetField(out, TIFFTAG_SUBIFD, 1, diroff);
|
||||
return (TIFFWriteEncodedStrip(out, 0, thumbnail, tnw*tnh) != -1 &&
|
||||
TIFFWriteDirectory(out) != -1);
|
||||
}
|
||||
|
||||
char* stuff[] = {
|
||||
"usage: thumbnail [options] input.tif output.tif",
|
||||
"where options are:",
|
||||
" -h # specify thumbnail image height (default is 274)",
|
||||
" -w # specify thumbnail image width (default is 216)",
|
||||
"",
|
||||
" -c linear use linear contrast curve",
|
||||
" -c exp50 use 50% exponential contrast curve",
|
||||
" -c exp60 use 60% exponential contrast curve",
|
||||
" -c exp70 use 70% exponential contrast curve",
|
||||
" -c exp80 use 80% exponential contrast curve",
|
||||
" -c exp90 use 90% exponential contrast curve",
|
||||
" -c exp use pure exponential contrast curve",
|
||||
NULL
|
||||
};
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
int i;
|
||||
|
||||
setbuf(stderr, buf);
|
||||
fprintf(stderr, "%s\n\n", TIFFGetVersion());
|
||||
for (i = 0; stuff[i] != NULL; i++)
|
||||
fprintf(stderr, "%s\n", stuff[i]);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* vim: set ts=8 sts=8 sw=8 noet: */
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 8
|
||||
* fill-column: 78
|
||||
* End:
|
||||
*/
|
17
tests/tests.yml
Normal file
17
tests/tests.yml
Normal file
@ -0,0 +1,17 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-beakerlib
|
||||
tags:
|
||||
- atomic
|
||||
- classic
|
||||
- container
|
||||
tests:
|
||||
- upstream-test-suite
|
||||
required_packages:
|
||||
- libtiff
|
||||
- libtiff-tools
|
||||
- libtiff-devel
|
||||
- libjpeg-turbo-devel
|
||||
- gcc
|
||||
- make
|
||||
- cmake
|
29
tests/upstream-test-suite
Executable file
29
tests/upstream-test-suite
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
. /usr/share/beakerlib/beakerlib.sh
|
||||
|
||||
TEST="/AppStream/libtiff/Sanity/upstream-test-suite"
|
||||
|
||||
PACKAGES=${PACKAGES:-"libtiff"}
|
||||
REQUIRES=${REQUIRES:-"libtiff-tools libtiff-devel libjpeg-turbo-devel gcc make cmake"}
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup
|
||||
rlAssertRpm --all
|
||||
rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
|
||||
rlRun "cp -r libtiff/* $TmpDir/." 0 "Copying test suite"
|
||||
rlRun "pushd $TmpDir"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest
|
||||
rlRun "cmake ." 0 "Running cmake"
|
||||
rlRun "make" 0 "Compiling sources"
|
||||
rlRun "make test" 0 "Running tests"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup
|
||||
rlRun "popd"
|
||||
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||
rlPhaseEnd
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
Loading…
Reference in New Issue
Block a user