1/*
2 * Copyright 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef IMG_UTILS_TIFF_TAG_DEFINITION_H
18#define IMG_UTILS_TIFF_TAG_DEFINITION_H
19
20#include <img_utils/TiffEntry.h>
21#include <img_utils/Output.h>
22#include <img_utils/TiffHelpers.h>
23#include <stdint.h>
24
25namespace android {
26namespace img_utils {
27
28/**
29 * Tag definitions contain information about standard TIFF compatible tags.
30 */
31typedef struct TagDefinition {
32    // The tag name.
33    const char* tagName;
34    // The specified tag ID.
35    const uint16_t tagId;
36    // The default type for this tag.  This must be a valid TIFF type.
37    const TagType defaultType;
38    // The default Image File Directory (IFD) for this tag.
39    const uint32_t defaultIfd;
40    // The valid count for this tag, or 0 if the count is not fixed.
41    const uint32_t fixedCount;
42    // The endianness of the tag value, or UNDEFINED_ENDIAN if there is no fixed endian
43    const Endianness fixedEndian;
44} TagDefinition_t;
45
46/**
47 * Convenience defines for tag ids.
48 */
49enum {
50    TAG_RAWTOPREVIEWGAIN = 0xC7A8u,
51    TAG_NEWRAWIMAGEDIGEST = 0xC7A7u,
52    TAG_ORIGINALDEFAULTCROPSIZE = 0xC793u,
53    TAG_ORIGINALBESTQUALITYFINALSIZE = 0xC792u,
54    TAG_ORIGINALDEFAULTFINALSIZE = 0xC791u,
55    TAG_PROFILEHUESATMAPENCODING = 0xC7A3u,
56    TAG_PROFILELOOKTABLEENCODING = 0xC7A4u,
57    TAG_BASELINEEXPOSUREOFFSET = 0xC7A5u,
58    TAG_DEFAULTBLACKRENDER = 0xC7A6u,
59    TAG_DEFAULTUSERCROP = 0xC7B5u,
60    TAG_NOISEPROFILE = 0xC761u,
61    TAG_OPCODELIST3 = 0xC74Eu,
62    TAG_OPCODELIST2 = 0xC741u,
63    TAG_OPCODELIST1 = 0xC740u,
64    TAG_PROFILELOOKTABLEDATA = 0xC726u,
65    TAG_PROFILELOOKTABLEDIMS = 0xC725u,
66    TAG_ROWINTERLEAVEFACTOR = 0xC71Fu,
67    TAG_SUBTILEBLOCKSIZE = 0xC71Eu,
68    TAG_ORIGINALRAWFILEDIGEST = 0xC71Du,
69    TAG_RAWIMAGEDIGEST = 0xC71Cu,
70    TAG_PREVIEWDATETIME = 0xC71Bu,
71    TAG_PREVIEWCOLORSPACE = 0xC71Au,
72    TAG_PREVIEWSETTINGSDIGEST = 0xC719u,
73    TAG_PREVIEWSETTINGSNAME = 0xC718u,
74    TAG_PREVIEWAPPLICATIONVERSION = 0xC717u,
75    TAG_PREVIEWAPPLICATIONNAME = 0xC716u,
76    TAG_FORWARDMATRIX2 = 0xC715u,
77    TAG_FORWARDMATRIX1 = 0xC714u,
78    TAG_PROFILECOPYRIGHT = 0xC6FEu,
79    TAG_PROFILEEMBEDPOLICY = 0xC6FDu,
80    TAG_PROFILETONECURVE = 0xC6FCu,
81    TAG_PROFILEHUESATMAPDATA2 = 0xC6FBu,
82    TAG_PROFILEHUESATMAPDATA1 = 0xC6FAu,
83    TAG_PROFILEHUESATMAPDIMS = 0xC6F9u,
84    TAG_PROFILENAME = 0xC6F8u,
85    TAG_NOISEREDUCTIONAPPLIED = 0xC6F7u,
86    TAG_ASSHOTPROFILENAME = 0xC6F6u,
87    TAG_EXTRACAMERAPROFILES = 0xC6F5u,
88    TAG_PROFILECALIBRATIONSIGNATURE = 0xC6F4u,
89    TAG_CAMERACALIBRATIONSIGNATURE = 0xC6F3u,
90    TAG_COLORIMETRICREFERENCE = 0xC6BFu,
91    TAG_CURRENTPREPROFILEMATRIX = 0xC692u,
92    TAG_CURRENTICCPROFILE = 0xC691u,
93    TAG_ASSHOTPREPROFILEMATRIX = 0xC690u,
94    TAG_ASSHOTICCPROFILE = 0xC68Fu,
95    TAG_MASKEDAREAS = 0xC68Eu,
96    TAG_ACTIVEAREA = 0xC68Du,
97    TAG_ORIGINALRAWFILEDATA = 0xC68Cu,
98    TAG_ORIGINALRAWFILENAME = 0xC68Bu,
99    TAG_RAWDATAUNIQUEID = 0xC65Du,
100    TAG_MAKERNOTESAFETY = 0xC635u,
101    TAG_DNGPRIVATEDATA = 0xC634u,
102    TAG_SHADOWSCALE = 0xC633u,
103    TAG_ANTIALIASSTRENGTH = 0xC632u,
104    TAG_CHROMABLURRADIUS = 0xC631u,
105    TAG_LENSINFO = 0xC630u,
106    TAG_CAMERASERIALNUMBER = 0xC62Fu,
107    TAG_LINEARRESPONSELIMIT = 0xC62Eu,
108    TAG_BAYERGREENSPLIT = 0xC62Du,
109    TAG_BASELINESHARPNESS = 0xC62Cu,
110    TAG_BASELINENOISE = 0xC62Bu,
111    TAG_BASELINEEXPOSURE = 0xC62Au,
112    TAG_ASSHOTWHITEXY = 0xC629u,
113    TAG_ASSHOTNEUTRAL = 0xC628u,
114    TAG_ANALOGBALANCE = 0xC627u,
115    TAG_REDUCTIONMATRIX2 = 0xC626u,
116    TAG_REDUCTIONMATRIX1 = 0xC625u,
117    TAG_CAMERACALIBRATION2 = 0xC624u,
118    TAG_CAMERACALIBRATION1 = 0xC623u,
119    TAG_COLORMATRIX2 = 0xC622u,
120    TAG_COLORMATRIX1 = 0xC621u,
121    TAG_CALIBRATIONILLUMINANT2 = 0xC65Bu,
122    TAG_CALIBRATIONILLUMINANT1 = 0xC65Au,
123    TAG_DEFAULTCROPSIZE = 0xC620u,
124    TAG_DEFAULTCROPORIGIN = 0xC61Fu,
125    TAG_BESTQUALITYSCALE = 0xC65Cu,
126    TAG_DEFAULTSCALE = 0xC61Eu,
127    TAG_WHITELEVEL = 0xC61Du,
128    TAG_BLACKLEVELDELTAV = 0xC61Cu,
129    TAG_BLACKLEVELDELTAH = 0xC61Bu,
130    TAG_BLACKLEVEL = 0xC61Au,
131    TAG_BLACKLEVELREPEATDIM = 0xC619u,
132    TAG_LINEARIZATIONTABLE = 0xC618u,
133    TAG_CFALAYOUT = 0xC617u,
134    TAG_CFAPLANECOLOR = 0xC616u,
135    TAG_LOCALIZEDCAMERAMODEL = 0xC615u,
136    TAG_UNIQUECAMERAMODEL = 0xC614u,
137    TAG_DNGBACKWARDVERSION = 0xC613u,
138    TAG_DNGVERSION = 0xC612u,
139    TAG_SUBFILETYPE = 0x00FFu,
140    TAG_YRESOLUTION = 0x011Bu,
141    TAG_XRESOLUTION = 0x011Au,
142    TAG_THRESHHOLDING = 0x0107u,
143    TAG_STRIPOFFSETS = 0x0111u,
144    TAG_STRIPBYTECOUNTS = 0x0117u,
145    TAG_SOFTWARE = 0x0131u,
146    TAG_SAMPLESPERPIXEL = 0x0115u,
147    TAG_ROWSPERSTRIP = 0x0116u,
148    TAG_RESOLUTIONUNIT = 0x0128u,
149    TAG_PLANARCONFIGURATION = 0x011Cu,
150    TAG_PHOTOMETRICINTERPRETATION = 0x0106u,
151    TAG_ORIENTATION = 0x0112u,
152    TAG_NEWSUBFILETYPE = 0x00FEu,
153    TAG_MODEL = 0x0110u,
154    TAG_MINSAMPLEVALUE = 0x0118u,
155    TAG_MAXSAMPLEVALUE = 0x0119u,
156    TAG_MAKE = 0x010Fu,
157    TAG_IMAGEWIDTH = 0x0100u,
158    TAG_IMAGELENGTH = 0x0101u,
159    TAG_IMAGEDESCRIPTION = 0x010Eu,
160    TAG_HOSTCOMPUTER = 0x013Cu,
161    TAG_GRAYRESPONSEUNIT = 0x0122u,
162    TAG_GRAYRESPONSECURVE = 0x0123u,
163    TAG_FREEOFFSETS = 0x0120u,
164    TAG_FREEBYTECOUNTS = 0x0121u,
165    TAG_FILLORDER = 0x010Au,
166    TAG_EXTRASAMPLES = 0x0152u,
167    TAG_DATETIME = 0x0132u,
168    TAG_COPYRIGHT = 0x8298u,
169    TAG_COMPRESSION = 0x0103u,
170    TAG_COLORMAP = 0x0140u,
171    TAG_CELLWIDTH = 0x0108u,
172    TAG_CELLLENGTH = 0x0109u,
173    TAG_BITSPERSAMPLE = 0x0102u,
174    TAG_ARTIST = 0x013Bu,
175    TAG_EXIFVERSION = 0x9000u,
176    TAG_CFAREPEATPATTERNDIM = 0x828Du,
177    TAG_DATETIMEORIGINAL = 0x9003u,
178    TAG_CFAPATTERN = 0x828Eu,
179    TAG_SUBIFDS = 0x014Au,
180    TAG_TIFFEPSTANDARDID = 0x9216u,
181    TAG_EXPOSURETIME = 0x829Au,
182    TAG_ISOSPEEDRATINGS = 0x8827u,
183    TAG_FOCALLENGTH = 0x920Au,
184    TAG_FNUMBER = 0x829Du,
185    TAG_GPSINFO = 0x8825u,
186    TAG_GPSVERSIONID = 0x0u,
187    TAG_GPSLATITUDEREF = 0x1u,
188    TAG_GPSLATITUDE = 0x2u,
189    TAG_GPSLONGITUDEREF = 0x3u,
190    TAG_GPSLONGITUDE = 0x4u,
191    TAG_GPSTIMESTAMP = 0x7u,
192    TAG_GPSDATESTAMP = 0x001Du,
193};
194
195/**
196 * Convenience values for tags with enumerated values
197 */
198
199enum {
200    TAG_ORIENTATION_NORMAL = 1,
201    TAG_ORIENTATION_ROTATE_180 = 3,
202    TAG_ORIENTATION_ROTATE_90 = 6,
203    TAG_ORIENTATION_ROTATE_270 = 8,
204    TAG_ORIENTATION_UNKNOWN = 9
205};
206
207/**
208 * TIFF_EP_TAG_DEFINITIONS contains tags defined in the TIFF EP spec
209 */
210const TagDefinition_t TIFF_EP_TAG_DEFINITIONS[] =  {
211    { // PhotometricInterpretation
212        "PhotometricInterpretation",
213        0x0106u,
214        SHORT,
215        IFD_0,
216        1,
217        UNDEFINED_ENDIAN
218    },
219    { // SubIfds
220        "SubIfds",
221        0x014Au,
222        LONG,
223        IFD_0,
224        0,
225        UNDEFINED_ENDIAN
226    },
227    { // CFAPattern
228        "CFAPattern",
229        0x828Eu,
230        BYTE,
231        IFD_0,
232        0,
233        UNDEFINED_ENDIAN
234    },
235    { // CFARepeatPatternDim
236        "CFARepeatPatternDim",
237        0x828Du,
238        SHORT,
239        IFD_0,
240        2,
241        UNDEFINED_ENDIAN
242    },
243    { // DateTimeOriginal
244        "DateTimeOriginal",
245        0x9003u,
246        ASCII,
247        IFD_0,
248        20,
249        UNDEFINED_ENDIAN
250    },
251    { // Tiff/EPStandardID
252        "Tiff",
253        0x9216u,
254        BYTE,
255        IFD_0,
256        4,
257        UNDEFINED_ENDIAN
258    },
259    { // ExposureTime
260        "ExposureTime",
261        0x829Au,
262        RATIONAL,
263        IFD_0,
264        0,
265        UNDEFINED_ENDIAN
266    },
267    { // ISOSpeedRatings
268        "ISOSpeedRatings",
269        0x8827u,
270        SHORT,
271        IFD_0,
272        0,
273        UNDEFINED_ENDIAN
274    },
275    { // FocalLength
276        "FocalLength",
277        0x920Au,
278        RATIONAL,
279        IFD_0,
280        0,
281        UNDEFINED_ENDIAN
282    },
283    { // FNumber
284        "FNumber",
285        0x829Du,
286        RATIONAL,
287        IFD_0,
288        0,
289        UNDEFINED_ENDIAN
290    },
291    { // GPSInfo
292        "GPSInfo",
293        0x8825u,
294        LONG,
295        IFD_0,
296        1,
297        UNDEFINED_ENDIAN
298    },
299    { // GPSVersionID
300        "GPSVersionID",
301        0x0u,
302        BYTE,
303        IFD_0,
304        4,
305        UNDEFINED_ENDIAN
306    },
307    { // GPSLatitudeRef
308        "GPSLatitudeRef",
309        0x1u,
310        ASCII,
311        IFD_0,
312        2,
313        UNDEFINED_ENDIAN
314    },
315    { // GPSLatitude
316        "GPSLatitude",
317        0x2u,
318        RATIONAL,
319        IFD_0,
320        3,
321        UNDEFINED_ENDIAN
322    },
323    { // GPSLongitudeRef
324        "GPSLongitudeRef",
325        0x3u,
326        ASCII,
327        IFD_0,
328        2,
329        UNDEFINED_ENDIAN
330    },
331    { // GPSLongitude
332        "GPSLongitude",
333        0x4u,
334        RATIONAL,
335        IFD_0,
336        3,
337        UNDEFINED_ENDIAN
338    },
339    { // GPSTimeStamp
340        "GPSTimeStamp",
341        0x7u,
342        RATIONAL,
343        IFD_0,
344        3,
345        UNDEFINED_ENDIAN
346    },
347    /*TODO: Remaining TIFF EP tags*/
348};
349
350/**
351 * EXIF_2_3_TAG_DEFINITIONS contains tags defined in the Jeita EXIF 2.3 spec
352 */
353const TagDefinition_t EXIF_2_3_TAG_DEFINITIONS[] = {
354    { // ExifVersion
355        "ExifVersion",
356        0x9000u,
357        UNDEFINED,
358        IFD_0,
359        4,
360        UNDEFINED_ENDIAN
361    },
362    { // GPSDateStamp
363        "GPSDateStamp",
364        0x001Du,
365        ASCII,
366        IFD_0,
367        11,
368        UNDEFINED_ENDIAN
369    },
370    /*TODO: Remaining EXIF 2.3 tags*/
371};
372
373/**
374 * TIFF_6_TAG_DEFINITIONS contains tags defined in the TIFF 6.0 spec
375 */
376const TagDefinition_t TIFF_6_TAG_DEFINITIONS[] = {
377    { // SubFileType
378        "SubFileType",
379        0x00FFu,
380        SHORT,
381        IFD_0,
382        1,
383        UNDEFINED_ENDIAN
384    },
385    { // Artist
386        "Artist",
387        0x013Bu,
388        ASCII,
389        IFD_0,
390        0,
391        UNDEFINED_ENDIAN
392    },
393    { // BitsPerSample
394        "BitsPerSample",
395        0x0102u,
396        SHORT,
397        IFD_0,
398        0,
399        UNDEFINED_ENDIAN
400    },
401    { // CellLength
402        "CellLength",
403        0x0109u,
404        SHORT,
405        IFD_0,
406        1,
407        UNDEFINED_ENDIAN
408    },
409    { // CellWidth
410        "CellWidth",
411        0x0108u,
412        SHORT,
413        IFD_0,
414        1,
415        UNDEFINED_ENDIAN
416    },
417    { // ColorMap
418        "ColorMap",
419        0x0140u,
420        SHORT,
421        IFD_0,
422        0,
423        UNDEFINED_ENDIAN
424    },
425    { // Compression
426        "Compression",
427        0x0103u,
428        SHORT,
429        IFD_0,
430        1,
431        UNDEFINED_ENDIAN
432    },
433    { // Copyright
434        "Copyright",
435        0x8298u,
436        ASCII,
437        IFD_0,
438        0,
439        UNDEFINED_ENDIAN
440    },
441    { // DateTime
442        "DateTime",
443        0x0132u,
444        ASCII,
445        IFD_0,
446        20,
447        UNDEFINED_ENDIAN
448    },
449    { // ExtraSamples
450        "ExtraSamples",
451        0x0152u,
452        SHORT,
453        IFD_0,
454        0,
455        UNDEFINED_ENDIAN
456    },
457    { // FillOrder
458        "FillOrder",
459        0x010Au,
460        SHORT,
461        IFD_0,
462        1,
463        UNDEFINED_ENDIAN
464    },
465    { // FreeByteCounts
466        "FreeByteCounts",
467        0x0121u,
468        LONG,
469        IFD_0,
470        1,
471        UNDEFINED_ENDIAN
472    },
473    { // FreeOffsets
474        "FreeOffsets",
475        0x0120u,
476        LONG,
477        IFD_0,
478        1,
479        UNDEFINED_ENDIAN
480    },
481    { // GrayResponseCurve
482        "GrayResponseCurve",
483        0x0123u,
484        SHORT,
485        IFD_0,
486        0,
487        UNDEFINED_ENDIAN
488    },
489    { // GrayResponseUnit
490        "GrayResponseUnit",
491        0x0122u,
492        SHORT,
493        IFD_0,
494        1,
495        UNDEFINED_ENDIAN
496    },
497    { // HostComputer
498        "HostComputer",
499        0x013Cu,
500        ASCII,
501        IFD_0,
502        0,
503        UNDEFINED_ENDIAN
504    },
505    { // ImageDescription
506        "ImageDescription",
507        0x010Eu,
508        ASCII,
509        IFD_0,
510        0,
511        UNDEFINED_ENDIAN
512    },
513    { // ImageLength
514        "ImageLength",
515        0x0101u,
516        LONG,
517        IFD_0,
518        1,
519        UNDEFINED_ENDIAN
520    },
521    { // ImageWidth
522        "ImageWidth",
523        0x0100u,
524        LONG,
525        IFD_0,
526        1,
527        UNDEFINED_ENDIAN
528    },
529    { // Make
530        "Make",
531        0x010Fu,
532        ASCII,
533        IFD_0,
534        0,
535        UNDEFINED_ENDIAN
536    },
537    { // MaxSampleValue
538        "MaxSampleValue",
539        0x0119u,
540        SHORT,
541        IFD_0,
542        0,
543        UNDEFINED_ENDIAN
544    },
545    { // MinSampleValue
546        "MinSampleValue",
547        0x0118u,
548        SHORT,
549        IFD_0,
550        0,
551        UNDEFINED_ENDIAN
552    },
553    { // Model
554        "Model",
555        0x0110u,
556        ASCII,
557        IFD_0,
558        0,
559        UNDEFINED_ENDIAN
560    },
561    { // NewSubfileType
562        "NewSubfileType",
563        0x00FEu,
564        LONG,
565        IFD_0,
566        1,
567        UNDEFINED_ENDIAN
568    },
569    { // Orientation
570        "Orientation",
571        0x0112u,
572        SHORT,
573        IFD_0,
574        1,
575        UNDEFINED_ENDIAN
576    },
577    { // PhotoMetricInterpretation
578        "PhotoMetricInterpretation",
579        0x0106u,
580        SHORT,
581        IFD_0,
582        1,
583        UNDEFINED_ENDIAN
584    },
585    { // PlanarConfiguration
586        "PlanarConfiguration",
587        0x011Cu,
588        SHORT,
589        IFD_0,
590        1,
591        UNDEFINED_ENDIAN
592    },
593    { // ResolutionUnit
594        "ResolutionUnit",
595        0x0128u,
596        SHORT,
597        IFD_0,
598        1,
599        UNDEFINED_ENDIAN
600    },
601    { // RowsPerStrip
602        "RowsPerStrip",
603        0x0116u,
604        LONG,
605        IFD_0,
606        1,
607        UNDEFINED_ENDIAN
608    },
609    { // SamplesPerPixel
610        "SamplesPerPixel",
611        0x0115u,
612        SHORT,
613        IFD_0,
614        1,
615        UNDEFINED_ENDIAN
616    },
617    { // Software
618        "Software",
619        0x0131u,
620        ASCII,
621        IFD_0,
622        0,
623        UNDEFINED_ENDIAN
624    },
625    { // StripByteCounts
626        "StripByteCounts",
627        0x0117u,
628        LONG,
629        IFD_0,
630        0,
631        UNDEFINED_ENDIAN
632    },
633    { // StripOffsets
634        "StripOffsets",
635        0x0111u,
636        LONG,
637        IFD_0,
638        0,
639        UNDEFINED_ENDIAN
640    },
641    { // SubfileType
642        "SubfileType",
643        0x00FFu,
644        SHORT,
645        IFD_0,
646        1,
647        UNDEFINED_ENDIAN
648    },
649    { // Threshholding
650        "Threshholding",
651        0x0107u,
652        SHORT,
653        IFD_0,
654        1,
655        UNDEFINED_ENDIAN
656    },
657    { // XResolution
658        "XResolution",
659        0x011Au,
660        RATIONAL,
661        IFD_0,
662        1,
663        UNDEFINED_ENDIAN
664    },
665    { // YResolution
666        "YResolution",
667        0x011Bu,
668        RATIONAL,
669        IFD_0,
670        1,
671        UNDEFINED_ENDIAN
672    },
673};
674
675/**
676 * DNG_TAG_DEFINITIONS contains tags defined in the DNG 1.4 spec
677 */
678const TagDefinition_t DNG_TAG_DEFINITIONS[] = {
679    { // DNGVersion
680        "DNGVersion",
681        0xC612u,
682        BYTE,
683        IFD_0,
684        4,
685        UNDEFINED_ENDIAN
686    },
687    { // DNGBackwardVersion
688        "DNGBackwardVersion",
689        0xC613u,
690        BYTE,
691        IFD_0,
692        4,
693        UNDEFINED_ENDIAN
694    },
695    { // UniqueCameraModel
696        "UniqueCameraModel",
697        0xC614u,
698        ASCII,
699        IFD_0,
700        0,
701        UNDEFINED_ENDIAN
702    },
703    { // LocalizedCameraModel
704        "LocalizedCameraModel",
705        0xC615u,
706        ASCII,
707        IFD_0,
708        0,
709        UNDEFINED_ENDIAN
710    },
711    { // CFAPlaneColor
712        "CFAPlaneColor",
713        0xC616u,
714        BYTE,
715        RAW_IFD,
716        0,
717        UNDEFINED_ENDIAN
718    },
719    { // CFALayout
720        "CFALayout",
721        0xC617u,
722        SHORT,
723        RAW_IFD,
724        1,
725        UNDEFINED_ENDIAN
726    },
727    { // LinearizationTable
728        "LinearizationTable",
729        0xC618u,
730        SHORT,
731        RAW_IFD,
732        0,
733        UNDEFINED_ENDIAN
734    },
735    { // BlackLevelRepeatDim
736        "BlackLevelRepeatDim",
737        0xC619u,
738        SHORT,
739        RAW_IFD,
740        2,
741        UNDEFINED_ENDIAN
742    },
743    { // BlackLevel
744        "BlackLevel",
745        0xC61Au,
746        RATIONAL,
747        RAW_IFD,
748        0,
749        UNDEFINED_ENDIAN
750    },
751    { // BlackLevelDeltaH
752        "BlackLevelDeltaH",
753        0xC61Bu,
754        SRATIONAL,
755        RAW_IFD,
756        0,
757        UNDEFINED_ENDIAN
758    },
759    { // BlackLevelDeltaV
760        "BlackLevelDeltaV",
761        0xC61Cu,
762        SRATIONAL,
763        RAW_IFD,
764        0,
765        UNDEFINED_ENDIAN
766    },
767    { // WhiteLevel
768        "WhiteLevel",
769        0xC61Du,
770        LONG,
771        RAW_IFD,
772        0,
773        UNDEFINED_ENDIAN
774    },
775    { // DefaultScale
776        "DefaultScale",
777        0xC61Eu,
778        RATIONAL,
779        RAW_IFD,
780        2,
781        UNDEFINED_ENDIAN
782    },
783    { // BestQualityScale
784        "BestQualityScale",
785        0xC65Cu,
786        RATIONAL,
787        RAW_IFD,
788        1,
789        UNDEFINED_ENDIAN
790    },
791    { // DefaultCropOrigin
792        "DefaultCropOrigin",
793        0xC61Fu,
794        LONG,
795        RAW_IFD,
796        2,
797        UNDEFINED_ENDIAN
798    },
799    { // DefaultCropSize
800        "DefaultCropSize",
801        0xC620u,
802        LONG,
803        RAW_IFD,
804        2,
805        UNDEFINED_ENDIAN
806    },
807    { // CalibrationIlluminant1
808        "CalibrationIlluminant1",
809        0xC65Au,
810        SHORT,
811        PROFILE_IFD,
812        1,
813        UNDEFINED_ENDIAN
814    },
815    { // CalibrationIlluminant2
816        "CalibrationIlluminant2",
817        0xC65Bu,
818        SHORT,
819        PROFILE_IFD,
820        1,
821        UNDEFINED_ENDIAN
822    },
823    { // ColorMatrix1
824        "ColorMatrix1",
825        0xC621u,
826        SRATIONAL,
827        PROFILE_IFD,
828        0,
829        UNDEFINED_ENDIAN
830    },
831    { // ColorMatrix2
832        "ColorMatrix2",
833        0xC622u,
834        SRATIONAL,
835        PROFILE_IFD,
836        0,
837        UNDEFINED_ENDIAN
838    },
839    { // CameraCalibration1
840        "CameraCalibration1",
841        0xC623u,
842        SRATIONAL,
843        IFD_0,
844        0,
845        UNDEFINED_ENDIAN
846    },
847    { // CameraCalibration2
848        "CameraCalibration2",
849        0xC624u,
850        SRATIONAL,
851        IFD_0,
852        0,
853        UNDEFINED_ENDIAN
854    },
855    { // ReductionMatrix1
856        "ReductionMatrix1",
857        0xC625u,
858        SRATIONAL,
859        PROFILE_IFD,
860        0,
861        UNDEFINED_ENDIAN
862    },
863    { // ReductionMatrix2
864        "ReductionMatrix2",
865        0xC626u,
866        SRATIONAL,
867        PROFILE_IFD,
868        0,
869        UNDEFINED_ENDIAN
870    },
871    { // AnalogBalance
872        "AnalogBalance",
873        0xC627u,
874        RATIONAL,
875        IFD_0,
876        0,
877        UNDEFINED_ENDIAN
878    },
879    { // AsShotNeutral
880        "AsShotNeutral",
881        0xC628u,
882        RATIONAL,
883        IFD_0,
884        0,
885        UNDEFINED_ENDIAN
886    },
887    { // AsShotWhiteXY
888        "AsShotWhiteXY",
889        0xC629u,
890        RATIONAL,
891        IFD_0,
892        2,
893        UNDEFINED_ENDIAN
894    },
895    { // BaselineExposure
896        "BaselineExposure",
897        0xC62Au,
898        SRATIONAL,
899        IFD_0,
900        1,
901        UNDEFINED_ENDIAN
902    },
903    { // BaselineNoise
904        "BaselineNoise",
905        0xC62Bu,
906        RATIONAL,
907        IFD_0,
908        1,
909        UNDEFINED_ENDIAN
910    },
911    { // BaselineSharpness
912        "BaselineSharpness",
913        0xC62Cu,
914        RATIONAL,
915        IFD_0,
916        1,
917        UNDEFINED_ENDIAN
918    },
919    { // BayerGreenSplit
920        "BayerGreenSplit",
921        0xC62Du,
922        LONG,
923        RAW_IFD,
924        1,
925        UNDEFINED_ENDIAN
926    },
927    { // LinearResponseLimit
928        "LinearResponseLimit",
929        0xC62Eu,
930        RATIONAL,
931        IFD_0,
932        1,
933        UNDEFINED_ENDIAN
934    },
935    { // CameraSerialNumber
936        "CameraSerialNumber",
937        0xC62Fu,
938        ASCII,
939        IFD_0,
940        0,
941        UNDEFINED_ENDIAN
942    },
943    { // LensInfo
944        "LensInfo",
945        0xC630u,
946        RATIONAL,
947        IFD_0,
948        4,
949        UNDEFINED_ENDIAN
950    },
951    { // ChromaBlurRadius
952        "ChromaBlurRadius",
953        0xC631u,
954        RATIONAL,
955        RAW_IFD,
956        1,
957        UNDEFINED_ENDIAN
958    },
959    { // AntiAliasStrength
960        "AntiAliasStrength",
961        0xC632u,
962        RATIONAL,
963        RAW_IFD,
964        1,
965        UNDEFINED_ENDIAN
966    },
967    { // ShadowScale
968        "ShadowScale",
969        0xC633u,
970        RATIONAL,
971        IFD_0,
972        1,
973        UNDEFINED_ENDIAN
974    },
975    { // DNGPrivateData
976        "DNGPrivateData",
977        0xC634u,
978        BYTE,
979        IFD_0,
980        0,
981        UNDEFINED_ENDIAN
982    },
983    { // MakerNoteSafety
984        "MakerNoteSafety",
985        0xC635u,
986        SHORT,
987        IFD_0,
988        1,
989        UNDEFINED_ENDIAN
990    },
991    { // RawDataUniqueID
992        "RawDataUniqueID",
993        0xC65Du,
994        BYTE,
995        IFD_0,
996        16,
997        UNDEFINED_ENDIAN
998    },
999    { // OriginalRawFileName
1000        "OriginalRawFileName",
1001        0xC68Bu,
1002        ASCII,
1003        IFD_0,
1004        0,
1005        UNDEFINED_ENDIAN
1006    },
1007    { // OriginalRawFileData
1008        "OriginalRawFileData",
1009        0xC68Cu,
1010        UNDEFINED,
1011        IFD_0,
1012        0,
1013        BIG
1014    },
1015    { // ActiveArea
1016        "ActiveArea",
1017        0xC68Du,
1018        LONG,
1019        RAW_IFD,
1020        4,
1021        UNDEFINED_ENDIAN
1022    },
1023    { // MaskedAreas
1024        "MaskedAreas",
1025        0xC68Eu,
1026        LONG,
1027        RAW_IFD,
1028        0,
1029        UNDEFINED_ENDIAN
1030    },
1031    { // AsShotICCProfile
1032        "AsShotICCProfile",
1033        0xC68Fu,
1034        UNDEFINED,
1035        IFD_0,
1036        0,
1037        UNDEFINED_ENDIAN
1038    },
1039    { // AsShotPreProfileMatrix
1040        "AsShotPreProfileMatrix",
1041        0xC690u,
1042        SRATIONAL,
1043        IFD_0,
1044        0,
1045        UNDEFINED_ENDIAN
1046    },
1047    { // CurrentICCProfile
1048        "CurrentICCProfile",
1049        0xC691u,
1050        UNDEFINED,
1051        IFD_0,
1052        0,
1053        UNDEFINED_ENDIAN
1054    },
1055    { // CurrentICCProfile
1056        "CurrentICCProfile",
1057        0xC691u,
1058        UNDEFINED,
1059        IFD_0,
1060        0,
1061        UNDEFINED_ENDIAN
1062    },
1063    { // CurrentPreProfileMatrix
1064        "CurrentPreProfileMatrix",
1065        0xC692u,
1066        SRATIONAL,
1067        IFD_0,
1068        0,
1069        UNDEFINED_ENDIAN
1070    },
1071    { // ColorimetricReference
1072        "ColorimetricReference",
1073        0xC6BFu,
1074        SHORT,
1075        IFD_0,
1076        1,
1077        UNDEFINED_ENDIAN
1078    },
1079    { // CameraCalibrationSignature
1080        "CameraCalibrationSignature",
1081        0xC6F3u,
1082        ASCII,
1083        IFD_0,
1084        0,
1085        UNDEFINED_ENDIAN
1086    },
1087    { // ProfileCalibrationSignature
1088        "ProfileCalibrationSignature",
1089        0xC6F4u,
1090        ASCII,
1091        PROFILE_IFD,
1092        0,
1093        UNDEFINED_ENDIAN
1094    },
1095    { // ExtraCameraProfiles
1096        "ExtraCameraProfiles",
1097        0xC6F5u,
1098        LONG,
1099        IFD_0,
1100        0,
1101        UNDEFINED_ENDIAN
1102    },
1103    { // AsShotProfileName
1104        "AsShotProfileName",
1105        0xC6F6u,
1106        ASCII,
1107        IFD_0,
1108        0,
1109        UNDEFINED_ENDIAN
1110    },
1111    { // NoiseReductionApplied
1112        "NoiseReductionApplied",
1113        0xC6F7u,
1114        RATIONAL,
1115        RAW_IFD,
1116        1,
1117        UNDEFINED_ENDIAN
1118    },
1119    { // ProfileName
1120        "ProfileName",
1121        0xC6F8u,
1122        ASCII,
1123        PROFILE_IFD,
1124        0,
1125        UNDEFINED_ENDIAN
1126    },
1127    { // ProfileHueSatMapDims
1128        "ProfileHueSatMapDims",
1129        0xC6F9u,
1130        LONG,
1131        PROFILE_IFD,
1132        3,
1133        UNDEFINED_ENDIAN
1134    },
1135    { // ProfileHueSatMapData1
1136        "ProfileHueSatMapData1",
1137        0xC6FAu,
1138        FLOAT,
1139        PROFILE_IFD,
1140        0,
1141        UNDEFINED_ENDIAN
1142    },
1143    { // ProfileHueSatMapData2
1144        "ProfileHueSatMapData2",
1145        0xC6FBu,
1146        FLOAT,
1147        PROFILE_IFD,
1148        0,
1149        UNDEFINED_ENDIAN
1150    },
1151    { // ProfileToneCurve
1152        "ProfileToneCurve",
1153        0xC6FCu,
1154        FLOAT,
1155        PROFILE_IFD,
1156        0,
1157        UNDEFINED_ENDIAN
1158    },
1159    { // ProfileEmbedPolicy
1160        "ProfileEmbedPolicy",
1161        0xC6FDu,
1162        LONG,
1163        PROFILE_IFD,
1164        1,
1165        UNDEFINED_ENDIAN
1166    },
1167    { // ProfileCopyright
1168        "ProfileCopyright",
1169        0xC6FEu,
1170        ASCII,
1171        PROFILE_IFD,
1172        0,
1173        UNDEFINED_ENDIAN
1174    },
1175    { // ForwardMatrix1
1176        "ForwardMatrix1",
1177        0xC714u,
1178        SRATIONAL,
1179        PROFILE_IFD,
1180        0,
1181        UNDEFINED_ENDIAN
1182    },
1183    { // ForwardMatrix2
1184        "ForwardMatrix2",
1185        0xC715u,
1186        SRATIONAL,
1187        PROFILE_IFD,
1188        0,
1189        UNDEFINED_ENDIAN
1190    },
1191    { // PreviewApplicationName
1192        "PreviewApplicationName",
1193        0xC716u,
1194        ASCII,
1195        PREVIEW_IFD,
1196        0,
1197        UNDEFINED_ENDIAN
1198    },
1199    { // PreviewApplicationVersion
1200        "PreviewApplicationVersion",
1201        0xC717u,
1202        ASCII,
1203        PREVIEW_IFD,
1204        0,
1205        UNDEFINED_ENDIAN
1206    },
1207    { // PreviewSettingsName
1208        "PreviewSettingsName",
1209        0xC718u,
1210        ASCII,
1211        PREVIEW_IFD,
1212        0,
1213        UNDEFINED_ENDIAN
1214    },
1215    { // PreviewSettingsDigest
1216        "PreviewSettingsDigest",
1217        0xC719u,
1218        BYTE,
1219        PREVIEW_IFD,
1220        16,
1221        UNDEFINED_ENDIAN
1222    },
1223    { // PreviewColorSpace
1224        "PreviewColorSpace",
1225        0xC71Au,
1226        LONG,
1227        PREVIEW_IFD,
1228        1,
1229        UNDEFINED_ENDIAN
1230    },
1231    { // PreviewDateTime
1232        "PreviewDateTime",
1233        0xC71Bu,
1234        ASCII,
1235        PREVIEW_IFD,
1236        0,
1237        UNDEFINED_ENDIAN
1238    },
1239    { // RawImageDigest
1240        "RawImageDigest",
1241        0xC71Cu,
1242        BYTE,
1243        IFD_0,
1244        16,
1245        UNDEFINED_ENDIAN
1246    },
1247    { // OriginalRawFileDigest
1248        "OriginalRawFileDigest",
1249        0xC71Du,
1250        BYTE,
1251        IFD_0,
1252        16,
1253        UNDEFINED_ENDIAN
1254    },
1255    { // SubTileBlockSize
1256        "SubTileBlockSize",
1257        0xC71Eu,
1258        LONG,
1259        RAW_IFD,
1260        2,
1261        UNDEFINED_ENDIAN
1262    },
1263    { // RowInterleaveFactor
1264        "RowInterleaveFactor",
1265        0xC71Fu,
1266        LONG,
1267        RAW_IFD,
1268        1,
1269        UNDEFINED_ENDIAN
1270    },
1271    { // ProfileLookTableDims
1272        "ProfileLookTableDims",
1273        0xC725u,
1274        LONG,
1275        PROFILE_IFD,
1276        3,
1277        UNDEFINED_ENDIAN
1278    },
1279    { // ProfileLookTableData
1280        "ProfileLookTableData",
1281        0xC726u,
1282        FLOAT,
1283        PROFILE_IFD,
1284        0,
1285        UNDEFINED_ENDIAN
1286    },
1287    { // OpcodeList1
1288        "OpcodeList1",
1289        0xC740u,
1290        UNDEFINED,
1291        RAW_IFD,
1292        0,
1293        BIG
1294    },
1295    { // OpcodeList2
1296        "OpcodeList2",
1297        0xC741u,
1298        UNDEFINED,
1299        RAW_IFD,
1300        0,
1301        BIG
1302    },
1303    { // OpcodeList3
1304        "OpcodeList3",
1305        0xC74Eu,
1306        UNDEFINED,
1307        RAW_IFD,
1308        0,
1309        BIG
1310    },
1311    { // NoiseProfile
1312        "NoiseProfile",
1313        0xC761u,
1314        DOUBLE,
1315        RAW_IFD,
1316        0,
1317        UNDEFINED_ENDIAN
1318    },
1319    { // DefaultUserCrop
1320        "DefaultUserCrop",
1321        0xC7B5u,
1322        RATIONAL,
1323        RAW_IFD,
1324        4,
1325        UNDEFINED_ENDIAN
1326    },
1327    { // DefaultBlackRender
1328        "DefaultBlackRender",
1329        0xC7A6u,
1330        LONG,
1331        PROFILE_IFD,
1332        1,
1333        UNDEFINED_ENDIAN
1334    },
1335    { // BaselineExposureOffset
1336        "BaselineExposureOffset",
1337        0xC7A5u,
1338        RATIONAL,
1339        PROFILE_IFD,
1340        1,
1341        UNDEFINED_ENDIAN
1342    },
1343    { // ProfileLookTableEncoding
1344        "ProfileLookTableEncoding",
1345        0xC7A4u,
1346        LONG,
1347        PROFILE_IFD,
1348        1,
1349        UNDEFINED_ENDIAN
1350    },
1351    { // ProfileHueSatMapEncoding
1352        "ProfileHueSatMapEncoding",
1353        0xC7A3u,
1354        LONG,
1355        PROFILE_IFD,
1356        1,
1357        UNDEFINED_ENDIAN
1358    },
1359    { // OriginalDefaultFinalSize
1360        "OriginalDefaultFinalSize",
1361        0xC791u,
1362        LONG,
1363        IFD_0,
1364        2,
1365        UNDEFINED_ENDIAN
1366    },
1367    { // OriginalBestQualityFinalSize
1368        "OriginalBestQualityFinalSize",
1369        0xC792u,
1370        LONG,
1371        IFD_0,
1372        2,
1373        UNDEFINED_ENDIAN
1374    },
1375    { // OriginalDefaultCropSize
1376        "OriginalDefaultCropSize",
1377        0xC793u,
1378        LONG,
1379        IFD_0,
1380        2,
1381        UNDEFINED_ENDIAN
1382    },
1383    { // NewRawImageDigest
1384        "NewRawImageDigest",
1385        0xC7A7u,
1386        BYTE,
1387        IFD_0,
1388        16,
1389        UNDEFINED_ENDIAN
1390    },
1391    { // RawToPreviewGain
1392        "RawToPreviewGain",
1393        0xC7A8u,
1394        DOUBLE,
1395        PREVIEW_IFD,
1396        1,
1397        UNDEFINED_ENDIAN
1398    },
1399};
1400
1401} /*namespace img_utils*/
1402} /*namespace android*/
1403
1404#endif /*IMG_UTILS_TIFF_TAG_DEFINITION_H*/
1405