Compare commits
No commits in common. "c8s-backport-test" and "c8" have entirely different histories.
c8s-backpo
...
c8
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1 @@
|
||||
SOURCES/tiff-4.0.9.tar.gz
|
||||
/tiff-4.0.9.tar.gz
|
||||
|
||||
1
.libtiff.metadata
Normal file
1
.libtiff.metadata
Normal file
@ -0,0 +1 @@
|
||||
87d4543579176cc568668617c22baceccd568296 SOURCES/tiff-4.0.9.tar.gz
|
||||
51
SOURCES/RHEL-112533.patch
Normal file
51
SOURCES/RHEL-112533.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From 3e164d0fa9c48dbdc76620442ffbb02de9e5724e Mon Sep 17 00:00:00 2001
|
||||
From: Su Laus <sulau@freenet.de>
|
||||
Date: Wed, 11 Jun 2025 19:45:19 +0000
|
||||
Subject: [PATCH] tif_getimage.c: Fix buffer underflow crash for less raster
|
||||
rows at TIFFReadRGBAImageOriented()
|
||||
|
||||
---
|
||||
libtiff/tif_getimage.c | 20 +++++++++++++++++---
|
||||
1 file changed, 17 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c
|
||||
index 4f32b3a..70a0362 100644
|
||||
--- a/libtiff/tif_getimage.c
|
||||
+++ b/libtiff/tif_getimage.c
|
||||
@@ -511,6 +511,22 @@ TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
|
||||
"No \"put\" routine setupl; probably can not handle image format");
|
||||
return (0);
|
||||
}
|
||||
+ /* Verify raster width and height against image width and height. */
|
||||
+ if (h > img->height)
|
||||
+ {
|
||||
+ /* Adapt parameters to read only available lines and put image at
|
||||
+ * the bottom of the raster. */
|
||||
+ raster += (size_t)(h - img->height) * w;
|
||||
+ h = img->height;
|
||||
+ }
|
||||
+ if (w > img->width)
|
||||
+ {
|
||||
+ TIFFWarningExt(img->tif->tif_clientdata, TIFFFileName(img->tif),
|
||||
+ "Raster width of %d shall not be larger than image "
|
||||
+ "width of %d -> raster width adapted for reading",
|
||||
+ w, img->width);
|
||||
+ w = img->width;
|
||||
+ }
|
||||
return (*img->get)(img, raster, w, h);
|
||||
}
|
||||
|
||||
@@ -529,9 +545,7 @@ TIFFReadRGBAImageOriented(TIFF* tif,
|
||||
|
||||
if (TIFFRGBAImageOK(tif, emsg) && TIFFRGBAImageBegin(&img, tif, stop, emsg)) {
|
||||
img.req_orientation = (uint16)orientation;
|
||||
- /* XXX verify rwidth and rheight against width and height */
|
||||
- ok = TIFFRGBAImageGet(&img, raster+(rheight-img.height)*rwidth,
|
||||
- rwidth, img.height);
|
||||
+ ok = TIFFRGBAImageGet(&img, raster, rwidth, rheight);
|
||||
TIFFRGBAImageEnd(&img);
|
||||
} else {
|
||||
TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", emsg);
|
||||
--
|
||||
2.47.3
|
||||
|
||||
70
SOURCES/RHEL-120230.patch
Normal file
70
SOURCES/RHEL-120230.patch
Normal file
@ -0,0 +1,70 @@
|
||||
From 0117a16f9c0b6e3462b8547fa56ea90f3e198b10 Mon Sep 17 00:00:00 2001
|
||||
From: Lee Howard <faxguy@howardsilvan.com>
|
||||
Date: Mon, 19 May 2025 10:53:30 -0700
|
||||
Subject: [PATCH] Don't skip the first line of the input image. Addresses issue
|
||||
#703
|
||||
|
||||
---
|
||||
tools/tiffdither.c | 4 ++--
|
||||
tools/tiffmedian.c | 9 ++++++---
|
||||
2 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/tiffdither.c b/tools/tiffdither.c
|
||||
index 247553c..cc41c51 100644
|
||||
--- a/tools/tiffdither.c
|
||||
+++ b/tools/tiffdither.c
|
||||
@@ -93,7 +93,7 @@ fsdither(TIFF* in, TIFF* out)
|
||||
nextptr = nextline;
|
||||
for (j = 0; j < imagewidth; ++j)
|
||||
*nextptr++ = *inptr++;
|
||||
- for (i = 1; i < imagelength; ++i) {
|
||||
+ for (i = 0; i < imagelength; ++i) {
|
||||
tmpptr = thisline;
|
||||
thisline = nextline;
|
||||
nextline = tmpptr;
|
||||
@@ -136,7 +136,7 @@ fsdither(TIFF* in, TIFF* out)
|
||||
nextptr[0] += v / 16;
|
||||
}
|
||||
}
|
||||
- if (TIFFWriteScanline(out, outline, i-1, 0) < 0)
|
||||
+ if (TIFFWriteScanline(out, outline, i, 0) < 0)
|
||||
goto skip_on_error;
|
||||
}
|
||||
goto exit_label;
|
||||
diff --git a/tools/tiffmedian.c b/tools/tiffmedian.c
|
||||
index f0c892e..99fd1f2 100644
|
||||
--- a/tools/tiffmedian.c
|
||||
+++ b/tools/tiffmedian.c
|
||||
@@ -370,7 +370,10 @@ get_histogram(TIFF* in, Colorbox* box)
|
||||
}
|
||||
for (i = 0; i < imagelength; i++) {
|
||||
if (TIFFReadScanline(in, inputline, i, 0) <= 0)
|
||||
- break;
|
||||
+ {
|
||||
+ fprintf(stderr, "Error reading scanline\n");
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
inptr = inputline;
|
||||
for (j = imagewidth; j-- > 0;) {
|
||||
red = (*inptr++) & 0xff >> COLOR_SHIFT;
|
||||
@@ -829,7 +832,7 @@ quant_fsdither(TIFF* in, TIFF* out)
|
||||
outline = (unsigned char *) _TIFFmalloc(TIFFScanlineSize(out));
|
||||
|
||||
GetInputLine(in, 0, goto bad); /* get first line */
|
||||
- for (i = 1; i <= imagelength; ++i) {
|
||||
+ for (i = 0; i < imagelength; ++i) {
|
||||
SWAP(short *, thisline, nextline);
|
||||
lastline = (i >= imax);
|
||||
if (i <= imax)
|
||||
@@ -900,7 +903,7 @@ quant_fsdither(TIFF* in, TIFF* out)
|
||||
nextptr += 3;
|
||||
}
|
||||
}
|
||||
- if (TIFFWriteScanline(out, outline, i-1, 0) < 0)
|
||||
+ if (TIFFWriteScanline(out, outline, i, 0) < 0)
|
||||
break;
|
||||
}
|
||||
bad:
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
Summary: Library of functions for manipulating TIFF format image files
|
||||
Name: libtiff
|
||||
Version: 4.0.9
|
||||
Release: 34%{?dist}
|
||||
Release: 36%{?dist}
|
||||
License: libtiff
|
||||
Group: System Environment/Libraries
|
||||
URL: http://www.simplesystems.org/libtiff/
|
||||
@ -63,6 +63,14 @@ Patch44: libtiff-4.6.0-CVE-2024-7006.patch
|
||||
# https://gitlab.com/libtiff/libtiff/-/commit/9171da596c88e6a2dadcab4a3a89dddd6e1b4655
|
||||
Patch45: libtiff-4.0.9-CVE-2017-17095.patch
|
||||
|
||||
# Fix buffer underflow crash for less raster rows at TIFFReadRGBAImageOriented(), RHEL-112533
|
||||
# CVE-2025-9900
|
||||
Patch46: RHEL-112533.patch
|
||||
|
||||
# Fix skipping first line of input image in tiffdither and tiffmedian, RHEL-120230
|
||||
# CVE-2025-8176
|
||||
Patch47: RHEL-120230.patch
|
||||
|
||||
BuildRequires: gcc, gcc-c++
|
||||
BuildRequires: zlib-devel libjpeg-devel jbigkit-devel
|
||||
BuildRequires: libtool automake autoconf pkgconfig
|
||||
@ -215,6 +223,14 @@ find html -name 'Makefile*' | xargs rm
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%changelog
|
||||
* Mon Nov 03 2025 RHEL Packaging Agent <jotnar@redhat.com> - 4.0.9-36
|
||||
- fix CVE-2025-8176: prevent skipping first line in tiffdither and
|
||||
tiffmedian tools (RHEL-120230)
|
||||
|
||||
* Tue Oct 14 2025 RHEL Packaging Agent <jotnar@redhat.com> - 4.0.9-35
|
||||
- fix CVE-2025-9900: buffer underflow crash in TIFFReadRGBAImageOriented()
|
||||
(RHEL-112533)
|
||||
|
||||
* Tue Apr 22 2025 Michal Hlavinka <mhlavink@redhat.com> - 4.0.9-34
|
||||
- fix CVE-2017-17095: heap-based buffer overflow in pal2rgb (RHEL-87363)
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
--- !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
1
sources
@ -1 +0,0 @@
|
||||
SHA512 (tiff-4.0.9.tar.gz) = 04f3d5eefccf9c1a0393659fe27f3dddd31108c401ba0dc587bca152a1c1f6bc844ba41622ff5572da8cc278593eff8c402b44e7af0a0090e91d326c2d79f6cd
|
||||
@ -1,8 +0,0 @@
|
||||
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)
|
||||
@ -1,8 +0,0 @@
|
||||
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
|
||||
@ -1,309 +0,0 @@
|
||||
/* $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:
|
||||
*/
|
||||
@ -1,451 +0,0 @@
|
||||
/* $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:
|
||||
*/
|
||||
@ -1,270 +0,0 @@
|
||||
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)
|
||||
@ -1,34 +0,0 @@
|
||||
# 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()
|
||||
@ -1,63 +0,0 @@
|
||||
# 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()
|
||||
@ -1,108 +0,0 @@
|
||||
# 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()
|
||||
@ -1,177 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,91 +0,0 @@
|
||||
/* $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;
|
||||
}
|
||||
|
||||
|
||||
@ -1,247 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,29 +0,0 @@
|
||||
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
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,156 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,304 +0,0 @@
|
||||
/* $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:
|
||||
*/
|
||||
@ -1,344 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,205 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,290 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,157 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,829 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,63 +0,0 @@
|
||||
/* $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: */
|
||||
@ -1,42 +0,0 @@
|
||||
/* $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_ */
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
#include <tiffconf.h>
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_GETOPT 1
|
||||
@ -1,8 +0,0 @@
|
||||
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)
|
||||
@ -1,691 +0,0 @@
|
||||
/* $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:
|
||||
*/
|
||||
@ -1,17 +0,0 @@
|
||||
- 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
|
||||
@ -1,29 +0,0 @@
|
||||
#!/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