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 
25 namespace android {
26 namespace img_utils {
27 
28 /**
29  * Tag definitions contain information about standard TIFF compatible tags.
30  */
31 typedef 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  */
49 enum {
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  * TIFF_EP_TAG_DEFINITIONS contains tags defined in the TIFF EP spec
197  */
198 const TagDefinition_t TIFF_EP_TAG_DEFINITIONS[] =  {
199     { // PhotometricInterpretation
200         "PhotometricInterpretation",
201         0x0106u,
202         SHORT,
203         IFD_0,
204         1,
205         UNDEFINED_ENDIAN
206     },
207     { // SubIfds
208         "SubIfds",
209         0x014Au,
210         LONG,
211         IFD_0,
212         0,
213         UNDEFINED_ENDIAN
214     },
215     { // CFAPattern
216         "CFAPattern",
217         0x828Eu,
218         BYTE,
219         IFD_0,
220         0,
221         UNDEFINED_ENDIAN
222     },
223     { // CFARepeatPatternDim
224         "CFARepeatPatternDim",
225         0x828Du,
226         SHORT,
227         IFD_0,
228         2,
229         UNDEFINED_ENDIAN
230     },
231     { // DateTimeOriginal
232         "DateTimeOriginal",
233         0x9003u,
234         ASCII,
235         IFD_0,
236         20,
237         UNDEFINED_ENDIAN
238     },
239     { // Tiff/EPStandardID
240         "Tiff",
241         0x9216u,
242         BYTE,
243         IFD_0,
244         4,
245         UNDEFINED_ENDIAN
246     },
247     { // ExposureTime
248         "ExposureTime",
249         0x829Au,
250         RATIONAL,
251         IFD_0,
252         0,
253         UNDEFINED_ENDIAN
254     },
255     { // ISOSpeedRatings
256         "ISOSpeedRatings",
257         0x8827u,
258         SHORT,
259         IFD_0,
260         0,
261         UNDEFINED_ENDIAN
262     },
263     { // FocalLength
264         "FocalLength",
265         0x920Au,
266         RATIONAL,
267         IFD_0,
268         0,
269         UNDEFINED_ENDIAN
270     },
271     { // FNumber
272         "FNumber",
273         0x829Du,
274         RATIONAL,
275         IFD_0,
276         0,
277         UNDEFINED_ENDIAN
278     },
279     { // GPSInfo
280         "GPSInfo",
281         0x8825u,
282         LONG,
283         IFD_0,
284         1,
285         UNDEFINED_ENDIAN
286     },
287     { // GPSVersionID
288         "GPSVersionID",
289         0x0u,
290         BYTE,
291         IFD_0,
292         4,
293         UNDEFINED_ENDIAN
294     },
295     { // GPSLatitudeRef
296         "GPSLatitudeRef",
297         0x1u,
298         ASCII,
299         IFD_0,
300         2,
301         UNDEFINED_ENDIAN
302     },
303     { // GPSLatitude
304         "GPSLatitude",
305         0x2u,
306         RATIONAL,
307         IFD_0,
308         3,
309         UNDEFINED_ENDIAN
310     },
311     { // GPSLongitudeRef
312         "GPSLongitudeRef",
313         0x3u,
314         ASCII,
315         IFD_0,
316         2,
317         UNDEFINED_ENDIAN
318     },
319     { // GPSLongitude
320         "GPSLongitude",
321         0x4u,
322         RATIONAL,
323         IFD_0,
324         3,
325         UNDEFINED_ENDIAN
326     },
327     { // GPSTimeStamp
328         "GPSTimeStamp",
329         0x7u,
330         RATIONAL,
331         IFD_0,
332         3,
333         UNDEFINED_ENDIAN
334     },
335     /*TODO: Remaining TIFF EP tags*/
336 };
337 
338 /**
339  * EXIF_2_3_TAG_DEFINITIONS contains tags defined in the Jeita EXIF 2.3 spec
340  */
341 const TagDefinition_t EXIF_2_3_TAG_DEFINITIONS[] = {
342     { // ExifVersion
343         "ExifVersion",
344         0x9000u,
345         UNDEFINED,
346         IFD_0,
347         4,
348         UNDEFINED_ENDIAN
349     },
350     { // GPSDateStamp
351         "GPSDateStamp",
352         0x001Du,
353         ASCII,
354         IFD_0,
355         11,
356         UNDEFINED_ENDIAN
357     },
358     /*TODO: Remaining EXIF 2.3 tags*/
359 };
360 
361 /**
362  * TIFF_6_TAG_DEFINITIONS contains tags defined in the TIFF 6.0 spec
363  */
364 const TagDefinition_t TIFF_6_TAG_DEFINITIONS[] = {
365     { // SubFileType
366         "SubFileType",
367         0x00FFu,
368         SHORT,
369         IFD_0,
370         1,
371         UNDEFINED_ENDIAN
372     },
373     { // Artist
374         "Artist",
375         0x013Bu,
376         ASCII,
377         IFD_0,
378         0,
379         UNDEFINED_ENDIAN
380     },
381     { // BitsPerSample
382         "BitsPerSample",
383         0x0102u,
384         SHORT,
385         IFD_0,
386         0,
387         UNDEFINED_ENDIAN
388     },
389     { // CellLength
390         "CellLength",
391         0x0109u,
392         SHORT,
393         IFD_0,
394         1,
395         UNDEFINED_ENDIAN
396     },
397     { // CellWidth
398         "CellWidth",
399         0x0108u,
400         SHORT,
401         IFD_0,
402         1,
403         UNDEFINED_ENDIAN
404     },
405     { // ColorMap
406         "ColorMap",
407         0x0140u,
408         SHORT,
409         IFD_0,
410         0,
411         UNDEFINED_ENDIAN
412     },
413     { // Compression
414         "Compression",
415         0x0103u,
416         SHORT,
417         IFD_0,
418         1,
419         UNDEFINED_ENDIAN
420     },
421     { // Copyright
422         "Copyright",
423         0x8298u,
424         ASCII,
425         IFD_0,
426         0,
427         UNDEFINED_ENDIAN
428     },
429     { // DateTime
430         "DateTime",
431         0x0132u,
432         ASCII,
433         IFD_0,
434         20,
435         UNDEFINED_ENDIAN
436     },
437     { // ExtraSamples
438         "ExtraSamples",
439         0x0152u,
440         SHORT,
441         IFD_0,
442         0,
443         UNDEFINED_ENDIAN
444     },
445     { // FillOrder
446         "FillOrder",
447         0x010Au,
448         SHORT,
449         IFD_0,
450         1,
451         UNDEFINED_ENDIAN
452     },
453     { // FreeByteCounts
454         "FreeByteCounts",
455         0x0121u,
456         LONG,
457         IFD_0,
458         1,
459         UNDEFINED_ENDIAN
460     },
461     { // FreeOffsets
462         "FreeOffsets",
463         0x0120u,
464         LONG,
465         IFD_0,
466         1,
467         UNDEFINED_ENDIAN
468     },
469     { // GrayResponseCurve
470         "GrayResponseCurve",
471         0x0123u,
472         SHORT,
473         IFD_0,
474         0,
475         UNDEFINED_ENDIAN
476     },
477     { // GrayResponseUnit
478         "GrayResponseUnit",
479         0x0122u,
480         SHORT,
481         IFD_0,
482         1,
483         UNDEFINED_ENDIAN
484     },
485     { // HostComputer
486         "HostComputer",
487         0x013Cu,
488         ASCII,
489         IFD_0,
490         0,
491         UNDEFINED_ENDIAN
492     },
493     { // ImageDescription
494         "ImageDescription",
495         0x010Eu,
496         ASCII,
497         IFD_0,
498         0,
499         UNDEFINED_ENDIAN
500     },
501     { // ImageLength
502         "ImageLength",
503         0x0101u,
504         LONG,
505         IFD_0,
506         1,
507         UNDEFINED_ENDIAN
508     },
509     { // ImageWidth
510         "ImageWidth",
511         0x0100u,
512         LONG,
513         IFD_0,
514         1,
515         UNDEFINED_ENDIAN
516     },
517     { // Make
518         "Make",
519         0x010Fu,
520         ASCII,
521         IFD_0,
522         0,
523         UNDEFINED_ENDIAN
524     },
525     { // MaxSampleValue
526         "MaxSampleValue",
527         0x0119u,
528         SHORT,
529         IFD_0,
530         0,
531         UNDEFINED_ENDIAN
532     },
533     { // MinSampleValue
534         "MinSampleValue",
535         0x0118u,
536         SHORT,
537         IFD_0,
538         0,
539         UNDEFINED_ENDIAN
540     },
541     { // Model
542         "Model",
543         0x0110u,
544         ASCII,
545         IFD_0,
546         0,
547         UNDEFINED_ENDIAN
548     },
549     { // NewSubfileType
550         "NewSubfileType",
551         0x00FEu,
552         LONG,
553         IFD_0,
554         1,
555         UNDEFINED_ENDIAN
556     },
557     { // Orientation
558         "Orientation",
559         0x0112u,
560         SHORT,
561         IFD_0,
562         1,
563         UNDEFINED_ENDIAN
564     },
565     { // PhotoMetricInterpretation
566         "PhotoMetricInterpretation",
567         0x0106u,
568         SHORT,
569         IFD_0,
570         1,
571         UNDEFINED_ENDIAN
572     },
573     { // PlanarConfiguration
574         "PlanarConfiguration",
575         0x011Cu,
576         SHORT,
577         IFD_0,
578         1,
579         UNDEFINED_ENDIAN
580     },
581     { // ResolutionUnit
582         "ResolutionUnit",
583         0x0128u,
584         SHORT,
585         IFD_0,
586         1,
587         UNDEFINED_ENDIAN
588     },
589     { // RowsPerStrip
590         "RowsPerStrip",
591         0x0116u,
592         LONG,
593         IFD_0,
594         1,
595         UNDEFINED_ENDIAN
596     },
597     { // SamplesPerPixel
598         "SamplesPerPixel",
599         0x0115u,
600         SHORT,
601         IFD_0,
602         1,
603         UNDEFINED_ENDIAN
604     },
605     { // Software
606         "Software",
607         0x0131u,
608         ASCII,
609         IFD_0,
610         0,
611         UNDEFINED_ENDIAN
612     },
613     { // StripByteCounts
614         "StripByteCounts",
615         0x0117u,
616         LONG,
617         IFD_0,
618         0,
619         UNDEFINED_ENDIAN
620     },
621     { // StripOffsets
622         "StripOffsets",
623         0x0111u,
624         LONG,
625         IFD_0,
626         0,
627         UNDEFINED_ENDIAN
628     },
629     { // SubfileType
630         "SubfileType",
631         0x00FFu,
632         SHORT,
633         IFD_0,
634         1,
635         UNDEFINED_ENDIAN
636     },
637     { // Threshholding
638         "Threshholding",
639         0x0107u,
640         SHORT,
641         IFD_0,
642         1,
643         UNDEFINED_ENDIAN
644     },
645     { // XResolution
646         "XResolution",
647         0x011Au,
648         RATIONAL,
649         IFD_0,
650         1,
651         UNDEFINED_ENDIAN
652     },
653     { // YResolution
654         "YResolution",
655         0x011Bu,
656         RATIONAL,
657         IFD_0,
658         1,
659         UNDEFINED_ENDIAN
660     },
661 };
662 
663 /**
664  * DNG_TAG_DEFINITIONS contains tags defined in the DNG 1.4 spec
665  */
666 const TagDefinition_t DNG_TAG_DEFINITIONS[] = {
667     { // DNGVersion
668         "DNGVersion",
669         0xC612u,
670         BYTE,
671         IFD_0,
672         4,
673         UNDEFINED_ENDIAN
674     },
675     { // DNGBackwardVersion
676         "DNGBackwardVersion",
677         0xC613u,
678         BYTE,
679         IFD_0,
680         4,
681         UNDEFINED_ENDIAN
682     },
683     { // UniqueCameraModel
684         "UniqueCameraModel",
685         0xC614u,
686         ASCII,
687         IFD_0,
688         0,
689         UNDEFINED_ENDIAN
690     },
691     { // LocalizedCameraModel
692         "LocalizedCameraModel",
693         0xC615u,
694         ASCII,
695         IFD_0,
696         0,
697         UNDEFINED_ENDIAN
698     },
699     { // CFAPlaneColor
700         "CFAPlaneColor",
701         0xC616u,
702         BYTE,
703         RAW_IFD,
704         0,
705         UNDEFINED_ENDIAN
706     },
707     { // CFALayout
708         "CFALayout",
709         0xC617u,
710         SHORT,
711         RAW_IFD,
712         1,
713         UNDEFINED_ENDIAN
714     },
715     { // LinearizationTable
716         "LinearizationTable",
717         0xC618u,
718         SHORT,
719         RAW_IFD,
720         0,
721         UNDEFINED_ENDIAN
722     },
723     { // BlackLevelRepeatDim
724         "BlackLevelRepeatDim",
725         0xC619u,
726         SHORT,
727         RAW_IFD,
728         2,
729         UNDEFINED_ENDIAN
730     },
731     { // BlackLevel
732         "BlackLevel",
733         0xC61Au,
734         LONG,
735         RAW_IFD,
736         0,
737         UNDEFINED_ENDIAN
738     },
739     { // BlackLevelDeltaH
740         "BlackLevelDeltaH",
741         0xC61Bu,
742         SRATIONAL,
743         RAW_IFD,
744         0,
745         UNDEFINED_ENDIAN
746     },
747     { // BlackLevelDeltaV
748         "BlackLevelDeltaV",
749         0xC61Cu,
750         SRATIONAL,
751         RAW_IFD,
752         0,
753         UNDEFINED_ENDIAN
754     },
755     { // WhiteLevel
756         "WhiteLevel",
757         0xC61Du,
758         LONG,
759         RAW_IFD,
760         0,
761         UNDEFINED_ENDIAN
762     },
763     { // DefaultScale
764         "DefaultScale",
765         0xC61Eu,
766         RATIONAL,
767         RAW_IFD,
768         2,
769         UNDEFINED_ENDIAN
770     },
771     { // BestQualityScale
772         "BestQualityScale",
773         0xC65Cu,
774         RATIONAL,
775         RAW_IFD,
776         1,
777         UNDEFINED_ENDIAN
778     },
779     { // DefaultCropOrigin
780         "DefaultCropOrigin",
781         0xC61Fu,
782         LONG,
783         RAW_IFD,
784         2,
785         UNDEFINED_ENDIAN
786     },
787     { // DefaultCropSize
788         "DefaultCropSize",
789         0xC620u,
790         LONG,
791         RAW_IFD,
792         2,
793         UNDEFINED_ENDIAN
794     },
795     { // CalibrationIlluminant1
796         "CalibrationIlluminant1",
797         0xC65Au,
798         SHORT,
799         PROFILE_IFD,
800         1,
801         UNDEFINED_ENDIAN
802     },
803     { // CalibrationIlluminant2
804         "CalibrationIlluminant2",
805         0xC65Bu,
806         SHORT,
807         PROFILE_IFD,
808         1,
809         UNDEFINED_ENDIAN
810     },
811     { // ColorMatrix1
812         "ColorMatrix1",
813         0xC621u,
814         SRATIONAL,
815         PROFILE_IFD,
816         0,
817         UNDEFINED_ENDIAN
818     },
819     { // ColorMatrix2
820         "ColorMatrix2",
821         0xC622u,
822         SRATIONAL,
823         PROFILE_IFD,
824         0,
825         UNDEFINED_ENDIAN
826     },
827     { // CameraCalibration1
828         "CameraCalibration1",
829         0xC623u,
830         SRATIONAL,
831         IFD_0,
832         0,
833         UNDEFINED_ENDIAN
834     },
835     { // CameraCalibration2
836         "CameraCalibration2",
837         0xC624u,
838         SRATIONAL,
839         IFD_0,
840         0,
841         UNDEFINED_ENDIAN
842     },
843     { // ReductionMatrix1
844         "ReductionMatrix1",
845         0xC625u,
846         SRATIONAL,
847         PROFILE_IFD,
848         0,
849         UNDEFINED_ENDIAN
850     },
851     { // ReductionMatrix2
852         "ReductionMatrix2",
853         0xC626u,
854         SRATIONAL,
855         PROFILE_IFD,
856         0,
857         UNDEFINED_ENDIAN
858     },
859     { // AnalogBalance
860         "AnalogBalance",
861         0xC627u,
862         RATIONAL,
863         IFD_0,
864         0,
865         UNDEFINED_ENDIAN
866     },
867     { // AsShotNeutral
868         "AsShotNeutral",
869         0xC628u,
870         RATIONAL,
871         IFD_0,
872         0,
873         UNDEFINED_ENDIAN
874     },
875     { // AsShotWhiteXY
876         "AsShotWhiteXY",
877         0xC629u,
878         RATIONAL,
879         IFD_0,
880         2,
881         UNDEFINED_ENDIAN
882     },
883     { // BaselineExposure
884         "BaselineExposure",
885         0xC62Au,
886         SRATIONAL,
887         IFD_0,
888         1,
889         UNDEFINED_ENDIAN
890     },
891     { // BaselineNoise
892         "BaselineNoise",
893         0xC62Bu,
894         RATIONAL,
895         IFD_0,
896         1,
897         UNDEFINED_ENDIAN
898     },
899     { // BaselineSharpness
900         "BaselineSharpness",
901         0xC62Cu,
902         RATIONAL,
903         IFD_0,
904         1,
905         UNDEFINED_ENDIAN
906     },
907     { // BayerGreenSplit
908         "BayerGreenSplit",
909         0xC62Du,
910         LONG,
911         RAW_IFD,
912         1,
913         UNDEFINED_ENDIAN
914     },
915     { // LinearResponseLimit
916         "LinearResponseLimit",
917         0xC62Eu,
918         RATIONAL,
919         IFD_0,
920         1,
921         UNDEFINED_ENDIAN
922     },
923     { // CameraSerialNumber
924         "CameraSerialNumber",
925         0xC62Fu,
926         ASCII,
927         IFD_0,
928         0,
929         UNDEFINED_ENDIAN
930     },
931     { // LensInfo
932         "LensInfo",
933         0xC630u,
934         RATIONAL,
935         IFD_0,
936         4,
937         UNDEFINED_ENDIAN
938     },
939     { // ChromaBlurRadius
940         "ChromaBlurRadius",
941         0xC631u,
942         RATIONAL,
943         RAW_IFD,
944         1,
945         UNDEFINED_ENDIAN
946     },
947     { // AntiAliasStrength
948         "AntiAliasStrength",
949         0xC632u,
950         RATIONAL,
951         RAW_IFD,
952         1,
953         UNDEFINED_ENDIAN
954     },
955     { // ShadowScale
956         "ShadowScale",
957         0xC633u,
958         RATIONAL,
959         IFD_0,
960         1,
961         UNDEFINED_ENDIAN
962     },
963     { // DNGPrivateData
964         "DNGPrivateData",
965         0xC634u,
966         BYTE,
967         IFD_0,
968         0,
969         UNDEFINED_ENDIAN
970     },
971     { // MakerNoteSafety
972         "MakerNoteSafety",
973         0xC635u,
974         SHORT,
975         IFD_0,
976         1,
977         UNDEFINED_ENDIAN
978     },
979     { // RawDataUniqueID
980         "RawDataUniqueID",
981         0xC65Du,
982         BYTE,
983         IFD_0,
984         16,
985         UNDEFINED_ENDIAN
986     },
987     { // OriginalRawFileName
988         "OriginalRawFileName",
989         0xC68Bu,
990         ASCII,
991         IFD_0,
992         0,
993         UNDEFINED_ENDIAN
994     },
995     { // OriginalRawFileData
996         "OriginalRawFileData",
997         0xC68Cu,
998         UNDEFINED,
999         IFD_0,
1000         0,
1001         BIG
1002     },
1003     { // ActiveArea
1004         "ActiveArea",
1005         0xC68Du,
1006         LONG,
1007         RAW_IFD,
1008         4,
1009         UNDEFINED_ENDIAN
1010     },
1011     { // MaskedAreas
1012         "MaskedAreas",
1013         0xC68Eu,
1014         LONG,
1015         RAW_IFD,
1016         0,
1017         UNDEFINED_ENDIAN
1018     },
1019     { // AsShotICCProfile
1020         "AsShotICCProfile",
1021         0xC68Fu,
1022         UNDEFINED,
1023         IFD_0,
1024         0,
1025         UNDEFINED_ENDIAN
1026     },
1027     { // AsShotPreProfileMatrix
1028         "AsShotPreProfileMatrix",
1029         0xC690u,
1030         SRATIONAL,
1031         IFD_0,
1032         0,
1033         UNDEFINED_ENDIAN
1034     },
1035     { // CurrentICCProfile
1036         "CurrentICCProfile",
1037         0xC691u,
1038         UNDEFINED,
1039         IFD_0,
1040         0,
1041         UNDEFINED_ENDIAN
1042     },
1043     { // CurrentICCProfile
1044         "CurrentICCProfile",
1045         0xC691u,
1046         UNDEFINED,
1047         IFD_0,
1048         0,
1049         UNDEFINED_ENDIAN
1050     },
1051     { // CurrentPreProfileMatrix
1052         "CurrentPreProfileMatrix",
1053         0xC692u,
1054         SRATIONAL,
1055         IFD_0,
1056         0,
1057         UNDEFINED_ENDIAN
1058     },
1059     { // ColorimetricReference
1060         "ColorimetricReference",
1061         0xC6BFu,
1062         SHORT,
1063         IFD_0,
1064         1,
1065         UNDEFINED_ENDIAN
1066     },
1067     { // CameraCalibrationSignature
1068         "CameraCalibrationSignature",
1069         0xC6F3u,
1070         ASCII,
1071         IFD_0,
1072         0,
1073         UNDEFINED_ENDIAN
1074     },
1075     { // ProfileCalibrationSignature
1076         "ProfileCalibrationSignature",
1077         0xC6F4u,
1078         ASCII,
1079         PROFILE_IFD,
1080         0,
1081         UNDEFINED_ENDIAN
1082     },
1083     { // ExtraCameraProfiles
1084         "ExtraCameraProfiles",
1085         0xC6F5u,
1086         LONG,
1087         IFD_0,
1088         0,
1089         UNDEFINED_ENDIAN
1090     },
1091     { // AsShotProfileName
1092         "AsShotProfileName",
1093         0xC6F6u,
1094         ASCII,
1095         IFD_0,
1096         0,
1097         UNDEFINED_ENDIAN
1098     },
1099     { // NoiseReductionApplied
1100         "NoiseReductionApplied",
1101         0xC6F7u,
1102         RATIONAL,
1103         RAW_IFD,
1104         1,
1105         UNDEFINED_ENDIAN
1106     },
1107     { // ProfileName
1108         "ProfileName",
1109         0xC6F8u,
1110         ASCII,
1111         PROFILE_IFD,
1112         0,
1113         UNDEFINED_ENDIAN
1114     },
1115     { // ProfileHueSatMapDims
1116         "ProfileHueSatMapDims",
1117         0xC6F9u,
1118         LONG,
1119         PROFILE_IFD,
1120         3,
1121         UNDEFINED_ENDIAN
1122     },
1123     { // ProfileHueSatMapData1
1124         "ProfileHueSatMapData1",
1125         0xC6FAu,
1126         FLOAT,
1127         PROFILE_IFD,
1128         0,
1129         UNDEFINED_ENDIAN
1130     },
1131     { // ProfileHueSatMapData2
1132         "ProfileHueSatMapData2",
1133         0xC6FBu,
1134         FLOAT,
1135         PROFILE_IFD,
1136         0,
1137         UNDEFINED_ENDIAN
1138     },
1139     { // ProfileToneCurve
1140         "ProfileToneCurve",
1141         0xC6FCu,
1142         FLOAT,
1143         PROFILE_IFD,
1144         0,
1145         UNDEFINED_ENDIAN
1146     },
1147     { // ProfileEmbedPolicy
1148         "ProfileEmbedPolicy",
1149         0xC6FDu,
1150         LONG,
1151         PROFILE_IFD,
1152         1,
1153         UNDEFINED_ENDIAN
1154     },
1155     { // ProfileCopyright
1156         "ProfileCopyright",
1157         0xC6FEu,
1158         ASCII,
1159         PROFILE_IFD,
1160         0,
1161         UNDEFINED_ENDIAN
1162     },
1163     { // ForwardMatrix1
1164         "ForwardMatrix1",
1165         0xC714u,
1166         SRATIONAL,
1167         PROFILE_IFD,
1168         0,
1169         UNDEFINED_ENDIAN
1170     },
1171     { // ForwardMatrix2
1172         "ForwardMatrix2",
1173         0xC715u,
1174         SRATIONAL,
1175         PROFILE_IFD,
1176         0,
1177         UNDEFINED_ENDIAN
1178     },
1179     { // PreviewApplicationName
1180         "PreviewApplicationName",
1181         0xC716u,
1182         ASCII,
1183         PREVIEW_IFD,
1184         0,
1185         UNDEFINED_ENDIAN
1186     },
1187     { // PreviewApplicationVersion
1188         "PreviewApplicationVersion",
1189         0xC717u,
1190         ASCII,
1191         PREVIEW_IFD,
1192         0,
1193         UNDEFINED_ENDIAN
1194     },
1195     { // PreviewSettingsName
1196         "PreviewSettingsName",
1197         0xC718u,
1198         ASCII,
1199         PREVIEW_IFD,
1200         0,
1201         UNDEFINED_ENDIAN
1202     },
1203     { // PreviewSettingsDigest
1204         "PreviewSettingsDigest",
1205         0xC719u,
1206         BYTE,
1207         PREVIEW_IFD,
1208         16,
1209         UNDEFINED_ENDIAN
1210     },
1211     { // PreviewColorSpace
1212         "PreviewColorSpace",
1213         0xC71Au,
1214         LONG,
1215         PREVIEW_IFD,
1216         1,
1217         UNDEFINED_ENDIAN
1218     },
1219     { // PreviewDateTime
1220         "PreviewDateTime",
1221         0xC71Bu,
1222         ASCII,
1223         PREVIEW_IFD,
1224         0,
1225         UNDEFINED_ENDIAN
1226     },
1227     { // RawImageDigest
1228         "RawImageDigest",
1229         0xC71Cu,
1230         BYTE,
1231         IFD_0,
1232         16,
1233         UNDEFINED_ENDIAN
1234     },
1235     { // OriginalRawFileDigest
1236         "OriginalRawFileDigest",
1237         0xC71Du,
1238         BYTE,
1239         IFD_0,
1240         16,
1241         UNDEFINED_ENDIAN
1242     },
1243     { // SubTileBlockSize
1244         "SubTileBlockSize",
1245         0xC71Eu,
1246         LONG,
1247         RAW_IFD,
1248         2,
1249         UNDEFINED_ENDIAN
1250     },
1251     { // RowInterleaveFactor
1252         "RowInterleaveFactor",
1253         0xC71Fu,
1254         LONG,
1255         RAW_IFD,
1256         1,
1257         UNDEFINED_ENDIAN
1258     },
1259     { // ProfileLookTableDims
1260         "ProfileLookTableDims",
1261         0xC725u,
1262         LONG,
1263         PROFILE_IFD,
1264         3,
1265         UNDEFINED_ENDIAN
1266     },
1267     { // ProfileLookTableData
1268         "ProfileLookTableData",
1269         0xC726u,
1270         FLOAT,
1271         PROFILE_IFD,
1272         0,
1273         UNDEFINED_ENDIAN
1274     },
1275     { // OpcodeList1
1276         "OpcodeList1",
1277         0xC740u,
1278         UNDEFINED,
1279         RAW_IFD,
1280         0,
1281         BIG
1282     },
1283     { // OpcodeList2
1284         "OpcodeList2",
1285         0xC741u,
1286         UNDEFINED,
1287         RAW_IFD,
1288         0,
1289         BIG
1290     },
1291     { // OpcodeList3
1292         "OpcodeList3",
1293         0xC74Eu,
1294         UNDEFINED,
1295         RAW_IFD,
1296         0,
1297         BIG
1298     },
1299     { // NoiseProfile
1300         "NoiseProfile",
1301         0xC761u,
1302         DOUBLE,
1303         RAW_IFD,
1304         0,
1305         UNDEFINED_ENDIAN
1306     },
1307     { // DefaultUserCrop
1308         "DefaultUserCrop",
1309         0xC7B5u,
1310         RATIONAL,
1311         RAW_IFD,
1312         4,
1313         UNDEFINED_ENDIAN
1314     },
1315     { // DefaultBlackRender
1316         "DefaultBlackRender",
1317         0xC7A6u,
1318         LONG,
1319         PROFILE_IFD,
1320         1,
1321         UNDEFINED_ENDIAN
1322     },
1323     { // BaselineExposureOffset
1324         "BaselineExposureOffset",
1325         0xC7A5u,
1326         RATIONAL,
1327         PROFILE_IFD,
1328         1,
1329         UNDEFINED_ENDIAN
1330     },
1331     { // ProfileLookTableEncoding
1332         "ProfileLookTableEncoding",
1333         0xC7A4u,
1334         LONG,
1335         PROFILE_IFD,
1336         1,
1337         UNDEFINED_ENDIAN
1338     },
1339     { // ProfileHueSatMapEncoding
1340         "ProfileHueSatMapEncoding",
1341         0xC7A3u,
1342         LONG,
1343         PROFILE_IFD,
1344         1,
1345         UNDEFINED_ENDIAN
1346     },
1347     { // OriginalDefaultFinalSize
1348         "OriginalDefaultFinalSize",
1349         0xC791u,
1350         LONG,
1351         IFD_0,
1352         2,
1353         UNDEFINED_ENDIAN
1354     },
1355     { // OriginalBestQualityFinalSize
1356         "OriginalBestQualityFinalSize",
1357         0xC792u,
1358         LONG,
1359         IFD_0,
1360         2,
1361         UNDEFINED_ENDIAN
1362     },
1363     { // OriginalDefaultCropSize
1364         "OriginalDefaultCropSize",
1365         0xC793u,
1366         LONG,
1367         IFD_0,
1368         2,
1369         UNDEFINED_ENDIAN
1370     },
1371     { // NewRawImageDigest
1372         "NewRawImageDigest",
1373         0xC7A7u,
1374         BYTE,
1375         IFD_0,
1376         16,
1377         UNDEFINED_ENDIAN
1378     },
1379     { // RawToPreviewGain
1380         "RawToPreviewGain",
1381         0xC7A8u,
1382         DOUBLE,
1383         PREVIEW_IFD,
1384         1,
1385         UNDEFINED_ENDIAN
1386     },
1387 };
1388 
1389 } /*namespace img_utils*/
1390 } /*namespace android*/
1391 
1392 #endif /*IMG_UTILS_TIFF_TAG_DEFINITION_H*/
1393