1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2006 Konstantin Shishkov
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14cabdff1aSopenharmony_ci * Lesser General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci/**
22cabdff1aSopenharmony_ci * @file
23cabdff1aSopenharmony_ci * TIFF constants & data structures
24cabdff1aSopenharmony_ci *
25cabdff1aSopenharmony_ci * For more information about the TIFF format, check the official docs at:
26cabdff1aSopenharmony_ci * http://partners.adobe.com/public/developer/tiff/index.html
27cabdff1aSopenharmony_ci * @author Konstantin Shishkov
28cabdff1aSopenharmony_ci */
29cabdff1aSopenharmony_ci
30cabdff1aSopenharmony_ci#ifndef AVCODEC_TIFF_H
31cabdff1aSopenharmony_ci#define AVCODEC_TIFF_H
32cabdff1aSopenharmony_ci
33cabdff1aSopenharmony_ci#include <stdint.h>
34cabdff1aSopenharmony_ci#include "tiff_common.h"
35cabdff1aSopenharmony_ci
36cabdff1aSopenharmony_ci/** TIFF types in ascenting priority (last in the list is highest) */
37cabdff1aSopenharmony_cienum TiffType {
38cabdff1aSopenharmony_ci    /** TIFF image based on the TIFF 6.0 or TIFF/EP (ISO 12234-2) specifications */
39cabdff1aSopenharmony_ci    TIFF_TYPE_TIFF,
40cabdff1aSopenharmony_ci    /** Digital Negative (DNG) image */
41cabdff1aSopenharmony_ci    TIFF_TYPE_DNG,
42cabdff1aSopenharmony_ci    /** Digital Negative (DNG) image part of an CinemaDNG image sequence */
43cabdff1aSopenharmony_ci    TIFF_TYPE_CINEMADNG,
44cabdff1aSopenharmony_ci};
45cabdff1aSopenharmony_ci
46cabdff1aSopenharmony_ci/** abridged list of TIFF and TIFF/EP tags */
47cabdff1aSopenharmony_cienum TiffTags {
48cabdff1aSopenharmony_ci    TIFF_SUBFILE            = 0xfe,
49cabdff1aSopenharmony_ci    TIFF_WIDTH              = 0x100,
50cabdff1aSopenharmony_ci    TIFF_HEIGHT,
51cabdff1aSopenharmony_ci    TIFF_BPP,
52cabdff1aSopenharmony_ci    TIFF_COMPR,
53cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC        = 0x106,
54cabdff1aSopenharmony_ci    TIFF_FILL_ORDER         = 0x10A,
55cabdff1aSopenharmony_ci    TIFF_DOCUMENT_NAME      = 0x10D,
56cabdff1aSopenharmony_ci    TIFF_IMAGE_DESCRIPTION  = 0x10E,
57cabdff1aSopenharmony_ci    TIFF_MAKE               = 0x10F,
58cabdff1aSopenharmony_ci    TIFF_MODEL              = 0x110,
59cabdff1aSopenharmony_ci    TIFF_STRIP_OFFS         = 0x111,
60cabdff1aSopenharmony_ci    TIFF_SAMPLES_PER_PIXEL  = 0x115,
61cabdff1aSopenharmony_ci    TIFF_ROWSPERSTRIP       = 0x116,
62cabdff1aSopenharmony_ci    TIFF_STRIP_SIZE,
63cabdff1aSopenharmony_ci    TIFF_XRES               = 0x11A,
64cabdff1aSopenharmony_ci    TIFF_YRES               = 0x11B,
65cabdff1aSopenharmony_ci    TIFF_PLANAR             = 0x11C,
66cabdff1aSopenharmony_ci    TIFF_PAGE_NAME          = 0x11D,
67cabdff1aSopenharmony_ci    TIFF_XPOS               = 0x11E,
68cabdff1aSopenharmony_ci    TIFF_YPOS               = 0x11F,
69cabdff1aSopenharmony_ci    TIFF_T4OPTIONS          = 0x124,
70cabdff1aSopenharmony_ci    TIFF_T6OPTIONS,
71cabdff1aSopenharmony_ci    TIFF_RES_UNIT           = 0x128,
72cabdff1aSopenharmony_ci    TIFF_PAGE_NUMBER        = 0x129,
73cabdff1aSopenharmony_ci    TIFF_SOFTWARE_NAME      = 0x131,
74cabdff1aSopenharmony_ci    TIFF_DATE               = 0x132,
75cabdff1aSopenharmony_ci    TIFF_ARTIST             = 0x13B,
76cabdff1aSopenharmony_ci    TIFF_HOST_COMPUTER      = 0x13C,
77cabdff1aSopenharmony_ci    TIFF_PREDICTOR          = 0x13D,
78cabdff1aSopenharmony_ci    TIFF_PAL                = 0x140,
79cabdff1aSopenharmony_ci    TIFF_TILE_WIDTH         = 0x142,
80cabdff1aSopenharmony_ci    TIFF_TILE_LENGTH        = 0x143,
81cabdff1aSopenharmony_ci    TIFF_TILE_OFFSETS       = 0x144,
82cabdff1aSopenharmony_ci    TIFF_TILE_BYTE_COUNTS   = 0x145,
83cabdff1aSopenharmony_ci    TIFF_SUB_IFDS           = 0x14A,
84cabdff1aSopenharmony_ci    TIFF_EXTRASAMPLES       = 0x152,
85cabdff1aSopenharmony_ci    TIFF_YCBCR_COEFFICIENTS = 0x211,
86cabdff1aSopenharmony_ci    TIFF_YCBCR_SUBSAMPLING  = 0x212,
87cabdff1aSopenharmony_ci    TIFF_YCBCR_POSITIONING  = 0x213,
88cabdff1aSopenharmony_ci    TIFF_REFERENCE_BW       = 0x214,
89cabdff1aSopenharmony_ci    TIFF_CFA_PATTERN_DIM    = 0x828D,
90cabdff1aSopenharmony_ci    TIFF_CFA_PATTERN        = 0x828E,
91cabdff1aSopenharmony_ci    TIFF_COPYRIGHT          = 0x8298,
92cabdff1aSopenharmony_ci    TIFF_MODEL_TIEPOINT     = 0x8482,
93cabdff1aSopenharmony_ci    TIFF_MODEL_PIXEL_SCALE  = 0x830E,
94cabdff1aSopenharmony_ci    TIFF_MODEL_TRANSFORMATION= 0x8480,
95cabdff1aSopenharmony_ci    TIFF_ICC_PROFILE        = 0x8773,
96cabdff1aSopenharmony_ci    TIFF_GEO_KEY_DIRECTORY  = 0x87AF,
97cabdff1aSopenharmony_ci    TIFF_GEO_DOUBLE_PARAMS  = 0x87B0,
98cabdff1aSopenharmony_ci    TIFF_GEO_ASCII_PARAMS   = 0x87B1,
99cabdff1aSopenharmony_ci};
100cabdff1aSopenharmony_ci
101cabdff1aSopenharmony_ci/** abridged list of DNG tags */
102cabdff1aSopenharmony_cienum DngTags {
103cabdff1aSopenharmony_ci    DNG_VERSION             = 0xC612,
104cabdff1aSopenharmony_ci    DNG_BACKWARD_VERSION    = 0xC613,
105cabdff1aSopenharmony_ci    DNG_LINEARIZATION_TABLE = 0xC618,
106cabdff1aSopenharmony_ci    DNG_BLACK_LEVEL         = 0xC61A,
107cabdff1aSopenharmony_ci    DNG_WHITE_LEVEL         = 0xC61D,
108cabdff1aSopenharmony_ci};
109cabdff1aSopenharmony_ci
110cabdff1aSopenharmony_ci/** list of CinemaDNG tags */
111cabdff1aSopenharmony_cienum CinemaDngTags {
112cabdff1aSopenharmony_ci    CINEMADNG_TIME_CODES    = 0xC763,
113cabdff1aSopenharmony_ci    CINEMADNG_FRAME_RATE    = 0xC764,
114cabdff1aSopenharmony_ci    CINEMADNG_T_STOP        = 0xC772,
115cabdff1aSopenharmony_ci    CINEMADNG_REEL_NAME     = 0xC789,
116cabdff1aSopenharmony_ci    CINEMADNG_CAMERA_LABEL  = 0xC7A1,
117cabdff1aSopenharmony_ci};
118cabdff1aSopenharmony_ci
119cabdff1aSopenharmony_ci/** list of TIFF, TIFF/EP and DNG compression types */
120cabdff1aSopenharmony_cienum TiffCompr {
121cabdff1aSopenharmony_ci    TIFF_RAW = 1,
122cabdff1aSopenharmony_ci    TIFF_CCITT_RLE,
123cabdff1aSopenharmony_ci    TIFF_G3,
124cabdff1aSopenharmony_ci    TIFF_G4,
125cabdff1aSopenharmony_ci    TIFF_LZW,
126cabdff1aSopenharmony_ci    TIFF_JPEG,
127cabdff1aSopenharmony_ci    TIFF_NEWJPEG,
128cabdff1aSopenharmony_ci    TIFF_ADOBE_DEFLATE,
129cabdff1aSopenharmony_ci    TIFF_PACKBITS = 0x8005,
130cabdff1aSopenharmony_ci    TIFF_DEFLATE  = 0x80B2,
131cabdff1aSopenharmony_ci    TIFF_LZMA     = 0x886D,
132cabdff1aSopenharmony_ci};
133cabdff1aSopenharmony_ci
134cabdff1aSopenharmony_cienum TiffGeoTagKey {
135cabdff1aSopenharmony_ci    TIFF_GT_MODEL_TYPE_GEOKEY                = 1024,
136cabdff1aSopenharmony_ci    TIFF_GT_RASTER_TYPE_GEOKEY               = 1025,
137cabdff1aSopenharmony_ci    TIFF_GT_CITATION_GEOKEY                  = 1026,
138cabdff1aSopenharmony_ci    TIFF_GEOGRAPHIC_TYPE_GEOKEY              = 2048,
139cabdff1aSopenharmony_ci    TIFF_GEOG_CITATION_GEOKEY                = 2049,
140cabdff1aSopenharmony_ci    TIFF_GEOG_GEODETIC_DATUM_GEOKEY          = 2050,
141cabdff1aSopenharmony_ci    TIFF_GEOG_PRIME_MERIDIAN_GEOKEY          = 2051,
142cabdff1aSopenharmony_ci    TIFF_GEOG_LINEAR_UNITS_GEOKEY            = 2052,
143cabdff1aSopenharmony_ci    TIFF_GEOG_LINEAR_UNIT_SIZE_GEOKEY        = 2053,
144cabdff1aSopenharmony_ci    TIFF_GEOG_ANGULAR_UNITS_GEOKEY           = 2054,
145cabdff1aSopenharmony_ci    TIFF_GEOG_ANGULAR_UNIT_SIZE_GEOKEY       = 2055,
146cabdff1aSopenharmony_ci    TIFF_GEOG_ELLIPSOID_GEOKEY               = 2056,
147cabdff1aSopenharmony_ci    TIFF_GEOG_SEMI_MAJOR_AXIS_GEOKEY         = 2057,
148cabdff1aSopenharmony_ci    TIFF_GEOG_SEMI_MINOR_AXIS_GEOKEY         = 2058,
149cabdff1aSopenharmony_ci    TIFF_GEOG_INV_FLATTENING_GEOKEY          = 2059,
150cabdff1aSopenharmony_ci    TIFF_GEOG_AZIMUTH_UNITS_GEOKEY           = 2060,
151cabdff1aSopenharmony_ci    TIFF_GEOG_PRIME_MERIDIAN_LONG_GEOKEY     = 2061,
152cabdff1aSopenharmony_ci    TIFF_PROJECTED_CS_TYPE_GEOKEY            = 3072,
153cabdff1aSopenharmony_ci    TIFF_PCS_CITATION_GEOKEY                 = 3073,
154cabdff1aSopenharmony_ci    TIFF_PROJECTION_GEOKEY                   = 3074,
155cabdff1aSopenharmony_ci    TIFF_PROJ_COORD_TRANS_GEOKEY             = 3075,
156cabdff1aSopenharmony_ci    TIFF_PROJ_LINEAR_UNITS_GEOKEY            = 3076,
157cabdff1aSopenharmony_ci    TIFF_PROJ_LINEAR_UNIT_SIZE_GEOKEY        = 3077,
158cabdff1aSopenharmony_ci    TIFF_PROJ_STD_PARALLEL1_GEOKEY           = 3078,
159cabdff1aSopenharmony_ci    TIFF_PROJ_STD_PARALLEL2_GEOKEY           = 3079,
160cabdff1aSopenharmony_ci    TIFF_PROJ_NAT_ORIGIN_LONG_GEOKEY         = 3080,
161cabdff1aSopenharmony_ci    TIFF_PROJ_NAT_ORIGIN_LAT_GEOKEY          = 3081,
162cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_EASTING_GEOKEY           = 3082,
163cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_NORTHING_GEOKEY          = 3083,
164cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_ORIGIN_LONG_GEOKEY       = 3084,
165cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_ORIGIN_LAT_GEOKEY        = 3085,
166cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_ORIGIN_EASTING_GEOKEY    = 3086,
167cabdff1aSopenharmony_ci    TIFF_PROJ_FALSE_ORIGIN_NORTHING_GEOKEY   = 3087,
168cabdff1aSopenharmony_ci    TIFF_PROJ_CENTER_LONG_GEOKEY             = 3088,
169cabdff1aSopenharmony_ci    TIFF_PROJ_CENTER_LAT_GEOKEY              = 3089,
170cabdff1aSopenharmony_ci    TIFF_PROJ_CENTER_EASTING_GEOKEY          = 3090,
171cabdff1aSopenharmony_ci    TIFF_PROJ_CENTER_NORTHING_GEOKEY         = 3091,
172cabdff1aSopenharmony_ci    TIFF_PROJ_SCALE_AT_NAT_ORIGIN_GEOKEY     = 3092,
173cabdff1aSopenharmony_ci    TIFF_PROJ_SCALE_AT_CENTER_GEOKEY         = 3093,
174cabdff1aSopenharmony_ci    TIFF_PROJ_AZIMUTH_ANGLE_GEOKEY           = 3094,
175cabdff1aSopenharmony_ci    TIFF_PROJ_STRAIGHT_VERT_POLE_LONG_GEOKEY = 3095,
176cabdff1aSopenharmony_ci    TIFF_VERTICAL_CS_TYPE_GEOKEY             = 4096,
177cabdff1aSopenharmony_ci    TIFF_VERTICAL_CITATION_GEOKEY            = 4097,
178cabdff1aSopenharmony_ci    TIFF_VERTICAL_DATUM_GEOKEY               = 4098,
179cabdff1aSopenharmony_ci    TIFF_VERTICAL_UNITS_GEOKEY               = 4099
180cabdff1aSopenharmony_ci};
181cabdff1aSopenharmony_ci
182cabdff1aSopenharmony_ci/** list of TIFF, TIFF/AP and DNG PhotometricInterpretation (TIFF_PHOTOMETRIC) values */
183cabdff1aSopenharmony_cienum TiffPhotometric {
184cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_NONE       = -1,
185cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_WHITE_IS_ZERO,      /* mono or grayscale, 0 is white */
186cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_BLACK_IS_ZERO,      /* mono or grayscale, 0 is black */
187cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_RGB,                /* RGB or RGBA*/
188cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_PALETTE,            /* Uses a palette */
189cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_ALPHA_MASK,         /* Transparency mask */
190cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_SEPARATED,          /* CMYK or some other ink set */
191cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_YCBCR,              /* YCbCr */
192cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_CIE_LAB    = 8,     /* 1976 CIE L*a*b* */
193cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_ICC_LAB,            /* ICC L*a*b* */
194cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_ITU_LAB,            /* ITU L*a*b* */
195cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_CFA        = 32803, /* Color Filter Array (TIFF/AP and DNG) */
196cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_LOG_L      = 32844, /* CIE Log2(L) */
197cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_LOG_LUV,            /* CIE Log L*u*v* */
198cabdff1aSopenharmony_ci    TIFF_PHOTOMETRIC_LINEAR_RAW = 34892, /* Linear Raw (DNG) */
199cabdff1aSopenharmony_ci};
200cabdff1aSopenharmony_ci
201cabdff1aSopenharmony_cienum TiffGeoTagType {
202cabdff1aSopenharmony_ci    GEOTIFF_SHORT  = 0,
203cabdff1aSopenharmony_ci    GEOTIFF_DOUBLE = 34736,
204cabdff1aSopenharmony_ci    GEOTIFF_STRING = 34737
205cabdff1aSopenharmony_ci};
206cabdff1aSopenharmony_ci
207cabdff1aSopenharmony_citypedef struct TiffGeoTag {
208cabdff1aSopenharmony_ci    enum TiffGeoTagKey key;
209cabdff1aSopenharmony_ci    enum TiffTags type;
210cabdff1aSopenharmony_ci    int count;
211cabdff1aSopenharmony_ci    int offset;
212cabdff1aSopenharmony_ci    char *val;
213cabdff1aSopenharmony_ci} TiffGeoTag;
214cabdff1aSopenharmony_ci
215cabdff1aSopenharmony_citypedef struct TiffGeoTagKeyName {
216cabdff1aSopenharmony_ci    const enum TiffGeoTagKey key;
217cabdff1aSopenharmony_ci    const char *const name;
218cabdff1aSopenharmony_ci} TiffGeoTagKeyName;
219cabdff1aSopenharmony_ci
220cabdff1aSopenharmony_citypedef struct TiffGeoTagNameType {
221cabdff1aSopenharmony_ci    const char *const name;
222cabdff1aSopenharmony_ci    const enum TiffGeoTagType type;
223cabdff1aSopenharmony_ci} TiffGeoTagNameType;
224cabdff1aSopenharmony_ci
225cabdff1aSopenharmony_ci#endif /* AVCODEC_TIFF_H */
226