Browse code

lavc/tiff: add GeoTIFF support to the TIFF decoder

Work done for SOCIS 2011.

See thread:
Subject: [libav-devel] [PATCH 2/3] tiff: Add GeoTIFF support to the TIFF decoder
Date: Tue, 4 Oct 2011 00:19:52 +0200

Signed-off-by: Stefano Sabatini <stefasab@gmail.com>

Thomas Kühnel authored on 2011/10/04 07:19:52
Showing 7 changed files
... ...
@@ -444,8 +444,8 @@ OBJS-$(CONFIG_TARGA_ENCODER)           += targaenc.o rle.o
444 444
 OBJS-$(CONFIG_THEORA_DECODER)          += xiph.o
445 445
 OBJS-$(CONFIG_THP_DECODER)             += mjpegdec.o mjpeg.o
446 446
 OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
447
-OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o faxcompr.o
448
-OBJS-$(CONFIG_TIFF_ENCODER)            += tiffenc.o rle.o lzwenc.o
447
+OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o faxcompr.o tiff_data.o
448
+OBJS-$(CONFIG_TIFF_ENCODER)            += tiffenc.o rle.o lzwenc.o tiff_data.o
449 449
 OBJS-$(CONFIG_TMV_DECODER)             += tmv.o cga_data.o
450 450
 OBJS-$(CONFIG_TRUEHD_DECODER)          += mlpdec.o mlpdsp.o
451 451
 OBJS-$(CONFIG_TRUEMOTION1_DECODER)     += truemotion1.o
... ...
@@ -30,10 +30,12 @@
30 30
 #endif
31 31
 #include "lzw.h"
32 32
 #include "tiff.h"
33
+#include "tiff_data.h"
33 34
 #include "faxcompr.h"
34 35
 #include "libavutil/common.h"
35 36
 #include "libavutil/intreadwrite.h"
36 37
 #include "libavutil/imgutils.h"
38
+#include "libavutil/avstring.h"
37 39
 
38 40
 typedef struct TiffContext {
39 41
     AVCodecContext *avctx;
... ...
@@ -56,6 +58,9 @@ typedef struct TiffContext {
56 56
     const uint8_t *stripsizes;
57 57
     int stripsize, stripoff;
58 58
     LZWState *lzw;
59
+
60
+    int geotag_count;
61
+    TiffGeoTag *geotags;
59 62
 } TiffContext;
60 63
 
61 64
 static unsigned tget_short(const uint8_t **p, int le)
... ...
@@ -72,6 +77,13 @@ static unsigned tget_long(const uint8_t **p, int le)
72 72
     return v;
73 73
 }
74 74
 
75
+static double tget_double(const uint8_t **p, int le)
76
+{
77
+    av_alias64 i = { .u64 = le ? AV_RL64(*p) : AV_RB64(*p)};
78
+    *p += 8;
79
+    return i.f64;
80
+}
81
+
75 82
 static unsigned tget(const uint8_t **p, int type, int le)
76 83
 {
77 84
     switch (type) {
... ...
@@ -82,6 +94,202 @@ static unsigned tget(const uint8_t **p, int type, int le)
82 82
     }
83 83
 }
84 84
 
85
+static void free_geotags(TiffContext *const s)
86
+{
87
+    int i;
88
+    for (i = 0; i < s->geotag_count; i++) {
89
+        if (s->geotags[i].val)
90
+            av_freep(&s->geotags[i].val);
91
+    }
92
+    av_freep(&s->geotags);
93
+}
94
+
95
+#define RET_GEOKEY(TYPE, array, element)\
96
+    if (key >= TIFF_##TYPE##_KEY_ID_OFFSET &&\
97
+        key - TIFF_##TYPE##_KEY_ID_OFFSET < FF_ARRAY_ELEMS(ff_tiff_##array##_name_type_map))\
98
+        return ff_tiff_##array##_name_type_map[key - TIFF_##TYPE##_KEY_ID_OFFSET].element;
99
+
100
+static const char *get_geokey_name(int key)
101
+{
102
+    RET_GEOKEY(VERT, vert, name);
103
+    RET_GEOKEY(PROJ, proj, name);
104
+    RET_GEOKEY(GEOG, geog, name);
105
+    RET_GEOKEY(CONF, conf, name);
106
+
107
+    return NULL;
108
+}
109
+
110
+static int get_geokey_type(int key)
111
+{
112
+    RET_GEOKEY(VERT, vert, type);
113
+    RET_GEOKEY(PROJ, proj, type);
114
+    RET_GEOKEY(GEOG, geog, type);
115
+    RET_GEOKEY(CONF, conf, type);
116
+
117
+    return AVERROR_INVALIDDATA;
118
+}
119
+
120
+static int cmp_id_key(const void *id, const void *k)
121
+{
122
+    return *(const int*)id - ((const TiffGeoTagKeyName*)k)->key;
123
+}
124
+
125
+static const char *search_keyval(const TiffGeoTagKeyName *keys, int n, int id)
126
+{
127
+    return ((TiffGeoTagKeyName*)bsearch(&id, keys, n, sizeof(keys[0]), cmp_id_key))->name;
128
+}
129
+
130
+static char *get_geokey_val(int key, int val)
131
+{
132
+    char *ap;
133
+
134
+    if (val == TIFF_GEO_KEY_UNDEFINED)
135
+        return av_strdup("undefined");
136
+    if (val == TIFF_GEO_KEY_USER_DEFINED)
137
+        return av_strdup("User-Defined");
138
+
139
+#define RET_GEOKEY_VAL(TYPE, array)\
140
+    if (val >= TIFF_##TYPE##_OFFSET &&\
141
+        val - TIFF_##TYPE##_OFFSET < FF_ARRAY_ELEMS(ff_tiff_##array##_codes))\
142
+        return av_strdup(ff_tiff_##array##_codes[val - TIFF_##TYPE##_OFFSET]);
143
+
144
+    switch (key) {
145
+    case TIFF_GT_MODEL_TYPE_GEOKEY:
146
+        RET_GEOKEY_VAL(GT_MODEL_TYPE, gt_model_type);
147
+        break;
148
+    case TIFF_GT_RASTER_TYPE_GEOKEY:
149
+        RET_GEOKEY_VAL(GT_RASTER_TYPE, gt_raster_type);
150
+        break;
151
+    case TIFF_GEOG_LINEAR_UNITS_GEOKEY:
152
+    case TIFF_PROJ_LINEAR_UNITS_GEOKEY:
153
+    case TIFF_VERTICAL_UNITS_GEOKEY:
154
+        RET_GEOKEY_VAL(LINEAR_UNIT, linear_unit);
155
+        break;
156
+    case TIFF_GEOG_ANGULAR_UNITS_GEOKEY:
157
+    case TIFF_GEOG_AZIMUTH_UNITS_GEOKEY:
158
+        RET_GEOKEY_VAL(ANGULAR_UNIT, angular_unit);
159
+        break;
160
+    case TIFF_GEOGRAPHIC_TYPE_GEOKEY:
161
+        RET_GEOKEY_VAL(GCS_TYPE, gcs_type);
162
+        RET_GEOKEY_VAL(GCSE_TYPE, gcse_type);
163
+        break;
164
+    case TIFF_GEOG_GEODETIC_DATUM_GEOKEY:
165
+        RET_GEOKEY_VAL(GEODETIC_DATUM, geodetic_datum);
166
+        RET_GEOKEY_VAL(GEODETIC_DATUM_E, geodetic_datum_e);
167
+        break;
168
+    case TIFF_GEOG_ELLIPSOID_GEOKEY:
169
+        RET_GEOKEY_VAL(ELLIPSOID, ellipsoid);
170
+        break;
171
+    case TIFF_GEOG_PRIME_MERIDIAN_GEOKEY:
172
+        RET_GEOKEY_VAL(PRIME_MERIDIAN, prime_meridian);
173
+        break;
174
+    case TIFF_PROJECTED_CS_TYPE_GEOKEY:
175
+        return av_strdup(search_keyval(ff_tiff_proj_cs_type_codes, FF_ARRAY_ELEMS(ff_tiff_proj_cs_type_codes), val));
176
+        break;
177
+    case TIFF_PROJECTION_GEOKEY:
178
+        return av_strdup(search_keyval(ff_tiff_projection_codes, FF_ARRAY_ELEMS(ff_tiff_projection_codes), val));
179
+        break;
180
+    case TIFF_PROJ_COORD_TRANS_GEOKEY:
181
+        RET_GEOKEY_VAL(COORD_TRANS, coord_trans);
182
+        break;
183
+    case TIFF_VERTICAL_CS_TYPE_GEOKEY:
184
+        RET_GEOKEY_VAL(VERT_CS, vert_cs);
185
+        RET_GEOKEY_VAL(ORTHO_VERT_CS, ortho_vert_cs);
186
+        break;
187
+
188
+    }
189
+
190
+    ap = av_malloc(14);
191
+    if (ap)
192
+        snprintf(ap, 14, "Unknown-%d", val);
193
+    return ap;
194
+}
195
+
196
+static char *doubles2str(double *dp, int count, const char *sep)
197
+{
198
+    int i;
199
+    char *ap, *ap0;
200
+    if (!sep) sep = ", ";
201
+    ap = av_malloc((15 + strlen(sep)) * count);
202
+    if (!ap)
203
+        return NULL;
204
+    ap0   = ap;
205
+    ap[0] = '\0';
206
+    for (i = 0; i < count; i++) {
207
+        int l = snprintf(ap, 15 + strlen(sep), "%f%s", dp[i], sep);
208
+        ap += l;
209
+    }
210
+    ap0[strlen(ap0) - strlen(sep)] = '\0';
211
+    return ap0;
212
+}
213
+
214
+static char *shorts2str(int *sp, int count, const char *sep)
215
+{
216
+    int i;
217
+    char *ap, *ap0;
218
+    if (!sep) sep = ", ";
219
+    ap = av_malloc((5 + strlen(sep)) * count);
220
+    if (!ap)
221
+        return NULL;
222
+    ap0   = ap;
223
+    ap[0] = '\0';
224
+    for (i = 0; i < count; i++) {
225
+        int l = snprintf(ap, 5 + strlen(sep), "%d%s", sp[i], sep);
226
+        ap += l;
227
+    }
228
+    ap0[strlen(ap0) - strlen(sep)] = '\0';
229
+    return ap0;
230
+}
231
+
232
+static int add_doubles_metadata(const uint8_t **buf, int count,
233
+                                const char *name, const char *sep,
234
+                                TiffContext *s)
235
+{
236
+    char *ap;
237
+    int i;
238
+    double *dp = av_malloc(count * sizeof(double));
239
+    if (!dp)
240
+        return AVERROR(ENOMEM);
241
+
242
+    for (i = 0; i < count; i++)
243
+        dp[i] = tget_double(buf, s->le);
244
+    ap = doubles2str(dp, count, sep);
245
+    av_freep(&dp);
246
+    if (!ap)
247
+        return AVERROR(ENOMEM);
248
+    av_dict_set(&s->picture.metadata, name, ap, AV_DICT_DONT_STRDUP_VAL);
249
+    return 0;
250
+}
251
+
252
+static int add_shorts_metadata(const uint8_t **buf, int count, const char *name,
253
+                               const char *sep, TiffContext *s)
254
+{
255
+    char *ap;
256
+    int i;
257
+    int *sp = av_malloc(count * sizeof(int));
258
+    if (!sp)
259
+        return AVERROR(ENOMEM);
260
+
261
+    for (i = 0; i < count; i++)
262
+        sp[i] = tget_short(buf, s->le);
263
+    ap = shorts2str(sp, count, sep);
264
+    av_freep(&sp);
265
+    if (!ap)
266
+        return AVERROR(ENOMEM);
267
+    av_dict_set(&s->picture.metadata, name, ap, AV_DICT_DONT_STRDUP_VAL);
268
+    return 0;
269
+}
270
+
271
+static int add_metadata(const uint8_t **buf, int count, int type,
272
+                        const char *name, const char *sep, TiffContext *s)
273
+{
274
+    switch(type) {
275
+    case TIFF_DOUBLE: return add_doubles_metadata(buf, count, name, sep, s);
276
+    case TIFF_SHORT : return add_shorts_metadata(buf, count, name, sep, s);
277
+    default         : return AVERROR_INVALIDDATA;
278
+    };
279
+}
280
+
85 281
 #if CONFIG_ZLIB
86 282
 static int tiff_uncompress(uint8_t *dst, unsigned long *len, const uint8_t *src,
87 283
                            int size)
... ...
@@ -372,8 +580,10 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
372 372
 {
373 373
     unsigned tag, type, count, off, value = 0;
374 374
     int i, j;
375
+    int ret;
375 376
     uint32_t *pal;
376 377
     const uint8_t *rp, *gp, *bp;
378
+    double *dp;
377 379
 
378 380
     if (end_buf - buf < 12)
379 381
         return -1;
... ...
@@ -608,6 +818,89 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start,
608 608
         if (s->compr == TIFF_G4)
609 609
             s->fax_opts = value;
610 610
         break;
611
+#define ADD_METADATA(count, name, sep)\
612
+    if (ret = add_metadata(&buf, count, type, name, sep, s) < 0) {\
613
+        av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");\
614
+        return ret;\
615
+    }
616
+    case TIFF_MODEL_PIXEL_SCALE:
617
+        ADD_METADATA(count, "ModelPixelScaleTag", NULL);
618
+        break;
619
+    case TIFF_MODEL_TRANSFORMATION:
620
+        ADD_METADATA(count, "ModelTransformationTag", NULL);
621
+        break;
622
+    case TIFF_MODEL_TIEPOINT:
623
+        ADD_METADATA(count, "ModelTiepointTag", NULL);
624
+        break;
625
+    case TIFF_GEO_KEY_DIRECTORY:
626
+        ADD_METADATA(1, "GeoTIFF_Version", NULL);
627
+        ADD_METADATA(2, "GeoTIFF_Key_Revision", ".");
628
+        s->geotag_count   = tget_short(&buf, s->le);
629
+        if (s->geotag_count > count / 4 - 1) {
630
+            s->geotag_count = count / 4 - 1;
631
+            av_log(s->avctx, AV_LOG_WARNING, "GeoTIFF key directory buffer shorter than specified\n");
632
+        }
633
+        s->geotags = av_mallocz(sizeof(TiffGeoTag) * s->geotag_count);
634
+        if (!s->geotags) {
635
+            av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
636
+            return AVERROR(ENOMEM);
637
+        }
638
+        for (i = 0; i < s->geotag_count; i++) {
639
+            s->geotags[i].key    = tget_short(&buf, s->le);
640
+            s->geotags[i].type   = tget_short(&buf, s->le);
641
+            s->geotags[i].count  = tget_short(&buf, s->le);
642
+
643
+            if (!s->geotags[i].type)
644
+                s->geotags[i].val  = get_geokey_val(s->geotags[i].key, tget_short(&buf, s->le));
645
+            else
646
+                s->geotags[i].offset = tget_short(&buf, s->le);
647
+        }
648
+        break;
649
+    case TIFF_GEO_DOUBLE_PARAMS:
650
+        dp = av_malloc(count * sizeof(double));
651
+        if (!dp) {
652
+            av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
653
+            return AVERROR(ENOMEM);
654
+        }
655
+        for (i = 0; i < count; i++)
656
+            dp[i] = tget_double(&buf, s->le);
657
+        for (i = 0; i < s->geotag_count; i++) {
658
+            if (s->geotags[i].type == TIFF_GEO_DOUBLE_PARAMS) {
659
+                if (s->geotags[i].count == 0
660
+                    || s->geotags[i].offset + s->geotags[i].count > count) {
661
+                    av_log(s->avctx, AV_LOG_WARNING, "Invalid GeoTIFF key %d\n", s->geotags[i].key);
662
+                } else {
663
+                    char *ap = doubles2str(&dp[s->geotags[i].offset], s->geotags[i].count, ", ");
664
+                    if (!ap) {
665
+                        av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
666
+                        av_freep(&dp);
667
+                        return AVERROR(ENOMEM);
668
+                    }
669
+                    s->geotags[i].val = ap;
670
+                }
671
+            }
672
+        }
673
+        av_freep(&dp);
674
+        break;
675
+    case TIFF_GEO_ASCII_PARAMS:
676
+        for (i = 0; i < s->geotag_count; i++) {
677
+            if (s->geotags[i].type == TIFF_GEO_ASCII_PARAMS) {
678
+                if (s->geotags[i].count == 0
679
+                    || s->geotags[i].offset +  s->geotags[i].count > count) {
680
+                    av_log(s->avctx, AV_LOG_WARNING, "Invalid GeoTIFF key %d\n", s->geotags[i].key);
681
+                } else {
682
+                    char *ap = av_malloc(s->geotags[i].count);
683
+                    if (!ap) {
684
+                        av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
685
+                        return AVERROR(ENOMEM);
686
+                    }
687
+                    memcpy(ap, &buf[s->geotags[i].offset], s->geotags[i].count);
688
+                    ap[s->geotags[i].count - 1] = '\0'; //replace the "|" delimiter with a 0 byte
689
+                    s->geotags[i].val = ap;
690
+                }
691
+            }
692
+        }
693
+        break;
611 694
     default:
612 695
         av_log(s->avctx, AV_LOG_DEBUG, "Unknown or unsupported tag %d/0X%0X\n",
613 696
                tag, tag);
... ...
@@ -648,6 +941,10 @@ static int decode_frame(AVCodecContext *avctx,
648 648
     s->invert = 0;
649 649
     s->compr = TIFF_RAW;
650 650
     s->fill_order = 0;
651
+    free_geotags(s);
652
+    /* free existing metadata */
653
+    av_dict_free(&s->picture.metadata);
654
+
651 655
     // As TIFF 6.0 specification puts it "An arbitrary but carefully chosen number
652 656
     // that further identifies the file as a TIFF file"
653 657
     if (tget_short(&buf, le) != 42) {
... ...
@@ -670,6 +967,24 @@ static int decode_frame(AVCodecContext *avctx,
670 670
             return -1;
671 671
         buf += 12;
672 672
     }
673
+
674
+    for (i = 0; i<s->geotag_count; i++) {
675
+        const char *keyname = get_geokey_name(s->geotags[i].key);
676
+        if (!keyname) {
677
+            av_log(avctx, AV_LOG_WARNING, "Unknown or unsupported GeoTIFF key %d\n", s->geotags[i].key);
678
+            continue;
679
+        }
680
+        if (get_geokey_type(s->geotags[i].key) != s->geotags[i].type) {
681
+            av_log(avctx, AV_LOG_WARNING, "Type of GeoTIFF key %d is wrong\n", s->geotags[i].key);
682
+            continue;
683
+        }
684
+        ret = av_dict_set(&s->picture.metadata, keyname, s->geotags[i].val, 0);
685
+        if (ret<0) {
686
+            av_log(avctx, AV_LOG_ERROR, "Writing metadata with key '%s' failed\n", keyname);
687
+            return ret;
688
+        }
689
+    }
690
+
673 691
     if (!s->stripdata && !s->stripoff) {
674 692
         av_log(avctx, AV_LOG_ERROR, "Image data is missing\n");
675 693
         return -1;
... ...
@@ -768,6 +1083,10 @@ static av_cold int tiff_end(AVCodecContext *avctx)
768 768
 {
769 769
     TiffContext *const s = avctx->priv_data;
770 770
 
771
+    free_geotags(s);
772
+    if (avctx->coded_frame && avctx->coded_frame->metadata)
773
+        av_dict_free(&avctx->coded_frame->metadata);
774
+
771 775
     ff_lzw_decode_close(&s->lzw);
772 776
     if (s->picture.data[0])
773 777
         avctx->release_buffer(avctx, &s->picture);
... ...
@@ -64,6 +64,12 @@ enum TiffTags{
64 64
     TIFF_YCBCR_SUBSAMPLING = 0x212,
65 65
     TIFF_YCBCR_POSITIONING = 0x213,
66 66
     TIFF_REFERENCE_BW = 0x214,
67
+    TIFF_MODEL_TIEPOINT = 0x8482,
68
+    TIFF_MODEL_PIXEL_SCALE = 0x830E,
69
+    TIFF_MODEL_TRANSFORMATION = 0x8480,
70
+    TIFF_GEO_KEY_DIRECTORY = 0x87AF,
71
+    TIFF_GEO_DOUBLE_PARAMS = 0x87B0,
72
+    TIFF_GEO_ASCII_PARAMS = 0x87B1
67 73
 };
68 74
 
69 75
 /** list of TIFF compression types */
... ...
@@ -86,11 +92,91 @@ enum TiffTypes{
86 86
     TIFF_SHORT,
87 87
     TIFF_LONG,
88 88
     TIFF_RATIONAL,
89
+    TIFF_SBYTE,
90
+    TIFF_UNDEFINED,
91
+    TIFF_SSHORT,
92
+    TIFF_SLONG,
93
+    TIFF_SRATIONAL,
94
+    TIFF_FLOAT,
95
+    TIFF_DOUBLE,
96
+    TIFF_IFD
97
+};
98
+
99
+enum TiffGeoTagKey {
100
+    TIFF_GT_MODEL_TYPE_GEOKEY                = 1024,
101
+    TIFF_GT_RASTER_TYPE_GEOKEY               = 1025,
102
+    TIFF_GT_CITATION_GEOKEY                  = 1026,
103
+    TIFF_GEOGRAPHIC_TYPE_GEOKEY              = 2048,
104
+    TIFF_GEOG_CITATION_GEOKEY                = 2049,
105
+    TIFF_GEOG_GEODETIC_DATUM_GEOKEY          = 2050,
106
+    TIFF_GEOG_PRIME_MERIDIAN_GEOKEY          = 2051,
107
+    TIFF_GEOG_LINEAR_UNITS_GEOKEY            = 2052,
108
+    TIFF_GEOG_LINEAR_UNIT_SIZE_GEOKEY        = 2053,
109
+    TIFF_GEOG_ANGULAR_UNITS_GEOKEY           = 2054,
110
+    TIFF_GEOG_ANGULAR_UNIT_SIZE_GEOKEY       = 2055,
111
+    TIFF_GEOG_ELLIPSOID_GEOKEY               = 2056,
112
+    TIFF_GEOG_SEMI_MAJOR_AXIS_GEOKEY         = 2057,
113
+    TIFF_GEOG_SEMI_MINOR_AXIS_GEOKEY         = 2058,
114
+    TIFF_GEOG_INV_FLATTENING_GEOKEY          = 2059,
115
+    TIFF_GEOG_AZIMUTH_UNITS_GEOKEY           = 2060,
116
+    TIFF_GEOG_PRIME_MERIDIAN_LONG_GEOKEY     = 2061,
117
+    TIFF_PROJECTED_CS_TYPE_GEOKEY            = 3072,
118
+    TIFF_PCS_CITATION_GEOKEY                 = 3073,
119
+    TIFF_PROJECTION_GEOKEY                   = 3074,
120
+    TIFF_PROJ_COORD_TRANS_GEOKEY             = 3075,
121
+    TIFF_PROJ_LINEAR_UNITS_GEOKEY            = 3076,
122
+    TIFF_PROJ_LINEAR_UNIT_SIZE_GEOKEY        = 3077,
123
+    TIFF_PROJ_STD_PARALLEL1_GEOKEY           = 3078,
124
+    TIFF_PROJ_STD_PARALLEL2_GEOKEY           = 3079,
125
+    TIFF_PROJ_NAT_ORIGIN_LONG_GEOKEY         = 3080,
126
+    TIFF_PROJ_NAT_ORIGIN_LAT_GEOKEY          = 3081,
127
+    TIFF_PROJ_FALSE_EASTING_GEOKEY           = 3082,
128
+    TIFF_PROJ_FALSE_NORTHING_GEOKEY          = 3083,
129
+    TIFF_PROJ_FALSE_ORIGIN_LONG_GEOKEY       = 3084,
130
+    TIFF_PROJ_FALSE_ORIGIN_LAT_GEOKEY        = 3085,
131
+    TIFF_PROJ_FALSE_ORIGIN_EASTING_GEOKEY    = 3086,
132
+    TIFF_PROJ_FALSE_ORIGIN_NORTHING_GEOKEY   = 3087,
133
+    TIFF_PROJ_CENTER_LONG_GEOKEY             = 3088,
134
+    TIFF_PROJ_CENTER_LAT_GEOKEY              = 3089,
135
+    TIFF_PROJ_CENTER_EASTING_GEOKEY          = 3090,
136
+    TIFF_PROJ_CENTER_NORTHING_GEOKEY         = 3091,
137
+    TIFF_PROJ_SCALE_AT_NAT_ORIGIN_GEOKEY     = 3092,
138
+    TIFF_PROJ_SCALE_AT_CENTER_GEOKEY         = 3093,
139
+    TIFF_PROJ_AZIMUTH_ANGLE_GEOKEY           = 3094,
140
+    TIFF_PROJ_STRAIGHT_VERT_POLE_LONG_GEOKEY = 3095,
141
+    TIFF_VERTICAL_CS_TYPE_GEOKEY             = 4096,
142
+    TIFF_VERTICAL_CITATION_GEOKEY            = 4097,
143
+    TIFF_VERTICAL_DATUM_GEOKEY               = 4098,
144
+    TIFF_VERTICAL_UNITS_GEOKEY               = 4099
145
+};
146
+
147
+enum TiffGeoTagType {
148
+    GEOTIFF_SHORT  = 0,
149
+    GEOTIFF_DOUBLE = 34736,
150
+    GEOTIFF_STRING = 34737
89 151
 };
90 152
 
91 153
 /** sizes of various TIFF field types (string size = 100)*/
92
-static const uint8_t type_sizes[6] = {
93
-    0, 1, 100, 2, 4, 8
154
+static const uint8_t type_sizes[14] = {
155
+    0, 1, 100, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
94 156
 };
95 157
 
158
+typedef struct TiffGeoTag {
159
+    enum TiffGeoTagKey key;
160
+    enum TiffTags type;
161
+    int count;
162
+    int offset;
163
+    char *val;
164
+} TiffGeoTag;
165
+
166
+typedef struct TiffGeoTagKeyName {
167
+    const enum TiffGeoTagKey key;
168
+    const char *const name;
169
+} TiffGeoTagKeyName;
170
+
171
+typedef struct TiffGeoTagNameType {
172
+    const char *const name;
173
+    const enum TiffGeoTagType type;
174
+} TiffGeoTagNameType;
175
+
96 176
 #endif /* AVCODEC_TIFF_H */
97 177
new file mode 100644
... ...
@@ -0,0 +1,1870 @@
0
+/*
1
+ * TIFF data tables
2
+ * Copyright (c) 2011 Thomas Kuehnel
3
+ *
4
+ * This file is part of Libav.
5
+ *
6
+ * Libav is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * Libav is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with Libav; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+/**
22
+ * @file
23
+ * TIFF data tables
24
+ * @author Thomas Kuehnel
25
+ * @see GeoTIFF specification at
26
+ * http://www.remotesensing.org/geotiff/spec/geotiffhome.html
27
+ */
28
+
29
+#include "tiff_data.h"
30
+
31
+const TiffGeoTagNameType ff_tiff_conf_name_type_map[] = {
32
+    {"GTModelTypeGeoKey",              GEOTIFF_SHORT },
33
+    {"GTRasterTypeGeoKey",             GEOTIFF_SHORT },
34
+    {"GTCitationGeoKey",               GEOTIFF_STRING}
35
+};
36
+
37
+const TiffGeoTagNameType ff_tiff_geog_name_type_map[] = {
38
+    {"GeographicTypeGeoKey",           GEOTIFF_SHORT },
39
+    {"GeogCitationGeoKey",             GEOTIFF_STRING},
40
+    {"GeogGeodeticDatumGeoKey",        GEOTIFF_SHORT },
41
+    {"GeogPrimeMeridianGeoKey",        GEOTIFF_SHORT },
42
+    {"GeogLinearUnitsGeoKey",          GEOTIFF_SHORT },
43
+    {"GeogLinearUnitSizeGeoKey",       GEOTIFF_DOUBLE},
44
+    {"GeogAngularUnitsGeoKey",         GEOTIFF_SHORT },
45
+    {"GeogAngularUnitSizeGeoKey",      GEOTIFF_DOUBLE},
46
+    {"GeogEllipsoidGeoKey",            GEOTIFF_SHORT },
47
+    {"GeogSemiMajorAxisGeoKey",        GEOTIFF_DOUBLE},
48
+    {"GeogSemiMinorAxisGeoKey",        GEOTIFF_DOUBLE},
49
+    {"GeogInvFlatteningGeoKey",        GEOTIFF_DOUBLE},
50
+    {"GeogAzimuthUnitsGeoKey",         GEOTIFF_SHORT },
51
+    {"GeogPrimeMeridianLongGeoKey",    GEOTIFF_DOUBLE}
52
+};
53
+
54
+const TiffGeoTagNameType ff_tiff_proj_name_type_map[] = {
55
+    {"ProjectedCSTypeGeoKey",          GEOTIFF_SHORT },
56
+    {"PCSCitationGeoKey",              GEOTIFF_STRING},
57
+    {"ProjectionGeoKey",               GEOTIFF_SHORT },
58
+    {"ProjCoordTransGeoKey",           GEOTIFF_SHORT },
59
+    {"ProjLinearUnitsGeoKey",          GEOTIFF_SHORT },
60
+    {"ProjLinearUnitSizeGeoKey",       GEOTIFF_DOUBLE},
61
+    {"ProjStdParallel1GeoKey",         GEOTIFF_DOUBLE},
62
+    {"ProjStdParallel2GeoKey",         GEOTIFF_DOUBLE},
63
+    {"ProjNatOriginLongGeoKey",        GEOTIFF_DOUBLE},
64
+    {"ProjNatOriginLatGeoKey",         GEOTIFF_DOUBLE},
65
+    {"ProjFalseEastingGeoKey",         GEOTIFF_DOUBLE},
66
+    {"ProjFalseNorthingGeoKey",        GEOTIFF_DOUBLE},
67
+    {"ProjFalseOriginLongGeoKey",      GEOTIFF_DOUBLE},
68
+    {"ProjFalseOriginLatGeoKey",       GEOTIFF_DOUBLE},
69
+    {"ProjFalseOriginEastingGeoKey",   GEOTIFF_DOUBLE},
70
+    {"ProjFalseOriginNorthingGeoKey",  GEOTIFF_DOUBLE},
71
+    {"ProjCenterLongGeoKey",           GEOTIFF_DOUBLE},
72
+    {"ProjCenterLatGeoKey",            GEOTIFF_DOUBLE},
73
+    {"ProjCenterEastingGeoKey",        GEOTIFF_DOUBLE},
74
+    {"ProjCenterNorthingGeoKey",       GEOTIFF_DOUBLE},
75
+    {"ProjScaleAtNatOriginGeoKey",     GEOTIFF_DOUBLE},
76
+    {"ProjScaleAtCenterGeoKey",        GEOTIFF_DOUBLE},
77
+    {"ProjAzimuthAngleGeoKey",         GEOTIFF_DOUBLE},
78
+    {"ProjStraightVertPoleLongGeoKey", GEOTIFF_DOUBLE}
79
+};
80
+
81
+const TiffGeoTagNameType ff_tiff_vert_name_type_map[] = {
82
+    {"VerticalCSTypeGeoKey",           GEOTIFF_SHORT },
83
+    {"VerticalCitationGeoKey",         GEOTIFF_STRING},
84
+    {"VerticalDatumGeoKey",            GEOTIFF_SHORT },
85
+    {"VerticalUnitsGeoKey",            GEOTIFF_SHORT }
86
+};
87
+
88
+const char *const ff_tiff_gt_model_type_codes[] = {
89
+    "ModelTypeProjected",
90
+    "ModelTypeGeographic",
91
+    "ModelTypeGeocentric"
92
+};
93
+
94
+const char *const ff_tiff_gt_raster_type_codes[] = {
95
+    "RasterPixelIsArea",
96
+    "RasterPixelIsPoint"
97
+};
98
+
99
+const char *const ff_tiff_linear_unit_codes[] = {
100
+    "Linear_Meter",
101
+    "Linear_Foot",
102
+    "Linear_Foot_US_Survey",
103
+    "Linear_Foot_Modified_American",
104
+    "Linear_Foot_Clarke",
105
+    "Linear_Foot_Indian",
106
+    "Linear_Link",
107
+    "Linear_Link_Benoit",
108
+    "Linear_Link_Sears",
109
+    "Linear_Chain_Benoit",
110
+    "Linear_Chain_Sears",
111
+    "Linear_Yard_Sears",
112
+    "Linear_Yard_Indian",
113
+    "Linear_Fathom",
114
+    "Linear_Mile_International_Nautical"
115
+};
116
+
117
+const char *const ff_tiff_angular_unit_codes[] = {
118
+    "Angular_Radian",
119
+    "Angular_Degree",
120
+    "Angular_Arc_Minute",
121
+    "Angular_Arc_Second",
122
+    "Angular_Grad",
123
+    "Angular_Gon",
124
+    "Angular_DMS",
125
+    "Angular_DMS_Hemisphere"
126
+};
127
+
128
+const char *const ff_tiff_gcs_type_codes[] = {
129
+    "GCS_Adindan",
130
+    "GCS_AGD66",
131
+    "GCS_AGD84",
132
+    "GCS_Ain_el_Abd",
133
+    "GCS_Afgooye",
134
+    "GCS_Agadez",
135
+    "GCS_Lisbon",
136
+    "GCS_Aratu",
137
+    "GCS_Arc_1950",
138
+    "GCS_Arc_1960",
139
+    "GCS_Batavia",
140
+    "GCS_Barbados",
141
+    "GCS_Beduaram",
142
+    "GCS_Beijing_1954",
143
+    "GCS_Belge_1950",
144
+    "GCS_Bermuda_1957",
145
+    "GCS_Bern_1898",
146
+    "GCS_Bogota",
147
+    "GCS_Bukit_Rimpah",
148
+    "GCS_Camacupa",
149
+    "GCS_Campo_Inchauspe",
150
+    "GCS_Cape",
151
+    "GCS_Carthage",
152
+    "GCS_Chua",
153
+    "GCS_Corrego_Alegre",
154
+    "GCS_Cote_d_Ivoire",
155
+    "GCS_Deir_ez_Zor",
156
+    "GCS_Douala",
157
+    "GCS_Egypt_1907",
158
+    "GCS_ED50",
159
+    "GCS_ED87",
160
+    "GCS_Fahud",
161
+    "GCS_Gandajika_1970",
162
+    "GCS_Garoua",
163
+    "GCS_Guyane_Francaise",
164
+    "GCS_Hu_Tzu_Shan",
165
+    "GCS_HD72",
166
+    "GCS_ID74",
167
+    "GCS_Indian_1954",
168
+    "GCS_Indian_1975",
169
+    "GCS_Jamaica_1875",
170
+    "GCS_JAD69",
171
+    "GCS_Kalianpur",
172
+    "GCS_Kandawala",
173
+    "GCS_Kertau",
174
+    "GCS_KOC",
175
+    "GCS_La_Canoa",
176
+    "GCS_PSAD56",
177
+    "GCS_Lake",
178
+    "GCS_Leigon",
179
+    "GCS_Liberia_1964",
180
+    "GCS_Lome",
181
+    "GCS_Luzon_1911",
182
+    "GCS_Hito_XVIII_1963",
183
+    "GCS_Herat_North",
184
+    "GCS_Mahe_1971",
185
+    "GCS_Makassar",
186
+    "GCS_EUREF89",
187
+    "GCS_Malongo_1987",
188
+    "GCS_Manoca",
189
+    "GCS_Merchich",
190
+    "GCS_Massawa",
191
+    "GCS_Minna",
192
+    "GCS_Mhast",
193
+    "GCS_Monte_Mario",
194
+    "GCS_M_poraloko",
195
+    "GCS_NAD27",
196
+    "GCS_NAD_Michigan",
197
+    "GCS_NAD83",
198
+    "GCS_Nahrwan_1967",
199
+    "GCS_Naparima_1972",
200
+    "GCS_GD49",
201
+    "GCS_NGO_1948",
202
+    "GCS_Datum_73",
203
+    "GCS_NTF",
204
+    "GCS_NSWC_9Z_2",
205
+    "GCS_OSGB_1936",
206
+    "GCS_OSGB70",
207
+    "GCS_OS_SN80",
208
+    "GCS_Padang",
209
+    "GCS_Palestine_1923",
210
+    "GCS_Pointe_Noire",
211
+    "GCS_GDA94",
212
+    "GCS_Pulkovo_1942",
213
+    "GCS_Qatar",
214
+    "GCS_Qatar_1948",
215
+    "GCS_Qornoq",
216
+    "GCS_Loma_Quintana",
217
+    "GCS_Amersfoort",
218
+    "GCS_RT38",
219
+    "GCS_SAD69",
220
+    "GCS_Sapper_Hill_1943",
221
+    "GCS_Schwarzeck",
222
+    "GCS_Segora",
223
+    "GCS_Serindung",
224
+    "GCS_Sudan",
225
+    "GCS_Tananarive",
226
+    "GCS_Timbalai_1948",
227
+    "GCS_TM65",
228
+    "GCS_TM75",
229
+    "GCS_Tokyo",
230
+    "GCS_Trinidad_1903",
231
+    "GCS_TC_1948",
232
+    "GCS_Voirol_1875",
233
+    "GCS_Voirol_Unifie",
234
+    "GCS_Bern_1938",
235
+    "GCS_Nord_Sahara_1959",
236
+    "GCS_Stockholm_1938",
237
+    "GCS_Yacare",
238
+    "GCS_Yoff",
239
+    "GCS_Zanderij",
240
+    "GCS_MGI",
241
+    "GCS_Belge_1972",
242
+    "GCS_DHDN",
243
+    "GCS_Conakry_1905",
244
+    "GCS_WGS_72",
245
+    "GCS_WGS_72BE",
246
+    "GCS_WGS_84",
247
+    "GCS_Bern_1898_Bern",
248
+    "GCS_Bogota_Bogota",
249
+    "GCS_Lisbon_Lisbon",
250
+    "GCS_Makassar_Jakarta",
251
+    "GCS_MGI_Ferro",
252
+    "GCS_Monte_Mario_Rome",
253
+    "GCS_NTF_Paris",
254
+    "GCS_Padang_Jakarta",
255
+    "GCS_Belge_1950_Brussels",
256
+    "GCS_Tananarive_Paris",
257
+    "GCS_Voirol_1875_Paris",
258
+    "GCS_Voirol_Unifie_Paris",
259
+    "GCS_Batavia_Jakarta",
260
+    "GCS_ATF_Paris",
261
+    "GCS_NDG_Paris"
262
+};
263
+
264
+const char *const ff_tiff_gcse_type_codes[] = {
265
+    "GCSE_Airy1830",
266
+    "GCSE_AiryModified1849",
267
+    "GCSE_AustralianNationalSpheroid",
268
+    "GCSE_Bessel1841",
269
+    "GCSE_BesselModified",
270
+    "GCSE_BesselNamibia",
271
+    "GCSE_Clarke1858",
272
+    "GCSE_Clarke1866",
273
+    "GCSE_Clarke1866Michigan",
274
+    "GCSE_Clarke1880_Benoit",
275
+    "GCSE_Clarke1880_IGN",
276
+    "GCSE_Clarke1880_RGS",
277
+    "GCSE_Clarke1880_Arc",
278
+    "GCSE_Clarke1880_SGA1922",
279
+    "GCSE_Everest1830_1937Adjustment",
280
+    "GCSE_Everest1830_1967Definition",
281
+    "GCSE_Everest1830_1975Definition",
282
+    "GCSE_Everest1830Modified",
283
+    "GCSE_GRS1980",
284
+    "GCSE_Helmert1906",
285
+    "GCSE_IndonesianNationalSpheroid",
286
+    "GCSE_International1924",
287
+    "GCSE_International1967",
288
+    "GCSE_Krassowsky1940",
289
+    "GCSE_NWL9D",
290
+    "GCSE_NWL10D",
291
+    "GCSE_Plessis1817",
292
+    "GCSE_Struve1860",
293
+    "GCSE_WarOffice",
294
+    "GCSE_WGS84",
295
+    "GCSE_GEM10C",
296
+    "GCSE_OSU86F",
297
+    "GCSE_OSU91A",
298
+    "GCSE_Clarke1880",
299
+    "GCSE_Sphere"
300
+};
301
+
302
+const char *const ff_tiff_geodetic_datum_codes[] = {
303
+    "Datum_Adindan",
304
+    "Datum_Australian_Geodetic_Datum_1966",
305
+    "Datum_Australian_Geodetic_Datum_1984",
306
+    "Datum_Ain_el_Abd_1970",
307
+    "Datum_Afgooye",
308
+    "Datum_Agadez",
309
+    "Datum_Lisbon",
310
+    "Datum_Aratu",
311
+    "Datum_Arc_1950",
312
+    "Datum_Arc_1960",
313
+    "Datum_Batavia",
314
+    "Datum_Barbados",
315
+    "Datum_Beduaram",
316
+    "Datum_Beijing_1954",
317
+    "Datum_Reseau_National_Belge_1950",
318
+    "Datum_Bermuda_1957",
319
+    "Datum_Bern_1898",
320
+    "Datum_Bogota",
321
+    "Datum_Bukit_Rimpah",
322
+    "Datum_Camacupa",
323
+    "Datum_Campo_Inchauspe",
324
+    "Datum_Cape",
325
+    "Datum_Carthage",
326
+    "Datum_Chua",
327
+    "Datum_Corrego_Alegre",
328
+    "Datum_Cote_d_Ivoire",
329
+    "Datum_Deir_ez_Zor",
330
+    "Datum_Douala",
331
+    "Datum_Egypt_1907",
332
+    "Datum_European_Datum_1950",
333
+    "Datum_European_Datum_1987",
334
+    "Datum_Fahud",
335
+    "Datum_Gandajika_1970",
336
+    "Datum_Garoua",
337
+    "Datum_Guyane_Francaise",
338
+    "Datum_Hu_Tzu_Shan",
339
+    "Datum_Hungarian_Datum_1972",
340
+    "Datum_Indonesian_Datum_1974",
341
+    "Datum_Indian_1954",
342
+    "Datum_Indian_1975",
343
+    "Datum_Jamaica_1875",
344
+    "Datum_Jamaica_1969",
345
+    "Datum_Kalianpur",
346
+    "Datum_Kandawala",
347
+    "Datum_Kertau",
348
+    "Datum_Kuwait_Oil_Company",
349
+    "Datum_La_Canoa",
350
+    "Datum_Provisional_S_American_Datum_1956",
351
+    "Datum_Lake",
352
+    "Datum_Leigon",
353
+    "Datum_Liberia_1964",
354
+    "Datum_Lome",
355
+    "Datum_Luzon_1911",
356
+    "Datum_Hito_XVIII_1963",
357
+    "Datum_Herat_North",
358
+    "Datum_Mahe_1971",
359
+    "Datum_Makassar",
360
+    "Datum_European_Reference_System_1989",
361
+    "Datum_Malongo_1987",
362
+    "Datum_Manoca",
363
+    "Datum_Merchich",
364
+    "Datum_Massawa",
365
+    "Datum_Minna",
366
+    "Datum_Mhast",
367
+    "Datum_Monte_Mario",
368
+    "Datum_M_poraloko",
369
+    "Datum_North_American_Datum_1927",
370
+    "Datum_NAD_Michigan",
371
+    "Datum_North_American_Datum_1983",
372
+    "Datum_Nahrwan_1967",
373
+    "Datum_Naparima_1972",
374
+    "Datum_New_Zealand_Geodetic_Datum_1949",
375
+    "Datum_NGO_1948",
376
+    "Datum_Datum_73",
377
+    "Datum_Nouvelle_Triangulation_Francaise",
378
+    "Datum_NSWC_9Z_2",
379
+    "Datum_OSGB_1936",
380
+    "Datum_OSGB_1970_SN",
381
+    "Datum_OS_SN_1980",
382
+    "Datum_Padang_1884",
383
+    "Datum_Palestine_1923",
384
+    "Datum_Pointe_Noire",
385
+    "Datum_Geocentric_Datum_of_Australia_1994",
386
+    "Datum_Pulkovo_1942",
387
+    "Datum_Qatar",
388
+    "Datum_Qatar_1948",
389
+    "Datum_Qornoq",
390
+    "Datum_Loma_Quintana",
391
+    "Datum_Amersfoort",
392
+    "Datum_RT38",
393
+    "Datum_South_American_Datum_1969",
394
+    "Datum_Sapper_Hill_1943",
395
+    "Datum_Schwarzeck",
396
+    "Datum_Segora",
397
+    "Datum_Serindung",
398
+    "Datum_Sudan",
399
+    "Datum_Tananarive_1925",
400
+    "Datum_Timbalai_1948",
401
+    "Datum_TM65",
402
+    "Datum_TM75",
403
+    "Datum_Tokyo",
404
+    "Datum_Trinidad_1903",
405
+    "Datum_Trucial_Coast_1948",
406
+    "Datum_Voirol_1875",
407
+    "Datum_Voirol_Unifie_1960",
408
+    "Datum_Bern_1938",
409
+    "Datum_Nord_Sahara_1959",
410
+    "Datum_Stockholm_1938",
411
+    "Datum_Yacare",
412
+    "Datum_Yoff",
413
+    "Datum_Zanderij",
414
+    "Datum_Militar_Geographische_Institut",
415
+    "Datum_Reseau_National_Belge_1972",
416
+    "Datum_Deutsche_Hauptdreiecksnetz",
417
+    "Datum_Conakry_1905",
418
+    "Datum_WGS72",
419
+    "Datum_WGS72_Transit_Broadcast_Ephemeris",
420
+    "Datum_WGS84",
421
+    "Datum_Ancienne_Triangulation_Francaise",
422
+    "Datum_Nord_de_Guerre"
423
+};
424
+
425
+const char *const ff_tiff_geodetic_datum_e_codes[] = {
426
+    "DatumE_Airy1830",
427
+    "DatumE_AiryModified1849",
428
+    "DatumE_AustralianNationalSpheroid",
429
+    "DatumE_Bessel1841",
430
+    "DatumE_BesselModified",
431
+    "DatumE_BesselNamibia",
432
+    "DatumE_Clarke1858",
433
+    "DatumE_Clarke1866",
434
+    "DatumE_Clarke1866Michigan",
435
+    "DatumE_Clarke1880_Benoit",
436
+    "DatumE_Clarke1880_IGN",
437
+    "DatumE_Clarke1880_RGS",
438
+    "DatumE_Clarke1880_Arc",
439
+    "DatumE_Clarke1880_SGA1922",
440
+    "DatumE_Everest1830_1937Adjustment",
441
+    "DatumE_Everest1830_1967Definition",
442
+    "DatumE_Everest1830_1975Definition",
443
+    "DatumE_Everest1830Modified",
444
+    "DatumE_GRS1980",
445
+    "DatumE_Helmert1906",
446
+    "DatumE_IndonesianNationalSpheroid",
447
+    "DatumE_International1924",
448
+    "DatumE_International1967",
449
+    "DatumE_Krassowsky1960",
450
+    "DatumE_NWL9D",
451
+    "DatumE_NWL10D",
452
+    "DatumE_Plessis1817",
453
+    "DatumE_Struve1860",
454
+    "DatumE_WarOffice",
455
+    "DatumE_WGS84",
456
+    "DatumE_GEM10C",
457
+    "DatumE_OSU86F",
458
+    "DatumE_OSU91A",
459
+    "DatumE_Clarke1880",
460
+    "DatumE_Sphere"
461
+};
462
+
463
+const char *const ff_tiff_ellipsoid_codes[] = {
464
+    "Ellipse_Airy_1830",
465
+    "Ellipse_Airy_Modified_1849",
466
+    "Ellipse_Australian_National_Spheroid",
467
+    "Ellipse_Bessel_1841",
468
+    "Ellipse_Bessel_Modified",
469
+    "Ellipse_Bessel_Namibia",
470
+    "Ellipse_Clarke_1858",
471
+    "Ellipse_Clarke_1866",
472
+    "Ellipse_Clarke_1866_Michigan",
473
+    "Ellipse_Clarke_1880_Benoit",
474
+    "Ellipse_Clarke_1880_IGN",
475
+    "Ellipse_Clarke_1880_RGS",
476
+    "Ellipse_Clarke_1880_Arc",
477
+    "Ellipse_Clarke_1880_SGA_1922",
478
+    "Ellipse_Everest_1830_1937_Adjustment",
479
+    "Ellipse_Everest_1830_1967_Definition",
480
+    "Ellipse_Everest_1830_1975_Definition",
481
+    "Ellipse_Everest_1830_Modified",
482
+    "Ellipse_GRS_1980",
483
+    "Ellipse_Helmert_1906",
484
+    "Ellipse_Indonesian_National_Spheroid",
485
+    "Ellipse_International_1924",
486
+    "Ellipse_International_1967",
487
+    "Ellipse_Krassowsky_1940",
488
+    "Ellipse_NWL_9D",
489
+    "Ellipse_NWL_10D",
490
+    "Ellipse_Plessis_1817",
491
+    "Ellipse_Struve_1860",
492
+    "Ellipse_War_Office",
493
+    "Ellipse_WGS_84",
494
+    "Ellipse_GEM_10C",
495
+    "Ellipse_OSU86F",
496
+    "Ellipse_OSU91A",
497
+    "Ellipse_Clarke_1880",
498
+    "Ellipse_Sphere"
499
+};
500
+
501
+const char *const ff_tiff_prime_meridian_codes[] = {
502
+    "PM_Greenwich",
503
+    "PM_Lisbon",
504
+    "PM_Paris",
505
+    "PM_Bogota",
506
+    "PM_Madrid",
507
+    "PM_Rome",
508
+    "PM_Bern",
509
+    "PM_Jakarta",
510
+    "PM_Ferro",
511
+    "PM_Brussels",
512
+    "PM_Stockholm"
513
+};
514
+
515
+const TiffGeoTagKeyName ff_tiff_proj_cs_type_codes[] = {
516
+    {20137, "PCS_Adindan_UTM_zone_37N"},
517
+    {20138, "PCS_Adindan_UTM_zone_38N"},
518
+    {20248, "PCS_AGD66_AMG_zone_48"},
519
+    {20249, "PCS_AGD66_AMG_zone_49"},
520
+    {20250, "PCS_AGD66_AMG_zone_50"},
521
+    {20251, "PCS_AGD66_AMG_zone_51"},
522
+    {20252, "PCS_AGD66_AMG_zone_52"},
523
+    {20253, "PCS_AGD66_AMG_zone_53"},
524
+    {20254, "PCS_AGD66_AMG_zone_54"},
525
+    {20255, "PCS_AGD66_AMG_zone_55"},
526
+    {20256, "PCS_AGD66_AMG_zone_56"},
527
+    {20257, "PCS_AGD66_AMG_zone_57"},
528
+    {20258, "PCS_AGD66_AMG_zone_58"},
529
+    {20348, "PCS_AGD84_AMG_zone_48"},
530
+    {20349, "PCS_AGD84_AMG_zone_49"},
531
+    {20350, "PCS_AGD84_AMG_zone_50"},
532
+    {20351, "PCS_AGD84_AMG_zone_51"},
533
+    {20352, "PCS_AGD84_AMG_zone_52"},
534
+    {20353, "PCS_AGD84_AMG_zone_53"},
535
+    {20354, "PCS_AGD84_AMG_zone_54"},
536
+    {20355, "PCS_AGD84_AMG_zone_55"},
537
+    {20356, "PCS_AGD84_AMG_zone_56"},
538
+    {20357, "PCS_AGD84_AMG_zone_57"},
539
+    {20358, "PCS_AGD84_AMG_zone_58"},
540
+    {20437, "PCS_Ain_el_Abd_UTM_zone_37N"},
541
+    {20438, "PCS_Ain_el_Abd_UTM_zone_38N"},
542
+    {20439, "PCS_Ain_el_Abd_UTM_zone_39N"},
543
+    {20499, "PCS_Ain_el_Abd_Bahrain_Grid"},
544
+    {20538, "PCS_Afgooye_UTM_zone_38N"},
545
+    {20539, "PCS_Afgooye_UTM_zone_39N"},
546
+    {20700, "PCS_Lisbon_Portugese_Grid"},
547
+    {20822, "PCS_Aratu_UTM_zone_22S"},
548
+    {20823, "PCS_Aratu_UTM_zone_23S"},
549
+    {20824, "PCS_Aratu_UTM_zone_24S"},
550
+    {20973, "PCS_Arc_1950_Lo13"},
551
+    {20975, "PCS_Arc_1950_Lo15"},
552
+    {20977, "PCS_Arc_1950_Lo17"},
553
+    {20979, "PCS_Arc_1950_Lo19"},
554
+    {20981, "PCS_Arc_1950_Lo21"},
555
+    {20983, "PCS_Arc_1950_Lo23"},
556
+    {20985, "PCS_Arc_1950_Lo25"},
557
+    {20987, "PCS_Arc_1950_Lo27"},
558
+    {20989, "PCS_Arc_1950_Lo29"},
559
+    {20991, "PCS_Arc_1950_Lo31"},
560
+    {20993, "PCS_Arc_1950_Lo33"},
561
+    {20995, "PCS_Arc_1950_Lo35"},
562
+    {21100, "PCS_Batavia_NEIEZ"},
563
+    {21148, "PCS_Batavia_UTM_zone_48S"},
564
+    {21149, "PCS_Batavia_UTM_zone_49S"},
565
+    {21150, "PCS_Batavia_UTM_zone_50S"},
566
+    {21413, "PCS_Beijing_Gauss_zone_13"},
567
+    {21414, "PCS_Beijing_Gauss_zone_14"},
568
+    {21415, "PCS_Beijing_Gauss_zone_15"},
569
+    {21416, "PCS_Beijing_Gauss_zone_16"},
570
+    {21417, "PCS_Beijing_Gauss_zone_17"},
571
+    {21418, "PCS_Beijing_Gauss_zone_18"},
572
+    {21419, "PCS_Beijing_Gauss_zone_19"},
573
+    {21420, "PCS_Beijing_Gauss_zone_20"},
574
+    {21421, "PCS_Beijing_Gauss_zone_21"},
575
+    {21422, "PCS_Beijing_Gauss_zone_22"},
576
+    {21423, "PCS_Beijing_Gauss_zone_23"},
577
+    {21473, "PCS_Beijing_Gauss_13N"},
578
+    {21474, "PCS_Beijing_Gauss_14N"},
579
+    {21475, "PCS_Beijing_Gauss_15N"},
580
+    {21476, "PCS_Beijing_Gauss_16N"},
581
+    {21477, "PCS_Beijing_Gauss_17N"},
582
+    {21478, "PCS_Beijing_Gauss_18N"},
583
+    {21479, "PCS_Beijing_Gauss_19N"},
584
+    {21480, "PCS_Beijing_Gauss_20N"},
585
+    {21481, "PCS_Beijing_Gauss_21N"},
586
+    {21482, "PCS_Beijing_Gauss_22N"},
587
+    {21483, "PCS_Beijing_Gauss_23N"},
588
+    {21500, "PCS_Belge_Lambert_50"},
589
+    {21790, "PCS_Bern_1898_Swiss_Old"},
590
+    {21817, "PCS_Bogota_UTM_zone_17N"},
591
+    {21818, "PCS_Bogota_UTM_zone_18N"},
592
+    {21891, "PCS_Bogota_Colombia_3W"},
593
+    {21892, "PCS_Bogota_Colombia_Bogota"},
594
+    {21893, "PCS_Bogota_Colombia_3E"},
595
+    {21894, "PCS_Bogota_Colombia_6E"},
596
+    {22032, "PCS_Camacupa_UTM_32S"},
597
+    {22033, "PCS_Camacupa_UTM_33S"},
598
+    {22191, "PCS_C_Inchauspe_Argentina_1"},
599
+    {22192, "PCS_C_Inchauspe_Argentina_2"},
600
+    {22193, "PCS_C_Inchauspe_Argentina_3"},
601
+    {22194, "PCS_C_Inchauspe_Argentina_4"},
602
+    {22195, "PCS_C_Inchauspe_Argentina_5"},
603
+    {22196, "PCS_C_Inchauspe_Argentina_6"},
604
+    {22197, "PCS_C_Inchauspe_Argentina_7"},
605
+    {22332, "PCS_Carthage_UTM_zone_32N"},
606
+    {22391, "PCS_Carthage_Nord_Tunisie"},
607
+    {22392, "PCS_Carthage_Sud_Tunisie"},
608
+    {22523, "PCS_Corrego_Alegre_UTM_23S"},
609
+    {22524, "PCS_Corrego_Alegre_UTM_24S"},
610
+    {22832, "PCS_Douala_UTM_zone_32N"},
611
+    {22992, "PCS_Egypt_1907_Red_Belt"},
612
+    {22993, "PCS_Egypt_1907_Purple_Belt"},
613
+    {22994, "PCS_Egypt_1907_Ext_Purple"},
614
+    {23028, "PCS_ED50_UTM_zone_28N"},
615
+    {23029, "PCS_ED50_UTM_zone_29N"},
616
+    {23030, "PCS_ED50_UTM_zone_30N"},
617
+    {23031, "PCS_ED50_UTM_zone_31N"},
618
+    {23032, "PCS_ED50_UTM_zone_32N"},
619
+    {23033, "PCS_ED50_UTM_zone_33N"},
620
+    {23034, "PCS_ED50_UTM_zone_34N"},
621
+    {23035, "PCS_ED50_UTM_zone_35N"},
622
+    {23036, "PCS_ED50_UTM_zone_36N"},
623
+    {23037, "PCS_ED50_UTM_zone_37N"},
624
+    {23038, "PCS_ED50_UTM_zone_38N"},
625
+    {23239, "PCS_Fahud_UTM_zone_39N"},
626
+    {23240, "PCS_Fahud_UTM_zone_40N"},
627
+    {23433, "PCS_Garoua_UTM_zone_33N"},
628
+    {23846, "PCS_ID74_UTM_zone_46N"},
629
+    {23847, "PCS_ID74_UTM_zone_47N"},
630
+    {23848, "PCS_ID74_UTM_zone_48N"},
631
+    {23849, "PCS_ID74_UTM_zone_49N"},
632
+    {23850, "PCS_ID74_UTM_zone_50N"},
633
+    {23851, "PCS_ID74_UTM_zone_51N"},
634
+    {23852, "PCS_ID74_UTM_zone_52N"},
635
+    {23853, "PCS_ID74_UTM_zone_53N"},
636
+    {23886, "PCS_ID74_UTM_zone_46S"},
637
+    {23887, "PCS_ID74_UTM_zone_47S"},
638
+    {23888, "PCS_ID74_UTM_zone_48S"},
639
+    {23889, "PCS_ID74_UTM_zone_49S"},
640
+    {23890, "PCS_ID74_UTM_zone_50S"},
641
+    {23891, "PCS_ID74_UTM_zone_51S"},
642
+    {23892, "PCS_ID74_UTM_zone_52S"},
643
+    {23893, "PCS_ID74_UTM_zone_53S"},
644
+    {23894, "PCS_ID74_UTM_zone_54S"},
645
+    {23947, "PCS_Indian_1954_UTM_47N"},
646
+    {23948, "PCS_Indian_1954_UTM_48N"},
647
+    {24047, "PCS_Indian_1975_UTM_47N"},
648
+    {24048, "PCS_Indian_1975_UTM_48N"},
649
+    {24100, "PCS_Jamaica_1875_Old_Grid"},
650
+    {24200, "PCS_JAD69_Jamaica_Grid"},
651
+    {24370, "PCS_Kalianpur_India_0"},
652
+    {24371, "PCS_Kalianpur_India_I"},
653
+    {24372, "PCS_Kalianpur_India_IIa"},
654
+    {24373, "PCS_Kalianpur_India_IIIa"},
655
+    {24374, "PCS_Kalianpur_India_IVa"},
656
+    {24382, "PCS_Kalianpur_India_IIb"},
657
+    {24383, "PCS_Kalianpur_India_IIIb"},
658
+    {24384, "PCS_Kalianpur_India_IVb"},
659
+    {24500, "PCS_Kertau_Singapore_Grid"},
660
+    {24547, "PCS_Kertau_UTM_zone_47N"},
661
+    {24548, "PCS_Kertau_UTM_zone_48N"},
662
+    {24720, "PCS_La_Canoa_UTM_zone_20N"},
663
+    {24721, "PCS_La_Canoa_UTM_zone_21N"},
664
+    {24818, "PCS_PSAD56_UTM_zone_18N"},
665
+    {24819, "PCS_PSAD56_UTM_zone_19N"},
666
+    {24820, "PCS_PSAD56_UTM_zone_20N"},
667
+    {24821, "PCS_PSAD56_UTM_zone_21N"},
668
+    {24877, "PCS_PSAD56_UTM_zone_17S"},
669
+    {24878, "PCS_PSAD56_UTM_zone_18S"},
670
+    {24879, "PCS_PSAD56_UTM_zone_19S"},
671
+    {24880, "PCS_PSAD56_UTM_zone_20S"},
672
+    {24891, "PCS_PSAD56_Peru_west_zone"},
673
+    {24892, "PCS_PSAD56_Peru_central"},
674
+    {24893, "PCS_PSAD56_Peru_east_zone"},
675
+    {25000, "PCS_Leigon_Ghana_Grid"},
676
+    {25231, "PCS_Lome_UTM_zone_31N"},
677
+    {25391, "PCS_Luzon_Philippines_I"},
678
+    {25392, "PCS_Luzon_Philippines_II"},
679
+    {25393, "PCS_Luzon_Philippines_III"},
680
+    {25394, "PCS_Luzon_Philippines_IV"},
681
+    {25395, "PCS_Luzon_Philippines_V"},
682
+    {25700, "PCS_Makassar_NEIEZ"},
683
+    {25932, "PCS_Malongo_1987_UTM_32S"},
684
+    {26191, "PCS_Merchich_Nord_Maroc"},
685
+    {26192, "PCS_Merchich_Sud_Maroc"},
686
+    {26193, "PCS_Merchich_Sahara"},
687
+    {26237, "PCS_Massawa_UTM_zone_37N"},
688
+    {26331, "PCS_Minna_UTM_zone_31N"},
689
+    {26332, "PCS_Minna_UTM_zone_32N"},
690
+    {26391, "PCS_Minna_Nigeria_West"},
691
+    {26392, "PCS_Minna_Nigeria_Mid_Belt"},
692
+    {26393, "PCS_Minna_Nigeria_East"},
693
+    {26432, "PCS_Mhast_UTM_zone_32S"},
694
+    {26591, "PCS_Monte_Mario_Italy_1"},
695
+    {26592, "PCS_Monte_Mario_Italy_2"},
696
+    {26632, "PCS_M_poraloko_UTM_32N"},
697
+    {26692, "PCS_M_poraloko_UTM_32S"},
698
+    {26703, "PCS_NAD27_UTM_zone_3N"},
699
+    {26704, "PCS_NAD27_UTM_zone_4N"},
700
+    {26705, "PCS_NAD27_UTM_zone_5N"},
701
+    {26706, "PCS_NAD27_UTM_zone_6N"},
702
+    {26707, "PCS_NAD27_UTM_zone_7N"},
703
+    {26708, "PCS_NAD27_UTM_zone_8N"},
704
+    {26709, "PCS_NAD27_UTM_zone_9N"},
705
+    {26710, "PCS_NAD27_UTM_zone_10N"},
706
+    {26711, "PCS_NAD27_UTM_zone_11N"},
707
+    {26712, "PCS_NAD27_UTM_zone_12N"},
708
+    {26713, "PCS_NAD27_UTM_zone_13N"},
709
+    {26714, "PCS_NAD27_UTM_zone_14N"},
710
+    {26715, "PCS_NAD27_UTM_zone_15N"},
711
+    {26716, "PCS_NAD27_UTM_zone_16N"},
712
+    {26717, "PCS_NAD27_UTM_zone_17N"},
713
+    {26718, "PCS_NAD27_UTM_zone_18N"},
714
+    {26719, "PCS_NAD27_UTM_zone_19N"},
715
+    {26720, "PCS_NAD27_UTM_zone_20N"},
716
+    {26721, "PCS_NAD27_UTM_zone_21N"},
717
+    {26722, "PCS_NAD27_UTM_zone_22N"},
718
+    {26729, "PCS_NAD27_Alabama_East"},
719
+    {26730, "PCS_NAD27_Alabama_West"},
720
+    {26731, "PCS_NAD27_Alaska_zone_1"},
721
+    {26732, "PCS_NAD27_Alaska_zone_2"},
722
+    {26733, "PCS_NAD27_Alaska_zone_3"},
723
+    {26734, "PCS_NAD27_Alaska_zone_4"},
724
+    {26735, "PCS_NAD27_Alaska_zone_5"},
725
+    {26736, "PCS_NAD27_Alaska_zone_6"},
726
+    {26737, "PCS_NAD27_Alaska_zone_7"},
727
+    {26738, "PCS_NAD27_Alaska_zone_8"},
728
+    {26739, "PCS_NAD27_Alaska_zone_9"},
729
+    {26740, "PCS_NAD27_Alaska_zone_10"},
730
+    {26741, "PCS_NAD27_California_I"},
731
+    {26742, "PCS_NAD27_California_II"},
732
+    {26743, "PCS_NAD27_California_III"},
733
+    {26744, "PCS_NAD27_California_IV"},
734
+    {26745, "PCS_NAD27_California_V"},
735
+    {26746, "PCS_NAD27_California_VI"},
736
+    {26747, "PCS_NAD27_California_VII"},
737
+    {26748, "PCS_NAD27_Arizona_East"},
738
+    {26749, "PCS_NAD27_Arizona_Central"},
739
+    {26750, "PCS_NAD27_Arizona_West"},
740
+    {26751, "PCS_NAD27_Arkansas_North"},
741
+    {26752, "PCS_NAD27_Arkansas_South"},
742
+    {26753, "PCS_NAD27_Colorado_North"},
743
+    {26754, "PCS_NAD27_Colorado_Central"},
744
+    {26755, "PCS_NAD27_Colorado_South"},
745
+    {26756, "PCS_NAD27_Connecticut"},
746
+    {26757, "PCS_NAD27_Delaware"},
747
+    {26758, "PCS_NAD27_Florida_East"},
748
+    {26759, "PCS_NAD27_Florida_West"},
749
+    {26760, "PCS_NAD27_Florida_North"},
750
+    {26761, "PCS_NAD27_Hawaii_zone_1"},
751
+    {26762, "PCS_NAD27_Hawaii_zone_2"},
752
+    {26763, "PCS_NAD27_Hawaii_zone_3"},
753
+    {26764, "PCS_NAD27_Hawaii_zone_4"},
754
+    {26765, "PCS_NAD27_Hawaii_zone_5"},
755
+    {26766, "PCS_NAD27_Georgia_East"},
756
+    {26767, "PCS_NAD27_Georgia_West"},
757
+    {26768, "PCS_NAD27_Idaho_East"},
758
+    {26769, "PCS_NAD27_Idaho_Central"},
759
+    {26770, "PCS_NAD27_Idaho_West"},
760
+    {26771, "PCS_NAD27_Illinois_East"},
761
+    {26772, "PCS_NAD27_Illinois_West"},
762
+    {26773, "PCS_NAD27_Indiana_East"},
763
+    {26774, "PCS_NAD27_BLM_14N_feet"},
764
+    {26774, "PCS_NAD27_Indiana_West"},
765
+    {26775, "PCS_NAD27_BLM_15N_feet"},
766
+    {26775, "PCS_NAD27_Iowa_North"},
767
+    {26776, "PCS_NAD27_BLM_16N_feet"},
768
+    {26776, "PCS_NAD27_Iowa_South"},
769
+    {26777, "PCS_NAD27_BLM_17N_feet"},
770
+    {26777, "PCS_NAD27_Kansas_North"},
771
+    {26778, "PCS_NAD27_Kansas_South"},
772
+    {26779, "PCS_NAD27_Kentucky_North"},
773
+    {26780, "PCS_NAD27_Kentucky_South"},
774
+    {26781, "PCS_NAD27_Louisiana_North"},
775
+    {26782, "PCS_NAD27_Louisiana_South"},
776
+    {26783, "PCS_NAD27_Maine_East"},
777
+    {26784, "PCS_NAD27_Maine_West"},
778
+    {26785, "PCS_NAD27_Maryland"},
779
+    {26786, "PCS_NAD27_Massachusetts"},
780
+    {26787, "PCS_NAD27_Massachusetts_Is"},
781
+    {26788, "PCS_NAD27_Michigan_North"},
782
+    {26789, "PCS_NAD27_Michigan_Central"},
783
+    {26790, "PCS_NAD27_Michigan_South"},
784
+    {26791, "PCS_NAD27_Minnesota_North"},
785
+    {26792, "PCS_NAD27_Minnesota_Cent"},
786
+    {26793, "PCS_NAD27_Minnesota_South"},
787
+    {26794, "PCS_NAD27_Mississippi_East"},
788
+    {26795, "PCS_NAD27_Mississippi_West"},
789
+    {26796, "PCS_NAD27_Missouri_East"},
790
+    {26797, "PCS_NAD27_Missouri_Central"},
791
+    {26798, "PCS_NAD27_Missouri_West"},
792
+    {26801, "PCS_NAD_Michigan_Michigan_East"},
793
+    {26802, "PCS_NAD_Michigan_Michigan_Old_Central"},
794
+    {26803, "PCS_NAD_Michigan_Michigan_West"},
795
+    {26903, "PCS_NAD83_UTM_zone_3N"},
796
+    {26904, "PCS_NAD83_UTM_zone_4N"},
797
+    {26905, "PCS_NAD83_UTM_zone_5N"},
798
+    {26906, "PCS_NAD83_UTM_zone_6N"},
799
+    {26907, "PCS_NAD83_UTM_zone_7N"},
800
+    {26908, "PCS_NAD83_UTM_zone_8N"},
801
+    {26909, "PCS_NAD83_UTM_zone_9N"},
802
+    {26910, "PCS_NAD83_UTM_zone_10N"},
803
+    {26911, "PCS_NAD83_UTM_zone_11N"},
804
+    {26912, "PCS_NAD83_UTM_zone_12N"},
805
+    {26913, "PCS_NAD83_UTM_zone_13N"},
806
+    {26914, "PCS_NAD83_UTM_zone_14N"},
807
+    {26915, "PCS_NAD83_UTM_zone_15N"},
808
+    {26916, "PCS_NAD83_UTM_zone_16N"},
809
+    {26917, "PCS_NAD83_UTM_zone_17N"},
810
+    {26918, "PCS_NAD83_UTM_zone_18N"},
811
+    {26919, "PCS_NAD83_UTM_zone_19N"},
812
+    {26920, "PCS_NAD83_UTM_zone_20N"},
813
+    {26921, "PCS_NAD83_UTM_zone_21N"},
814
+    {26922, "PCS_NAD83_UTM_zone_22N"},
815
+    {26923, "PCS_NAD83_UTM_zone_23N"},
816
+    {26929, "PCS_NAD83_Alabama_East"},
817
+    {26930, "PCS_NAD83_Alabama_West"},
818
+    {26931, "PCS_NAD83_Alaska_zone_1"},
819
+    {26932, "PCS_NAD83_Alaska_zone_2"},
820
+    {26933, "PCS_NAD83_Alaska_zone_3"},
821
+    {26934, "PCS_NAD83_Alaska_zone_4"},
822
+    {26935, "PCS_NAD83_Alaska_zone_5"},
823
+    {26936, "PCS_NAD83_Alaska_zone_6"},
824
+    {26937, "PCS_NAD83_Alaska_zone_7"},
825
+    {26938, "PCS_NAD83_Alaska_zone_8"},
826
+    {26939, "PCS_NAD83_Alaska_zone_9"},
827
+    {26940, "PCS_NAD83_Alaska_zone_10"},
828
+    {26941, "PCS_NAD83_California_1"},
829
+    {26942, "PCS_NAD83_California_2"},
830
+    {26943, "PCS_NAD83_California_3"},
831
+    {26944, "PCS_NAD83_California_4"},
832
+    {26945, "PCS_NAD83_California_5"},
833
+    {26946, "PCS_NAD83_California_6"},
834
+    {26948, "PCS_NAD83_Arizona_East"},
835
+    {26949, "PCS_NAD83_Arizona_Central"},
836
+    {26950, "PCS_NAD83_Arizona_West"},
837
+    {26951, "PCS_NAD83_Arkansas_North"},
838
+    {26952, "PCS_NAD83_Arkansas_South"},
839
+    {26953, "PCS_NAD83_Colorado_North"},
840
+    {26954, "PCS_NAD83_Colorado_Central"},
841
+    {26955, "PCS_NAD83_Colorado_South"},
842
+    {26956, "PCS_NAD83_Connecticut"},
843
+    {26957, "PCS_NAD83_Delaware"},
844
+    {26958, "PCS_NAD83_Florida_East"},
845
+    {26959, "PCS_NAD83_Florida_West"},
846
+    {26960, "PCS_NAD83_Florida_North"},
847
+    {26961, "PCS_NAD83_Hawaii_zone_1"},
848
+    {26962, "PCS_NAD83_Hawaii_zone_2"},
849
+    {26963, "PCS_NAD83_Hawaii_zone_3"},
850
+    {26964, "PCS_NAD83_Hawaii_zone_4"},
851
+    {26965, "PCS_NAD83_Hawaii_zone_5"},
852
+    {26966, "PCS_NAD83_Georgia_East"},
853
+    {26967, "PCS_NAD83_Georgia_West"},
854
+    {26968, "PCS_NAD83_Idaho_East"},
855
+    {26969, "PCS_NAD83_Idaho_Central"},
856
+    {26970, "PCS_NAD83_Idaho_West"},
857
+    {26971, "PCS_NAD83_Illinois_East"},
858
+    {26972, "PCS_NAD83_Illinois_West"},
859
+    {26973, "PCS_NAD83_Indiana_East"},
860
+    {26974, "PCS_NAD83_Indiana_West"},
861
+    {26975, "PCS_NAD83_Iowa_North"},
862
+    {26976, "PCS_NAD83_Iowa_South"},
863
+    {26977, "PCS_NAD83_Kansas_North"},
864
+    {26978, "PCS_NAD83_Kansas_South"},
865
+    {26979, "PCS_NAD83_Kentucky_North"},
866
+    {26980, "PCS_NAD83_Kentucky_South"},
867
+    {26981, "PCS_NAD83_Louisiana_North"},
868
+    {26982, "PCS_NAD83_Louisiana_South"},
869
+    {26983, "PCS_NAD83_Maine_East"},
870
+    {26984, "PCS_NAD83_Maine_West"},
871
+    {26985, "PCS_NAD83_Maryland"},
872
+    {26986, "PCS_NAD83_Massachusetts"},
873
+    {26987, "PCS_NAD83_Massachusetts_Is"},
874
+    {26988, "PCS_NAD83_Michigan_North"},
875
+    {26989, "PCS_NAD83_Michigan_Central"},
876
+    {26990, "PCS_NAD83_Michigan_South"},
877
+    {26991, "PCS_NAD83_Minnesota_North"},
878
+    {26992, "PCS_NAD83_Minnesota_Cent"},
879
+    {26993, "PCS_NAD83_Minnesota_South"},
880
+    {26994, "PCS_NAD83_Mississippi_East"},
881
+    {26995, "PCS_NAD83_Mississippi_West"},
882
+    {26996, "PCS_NAD83_Missouri_East"},
883
+    {26997, "PCS_NAD83_Missouri_Central"},
884
+    {26998, "PCS_NAD83_Missouri_West"},
885
+    {27038, "PCS_Nahrwan_1967_UTM_38N"},
886
+    {27039, "PCS_Nahrwan_1967_UTM_39N"},
887
+    {27040, "PCS_Nahrwan_1967_UTM_40N"},
888
+    {27120, "PCS_Naparima_UTM_20N"},
889
+    {27200, "PCS_GD49_NZ_Map_Grid"},
890
+    {27291, "PCS_GD49_North_Island_Grid"},
891
+    {27292, "PCS_GD49_South_Island_Grid"},
892
+    {27429, "PCS_Datum_73_UTM_zone_29N"},
893
+    {27500, "PCS_ATF_Nord_de_Guerre"},
894
+    {27581, "PCS_NTF_France_I"},
895
+    {27582, "PCS_NTF_France_II"},
896
+    {27583, "PCS_NTF_France_III"},
897
+    {27591, "PCS_NTF_Nord_France"},
898
+    {27592, "PCS_NTF_Centre_France"},
899
+    {27593, "PCS_NTF_Sud_France"},
900
+    {27700, "PCS_British_National_Grid"},
901
+    {28232, "PCS_Point_Noire_UTM_32S"},
902
+    {28348, "PCS_GDA94_MGA_zone_48"},
903
+    {28349, "PCS_GDA94_MGA_zone_49"},
904
+    {28350, "PCS_GDA94_MGA_zone_50"},
905
+    {28351, "PCS_GDA94_MGA_zone_51"},
906
+    {28352, "PCS_GDA94_MGA_zone_52"},
907
+    {28353, "PCS_GDA94_MGA_zone_53"},
908
+    {28354, "PCS_GDA94_MGA_zone_54"},
909
+    {28355, "PCS_GDA94_MGA_zone_55"},
910
+    {28356, "PCS_GDA94_MGA_zone_56"},
911
+    {28357, "PCS_GDA94_MGA_zone_57"},
912
+    {28358, "PCS_GDA94_MGA_zone_58"},
913
+    {28404, "PCS_Pulkovo_Gauss_zone_4"},
914
+    {28405, "PCS_Pulkovo_Gauss_zone_5"},
915
+    {28406, "PCS_Pulkovo_Gauss_zone_6"},
916
+    {28407, "PCS_Pulkovo_Gauss_zone_7"},
917
+    {28408, "PCS_Pulkovo_Gauss_zone_8"},
918
+    {28409, "PCS_Pulkovo_Gauss_zone_9"},
919
+    {28410, "PCS_Pulkovo_Gauss_zone_10"},
920
+    {28411, "PCS_Pulkovo_Gauss_zone_11"},
921
+    {28412, "PCS_Pulkovo_Gauss_zone_12"},
922
+    {28413, "PCS_Pulkovo_Gauss_zone_13"},
923
+    {28414, "PCS_Pulkovo_Gauss_zone_14"},
924
+    {28415, "PCS_Pulkovo_Gauss_zone_15"},
925
+    {28416, "PCS_Pulkovo_Gauss_zone_16"},
926
+    {28417, "PCS_Pulkovo_Gauss_zone_17"},
927
+    {28418, "PCS_Pulkovo_Gauss_zone_18"},
928
+    {28419, "PCS_Pulkovo_Gauss_zone_19"},
929
+    {28420, "PCS_Pulkovo_Gauss_zone_20"},
930
+    {28421, "PCS_Pulkovo_Gauss_zone_21"},
931
+    {28422, "PCS_Pulkovo_Gauss_zone_22"},
932
+    {28423, "PCS_Pulkovo_Gauss_zone_23"},
933
+    {28424, "PCS_Pulkovo_Gauss_zone_24"},
934
+    {28425, "PCS_Pulkovo_Gauss_zone_25"},
935
+    {28426, "PCS_Pulkovo_Gauss_zone_26"},
936
+    {28427, "PCS_Pulkovo_Gauss_zone_27"},
937
+    {28428, "PCS_Pulkovo_Gauss_zone_28"},
938
+    {28429, "PCS_Pulkovo_Gauss_zone_29"},
939
+    {28430, "PCS_Pulkovo_Gauss_zone_30"},
940
+    {28431, "PCS_Pulkovo_Gauss_zone_31"},
941
+    {28432, "PCS_Pulkovo_Gauss_zone_32"},
942
+    {28464, "PCS_Pulkovo_Gauss_4N"},
943
+    {28465, "PCS_Pulkovo_Gauss_5N"},
944
+    {28466, "PCS_Pulkovo_Gauss_6N"},
945
+    {28467, "PCS_Pulkovo_Gauss_7N"},
946
+    {28468, "PCS_Pulkovo_Gauss_8N"},
947
+    {28469, "PCS_Pulkovo_Gauss_9N"},
948
+    {28470, "PCS_Pulkovo_Gauss_10N"},
949
+    {28471, "PCS_Pulkovo_Gauss_11N"},
950
+    {28472, "PCS_Pulkovo_Gauss_12N"},
951
+    {28473, "PCS_Pulkovo_Gauss_13N"},
952
+    {28474, "PCS_Pulkovo_Gauss_14N"},
953
+    {28475, "PCS_Pulkovo_Gauss_15N"},
954
+    {28476, "PCS_Pulkovo_Gauss_16N"},
955
+    {28477, "PCS_Pulkovo_Gauss_17N"},
956
+    {28478, "PCS_Pulkovo_Gauss_18N"},
957
+    {28479, "PCS_Pulkovo_Gauss_19N"},
958
+    {28480, "PCS_Pulkovo_Gauss_20N"},
959
+    {28481, "PCS_Pulkovo_Gauss_21N"},
960
+    {28482, "PCS_Pulkovo_Gauss_22N"},
961
+    {28483, "PCS_Pulkovo_Gauss_23N"},
962
+    {28484, "PCS_Pulkovo_Gauss_24N"},
963
+    {28485, "PCS_Pulkovo_Gauss_25N"},
964
+    {28486, "PCS_Pulkovo_Gauss_26N"},
965
+    {28487, "PCS_Pulkovo_Gauss_27N"},
966
+    {28488, "PCS_Pulkovo_Gauss_28N"},
967
+    {28489, "PCS_Pulkovo_Gauss_29N"},
968
+    {28490, "PCS_Pulkovo_Gauss_30N"},
969
+    {28491, "PCS_Pulkovo_Gauss_31N"},
970
+    {28492, "PCS_Pulkovo_Gauss_32N"},
971
+    {28600, "PCS_Qatar_National_Grid"},
972
+    {28991, "PCS_RD_Netherlands_Old"},
973
+    {28992, "PCS_RD_Netherlands_New"},
974
+    {29118, "PCS_SAD69_UTM_zone_18N"},
975
+    {29119, "PCS_SAD69_UTM_zone_19N"},
976
+    {29120, "PCS_SAD69_UTM_zone_20N"},
977
+    {29121, "PCS_SAD69_UTM_zone_21N"},
978
+    {29122, "PCS_SAD69_UTM_zone_22N"},
979
+    {29177, "PCS_SAD69_UTM_zone_17S"},
980
+    {29178, "PCS_SAD69_UTM_zone_18S"},
981
+    {29179, "PCS_SAD69_UTM_zone_19S"},
982
+    {29180, "PCS_SAD69_UTM_zone_20S"},
983
+    {29181, "PCS_SAD69_UTM_zone_21S"},
984
+    {29182, "PCS_SAD69_UTM_zone_22S"},
985
+    {29183, "PCS_SAD69_UTM_zone_23S"},
986
+    {29184, "PCS_SAD69_UTM_zone_24S"},
987
+    {29185, "PCS_SAD69_UTM_zone_25S"},
988
+    {29220, "PCS_Sapper_Hill_UTM_20S"},
989
+    {29221, "PCS_Sapper_Hill_UTM_21S"},
990
+    {29333, "PCS_Schwarzeck_UTM_33S"},
991
+    {29635, "PCS_Sudan_UTM_zone_35N"},
992
+    {29636, "PCS_Sudan_UTM_zone_36N"},
993
+    {29700, "PCS_Tananarive_Laborde"},
994
+    {29738, "PCS_Tananarive_UTM_38S"},
995
+    {29739, "PCS_Tananarive_UTM_39S"},
996
+    {29800, "PCS_Timbalai_1948_Borneo"},
997
+    {29849, "PCS_Timbalai_1948_UTM_49N"},
998
+    {29850, "PCS_Timbalai_1948_UTM_50N"},
999
+    {29900, "PCS_TM65_Irish_Nat_Grid"},
1000
+    {30200, "PCS_Trinidad_1903_Trinidad"},
1001
+    {30339, "PCS_TC_1948_UTM_zone_39N"},
1002
+    {30340, "PCS_TC_1948_UTM_zone_40N"},
1003
+    {30491, "PCS_Voirol_N_Algerie_ancien"},
1004
+    {30492, "PCS_Voirol_S_Algerie_ancien"},
1005
+    {30591, "PCS_Voirol_Unifie_N_Algerie"},
1006
+    {30592, "PCS_Voirol_Unifie_S_Algerie"},
1007
+    {30600, "PCS_Bern_1938_Swiss_New"},
1008
+    {30729, "PCS_Nord_Sahara_UTM_29N"},
1009
+    {30730, "PCS_Nord_Sahara_UTM_30N"},
1010
+    {30731, "PCS_Nord_Sahara_UTM_31N"},
1011
+    {30732, "PCS_Nord_Sahara_UTM_32N"},
1012
+    {31028, "PCS_Yoff_UTM_zone_28N"},
1013
+    {31121, "PCS_Zanderij_UTM_zone_21N"},
1014
+    {31291, "PCS_MGI_Austria_West"},
1015
+    {31292, "PCS_MGI_Austria_Central"},
1016
+    {31293, "PCS_MGI_Austria_East"},
1017
+    {31300, "PCS_Belge_Lambert_72"},
1018
+    {31491, "PCS_DHDN_Germany_zone_1"},
1019
+    {31492, "PCS_DHDN_Germany_zone_2"},
1020
+    {31493, "PCS_DHDN_Germany_zone_3"},
1021
+    {31494, "PCS_DHDN_Germany_zone_4"},
1022
+    {31495, "PCS_DHDN_Germany_zone_5"},
1023
+    {32001, "PCS_NAD27_Montana_North"},
1024
+    {32002, "PCS_NAD27_Montana_Central"},
1025
+    {32003, "PCS_NAD27_Montana_South"},
1026
+    {32005, "PCS_NAD27_Nebraska_North"},
1027
+    {32006, "PCS_NAD27_Nebraska_South"},
1028
+    {32007, "PCS_NAD27_Nevada_East"},
1029
+    {32008, "PCS_NAD27_Nevada_Central"},
1030
+    {32009, "PCS_NAD27_Nevada_West"},
1031
+    {32010, "PCS_NAD27_New_Hampshire"},
1032
+    {32011, "PCS_NAD27_New_Jersey"},
1033
+    {32012, "PCS_NAD27_New_Mexico_East"},
1034
+    {32013, "PCS_NAD27_New_Mexico_Cent"},
1035
+    {32014, "PCS_NAD27_New_Mexico_West"},
1036
+    {32015, "PCS_NAD27_New_York_East"},
1037
+    {32016, "PCS_NAD27_New_York_Central"},
1038
+    {32017, "PCS_NAD27_New_York_West"},
1039
+    {32018, "PCS_NAD27_New_York_Long_Is"},
1040
+    {32019, "PCS_NAD27_North_Carolina"},
1041
+    {32020, "PCS_NAD27_North_Dakota_N"},
1042
+    {32021, "PCS_NAD27_North_Dakota_S"},
1043
+    {32022, "PCS_NAD27_Ohio_North"},
1044
+    {32023, "PCS_NAD27_Ohio_South"},
1045
+    {32024, "PCS_NAD27_Oklahoma_North"},
1046
+    {32025, "PCS_NAD27_Oklahoma_South"},
1047
+    {32026, "PCS_NAD27_Oregon_North"},
1048
+    {32027, "PCS_NAD27_Oregon_South"},
1049
+    {32028, "PCS_NAD27_Pennsylvania_N"},
1050
+    {32029, "PCS_NAD27_Pennsylvania_S"},
1051
+    {32030, "PCS_NAD27_Rhode_Island"},
1052
+    {32031, "PCS_NAD27_South_Carolina_N"},
1053
+    {32033, "PCS_NAD27_South_Carolina_S"},
1054
+    {32034, "PCS_NAD27_South_Dakota_N"},
1055
+    {32035, "PCS_NAD27_South_Dakota_S"},
1056
+    {32036, "PCS_NAD27_Tennessee"},
1057
+    {32037, "PCS_NAD27_Texas_North"},
1058
+    {32038, "PCS_NAD27_Texas_North_Cen"},
1059
+    {32039, "PCS_NAD27_Texas_Central"},
1060
+    {32040, "PCS_NAD27_Texas_South_Cen"},
1061
+    {32041, "PCS_NAD27_Texas_South"},
1062
+    {32042, "PCS_NAD27_Utah_North"},
1063
+    {32043, "PCS_NAD27_Utah_Central"},
1064
+    {32044, "PCS_NAD27_Utah_South"},
1065
+    {32045, "PCS_NAD27_Vermont"},
1066
+    {32046, "PCS_NAD27_Virginia_North"},
1067
+    {32047, "PCS_NAD27_Virginia_South"},
1068
+    {32048, "PCS_NAD27_Washington_North"},
1069
+    {32049, "PCS_NAD27_Washington_South"},
1070
+    {32050, "PCS_NAD27_West_Virginia_N"},
1071
+    {32051, "PCS_NAD27_West_Virginia_S"},
1072
+    {32052, "PCS_NAD27_Wisconsin_North"},
1073
+    {32053, "PCS_NAD27_Wisconsin_Cen"},
1074
+    {32054, "PCS_NAD27_Wisconsin_South"},
1075
+    {32055, "PCS_NAD27_Wyoming_East"},
1076
+    {32056, "PCS_NAD27_Wyoming_E_Cen"},
1077
+    {32057, "PCS_NAD27_Wyoming_W_Cen"},
1078
+    {32058, "PCS_NAD27_Wyoming_West"},
1079
+    {32059, "PCS_NAD27_Puerto_Rico"},
1080
+    {32060, "PCS_NAD27_St_Croix"},
1081
+    {32100, "PCS_NAD83_Montana"},
1082
+    {32104, "PCS_NAD83_Nebraska"},
1083
+    {32107, "PCS_NAD83_Nevada_East"},
1084
+    {32108, "PCS_NAD83_Nevada_Central"},
1085
+    {32109, "PCS_NAD83_Nevada_West"},
1086
+    {32110, "PCS_NAD83_New_Hampshire"},
1087
+    {32111, "PCS_NAD83_New_Jersey"},
1088
+    {32112, "PCS_NAD83_New_Mexico_East"},
1089
+    {32113, "PCS_NAD83_New_Mexico_Cent"},
1090
+    {32114, "PCS_NAD83_New_Mexico_West"},
1091
+    {32115, "PCS_NAD83_New_York_East"},
1092
+    {32116, "PCS_NAD83_New_York_Central"},
1093
+    {32117, "PCS_NAD83_New_York_West"},
1094
+    {32118, "PCS_NAD83_New_York_Long_Is"},
1095
+    {32119, "PCS_NAD83_North_Carolina"},
1096
+    {32120, "PCS_NAD83_North_Dakota_N"},
1097
+    {32121, "PCS_NAD83_North_Dakota_S"},
1098
+    {32122, "PCS_NAD83_Ohio_North"},
1099
+    {32123, "PCS_NAD83_Ohio_South"},
1100
+    {32124, "PCS_NAD83_Oklahoma_North"},
1101
+    {32125, "PCS_NAD83_Oklahoma_South"},
1102
+    {32126, "PCS_NAD83_Oregon_North"},
1103
+    {32127, "PCS_NAD83_Oregon_South"},
1104
+    {32128, "PCS_NAD83_Pennsylvania_N"},
1105
+    {32129, "PCS_NAD83_Pennsylvania_S"},
1106
+    {32130, "PCS_NAD83_Rhode_Island"},
1107
+    {32133, "PCS_NAD83_South_Carolina"},
1108
+    {32134, "PCS_NAD83_South_Dakota_N"},
1109
+    {32135, "PCS_NAD83_South_Dakota_S"},
1110
+    {32136, "PCS_NAD83_Tennessee"},
1111
+    {32137, "PCS_NAD83_Texas_North"},
1112
+    {32138, "PCS_NAD83_Texas_North_Cen"},
1113
+    {32139, "PCS_NAD83_Texas_Central"},
1114
+    {32140, "PCS_NAD83_Texas_South_Cen"},
1115
+    {32141, "PCS_NAD83_Texas_South"},
1116
+    {32142, "PCS_NAD83_Utah_North"},
1117
+    {32143, "PCS_NAD83_Utah_Central"},
1118
+    {32144, "PCS_NAD83_Utah_South"},
1119
+    {32145, "PCS_NAD83_Vermont"},
1120
+    {32146, "PCS_NAD83_Virginia_North"},
1121
+    {32147, "PCS_NAD83_Virginia_South"},
1122
+    {32148, "PCS_NAD83_Washington_North"},
1123
+    {32149, "PCS_NAD83_Washington_South"},
1124
+    {32150, "PCS_NAD83_West_Virginia_N"},
1125
+    {32151, "PCS_NAD83_West_Virginia_S"},
1126
+    {32152, "PCS_NAD83_Wisconsin_North"},
1127
+    {32153, "PCS_NAD83_Wisconsin_Cen"},
1128
+    {32154, "PCS_NAD83_Wisconsin_South"},
1129
+    {32155, "PCS_NAD83_Wyoming_East"},
1130
+    {32156, "PCS_NAD83_Wyoming_E_Cen"},
1131
+    {32157, "PCS_NAD83_Wyoming_W_Cen"},
1132
+    {32158, "PCS_NAD83_Wyoming_West"},
1133
+    {32161, "PCS_NAD83_Puerto_Rico_Virgin_Is"},
1134
+    {32201, "PCS_WGS72_UTM_zone_1N"},
1135
+    {32202, "PCS_WGS72_UTM_zone_2N"},
1136
+    {32203, "PCS_WGS72_UTM_zone_3N"},
1137
+    {32204, "PCS_WGS72_UTM_zone_4N"},
1138
+    {32205, "PCS_WGS72_UTM_zone_5N"},
1139
+    {32206, "PCS_WGS72_UTM_zone_6N"},
1140
+    {32207, "PCS_WGS72_UTM_zone_7N"},
1141
+    {32208, "PCS_WGS72_UTM_zone_8N"},
1142
+    {32209, "PCS_WGS72_UTM_zone_9N"},
1143
+    {32210, "PCS_WGS72_UTM_zone_10N"},
1144
+    {32211, "PCS_WGS72_UTM_zone_11N"},
1145
+    {32212, "PCS_WGS72_UTM_zone_12N"},
1146
+    {32213, "PCS_WGS72_UTM_zone_13N"},
1147
+    {32214, "PCS_WGS72_UTM_zone_14N"},
1148
+    {32215, "PCS_WGS72_UTM_zone_15N"},
1149
+    {32216, "PCS_WGS72_UTM_zone_16N"},
1150
+    {32217, "PCS_WGS72_UTM_zone_17N"},
1151
+    {32218, "PCS_WGS72_UTM_zone_18N"},
1152
+    {32219, "PCS_WGS72_UTM_zone_19N"},
1153
+    {32220, "PCS_WGS72_UTM_zone_20N"},
1154
+    {32221, "PCS_WGS72_UTM_zone_21N"},
1155
+    {32222, "PCS_WGS72_UTM_zone_22N"},
1156
+    {32223, "PCS_WGS72_UTM_zone_23N"},
1157
+    {32224, "PCS_WGS72_UTM_zone_24N"},
1158
+    {32225, "PCS_WGS72_UTM_zone_25N"},
1159
+    {32226, "PCS_WGS72_UTM_zone_26N"},
1160
+    {32227, "PCS_WGS72_UTM_zone_27N"},
1161
+    {32228, "PCS_WGS72_UTM_zone_28N"},
1162
+    {32229, "PCS_WGS72_UTM_zone_29N"},
1163
+    {32230, "PCS_WGS72_UTM_zone_30N"},
1164
+    {32231, "PCS_WGS72_UTM_zone_31N"},
1165
+    {32232, "PCS_WGS72_UTM_zone_32N"},
1166
+    {32233, "PCS_WGS72_UTM_zone_33N"},
1167
+    {32234, "PCS_WGS72_UTM_zone_34N"},
1168
+    {32235, "PCS_WGS72_UTM_zone_35N"},
1169
+    {32236, "PCS_WGS72_UTM_zone_36N"},
1170
+    {32237, "PCS_WGS72_UTM_zone_37N"},
1171
+    {32238, "PCS_WGS72_UTM_zone_38N"},
1172
+    {32239, "PCS_WGS72_UTM_zone_39N"},
1173
+    {32240, "PCS_WGS72_UTM_zone_40N"},
1174
+    {32241, "PCS_WGS72_UTM_zone_41N"},
1175
+    {32242, "PCS_WGS72_UTM_zone_42N"},
1176
+    {32243, "PCS_WGS72_UTM_zone_43N"},
1177
+    {32244, "PCS_WGS72_UTM_zone_44N"},
1178
+    {32245, "PCS_WGS72_UTM_zone_45N"},
1179
+    {32246, "PCS_WGS72_UTM_zone_46N"},
1180
+    {32247, "PCS_WGS72_UTM_zone_47N"},
1181
+    {32248, "PCS_WGS72_UTM_zone_48N"},
1182
+    {32249, "PCS_WGS72_UTM_zone_49N"},
1183
+    {32250, "PCS_WGS72_UTM_zone_50N"},
1184
+    {32251, "PCS_WGS72_UTM_zone_51N"},
1185
+    {32252, "PCS_WGS72_UTM_zone_52N"},
1186
+    {32253, "PCS_WGS72_UTM_zone_53N"},
1187
+    {32254, "PCS_WGS72_UTM_zone_54N"},
1188
+    {32255, "PCS_WGS72_UTM_zone_55N"},
1189
+    {32256, "PCS_WGS72_UTM_zone_56N"},
1190
+    {32257, "PCS_WGS72_UTM_zone_57N"},
1191
+    {32258, "PCS_WGS72_UTM_zone_58N"},
1192
+    {32259, "PCS_WGS72_UTM_zone_59N"},
1193
+    {32260, "PCS_WGS72_UTM_zone_60N"},
1194
+    {32301, "PCS_WGS72_UTM_zone_1S"},
1195
+    {32302, "PCS_WGS72_UTM_zone_2S"},
1196
+    {32303, "PCS_WGS72_UTM_zone_3S"},
1197
+    {32304, "PCS_WGS72_UTM_zone_4S"},
1198
+    {32305, "PCS_WGS72_UTM_zone_5S"},
1199
+    {32306, "PCS_WGS72_UTM_zone_6S"},
1200
+    {32307, "PCS_WGS72_UTM_zone_7S"},
1201
+    {32308, "PCS_WGS72_UTM_zone_8S"},
1202
+    {32309, "PCS_WGS72_UTM_zone_9S"},
1203
+    {32310, "PCS_WGS72_UTM_zone_10S"},
1204
+    {32311, "PCS_WGS72_UTM_zone_11S"},
1205
+    {32312, "PCS_WGS72_UTM_zone_12S"},
1206
+    {32313, "PCS_WGS72_UTM_zone_13S"},
1207
+    {32314, "PCS_WGS72_UTM_zone_14S"},
1208
+    {32315, "PCS_WGS72_UTM_zone_15S"},
1209
+    {32316, "PCS_WGS72_UTM_zone_16S"},
1210
+    {32317, "PCS_WGS72_UTM_zone_17S"},
1211
+    {32318, "PCS_WGS72_UTM_zone_18S"},
1212
+    {32319, "PCS_WGS72_UTM_zone_19S"},
1213
+    {32320, "PCS_WGS72_UTM_zone_20S"},
1214
+    {32321, "PCS_WGS72_UTM_zone_21S"},
1215
+    {32322, "PCS_WGS72_UTM_zone_22S"},
1216
+    {32323, "PCS_WGS72_UTM_zone_23S"},
1217
+    {32324, "PCS_WGS72_UTM_zone_24S"},
1218
+    {32325, "PCS_WGS72_UTM_zone_25S"},
1219
+    {32326, "PCS_WGS72_UTM_zone_26S"},
1220
+    {32327, "PCS_WGS72_UTM_zone_27S"},
1221
+    {32328, "PCS_WGS72_UTM_zone_28S"},
1222
+    {32329, "PCS_WGS72_UTM_zone_29S"},
1223
+    {32330, "PCS_WGS72_UTM_zone_30S"},
1224
+    {32331, "PCS_WGS72_UTM_zone_31S"},
1225
+    {32332, "PCS_WGS72_UTM_zone_32S"},
1226
+    {32333, "PCS_WGS72_UTM_zone_33S"},
1227
+    {32334, "PCS_WGS72_UTM_zone_34S"},
1228
+    {32335, "PCS_WGS72_UTM_zone_35S"},
1229
+    {32336, "PCS_WGS72_UTM_zone_36S"},
1230
+    {32337, "PCS_WGS72_UTM_zone_37S"},
1231
+    {32338, "PCS_WGS72_UTM_zone_38S"},
1232
+    {32339, "PCS_WGS72_UTM_zone_39S"},
1233
+    {32340, "PCS_WGS72_UTM_zone_40S"},
1234
+    {32341, "PCS_WGS72_UTM_zone_41S"},
1235
+    {32342, "PCS_WGS72_UTM_zone_42S"},
1236
+    {32343, "PCS_WGS72_UTM_zone_43S"},
1237
+    {32344, "PCS_WGS72_UTM_zone_44S"},
1238
+    {32345, "PCS_WGS72_UTM_zone_45S"},
1239
+    {32346, "PCS_WGS72_UTM_zone_46S"},
1240
+    {32347, "PCS_WGS72_UTM_zone_47S"},
1241
+    {32348, "PCS_WGS72_UTM_zone_48S"},
1242
+    {32349, "PCS_WGS72_UTM_zone_49S"},
1243
+    {32350, "PCS_WGS72_UTM_zone_50S"},
1244
+    {32351, "PCS_WGS72_UTM_zone_51S"},
1245
+    {32352, "PCS_WGS72_UTM_zone_52S"},
1246
+    {32353, "PCS_WGS72_UTM_zone_53S"},
1247
+    {32354, "PCS_WGS72_UTM_zone_54S"},
1248
+    {32355, "PCS_WGS72_UTM_zone_55S"},
1249
+    {32356, "PCS_WGS72_UTM_zone_56S"},
1250
+    {32357, "PCS_WGS72_UTM_zone_57S"},
1251
+    {32358, "PCS_WGS72_UTM_zone_58S"},
1252
+    {32359, "PCS_WGS72_UTM_zone_59S"},
1253
+    {32360, "PCS_WGS72_UTM_zone_60S"},
1254
+    {32401, "PCS_WGS72BE_UTM_zone_1N"},
1255
+    {32402, "PCS_WGS72BE_UTM_zone_2N"},
1256
+    {32403, "PCS_WGS72BE_UTM_zone_3N"},
1257
+    {32404, "PCS_WGS72BE_UTM_zone_4N"},
1258
+    {32405, "PCS_WGS72BE_UTM_zone_5N"},
1259
+    {32406, "PCS_WGS72BE_UTM_zone_6N"},
1260
+    {32407, "PCS_WGS72BE_UTM_zone_7N"},
1261
+    {32408, "PCS_WGS72BE_UTM_zone_8N"},
1262
+    {32409, "PCS_WGS72BE_UTM_zone_9N"},
1263
+    {32410, "PCS_WGS72BE_UTM_zone_10N"},
1264
+    {32411, "PCS_WGS72BE_UTM_zone_11N"},
1265
+    {32412, "PCS_WGS72BE_UTM_zone_12N"},
1266
+    {32413, "PCS_WGS72BE_UTM_zone_13N"},
1267
+    {32414, "PCS_WGS72BE_UTM_zone_14N"},
1268
+    {32415, "PCS_WGS72BE_UTM_zone_15N"},
1269
+    {32416, "PCS_WGS72BE_UTM_zone_16N"},
1270
+    {32417, "PCS_WGS72BE_UTM_zone_17N"},
1271
+    {32418, "PCS_WGS72BE_UTM_zone_18N"},
1272
+    {32419, "PCS_WGS72BE_UTM_zone_19N"},
1273
+    {32420, "PCS_WGS72BE_UTM_zone_20N"},
1274
+    {32421, "PCS_WGS72BE_UTM_zone_21N"},
1275
+    {32422, "PCS_WGS72BE_UTM_zone_22N"},
1276
+    {32423, "PCS_WGS72BE_UTM_zone_23N"},
1277
+    {32424, "PCS_WGS72BE_UTM_zone_24N"},
1278
+    {32425, "PCS_WGS72BE_UTM_zone_25N"},
1279
+    {32426, "PCS_WGS72BE_UTM_zone_26N"},
1280
+    {32427, "PCS_WGS72BE_UTM_zone_27N"},
1281
+    {32428, "PCS_WGS72BE_UTM_zone_28N"},
1282
+    {32429, "PCS_WGS72BE_UTM_zone_29N"},
1283
+    {32430, "PCS_WGS72BE_UTM_zone_30N"},
1284
+    {32431, "PCS_WGS72BE_UTM_zone_31N"},
1285
+    {32432, "PCS_WGS72BE_UTM_zone_32N"},
1286
+    {32433, "PCS_WGS72BE_UTM_zone_33N"},
1287
+    {32434, "PCS_WGS72BE_UTM_zone_34N"},
1288
+    {32435, "PCS_WGS72BE_UTM_zone_35N"},
1289
+    {32436, "PCS_WGS72BE_UTM_zone_36N"},
1290
+    {32437, "PCS_WGS72BE_UTM_zone_37N"},
1291
+    {32438, "PCS_WGS72BE_UTM_zone_38N"},
1292
+    {32439, "PCS_WGS72BE_UTM_zone_39N"},
1293
+    {32440, "PCS_WGS72BE_UTM_zone_40N"},
1294
+    {32441, "PCS_WGS72BE_UTM_zone_41N"},
1295
+    {32442, "PCS_WGS72BE_UTM_zone_42N"},
1296
+    {32443, "PCS_WGS72BE_UTM_zone_43N"},
1297
+    {32444, "PCS_WGS72BE_UTM_zone_44N"},
1298
+    {32445, "PCS_WGS72BE_UTM_zone_45N"},
1299
+    {32446, "PCS_WGS72BE_UTM_zone_46N"},
1300
+    {32447, "PCS_WGS72BE_UTM_zone_47N"},
1301
+    {32448, "PCS_WGS72BE_UTM_zone_48N"},
1302
+    {32449, "PCS_WGS72BE_UTM_zone_49N"},
1303
+    {32450, "PCS_WGS72BE_UTM_zone_50N"},
1304
+    {32451, "PCS_WGS72BE_UTM_zone_51N"},
1305
+    {32452, "PCS_WGS72BE_UTM_zone_52N"},
1306
+    {32453, "PCS_WGS72BE_UTM_zone_53N"},
1307
+    {32454, "PCS_WGS72BE_UTM_zone_54N"},
1308
+    {32455, "PCS_WGS72BE_UTM_zone_55N"},
1309
+    {32456, "PCS_WGS72BE_UTM_zone_56N"},
1310
+    {32457, "PCS_WGS72BE_UTM_zone_57N"},
1311
+    {32458, "PCS_WGS72BE_UTM_zone_58N"},
1312
+    {32459, "PCS_WGS72BE_UTM_zone_59N"},
1313
+    {32460, "PCS_WGS72BE_UTM_zone_60N"},
1314
+    {32501, "PCS_WGS72BE_UTM_zone_1S"},
1315
+    {32502, "PCS_WGS72BE_UTM_zone_2S"},
1316
+    {32503, "PCS_WGS72BE_UTM_zone_3S"},
1317
+    {32504, "PCS_WGS72BE_UTM_zone_4S"},
1318
+    {32505, "PCS_WGS72BE_UTM_zone_5S"},
1319
+    {32506, "PCS_WGS72BE_UTM_zone_6S"},
1320
+    {32507, "PCS_WGS72BE_UTM_zone_7S"},
1321
+    {32508, "PCS_WGS72BE_UTM_zone_8S"},
1322
+    {32509, "PCS_WGS72BE_UTM_zone_9S"},
1323
+    {32510, "PCS_WGS72BE_UTM_zone_10S"},
1324
+    {32511, "PCS_WGS72BE_UTM_zone_11S"},
1325
+    {32512, "PCS_WGS72BE_UTM_zone_12S"},
1326
+    {32513, "PCS_WGS72BE_UTM_zone_13S"},
1327
+    {32514, "PCS_WGS72BE_UTM_zone_14S"},
1328
+    {32515, "PCS_WGS72BE_UTM_zone_15S"},
1329
+    {32516, "PCS_WGS72BE_UTM_zone_16S"},
1330
+    {32517, "PCS_WGS72BE_UTM_zone_17S"},
1331
+    {32518, "PCS_WGS72BE_UTM_zone_18S"},
1332
+    {32519, "PCS_WGS72BE_UTM_zone_19S"},
1333
+    {32520, "PCS_WGS72BE_UTM_zone_20S"},
1334
+    {32521, "PCS_WGS72BE_UTM_zone_21S"},
1335
+    {32522, "PCS_WGS72BE_UTM_zone_22S"},
1336
+    {32523, "PCS_WGS72BE_UTM_zone_23S"},
1337
+    {32524, "PCS_WGS72BE_UTM_zone_24S"},
1338
+    {32525, "PCS_WGS72BE_UTM_zone_25S"},
1339
+    {32526, "PCS_WGS72BE_UTM_zone_26S"},
1340
+    {32527, "PCS_WGS72BE_UTM_zone_27S"},
1341
+    {32528, "PCS_WGS72BE_UTM_zone_28S"},
1342
+    {32529, "PCS_WGS72BE_UTM_zone_29S"},
1343
+    {32530, "PCS_WGS72BE_UTM_zone_30S"},
1344
+    {32531, "PCS_WGS72BE_UTM_zone_31S"},
1345
+    {32532, "PCS_WGS72BE_UTM_zone_32S"},
1346
+    {32533, "PCS_WGS72BE_UTM_zone_33S"},
1347
+    {32534, "PCS_WGS72BE_UTM_zone_34S"},
1348
+    {32535, "PCS_WGS72BE_UTM_zone_35S"},
1349
+    {32536, "PCS_WGS72BE_UTM_zone_36S"},
1350
+    {32537, "PCS_WGS72BE_UTM_zone_37S"},
1351
+    {32538, "PCS_WGS72BE_UTM_zone_38S"},
1352
+    {32539, "PCS_WGS72BE_UTM_zone_39S"},
1353
+    {32540, "PCS_WGS72BE_UTM_zone_40S"},
1354
+    {32541, "PCS_WGS72BE_UTM_zone_41S"},
1355
+    {32542, "PCS_WGS72BE_UTM_zone_42S"},
1356
+    {32543, "PCS_WGS72BE_UTM_zone_43S"},
1357
+    {32544, "PCS_WGS72BE_UTM_zone_44S"},
1358
+    {32545, "PCS_WGS72BE_UTM_zone_45S"},
1359
+    {32546, "PCS_WGS72BE_UTM_zone_46S"},
1360
+    {32547, "PCS_WGS72BE_UTM_zone_47S"},
1361
+    {32548, "PCS_WGS72BE_UTM_zone_48S"},
1362
+    {32549, "PCS_WGS72BE_UTM_zone_49S"},
1363
+    {32550, "PCS_WGS72BE_UTM_zone_50S"},
1364
+    {32551, "PCS_WGS72BE_UTM_zone_51S"},
1365
+    {32552, "PCS_WGS72BE_UTM_zone_52S"},
1366
+    {32553, "PCS_WGS72BE_UTM_zone_53S"},
1367
+    {32554, "PCS_WGS72BE_UTM_zone_54S"},
1368
+    {32555, "PCS_WGS72BE_UTM_zone_55S"},
1369
+    {32556, "PCS_WGS72BE_UTM_zone_56S"},
1370
+    {32557, "PCS_WGS72BE_UTM_zone_57S"},
1371
+    {32558, "PCS_WGS72BE_UTM_zone_58S"},
1372
+    {32559, "PCS_WGS72BE_UTM_zone_59S"},
1373
+    {32560, "PCS_WGS72BE_UTM_zone_60S"},
1374
+    {32601, "PCS_WGS84_UTM_zone_1N"},
1375
+    {32602, "PCS_WGS84_UTM_zone_2N"},
1376
+    {32603, "PCS_WGS84_UTM_zone_3N"},
1377
+    {32604, "PCS_WGS84_UTM_zone_4N"},
1378
+    {32605, "PCS_WGS84_UTM_zone_5N"},
1379
+    {32606, "PCS_WGS84_UTM_zone_6N"},
1380
+    {32607, "PCS_WGS84_UTM_zone_7N"},
1381
+    {32608, "PCS_WGS84_UTM_zone_8N"},
1382
+    {32609, "PCS_WGS84_UTM_zone_9N"},
1383
+    {32610, "PCS_WGS84_UTM_zone_10N"},
1384
+    {32611, "PCS_WGS84_UTM_zone_11N"},
1385
+    {32612, "PCS_WGS84_UTM_zone_12N"},
1386
+    {32613, "PCS_WGS84_UTM_zone_13N"},
1387
+    {32614, "PCS_WGS84_UTM_zone_14N"},
1388
+    {32615, "PCS_WGS84_UTM_zone_15N"},
1389
+    {32616, "PCS_WGS84_UTM_zone_16N"},
1390
+    {32617, "PCS_WGS84_UTM_zone_17N"},
1391
+    {32618, "PCS_WGS84_UTM_zone_18N"},
1392
+    {32619, "PCS_WGS84_UTM_zone_19N"},
1393
+    {32620, "PCS_WGS84_UTM_zone_20N"},
1394
+    {32621, "PCS_WGS84_UTM_zone_21N"},
1395
+    {32622, "PCS_WGS84_UTM_zone_22N"},
1396
+    {32623, "PCS_WGS84_UTM_zone_23N"},
1397
+    {32624, "PCS_WGS84_UTM_zone_24N"},
1398
+    {32625, "PCS_WGS84_UTM_zone_25N"},
1399
+    {32626, "PCS_WGS84_UTM_zone_26N"},
1400
+    {32627, "PCS_WGS84_UTM_zone_27N"},
1401
+    {32628, "PCS_WGS84_UTM_zone_28N"},
1402
+    {32629, "PCS_WGS84_UTM_zone_29N"},
1403
+    {32630, "PCS_WGS84_UTM_zone_30N"},
1404
+    {32631, "PCS_WGS84_UTM_zone_31N"},
1405
+    {32632, "PCS_WGS84_UTM_zone_32N"},
1406
+    {32633, "PCS_WGS84_UTM_zone_33N"},
1407
+    {32634, "PCS_WGS84_UTM_zone_34N"},
1408
+    {32635, "PCS_WGS84_UTM_zone_35N"},
1409
+    {32636, "PCS_WGS84_UTM_zone_36N"},
1410
+    {32637, "PCS_WGS84_UTM_zone_37N"},
1411
+    {32638, "PCS_WGS84_UTM_zone_38N"},
1412
+    {32639, "PCS_WGS84_UTM_zone_39N"},
1413
+    {32640, "PCS_WGS84_UTM_zone_40N"},
1414
+    {32641, "PCS_WGS84_UTM_zone_41N"},
1415
+    {32642, "PCS_WGS84_UTM_zone_42N"},
1416
+    {32643, "PCS_WGS84_UTM_zone_43N"},
1417
+    {32644, "PCS_WGS84_UTM_zone_44N"},
1418
+    {32645, "PCS_WGS84_UTM_zone_45N"},
1419
+    {32646, "PCS_WGS84_UTM_zone_46N"},
1420
+    {32647, "PCS_WGS84_UTM_zone_47N"},
1421
+    {32648, "PCS_WGS84_UTM_zone_48N"},
1422
+    {32649, "PCS_WGS84_UTM_zone_49N"},
1423
+    {32650, "PCS_WGS84_UTM_zone_50N"},
1424
+    {32651, "PCS_WGS84_UTM_zone_51N"},
1425
+    {32652, "PCS_WGS84_UTM_zone_52N"},
1426
+    {32653, "PCS_WGS84_UTM_zone_53N"},
1427
+    {32654, "PCS_WGS84_UTM_zone_54N"},
1428
+    {32655, "PCS_WGS84_UTM_zone_55N"},
1429
+    {32656, "PCS_WGS84_UTM_zone_56N"},
1430
+    {32657, "PCS_WGS84_UTM_zone_57N"},
1431
+    {32658, "PCS_WGS84_UTM_zone_58N"},
1432
+    {32659, "PCS_WGS84_UTM_zone_59N"},
1433
+    {32660, "PCS_WGS84_UTM_zone_60N"},
1434
+    {32701, "PCS_WGS84_UTM_zone_1S"},
1435
+    {32702, "PCS_WGS84_UTM_zone_2S"},
1436
+    {32703, "PCS_WGS84_UTM_zone_3S"},
1437
+    {32704, "PCS_WGS84_UTM_zone_4S"},
1438
+    {32705, "PCS_WGS84_UTM_zone_5S"},
1439
+    {32706, "PCS_WGS84_UTM_zone_6S"},
1440
+    {32707, "PCS_WGS84_UTM_zone_7S"},
1441
+    {32708, "PCS_WGS84_UTM_zone_8S"},
1442
+    {32709, "PCS_WGS84_UTM_zone_9S"},
1443
+    {32710, "PCS_WGS84_UTM_zone_10S"},
1444
+    {32711, "PCS_WGS84_UTM_zone_11S"},
1445
+    {32712, "PCS_WGS84_UTM_zone_12S"},
1446
+    {32713, "PCS_WGS84_UTM_zone_13S"},
1447
+    {32714, "PCS_WGS84_UTM_zone_14S"},
1448
+    {32715, "PCS_WGS84_UTM_zone_15S"},
1449
+    {32716, "PCS_WGS84_UTM_zone_16S"},
1450
+    {32717, "PCS_WGS84_UTM_zone_17S"},
1451
+    {32718, "PCS_WGS84_UTM_zone_18S"},
1452
+    {32719, "PCS_WGS84_UTM_zone_19S"},
1453
+    {32720, "PCS_WGS84_UTM_zone_20S"},
1454
+    {32721, "PCS_WGS84_UTM_zone_21S"},
1455
+    {32722, "PCS_WGS84_UTM_zone_22S"},
1456
+    {32723, "PCS_WGS84_UTM_zone_23S"},
1457
+    {32724, "PCS_WGS84_UTM_zone_24S"},
1458
+    {32725, "PCS_WGS84_UTM_zone_25S"},
1459
+    {32726, "PCS_WGS84_UTM_zone_26S"},
1460
+    {32727, "PCS_WGS84_UTM_zone_27S"},
1461
+    {32728, "PCS_WGS84_UTM_zone_28S"},
1462
+    {32729, "PCS_WGS84_UTM_zone_29S"},
1463
+    {32730, "PCS_WGS84_UTM_zone_30S"},
1464
+    {32731, "PCS_WGS84_UTM_zone_31S"},
1465
+    {32732, "PCS_WGS84_UTM_zone_32S"},
1466
+    {32733, "PCS_WGS84_UTM_zone_33S"},
1467
+    {32734, "PCS_WGS84_UTM_zone_34S"},
1468
+    {32735, "PCS_WGS84_UTM_zone_35S"},
1469
+    {32736, "PCS_WGS84_UTM_zone_36S"},
1470
+    {32737, "PCS_WGS84_UTM_zone_37S"},
1471
+    {32738, "PCS_WGS84_UTM_zone_38S"},
1472
+    {32739, "PCS_WGS84_UTM_zone_39S"},
1473
+    {32740, "PCS_WGS84_UTM_zone_40S"},
1474
+    {32741, "PCS_WGS84_UTM_zone_41S"},
1475
+    {32742, "PCS_WGS84_UTM_zone_42S"},
1476
+    {32743, "PCS_WGS84_UTM_zone_43S"},
1477
+    {32744, "PCS_WGS84_UTM_zone_44S"},
1478
+    {32745, "PCS_WGS84_UTM_zone_45S"},
1479
+    {32746, "PCS_WGS84_UTM_zone_46S"},
1480
+    {32747, "PCS_WGS84_UTM_zone_47S"},
1481
+    {32748, "PCS_WGS84_UTM_zone_48S"},
1482
+    {32749, "PCS_WGS84_UTM_zone_49S"},
1483
+    {32750, "PCS_WGS84_UTM_zone_50S"},
1484
+    {32751, "PCS_WGS84_UTM_zone_51S"},
1485
+    {32752, "PCS_WGS84_UTM_zone_52S"},
1486
+    {32753, "PCS_WGS84_UTM_zone_53S"},
1487
+    {32754, "PCS_WGS84_UTM_zone_54S"},
1488
+    {32755, "PCS_WGS84_UTM_zone_55S"},
1489
+    {32756, "PCS_WGS84_UTM_zone_56S"},
1490
+    {32757, "PCS_WGS84_UTM_zone_57S"},
1491
+    {32758, "PCS_WGS84_UTM_zone_58S"},
1492
+    {32759, "PCS_WGS84_UTM_zone_59S"},
1493
+    {32760, "PCS_WGS84_UTM_zone_60S"}
1494
+};
1495
+
1496
+const TiffGeoTagKeyName ff_tiff_projection_codes[] = {
1497
+    {10101, "Proj_Alabama_CS27_East"},
1498
+    {10102, "Proj_Alabama_CS27_West"},
1499
+    {10131, "Proj_Alabama_CS83_East"},
1500
+    {10132, "Proj_Alabama_CS83_West"},
1501
+    {10201, "Proj_Arizona_Coordinate_System_east"},
1502
+    {10202, "Proj_Arizona_Coordinate_System_Central"},
1503
+    {10203, "Proj_Arizona_Coordinate_System_west"},
1504
+    {10231, "Proj_Arizona_CS83_east"},
1505
+    {10232, "Proj_Arizona_CS83_Central"},
1506
+    {10233, "Proj_Arizona_CS83_west"},
1507
+    {10301, "Proj_Arkansas_CS27_North"},
1508
+    {10302, "Proj_Arkansas_CS27_South"},
1509
+    {10331, "Proj_Arkansas_CS83_North"},
1510
+    {10332, "Proj_Arkansas_CS83_South"},
1511
+    {10401, "Proj_California_CS27_I"},
1512
+    {10402, "Proj_California_CS27_II"},
1513
+    {10403, "Proj_California_CS27_III"},
1514
+    {10404, "Proj_California_CS27_IV"},
1515
+    {10405, "Proj_California_CS27_V"},
1516
+    {10406, "Proj_California_CS27_VI"},
1517
+    {10407, "Proj_California_CS27_VII"},
1518
+    {10431, "Proj_California_CS83_1"},
1519
+    {10432, "Proj_California_CS83_2"},
1520
+    {10433, "Proj_California_CS83_3"},
1521
+    {10434, "Proj_California_CS83_4"},
1522
+    {10435, "Proj_California_CS83_5"},
1523
+    {10436, "Proj_California_CS83_6"},
1524
+    {10501, "Proj_Colorado_CS27_North"},
1525
+    {10502, "Proj_Colorado_CS27_Central"},
1526
+    {10503, "Proj_Colorado_CS27_South"},
1527
+    {10531, "Proj_Colorado_CS83_North"},
1528
+    {10532, "Proj_Colorado_CS83_Central"},
1529
+    {10533, "Proj_Colorado_CS83_South"},
1530
+    {10600, "Proj_Connecticut_CS27"},
1531
+    {10630, "Proj_Connecticut_CS83"},
1532
+    {10700, "Proj_Delaware_CS27"},
1533
+    {10730, "Proj_Delaware_CS83"},
1534
+    {10901, "Proj_Florida_CS27_East"},
1535
+    {10902, "Proj_Florida_CS27_West"},
1536
+    {10903, "Proj_Florida_CS27_North"},
1537
+    {10931, "Proj_Florida_CS83_East"},
1538
+    {10932, "Proj_Florida_CS83_West"},
1539
+    {10933, "Proj_Florida_CS83_North"},
1540
+    {11001, "Proj_Georgia_CS27_East"},
1541
+    {11002, "Proj_Georgia_CS27_West"},
1542
+    {11031, "Proj_Georgia_CS83_East"},
1543
+    {11032, "Proj_Georgia_CS83_West"},
1544
+    {11101, "Proj_Idaho_CS27_East"},
1545
+    {11102, "Proj_Idaho_CS27_Central"},
1546
+    {11103, "Proj_Idaho_CS27_West"},
1547
+    {11131, "Proj_Idaho_CS83_East"},
1548
+    {11132, "Proj_Idaho_CS83_Central"},
1549
+    {11133, "Proj_Idaho_CS83_West"},
1550
+    {11201, "Proj_Illinois_CS27_East"},
1551
+    {11202, "Proj_Illinois_CS27_West"},
1552
+    {11231, "Proj_Illinois_CS83_East"},
1553
+    {11232, "Proj_Illinois_CS83_West"},
1554
+    {11301, "Proj_Indiana_CS27_East"},
1555
+    {11302, "Proj_Indiana_CS27_West"},
1556
+    {11331, "Proj_Indiana_CS83_East"},
1557
+    {11332, "Proj_Indiana_CS83_West"},
1558
+    {11401, "Proj_Iowa_CS27_North"},
1559
+    {11402, "Proj_Iowa_CS27_South"},
1560
+    {11431, "Proj_Iowa_CS83_North"},
1561
+    {11432, "Proj_Iowa_CS83_South"},
1562
+    {11501, "Proj_Kansas_CS27_North"},
1563
+    {11502, "Proj_Kansas_CS27_South"},
1564
+    {11531, "Proj_Kansas_CS83_North"},
1565
+    {11532, "Proj_Kansas_CS83_South"},
1566
+    {11601, "Proj_Kentucky_CS27_North"},
1567
+    {11602, "Proj_Kentucky_CS27_South"},
1568
+    {11631, "Proj_Kentucky_CS83_North"},
1569
+    {11632, "Proj_Kentucky_CS83_South"},
1570
+    {11701, "Proj_Louisiana_CS27_North"},
1571
+    {11702, "Proj_Louisiana_CS27_South"},
1572
+    {11731, "Proj_Louisiana_CS83_North"},
1573
+    {11732, "Proj_Louisiana_CS83_South"},
1574
+    {11801, "Proj_Maine_CS27_East"},
1575
+    {11802, "Proj_Maine_CS27_West"},
1576
+    {11831, "Proj_Maine_CS83_East"},
1577
+    {11832, "Proj_Maine_CS83_West"},
1578
+    {11900, "Proj_Maryland_CS27"},
1579
+    {11930, "Proj_Maryland_CS83"},
1580
+    {12001, "Proj_Massachusetts_CS27_Mainland"},
1581
+    {12002, "Proj_Massachusetts_CS27_Island"},
1582
+    {12031, "Proj_Massachusetts_CS83_Mainland"},
1583
+    {12032, "Proj_Massachusetts_CS83_Island"},
1584
+    {12101, "Proj_Michigan_State_Plane_East"},
1585
+    {12102, "Proj_Michigan_State_Plane_Old_Central"},
1586
+    {12103, "Proj_Michigan_State_Plane_West"},
1587
+    {12111, "Proj_Michigan_CS27_North"},
1588
+    {12112, "Proj_Michigan_CS27_Central"},
1589
+    {12113, "Proj_Michigan_CS27_South"},
1590
+    {12141, "Proj_Michigan_CS83_North"},
1591
+    {12142, "Proj_Michigan_CS83_Central"},
1592
+    {12143, "Proj_Michigan_CS83_South"},
1593
+    {12201, "Proj_Minnesota_CS27_North"},
1594
+    {12202, "Proj_Minnesota_CS27_Central"},
1595
+    {12203, "Proj_Minnesota_CS27_South"},
1596
+    {12231, "Proj_Minnesota_CS83_North"},
1597
+    {12232, "Proj_Minnesota_CS83_Central"},
1598
+    {12233, "Proj_Minnesota_CS83_South"},
1599
+    {12301, "Proj_Mississippi_CS27_East"},
1600
+    {12302, "Proj_Mississippi_CS27_West"},
1601
+    {12331, "Proj_Mississippi_CS83_East"},
1602
+    {12332, "Proj_Mississippi_CS83_West"},
1603
+    {12401, "Proj_Missouri_CS27_East"},
1604
+    {12402, "Proj_Missouri_CS27_Central"},
1605
+    {12403, "Proj_Missouri_CS27_West"},
1606
+    {12431, "Proj_Missouri_CS83_East"},
1607
+    {12432, "Proj_Missouri_CS83_Central"},
1608
+    {12433, "Proj_Missouri_CS83_West"},
1609
+    {12501, "Proj_Montana_CS27_North"},
1610
+    {12502, "Proj_Montana_CS27_Central"},
1611
+    {12503, "Proj_Montana_CS27_South"},
1612
+    {12530, "Proj_Montana_CS83"},
1613
+    {12601, "Proj_Nebraska_CS27_North"},
1614
+    {12602, "Proj_Nebraska_CS27_South"},
1615
+    {12630, "Proj_Nebraska_CS83"},
1616
+    {12701, "Proj_Nevada_CS27_East"},
1617
+    {12702, "Proj_Nevada_CS27_Central"},
1618
+    {12703, "Proj_Nevada_CS27_West"},
1619
+    {12731, "Proj_Nevada_CS83_East"},
1620
+    {12732, "Proj_Nevada_CS83_Central"},
1621
+    {12733, "Proj_Nevada_CS83_West"},
1622
+    {12800, "Proj_New_Hampshire_CS27"},
1623
+    {12830, "Proj_New_Hampshire_CS83"},
1624
+    {12900, "Proj_New_Jersey_CS27"},
1625
+    {12930, "Proj_New_Jersey_CS83"},
1626
+    {13001, "Proj_New_Mexico_CS27_East"},
1627
+    {13002, "Proj_New_Mexico_CS27_Central"},
1628
+    {13003, "Proj_New_Mexico_CS27_West"},
1629
+    {13031, "Proj_New_Mexico_CS83_East"},
1630
+    {13032, "Proj_New_Mexico_CS83_Central"},
1631
+    {13033, "Proj_New_Mexico_CS83_West"},
1632
+    {13101, "Proj_New_York_CS27_East"},
1633
+    {13102, "Proj_New_York_CS27_Central"},
1634
+    {13103, "Proj_New_York_CS27_West"},
1635
+    {13104, "Proj_New_York_CS27_Long_Island"},
1636
+    {13131, "Proj_New_York_CS83_East"},
1637
+    {13132, "Proj_New_York_CS83_Central"},
1638
+    {13133, "Proj_New_York_CS83_West"},
1639
+    {13134, "Proj_New_York_CS83_Long_Island"},
1640
+    {13200, "Proj_North_Carolina_CS27"},
1641
+    {13230, "Proj_North_Carolina_CS83"},
1642
+    {13301, "Proj_North_Dakota_CS27_North"},
1643
+    {13302, "Proj_North_Dakota_CS27_South"},
1644
+    {13331, "Proj_North_Dakota_CS83_North"},
1645
+    {13332, "Proj_North_Dakota_CS83_South"},
1646
+    {13401, "Proj_Ohio_CS27_North"},
1647
+    {13402, "Proj_Ohio_CS27_South"},
1648
+    {13431, "Proj_Ohio_CS83_North"},
1649
+    {13432, "Proj_Ohio_CS83_South"},
1650
+    {13501, "Proj_Oklahoma_CS27_North"},
1651
+    {13502, "Proj_Oklahoma_CS27_South"},
1652
+    {13531, "Proj_Oklahoma_CS83_North"},
1653
+    {13532, "Proj_Oklahoma_CS83_South"},
1654
+    {13601, "Proj_Oregon_CS27_North"},
1655
+    {13602, "Proj_Oregon_CS27_South"},
1656
+    {13631, "Proj_Oregon_CS83_North"},
1657
+    {13632, "Proj_Oregon_CS83_South"},
1658
+    {13701, "Proj_Pennsylvania_CS27_North"},
1659
+    {13702, "Proj_Pennsylvania_CS27_South"},
1660
+    {13731, "Proj_Pennsylvania_CS83_North"},
1661
+    {13732, "Proj_Pennsylvania_CS83_South"},
1662
+    {13800, "Proj_Rhode_Island_CS27"},
1663
+    {13830, "Proj_Rhode_Island_CS83"},
1664
+    {13901, "Proj_South_Carolina_CS27_North"},
1665
+    {13902, "Proj_South_Carolina_CS27_South"},
1666
+    {13930, "Proj_South_Carolina_CS83"},
1667
+    {14001, "Proj_South_Dakota_CS27_North"},
1668
+    {14002, "Proj_South_Dakota_CS27_South"},
1669
+    {14031, "Proj_South_Dakota_CS83_North"},
1670
+    {14032, "Proj_South_Dakota_CS83_South"},
1671
+    {14100, "Proj_Tennessee_CS27"},
1672
+    {14130, "Proj_Tennessee_CS83"},
1673
+    {14201, "Proj_Texas_CS27_North"},
1674
+    {14202, "Proj_Texas_CS27_North_Central"},
1675
+    {14203, "Proj_Texas_CS27_Central"},
1676
+    {14204, "Proj_Texas_CS27_South_Central"},
1677
+    {14205, "Proj_Texas_CS27_South"},
1678
+    {14231, "Proj_Texas_CS83_North"},
1679
+    {14232, "Proj_Texas_CS83_North_Central"},
1680
+    {14233, "Proj_Texas_CS83_Central"},
1681
+    {14234, "Proj_Texas_CS83_South_Central"},
1682
+    {14235, "Proj_Texas_CS83_South"},
1683
+    {14301, "Proj_Utah_CS27_North"},
1684
+    {14302, "Proj_Utah_CS27_Central"},
1685
+    {14303, "Proj_Utah_CS27_South"},
1686
+    {14331, "Proj_Utah_CS83_North"},
1687
+    {14332, "Proj_Utah_CS83_Central"},
1688
+    {14333, "Proj_Utah_CS83_South"},
1689
+    {14400, "Proj_Vermont_CS27"},
1690
+    {14430, "Proj_Vermont_CS83"},
1691
+    {14501, "Proj_Virginia_CS27_North"},
1692
+    {14502, "Proj_Virginia_CS27_South"},
1693
+    {14531, "Proj_Virginia_CS83_North"},
1694
+    {14532, "Proj_Virginia_CS83_South"},
1695
+    {14601, "Proj_Washington_CS27_North"},
1696
+    {14602, "Proj_Washington_CS27_South"},
1697
+    {14631, "Proj_Washington_CS83_North"},
1698
+    {14632, "Proj_Washington_CS83_South"},
1699
+    {14701, "Proj_West_Virginia_CS27_North"},
1700
+    {14702, "Proj_West_Virginia_CS27_South"},
1701
+    {14731, "Proj_West_Virginia_CS83_North"},
1702
+    {14732, "Proj_West_Virginia_CS83_South"},
1703
+    {14801, "Proj_Wisconsin_CS27_North"},
1704
+    {14802, "Proj_Wisconsin_CS27_Central"},
1705
+    {14803, "Proj_Wisconsin_CS27_South"},
1706
+    {14831, "Proj_Wisconsin_CS83_North"},
1707
+    {14832, "Proj_Wisconsin_CS83_Central"},
1708
+    {14833, "Proj_Wisconsin_CS83_South"},
1709
+    {14901, "Proj_Wyoming_CS27_East"},
1710
+    {14902, "Proj_Wyoming_CS27_East_Central"},
1711
+    {14903, "Proj_Wyoming_CS27_West_Central"},
1712
+    {14904, "Proj_Wyoming_CS27_West"},
1713
+    {14931, "Proj_Wyoming_CS83_East"},
1714
+    {14932, "Proj_Wyoming_CS83_East_Central"},
1715
+    {14933, "Proj_Wyoming_CS83_West_Central"},
1716
+    {14934, "Proj_Wyoming_CS83_West"},
1717
+    {15001, "Proj_Alaska_CS27_1"},
1718
+    {15002, "Proj_Alaska_CS27_2"},
1719
+    {15003, "Proj_Alaska_CS27_3"},
1720
+    {15004, "Proj_Alaska_CS27_4"},
1721
+    {15005, "Proj_Alaska_CS27_5"},
1722
+    {15006, "Proj_Alaska_CS27_6"},
1723
+    {15007, "Proj_Alaska_CS27_7"},
1724
+    {15008, "Proj_Alaska_CS27_8"},
1725
+    {15009, "Proj_Alaska_CS27_9"},
1726
+    {15010, "Proj_Alaska_CS27_10"},
1727
+    {15031, "Proj_Alaska_CS83_1"},
1728
+    {15032, "Proj_Alaska_CS83_2"},
1729
+    {15033, "Proj_Alaska_CS83_3"},
1730
+    {15034, "Proj_Alaska_CS83_4"},
1731
+    {15035, "Proj_Alaska_CS83_5"},
1732
+    {15036, "Proj_Alaska_CS83_6"},
1733
+    {15037, "Proj_Alaska_CS83_7"},
1734
+    {15038, "Proj_Alaska_CS83_8"},
1735
+    {15039, "Proj_Alaska_CS83_9"},
1736
+    {15040, "Proj_Alaska_CS83_10"},
1737
+    {15101, "Proj_Hawaii_CS27_1"},
1738
+    {15102, "Proj_Hawaii_CS27_2"},
1739
+    {15103, "Proj_Hawaii_CS27_3"},
1740
+    {15104, "Proj_Hawaii_CS27_4"},
1741
+    {15105, "Proj_Hawaii_CS27_5"},
1742
+    {15131, "Proj_Hawaii_CS83_1"},
1743
+    {15132, "Proj_Hawaii_CS83_2"},
1744
+    {15133, "Proj_Hawaii_CS83_3"},
1745
+    {15134, "Proj_Hawaii_CS83_4"},
1746
+    {15135, "Proj_Hawaii_CS83_5"},
1747
+    {15201, "Proj_Puerto_Rico_CS27"},
1748
+    {15202, "Proj_St_Croix"},
1749
+    {15230, "Proj_Puerto_Rico_Virgin_Is"},
1750
+    {15914, "Proj_BLM_14N_feet"},
1751
+    {15915, "Proj_BLM_15N_feet"},
1752
+    {15916, "Proj_BLM_16N_feet"},
1753
+    {15917, "Proj_BLM_17N_feet"},
1754
+    {17348, "Proj_Map_Grid_of_Australia_48"},
1755
+    {17349, "Proj_Map_Grid_of_Australia_49"},
1756
+    {17350, "Proj_Map_Grid_of_Australia_50"},
1757
+    {17351, "Proj_Map_Grid_of_Australia_51"},
1758
+    {17352, "Proj_Map_Grid_of_Australia_52"},
1759
+    {17353, "Proj_Map_Grid_of_Australia_53"},
1760
+    {17354, "Proj_Map_Grid_of_Australia_54"},
1761
+    {17355, "Proj_Map_Grid_of_Australia_55"},
1762
+    {17356, "Proj_Map_Grid_of_Australia_56"},
1763
+    {17357, "Proj_Map_Grid_of_Australia_57"},
1764
+    {17358, "Proj_Map_Grid_of_Australia_58"},
1765
+    {17448, "Proj_Australian_Map_Grid_48"},
1766
+    {17449, "Proj_Australian_Map_Grid_49"},
1767
+    {17450, "Proj_Australian_Map_Grid_50"},
1768
+    {17451, "Proj_Australian_Map_Grid_51"},
1769
+    {17452, "Proj_Australian_Map_Grid_52"},
1770
+    {17453, "Proj_Australian_Map_Grid_53"},
1771
+    {17454, "Proj_Australian_Map_Grid_54"},
1772
+    {17455, "Proj_Australian_Map_Grid_55"},
1773
+    {17456, "Proj_Australian_Map_Grid_56"},
1774
+    {17457, "Proj_Australian_Map_Grid_57"},
1775
+    {17458, "Proj_Australian_Map_Grid_58"},
1776
+    {18031, "Proj_Argentina_1"},
1777
+    {18032, "Proj_Argentina_2"},
1778
+    {18033, "Proj_Argentina_3"},
1779
+    {18034, "Proj_Argentina_4"},
1780
+    {18035, "Proj_Argentina_5"},
1781
+    {18036, "Proj_Argentina_6"},
1782
+    {18037, "Proj_Argentina_7"},
1783
+    {18051, "Proj_Colombia_3W"},
1784
+    {18052, "Proj_Colombia_Bogota"},
1785
+    {18053, "Proj_Colombia_3E"},
1786
+    {18054, "Proj_Colombia_6E"},
1787
+    {18072, "Proj_Egypt_Red_Belt"},
1788
+    {18073, "Proj_Egypt_Purple_Belt"},
1789
+    {18074, "Proj_Extended_Purple_Belt"},
1790
+    {18141, "Proj_New_Zealand_North_Island_Nat_Grid"},
1791
+    {18142, "Proj_New_Zealand_South_Island_Nat_Grid"},
1792
+    {19900, "Proj_Bahrain_Grid"},
1793
+    {19905, "Proj_Netherlands_E_Indies_Equatorial"},
1794
+    {19912, "Proj_RSO_Borneo"}
1795
+};
1796
+
1797
+const char *const ff_tiff_coord_trans_codes[] = {
1798
+    "CT_TransverseMercator",
1799
+    "CT_TransvMercator_Modified_Alaska",
1800
+    "CT_ObliqueMercator",
1801
+    "CT_ObliqueMercator_Laborde",
1802
+    "CT_ObliqueMercator_Rosenmund",
1803
+    "CT_ObliqueMercator_Spherical",
1804
+    "CT_Mercator",
1805
+    "CT_LambertConfConic_2SP",
1806
+    "CT_LambertConfConic_Helmert",
1807
+    "CT_LambertAzimEqualArea",
1808
+    "CT_AlbersEqualArea",
1809
+    "CT_AzimuthalEquidistant",
1810
+    "CT_EquidistantConic",
1811
+    "CT_Stereographic",
1812
+    "CT_PolarStereographic",
1813
+    "CT_ObliqueStereographic",
1814
+    "CT_Equirectangular",
1815
+    "CT_CassiniSoldner",
1816
+    "CT_Gnomonic",
1817
+    "CT_MillerCylindrical",
1818
+    "CT_Orthographic",
1819
+    "CT_Polyconic",
1820
+    "CT_Robinson",
1821
+    "CT_Sinusoidal",
1822
+    "CT_VanDerGrinten",
1823
+    "CT_NewZealandMapGrid",
1824
+    "CT_TransvMercator_SouthOriented"
1825
+};
1826
+
1827
+const char *const ff_tiff_vert_cs_codes[] = {
1828
+    "VertCS_Airy_1830_ellipsoid",
1829
+    "VertCS_Airy_Modified_1849_ellipsoid",
1830
+    "VertCS_ANS_ellipsoid",
1831
+    "VertCS_Bessel_1841_ellipsoid",
1832
+    "VertCS_Bessel_Modified_ellipsoid",
1833
+    "VertCS_Bessel_Namibia_ellipsoid",
1834
+    "VertCS_Clarke_1858_ellipsoid",
1835
+    "VertCS_Clarke_1866_ellipsoid",
1836
+    "VertCS_Clarke_1880_Benoit_ellipsoid",
1837
+    "VertCS_Clarke_1880_IGN_ellipsoid",
1838
+    "VertCS_Clarke_1880_RGS_ellipsoid",
1839
+    "VertCS_Clarke_1880_Arc_ellipsoid",
1840
+    "VertCS_Clarke_1880_SGA_1922_ellipsoid",
1841
+    "VertCS_Everest_1830_1937_Adjustment_ellipsoid",
1842
+    "VertCS_Everest_1830_1967_Definition_ellipsoid",
1843
+    "VertCS_Everest_1830_1975_Definition_ellipsoid",
1844
+    "VertCS_Everest_1830_Modified_ellipsoid",
1845
+    "VertCS_GRS_1980_ellipsoid",
1846
+    "VertCS_Helmert_1906_ellipsoid",
1847
+    "VertCS_INS_ellipsoid",
1848
+    "VertCS_International_1924_ellipsoid",
1849
+    "VertCS_International_1967_ellipsoid",
1850
+    "VertCS_Krassowsky_1940_ellipsoid",
1851
+    "VertCS_NWL_9D_ellipsoid",
1852
+    "VertCS_NWL_10D_ellipsoid",
1853
+    "VertCS_Plessis_1817_ellipsoid",
1854
+    "VertCS_Struve_1860_ellipsoid",
1855
+    "VertCS_War_Office_ellipsoid",
1856
+    "VertCS_WGS_84_ellipsoid",
1857
+    "VertCS_GEM_10C_ellipsoid",
1858
+    "VertCS_OSU86F_ellipsoid",
1859
+    "VertCS_OSU91A_ellipsoid"
1860
+};
1861
+
1862
+const char *const ff_tiff_ortho_vert_cs_codes[] = {
1863
+    "VertCS_Newlyn",
1864
+    "VertCS_North_American_Vertical_Datum_1929",
1865
+    "VertCS_North_American_Vertical_Datum_1988",
1866
+    "VertCS_Yellow_Sea_1956",
1867
+    "VertCS_Baltic_Sea",
1868
+    "VertCS_Caspian_Sea"
1869
+};
0 1870
new file mode 100644
... ...
@@ -0,0 +1,92 @@
0
+/*
1
+ * TIFF data tables
2
+ * Copyright (c) 2011 Thomas Kuehnel
3
+ *
4
+ * This file is part of Libav.
5
+ *
6
+ * Libav is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * Libav is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with Libav; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+/**
22
+ * @file
23
+ * TIFF data tables
24
+ * @author Thomas Kuehnel
25
+ * @see GeoTIFF specification at
26
+ * http://www.remotesensing.org/geotiff/spec/geotiffhome.html
27
+ */
28
+
29
+#ifndef AVCODEC_TIFF_DATA_H
30
+#define AVCODEC_TIFF_DATA_H
31
+
32
+#include "tiff.h"
33
+
34
+#define TIFF_CONF_KEY_ID_OFFSET 1024
35
+extern const TiffGeoTagNameType ff_tiff_conf_name_type_map[3];
36
+
37
+#define TIFF_GEOG_KEY_ID_OFFSET 2048
38
+extern const TiffGeoTagNameType ff_tiff_geog_name_type_map[14];
39
+
40
+#define TIFF_PROJ_KEY_ID_OFFSET 3072
41
+extern const TiffGeoTagNameType ff_tiff_proj_name_type_map[24];
42
+
43
+#define TIFF_VERT_KEY_ID_OFFSET 4096
44
+extern const TiffGeoTagNameType ff_tiff_vert_name_type_map[4];
45
+
46
+#define TIFF_GEO_KEY_UNDEFINED    0
47
+#define TIFF_GEO_KEY_USER_DEFINED 32767
48
+
49
+#define TIFF_GT_MODEL_TYPE_OFFSET 1
50
+extern const char *const ff_tiff_gt_model_type_codes[3];
51
+
52
+#define TIFF_GT_RASTER_TYPE_OFFSET 1
53
+extern const char *const ff_tiff_gt_raster_type_codes[2];
54
+
55
+#define TIFF_LINEAR_UNIT_OFFSET 9001
56
+extern const char *const ff_tiff_linear_unit_codes[15];
57
+
58
+#define TIFF_ANGULAR_UNIT_OFFSET 9101
59
+extern const char *const ff_tiff_angular_unit_codes[8];
60
+
61
+#define TIFF_GCS_TYPE_OFFSET 4201
62
+extern const char *const ff_tiff_gcs_type_codes[133];
63
+
64
+#define TIFF_GCSE_TYPE_OFFSET 4001
65
+extern const char *const ff_tiff_gcse_type_codes[35];
66
+
67
+#define TIFF_GEODETIC_DATUM_OFFSET 6201
68
+extern const char *const ff_tiff_geodetic_datum_codes[120];
69
+
70
+#define TIFF_GEODETIC_DATUM_E_OFFSET 6001
71
+extern const char *const ff_tiff_geodetic_datum_e_codes[35];
72
+
73
+#define TIFF_ELLIPSOID_OFFSET 7001
74
+extern const char *const ff_tiff_ellipsoid_codes[35];
75
+
76
+#define TIFF_PRIME_MERIDIAN_OFFSET 8901
77
+extern const char *const ff_tiff_prime_meridian_codes[11];
78
+
79
+extern const TiffGeoTagKeyName ff_tiff_proj_cs_type_codes[978];
80
+
81
+extern const TiffGeoTagKeyName ff_tiff_projection_codes[298];
82
+
83
+#define TIFF_COORD_TRANS_OFFSET 1
84
+extern const char *const ff_tiff_coord_trans_codes[27];
85
+
86
+#define TIFF_VERT_CS_OFFSET 5001
87
+extern const char *const ff_tiff_vert_cs_codes[32];
88
+
89
+#define TIFF_ORTHO_VERT_CS_OFFSET 5101
90
+extern const char *const ff_tiff_ortho_vert_cs_codes[6];
91
+#endif
... ...
@@ -44,8 +44,8 @@
44 44
 #define TIFF_MAX_ENTRY 32
45 45
 
46 46
 /** sizes of various TIFF field types (string size = 1)*/
47
-static const uint8_t type_sizes2[6] = {
48
-    0, 1, 1, 2, 4, 8
47
+static const uint8_t type_sizes2[14] = {
48
+    0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
49 49
 };
50 50
 
51 51
 typedef struct TiffEncoderContext {
... ...
@@ -28,7 +28,7 @@
28 28
 
29 29
 #define LIBAVCODEC_VERSION_MAJOR 54
30 30
 #define LIBAVCODEC_VERSION_MINOR  38
31
-#define LIBAVCODEC_VERSION_MICRO 100
31
+#define LIBAVCODEC_VERSION_MICRO 101
32 32
 
33 33
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
34 34
                                                LIBAVCODEC_VERSION_MINOR, \