Compare commits
	
		
			2 Commits
		
	
	
		
			84f8c9436f
			...
			81145064de
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 81145064de | |||
| 60a8ee7a80 | 
							
								
								
									
										20
									
								
								meson.build
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								meson.build
									
									
									
									
									
								
							| @ -96,6 +96,13 @@ resources = gnome.compile_resources('resources', | ||||
| 	c_name : 'resources', | ||||
| ) | ||||
| 
 | ||||
| tiff_tables = custom_target('tiff-tables.h', | ||||
| 	output : 'tiff-tables.h', | ||||
| 	input : 'tiff-tables.db', | ||||
| 	command : ['tiff-tables.awk', '@INPUT@'], | ||||
| 	capture : true, | ||||
| ) | ||||
| 
 | ||||
| exe = executable('fiv', 'fiv.c', 'fiv-view.c', 'fiv-io.c', | ||||
| 	'fiv-browser.c', 'fiv-sidebar.c', 'fiv-thumbnail.c', 'xdg.c', resources, | ||||
| 	install : true, | ||||
| @ -115,6 +122,19 @@ jpegcrop = executable('fiv-jpegcrop', 'fiv-jpegcrop.c', | ||||
| install_data('fiv-jpegcrop.desktop', | ||||
| 	install_dir : get_option('datadir') / 'applications') | ||||
| 
 | ||||
| if get_option('tools').enabled() | ||||
| 	# libjq 1.6 lacks a pkg-config file, and there is no release in sight. | ||||
| 	# libjq 1.6 is required. | ||||
| 	tools_dependencies = [cc.find_library('libjq'), dependency('libpng')] | ||||
| 	tools_c_args = cc.get_supported_arguments( | ||||
| 		'-Wno-unused-function', '-Wno-unused-parameter') | ||||
| 	foreach tool : ['pnginfo', 'jpeginfo', 'tiffinfo', 'webpinfo', 'bmffinfo'] | ||||
| 		executable(tool, 'tools/' + tool + '.c', tiff_tables, | ||||
| 			dependencies : tools_dependencies, | ||||
| 			c_args: tools_c_args) | ||||
| 	endforeach | ||||
| endif | ||||
| 
 | ||||
| # XXX: With gdk-pixbuf, this even depends on currently installed modules. | ||||
| if meson.is_cross_build() | ||||
| 	install_data('fiv.desktop', | ||||
|  | ||||
| @ -1,3 +1,6 @@ | ||||
| option('tools', type : 'feature', value : 'disabled', | ||||
| 	description : 'Build a few extra file inspection tools') | ||||
| 
 | ||||
| option('lcms2', type : 'feature', value : 'auto', | ||||
| 	description : 'Build with Little CMS colour management') | ||||
| option('libjpegqs', type : 'feature', value : 'auto', | ||||
|  | ||||
							
								
								
									
										94
									
								
								tiff-tables.awk
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										94
									
								
								tiff-tables.awk
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,94 @@ | ||||
| #!/usr/bin/awk -f | ||||
| BEGIN { | ||||
| 	FS = ", *" | ||||
| 	print "// Generated by tiff-tables.awk. DO NOT MODIFY." | ||||
| } | ||||
| 
 | ||||
| { | ||||
| 	# Remember and strip consecutive comments. | ||||
| 	if (match($0, /#/)) | ||||
| 		comment[++comments] = substr($0, RSTART + 1) | ||||
| 	else if (!/[[:space:]]/) | ||||
| 		comments = 0 | ||||
| 
 | ||||
| 	sub(/#.*$/, "") | ||||
| 	sub(/[[:space:]]*$/, "") | ||||
| } | ||||
| 
 | ||||
| # Converts arbitrary strings to C identifiers (when running in the C locale). | ||||
| function identifize(s) { | ||||
| 	# Regard parenthesised text as comments. | ||||
| 	while (match(s, /[[:space:]]\([^)]+\)/)) { | ||||
| 		comment[++comments] = substr(s, RSTART, RLENGTH) | ||||
| 		s = substr(s, 1, RSTART - 1) substr(s, RSTART + RLENGTH) | ||||
| 	} | ||||
| 
 | ||||
| 	# Capitalize words (toupper is POSIX), removing spaces and dashes between. | ||||
| 	while (match(s, /[-[:space:]]./)) { | ||||
| 		s = substr(s, 1, RSTART - 1) \ | ||||
| 			toupper(substr(s, RSTART + 1, 1)) \ | ||||
| 			substr(s, RSTART + RLENGTH) | ||||
| 	} | ||||
| 
 | ||||
| 	# Replace any remaining non-identifier characters with underscores. | ||||
| 	gsub(/[^[:alnum:]]/, "_", s) | ||||
| 	return s | ||||
| } | ||||
| 
 | ||||
| function flushcomments(prefix,    i, acc) { | ||||
| 	for (i = 1; i <= comments; i++) | ||||
| 		acc = acc prefix comment[i] "\n" | ||||
| 	comments = 0 | ||||
| 	return acc | ||||
| } | ||||
| 
 | ||||
| function flushvalues() { | ||||
| 	if (values) { | ||||
| 		allvalues = allvalues "enum " fieldname " {\n" values "};\n\n" | ||||
| 		values = "" | ||||
| 		fields = fields "\n\t\t{}\n\t}}," | ||||
| 	} else if (fields) { | ||||
| 		fields = fields " NULL}," | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function flushsection() { | ||||
| 	if (section) { | ||||
| 		flushvalues() | ||||
| 		print "};\n\n" allvalues "static struct tiff_entry " \ | ||||
| 			  sectionsnakecase "_entries[] = {" fields "\n\t{}\n};" | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| # Section marker | ||||
| /^= / { | ||||
| 	flushsection() | ||||
| 	section = identifize(substr($0, 3)) | ||||
| 	sectionsnakecase = tolower(substr($0, 3)) | ||||
| 	gsub(/[^[:alnum:]]/, "_", sectionsnakecase) | ||||
| 	fields = "" | ||||
| 	allvalues = "" | ||||
| 	print "\n" flushcomments("//") "enum {" | ||||
| } | ||||
| 
 | ||||
| # Field | ||||
| section && /^[^\t=]/ { | ||||
| 	flushvalues() | ||||
| 	fieldname = section "_" identifize($2) | ||||
| 	fields = fields "\n\t{\"" $2 "\", " fieldname "," | ||||
| 	print flushcomments("\t//") "\t" fieldname " = " $1 "," | ||||
| } | ||||
| 
 | ||||
| # Value | ||||
| section && /^\t/ { | ||||
| 	sub(/^\t*/, "") | ||||
| 	valuename = fieldname "_" identifize($2) | ||||
| 	if (!values) | ||||
| 		fields = fields " (struct tiff_value[]) {" | ||||
| 	values = values flushcomments("\t//") "\t" valuename " = " $1 ",\n" | ||||
| 	fields = fields "\n\t\t{\"" $2 "\", " valuename "}," | ||||
| } | ||||
| 
 | ||||
| END { | ||||
| 	flushsection() | ||||
| } | ||||
							
								
								
									
										427
									
								
								tiff-tables.db
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										427
									
								
								tiff-tables.db
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,427 @@ | ||||
| # Use tiff-tables.awk to produce a C source file from this database. | ||||
| 
 | ||||
| # Use the Internet Archive should any of these links go down. | ||||
| # | ||||
| # TIFF Revision 6.0 (1992) | ||||
| # https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf | ||||
| # | ||||
| # TIFF Technical Note 1: TIFF Trees (1993) | ||||
| # https://download.osgeo.org/libtiff/old/TTN1.ps | ||||
| # | ||||
| # DRAFT TIFF Technical Note 2 (1995) | ||||
| # https://www.awaresystems.be/imaging/tiff/specification/TIFFTechNote2.txt | ||||
| # | ||||
| # Adobe PageMaker 6.0 TIFF Technical Notes (1995) [includes TTN1] | ||||
| # https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFFPM6.pdf | ||||
| # | ||||
| # Adobe Photoshop TIFF Technical Notes (2002) | ||||
| # https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFFphotoshop.pdf | ||||
| # https://www.alternatiff.com/resources/TIFFphotoshop.pdf | ||||
| #  - Note that ImageSourceData 8BIM frames are specified differently | ||||
| #    from how Adobe XMP Specification Part 3 defines them. | ||||
| #  - The document places a condition on SubIFDs, without further explanation. | ||||
| # | ||||
| # Adobe Photoshop TIFF Technical Note 3 (2005) | ||||
| # http://chriscox.org/TIFFTN3d1.pdf | ||||
| # | ||||
| # Exif Version 2.3 (2012) | ||||
| # https://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf | ||||
| # | ||||
| # Exif Version 2.32 (2019) | ||||
| # https://www.cipa.jp/e/std/std-sec.html | ||||
| # | ||||
| # Digital Negative (DNG) Specification 1.5.0.0 (2019) | ||||
| # https://www.adobe.com/content/dam/acom/en/products/photoshop/pdfs/dng_spec_1.5.0.0.pdf | ||||
| 
 | ||||
| # TIFF 6.0 | ||||
| = TIFF | ||||
| 254, NewSubfileType | ||||
| 255, SubfileType | ||||
| 	1, Full-resolution image data | ||||
| 	2, Reduced-resolution image data | ||||
| 	3, Page of a multi-page image | ||||
| 256, ImageWidth | ||||
| 257, ImageLength | ||||
| 258, BitsPerSample | ||||
| 259, Compression | ||||
| 	1, Uncompressed | ||||
| 	2, CCITT 1D | ||||
| 	3, Group 3 Fax | ||||
| 	4, Group 4 Fax | ||||
| 	5, LZW | ||||
| 	6, JPEG | ||||
| 	7, JPEG datastream  # DRAFT TIFF Technical Note 2 + TIFFphotoshop.pdf | ||||
| 	8, Deflate/zlib  # Adobe Photoshop TIFF Technical Notes | ||||
| 	32773, PackBits | ||||
| 	32946, Deflate  # Adobe Photoshop TIFF Technical Notes | ||||
| 262, PhotometricInterpretation | ||||
| 	0, WhiteIsZero | ||||
| 	1, BlackIsZero | ||||
| 	2, RGB | ||||
| 	3, RGB Palette | ||||
| 	4, Transparency mask | ||||
| 	5, CMYK | ||||
| 	6, YCbCr | ||||
| 	8, CIELab | ||||
| 	9, ICCLab  # Adobe PageMaker 6.0 TIFF Technical Notes | ||||
| 263, Threshholding | ||||
| 	1, No dithering or halftoning | ||||
| 	2, Ordered dither or halftoning | ||||
| 	3, Randomized process | ||||
| 264, CellWidth | ||||
| 265, CellLength | ||||
| 266, FillOrder | ||||
| 	1, MSB-first | ||||
| 	2, LSB-first | ||||
| 269, DocumentName | ||||
| 270, ImageDescription | ||||
| 271, Make | ||||
| 272, Model | ||||
| 273, StripOffsets | ||||
| 274, Orientation | ||||
| 	1, TopLeft | ||||
| 	2, TopRight | ||||
| 	3, BottomRight | ||||
| 	4, BottomLeft | ||||
| 	5, LeftTop | ||||
| 	6, RightTop | ||||
| 	7, RightBottom | ||||
| 	8, LeftBottom | ||||
| 277, SamplesPerPixel | ||||
| 278, RowsPerStrip | ||||
| 279, StripByteCounts | ||||
| 280, MinSampleValue | ||||
| 281, MaxSampleValue | ||||
| 282, XResolution | ||||
| 283, YResolution | ||||
| 284, PlanarConfiguration | ||||
| 	1, Chunky | ||||
| 	2, Planar | ||||
| 285, PageName | ||||
| 286, XPosition | ||||
| 287, YPosition | ||||
| 288, FreeOffsets | ||||
| 289, FreeByteCounts | ||||
| 290, GrayResponseUnit | ||||
| 	1, 1/10 | ||||
| 	2, 1/100 | ||||
| 	3, 1/1000 | ||||
| 	4, 1/10000 | ||||
| 	5, 1/100000 | ||||
| 291, GrayResponseCurve | ||||
| 292, T4Options | ||||
| 293, T6Options | ||||
| 296, ResolutionUnit | ||||
| 	1, None | ||||
| 	2, Inch | ||||
| 	3, Centimeter | ||||
| 297, PageNumber | ||||
| 301, TransferFunction | ||||
| 305, Software | ||||
| 306, DateTime | ||||
| 315, Artist | ||||
| 316, HostComputer | ||||
| 317, Predictor | ||||
| 	1, None | ||||
| 	2, Horizontal | ||||
| 	3, Floating point  # Adobe Photoshop TIFF Technical Note 3 | ||||
| 318, WhitePoint | ||||
| 319, PrimaryChromaticities | ||||
| 320, ColorMap | ||||
| 321, HalftoneHints | ||||
| 322, TileWidth | ||||
| 323, TileLength | ||||
| 324, TileOffsets | ||||
| 325, TileByteCounts | ||||
| 330, SubIFDs  # TIFF Technical Note 1: TIFF Trees | ||||
| 332, InkSet | ||||
| 	1, CMYK | ||||
| 	2, Non-CMYK | ||||
| 333, InkNames | ||||
| 334, NumberOfInks | ||||
| 336, DotRange | ||||
| 337, TargetPrinter | ||||
| 338, ExtraSamples | ||||
| 	0, Unspecified | ||||
| 	1, Associated alpha | ||||
| 	2, Unassociated alpha | ||||
| 339, SampleFormat | ||||
| 	1, Unsigned integer | ||||
| 	2, Two's complement signed integer | ||||
| 	3, IEEE floating-point | ||||
| 	4, Undefined | ||||
| 340, SMinSampleValue | ||||
| 341, SMaxSampleValue | ||||
| 342, TransferRange | ||||
| 343, ClipPath  # TIFF Technical Note 2: Clipping Path | ||||
| 344, XClipPathUnits  # TIFF Technical Note 2: Clipping Path | ||||
| 345, YClipPathUnits  # TIFF Technical Note 2: Clipping Path | ||||
| 346, Indexed  # TIFF Technical Note 3: Indexed Images | ||||
| 347, JPEGTables  # DRAFT TIFF Technical Note 2 + TIFFphotoshop.pdf | ||||
| 351, OPIProxy  # Adobe PageMaker 6.0 TIFF Technical Notes | ||||
| 512, JPEGProc | ||||
| 	1, Baseline sequential | ||||
| 	14, Lossless Huffman | ||||
| 513, JPEGInterchangeFormat | ||||
| 514, JPEGInterchangeFormatLength | ||||
| 515, JPEGRestartInterval | ||||
| 517, JPEGLosslessPredictors | ||||
| 	1, A | ||||
| 	2, B | ||||
| 	3, C | ||||
| 	4, A+B+C | ||||
| 	5, A+((B-C)/2) | ||||
| 	6, B+((A-C)/2) | ||||
| 	7, (A+B)/2 | ||||
| 518, JPEGPointTransforms | ||||
| 519, JPEGQTables | ||||
| 520, JPEGDCTables | ||||
| 521, JPEGACTables | ||||
| 529, YCbCrCoefficients | ||||
| 530, YCbCrSubSampling | ||||
| 531, YCbCrPositioning | ||||
| 	1, Centered | ||||
| 	2, Co-sited | ||||
| 532, ReferenceBlackWhite | ||||
| 700, XMP  # Adobe XMP Specification Part 3 Table 12/13/39 | ||||
| 32781, ImageID  # Adobe PageMaker 6.0 TIFF Technical Notes | ||||
| 33432, Copyright | ||||
| # TODO(p): Extract IPTC DataSets, like we do directly with PSIRs. | ||||
| 33723, IPTC  # Adobe XMP Specification Part 3 Table 12/39 | ||||
| # TODO(p): Extract PSIRs, like we do directly with the JPEG segment. | ||||
| 34377, Photoshop  # Adobe XMP Specification Part 3 Table 12/39 | ||||
| 34665, Exif IFD Pointer  # Exif 2.3 | ||||
| 34853, GPS Info IFD Pointer  # Exif 2.3 | ||||
| 37398, TIFF/EP StandardID  # ISO 12234 TIFF/EP image data format | ||||
| 37724, ImageSourceData  # Adobe Photoshop TIFF Technical Notes | ||||
| 50706, DNGVersion  # DNG 1.5.0.0 | ||||
| 50707, DNGBackwardVersion  # DNG 1.5.0.0 | ||||
| 50708, UniqueCameraModel  # DNG 1.5.0.0 | ||||
| 50709, LocalizedCameraModel  # DNG 1.5.0.0 | ||||
| # TODO(p): Add more DNG tags that can be only in IFD0. | ||||
| 
 | ||||
| # Exif 2.3 4.6.5 | ||||
| = Exif | ||||
| 33434, ExposureTime | ||||
| 33437, FNumber | ||||
| 34850, ExposureProgram | ||||
| 	0, Not defined | ||||
| 	1, Manual | ||||
| 	2, Normal program | ||||
| 	3, Aperture priority | ||||
| 	4, Shutter priority | ||||
| 	5, Creative program | ||||
| 	6, Action program | ||||
| 	7, Portrait mode | ||||
| 	8, Landscape mode | ||||
| 34852, SpectralSensitivity | ||||
| 34855, PhotographicSensitivity | ||||
| 34856, OECF | ||||
| 34864, SensitivityType | ||||
| 	0, Unknown | ||||
| 	1, Standard output sensitivity | ||||
| 	2, Recommended exposure index | ||||
| 	3, ISO speed | ||||
| 	4, SOS and REI | ||||
| 	5, SOS and ISO speed | ||||
| 	6, REI and ISO speed | ||||
| 	7, SOS and REI and ISO speed | ||||
| 34865, StandardOutputSensitivity | ||||
| 34866, RecommendedExposureIndex | ||||
| 34867, ISOSpeed | ||||
| 34868, ISOSpeedLatitudeyyy | ||||
| 34869, ISOSpeedLatitudezzz | ||||
| 36864, ExifVersion | ||||
| 36867, DateTimeOriginal | ||||
| 36868, DateTimeDigitized | ||||
| 36880, OffsetTime  # 2.31 | ||||
| 36881, OffsetTimeOriginal  # 2.31 | ||||
| 36882, OffsetTimeDigitized  # 2.31 | ||||
| 37121, ComponentsConfiguration | ||||
| 	0, Does not exist | ||||
| 	1, Y | ||||
| 	2, Cb | ||||
| 	3, Cr | ||||
| 	4, R | ||||
| 	5, G | ||||
| 	6, B | ||||
| 37122, CompressedBitsPerPixel | ||||
| 37377, ShutterSpeedValue | ||||
| 37378, ApertureValue | ||||
| 37379, BrightnessValue | ||||
| 37380, ExposureBiasValue | ||||
| 37381, MaxApertureValue | ||||
| 37382, SubjectDistance | ||||
| 37383, MeteringMode | ||||
| 	0, Unknown | ||||
| 	1, Average | ||||
| 	2, CenterWeightedAverage | ||||
| 	3, Spot | ||||
| 	4, MultiSpot | ||||
| 	5, Pattern | ||||
| 	6, Partial | ||||
| 	255, Other | ||||
| 37384, LightSource | ||||
| 	0, Unknown | ||||
| 	1, Daylight | ||||
| 	2, Fluorescent | ||||
| 	3, Tungsten (incandescent light) | ||||
| 	4, Flash | ||||
| 	9, Fine weather | ||||
| 	10, Cloudy weather | ||||
| 	11, Shade | ||||
| 	12, Daylight fluorescent (D 5700 - 7100K) | ||||
| 	13, Day white fluorescent (N 4600 - 5500K) | ||||
| 	14, Cool white fluorescent (W 3800 - 4500K) | ||||
| 	15, White fluorescent (WW 3250 - 3800K) | ||||
| 	16, Warm white fluorescent (L 2600 - 3250K) | ||||
| 	17, Standard light A | ||||
| 	18, Standard light B | ||||
| 	19, Standard light C | ||||
| 	20, D55 | ||||
| 	21, D65 | ||||
| 	22, D75 | ||||
| 	23, D50 | ||||
| 	24, ISO studio tungsten | ||||
| 	255, Other light source | ||||
| 37385, Flash | ||||
| 37386, FocalLength | ||||
| 37396, SubjectArea | ||||
| 37500, MakerNote | ||||
| # TODO(p): Decode. | ||||
| 37510, UserComment | ||||
| 37520, SubSecTime | ||||
| 37521, SubSecTimeOriginal | ||||
| 37522, SubSecTimeDigitized | ||||
| 37888, Temperature  # 2.31 | ||||
| 37889, Humidity  # 2.31 | ||||
| 37890, Pressure  # 2.31 | ||||
| 37891, WaterDepth  # 2.31 | ||||
| 37892, Acceleration  # 2.31 | ||||
| 37893, CameraElevationAngle  # 2.31 | ||||
| 40960, FlashpixVersion | ||||
| 40961, ColorSpace | ||||
| 	1, sRGB | ||||
| 	65535, Uncalibrated | ||||
| 40962, PixelXDimension | ||||
| 40963, PixelYDimension | ||||
| 40964, RelatedSoundFile | ||||
| 40965, Interoperability IFD Pointer | ||||
| 41483, FlashEnergy | ||||
| 41484, SpatialFrequencyResponse | ||||
| 41486, FocalPlaneXResolution | ||||
| 41487, FocalPlaneYResolution | ||||
| 41488, FocalPlaneResolutionUnit | ||||
| 41492, SubjectLocation | ||||
| 41493, ExposureIndex | ||||
| 41495, SensingMethod | ||||
| 	1, Not defined | ||||
| 	2, One-chip color area sensor | ||||
| 	3, Two-chip color area sensor | ||||
| 	4, Three-chip color area sensor | ||||
| 	5, Color sequential area sensor | ||||
| 	7, Trilinear sensor | ||||
| 	8, Color sequential linear sensor | ||||
| 41728, FileSource | ||||
| 	0, Others | ||||
| 	1, Scanner of transparent type | ||||
| 	2, Scanner of reflex type | ||||
| 	3, DSC | ||||
| 41729, SceneType | ||||
| 	1, Directly-photographed image | ||||
| 41730, CFAPattern | ||||
| 41985, CustomRendered | ||||
| 	0, Normal process | ||||
| 	1, Custom process | ||||
| 41986, ExposureMode | ||||
| 	0, Auto exposure | ||||
| 	1, Manual exposure | ||||
| 	2, Auto bracket | ||||
| 41987, WhiteBalance | ||||
| 	0, Auto white balance | ||||
| 	1, Manual white balance | ||||
| 41988, DigitalZoomRatio | ||||
| 41989, FocalLengthIn35mmFilm | ||||
| 41990, SceneCaptureType | ||||
| 	0, Standard | ||||
| 	1, Landscape | ||||
| 	2, Portrait | ||||
| 	3, Night scene | ||||
| 41991, GainControl | ||||
| 	0, None | ||||
| 	1, Low gain up | ||||
| 	2, High gain up | ||||
| 	3, Low gain down | ||||
| 	4, High gain down | ||||
| 41992, Contrast | ||||
| 	0, Normal | ||||
| 	1, Soft | ||||
| 	2, Hard | ||||
| 41993, Saturation | ||||
| 	0, Normal | ||||
| 	1, Low | ||||
| 	2, High | ||||
| 41994, Sharpness | ||||
| 	0, Normal | ||||
| 	1, Soft | ||||
| 	2, Hard | ||||
| 41995, DeviceSettingDescription | ||||
| 41996, SubjectDistanceRange | ||||
| 	0, Unknown | ||||
| 	1, Macro | ||||
| 	2, Close view | ||||
| 	3, Distant view | ||||
| 42016, ImageUniqueID | ||||
| 42032, CameraOwnerName | ||||
| 42033, BodySerialNumber | ||||
| 42034, LensSpecification | ||||
| 42035, LensMake | ||||
| 42036, LensModel | ||||
| 42037, LensSerialNumber | ||||
| 42080, CompositeImage  # 2.32 | ||||
| 42081, SourceImageNumberOfCompositeImage  # 2.32 | ||||
| 42082, SourceExposureTimesOfCompositeImage  # 2.32 | ||||
| 42240, Gamma | ||||
| 
 | ||||
| # Exif 2.3 4.6.6 (Notice it starts at 0.) | ||||
| = Exif GPS | ||||
| 0, GPSVersionID | ||||
| 1, GPSLatitudeRef | ||||
| 2, GPSLatitude | ||||
| 3, GPSLongitudeRef | ||||
| 4, GPSLongitude | ||||
| 5, GPSAltitudeRef | ||||
| 	0, Sea level | ||||
| 	1, Sea level reference (negative value) | ||||
| 6, GPSAltitude | ||||
| 7, GPSTimeStamp | ||||
| 8, GPSSatellites | ||||
| 9, GPSStatus | ||||
| 10, GPSMeasureMode | ||||
| 11, GPSDOP | ||||
| 12, GPSSpeedRef | ||||
| 13, GPSSpeed | ||||
| 14, GPSTrackRef | ||||
| 15, GPSTrack | ||||
| 16, GPSImgDirectionRef | ||||
| 17, GPSImgDirection | ||||
| 18, GPSMapDatum | ||||
| 19, GPSDestLatitudeRef | ||||
| 20, GPSDestLatitude | ||||
| 21, GPSDestLongitudeRef | ||||
| 22, GPSDestLongitude | ||||
| 23, GPSDestBearingRef | ||||
| 24, GPSDestBearing | ||||
| 25, GPSDestDistanceRef | ||||
| 26, GPSDestDistance | ||||
| 27, GPSProcessingMethod | ||||
| 28, GPSAreaInformation | ||||
| 29, GPSDateStamp | ||||
| 30, GPSDifferential | ||||
| 	0, Measurement without differential correction | ||||
| 	1, Differential correction applied | ||||
| 31, GPSHPositioningError | ||||
| 
 | ||||
| # Exif 2.3 4.6.7 (Notice it starts at 1, and collides with GPS.) | ||||
| = Exif Interoperability | ||||
| 1, InteroperabilityIndex | ||||
							
								
								
									
										5
									
								
								tools/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								tools/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +0,0 @@ | ||||
| /pnginfo | ||||
| /jpeginfo | ||||
| /tiffinfo | ||||
| /webpinfo | ||||
| /bmffinfo | ||||
| @ -1,15 +0,0 @@ | ||||
| SHELL = /bin/sh | ||||
| # libjq 1.6 lacks a pkg-config file, and there is no release in sight.
 | ||||
| # libjq 1.6 is required.
 | ||||
| CFLAGS = -g -O2 -Wall -Wextra `pkg-config --cflags $(deps)` | ||||
| LDLIBS = -ljq `pkg-config --libs $(deps)` | ||||
| 
 | ||||
| deps = libpng | ||||
| targets = pnginfo jpeginfo tiffinfo webpinfo bmffinfo | ||||
| 
 | ||||
| all: $(targets) | ||||
| $(targets): info.h | ||||
| clean: | ||||
| 	rm -f $(targets) | ||||
| 
 | ||||
| .PHONY: all clean | ||||
| @ -1,6 +1,6 @@ | ||||
| #!/bin/sh -e | ||||
| # Remove thumbnails with URIs pointing to at this moment non-existing files. | ||||
| make pnginfo | ||||
| ninja pnginfo | ||||
| 
 | ||||
| pnginfo=$(pwd)/pnginfo cache_home=${XDG_CACHE_HOME:-$HOME/.cache} | ||||
| for size in normal large x-large xx-large; do | ||||
|  | ||||
							
								
								
									
										505
									
								
								tools/info.h
									
									
									
									
									
								
							
							
						
						
									
										505
									
								
								tools/info.h
									
									
									
									
									
								
							| @ -76,37 +76,6 @@ u16le(const uint8_t *p) | ||||
| } | ||||
| 
 | ||||
| // --- TIFF --------------------------------------------------------------------
 | ||||
| // TIFF Revision 6.0 (1992)
 | ||||
| // https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf
 | ||||
| //
 | ||||
| // TIFF Technical Note 1: TIFF Trees (1993)
 | ||||
| // https://download.osgeo.org/libtiff/old/TTN1.ps
 | ||||
| //
 | ||||
| // DRAFT TIFF Technical Note 2 (1995)
 | ||||
| // https://www.awaresystems.be/imaging/tiff/specification/TIFFTechNote2.txt
 | ||||
| //
 | ||||
| // Adobe PageMaker 6.0 TIFF Technical Notes (1995) [includes TTN1]
 | ||||
| // https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFFPM6.pdf
 | ||||
| //
 | ||||
| // Adobe Photoshop TIFF Technical Notes (2002)
 | ||||
| // https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFFphotoshop.pdf
 | ||||
| //  - Note that ImageSourceData 8BIM frames are specified differently
 | ||||
| //    from how Adobe XMP Specification Part 3 defines them.
 | ||||
| //  - The document places a condition on SubIFDs, without further explanation.
 | ||||
| //
 | ||||
| // Adobe Photoshop TIFF Technical Note 3 (2005)
 | ||||
| // http://chriscox.org/TIFFTN3d1.pdf
 | ||||
| //
 | ||||
| // Exif Version 2.3 (2012)
 | ||||
| // https://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf
 | ||||
| //
 | ||||
| // Exif Version 2.32 (2019)
 | ||||
| // https://www.cipa.jp/e/std/std-sec.html
 | ||||
| //
 | ||||
| // Digital Negative (DNG) Specification 1.5.0.0 (2019)
 | ||||
| // https://www.adobe.com/content/dam/acom/en/products/photoshop/pdfs
 | ||||
| // /dng_spec_1.5.0.0.pdf
 | ||||
| //
 | ||||
| // libtiff is a mess, and the format is not particularly complicated.
 | ||||
| // Exiv2 is senselessly copylefted, and cannot do much.
 | ||||
| // libexif is only marginally better.
 | ||||
| @ -391,477 +360,7 @@ struct tiff_entry { | ||||
| 	struct tiff_value *values; | ||||
| }; | ||||
| 
 | ||||
| static struct tiff_entry tiff_entries[] = { | ||||
| 	{"NewSubfileType", 254, NULL}, | ||||
| 	{"SubfileType", 255, (struct tiff_value[]) { | ||||
| 		{"Full-resolution image data", 1}, | ||||
| 		{"Reduced-resolution image data", 2}, | ||||
| 		{"Page of a multi-page image", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"ImageWidth", 256, NULL}, | ||||
| 	{"ImageLength", 257, NULL}, | ||||
| 	{"BitsPerSample", 258, NULL}, | ||||
| 	{"Compression", 259, (struct tiff_value[]) { | ||||
| 		{"Uncompressed", 1}, | ||||
| 		{"CCITT 1D", 2}, | ||||
| 		{"Group 3 Fax", 3}, | ||||
| 		{"Group 4 Fax", 4}, | ||||
| 		{"LZW", 5}, | ||||
| 		{"JPEG", 6}, | ||||
| 		{"JPEG datastream", 7},  // DRAFT TIFF Technical Note 2 + TIFFphotoshop
 | ||||
| 		{"Deflate/zlib", 8},  // Adobe Photoshop TIFF Technical Notes
 | ||||
| 		{"PackBits", 32773}, | ||||
| 		{"Deflate/zlib", 32946},  // Adobe Photoshop TIFF Technical Notes
 | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"PhotometricInterpretation", 262, (struct tiff_value[]) { | ||||
| 		{"WhiteIsZero", 0}, | ||||
| 		{"BlackIsZero", 1}, | ||||
| 		{"RGB", 2}, | ||||
| 		{"RGB Palette", 3}, | ||||
| 		{"Transparency mask", 4}, | ||||
| 		{"CMYK", 5}, | ||||
| 		{"YCbCr", 6}, | ||||
| 		{"CIELab", 8}, | ||||
| 		{"ICCLab", 9},  // Adobe PageMaker 6.0 TIFF Technical Notes
 | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"Threshholding", 263, (struct tiff_value[]) { | ||||
| 		{"No dithering or halftoning", 1}, | ||||
| 		{"Ordered dither or halftoning", 2}, | ||||
| 		{"Randomized process", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"CellWidth", 264, NULL}, | ||||
| 	{"CellLength", 265, NULL}, | ||||
| 	{"FillOrder", 266, (struct tiff_value[]) { | ||||
| 		{"MSB-first", 1}, | ||||
| 		{"LSB-first", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"DocumentName", 269, NULL}, | ||||
| 	{"ImageDescription", 270, NULL}, | ||||
| 	{"Make", 271, NULL}, | ||||
| 	{"Model", 272, NULL}, | ||||
| 	{"StripOffsets", 273, NULL}, | ||||
| 	{"Orientation", 274, (struct tiff_value[]) { | ||||
| 		{"TopLeft", 1}, | ||||
| 		{"TopRight", 2}, | ||||
| 		{"BottomRight", 3}, | ||||
| 		{"BottomLeft", 4}, | ||||
| 		{"LeftTop", 5}, | ||||
| 		{"RightTop", 6}, | ||||
| 		{"RightBottom", 7}, | ||||
| 		{"LeftBottom", 8}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"SamplesPerPixel", 277, NULL}, | ||||
| 	{"RowsPerStrip", 278, NULL}, | ||||
| 	{"StripByteCounts", 279, NULL}, | ||||
| 	{"MinSampleValue", 280, NULL}, | ||||
| 	{"MaxSampleValue", 281, NULL}, | ||||
| 	{"XResolution", 282, NULL}, | ||||
| 	{"YResolution", 283, NULL}, | ||||
| 	{"PlanarConfiguration", 284, (struct tiff_value[]) { | ||||
| 		{"Chunky", 1}, | ||||
| 		{"Planar", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"PageName", 285, NULL}, | ||||
| 	{"XPosition", 286, NULL}, | ||||
| 	{"YPosition", 287, NULL}, | ||||
| 	{"FreeOffsets", 288, NULL}, | ||||
| 	{"FreeByteCounts", 289, NULL}, | ||||
| 	{"GrayResponseUnit", 290, (struct tiff_value[]) { | ||||
| 		{"1/10", 1}, | ||||
| 		{"1/100", 2}, | ||||
| 		{"1/1000", 3}, | ||||
| 		{"1/10000", 4}, | ||||
| 		{"1/100000", 5}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"GrayResponseCurve", 291, NULL}, | ||||
| 	{"T4Options", 292, NULL}, | ||||
| 	{"T6Options", 293, NULL}, | ||||
| 	{"ResolutionUnit", 296, (struct tiff_value[]) { | ||||
| 		{"None", 1}, | ||||
| 		{"Inch", 2}, | ||||
| 		{"Centimeter", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"PageNumber", 297, NULL}, | ||||
| 	{"TransferFunction", 301, NULL}, | ||||
| 	{"Software", 305, NULL}, | ||||
| 	{"DateTime", 306, NULL}, | ||||
| 	{"Artist", 315, NULL}, | ||||
| 	{"HostComputer", 316, NULL}, | ||||
| 	{"Predictor", 317, (struct tiff_value[]) { | ||||
| 		{"None", 1}, | ||||
| 		{"Horizontal", 2}, | ||||
| 		{"Floating point", 3},  // Adobe Photoshop TIFF Technical Note 3
 | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"WhitePoint", 318, NULL}, | ||||
| 	{"PrimaryChromaticities", 319, NULL}, | ||||
| 	{"ColorMap", 320, NULL}, | ||||
| 	{"HalftoneHints", 321, NULL}, | ||||
| 	{"TileWidth", 322, NULL}, | ||||
| 	{"TileLength", 323, NULL}, | ||||
| 	{"TileOffsets", 324, NULL}, | ||||
| 	{"TileByteCounts", 325, NULL}, | ||||
| 	{"SubIFDs", 330, NULL},  // TIFF Technical Note 1: TIFF Trees
 | ||||
| 	{"InkSet", 332, (struct tiff_value[]) { | ||||
| 		{"CMYK", 1}, | ||||
| 		{"Non-CMYK", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"InkNames", 333, NULL}, | ||||
| 	{"NumberOfInks", 334, NULL}, | ||||
| 	{"DotRange", 336, NULL}, | ||||
| 	{"TargetPrinter", 337, NULL}, | ||||
| 	{"ExtraSamples", 338, (struct tiff_value[]) { | ||||
| 		{"Unspecified", 0}, | ||||
| 		{"Associated alpha", 1}, | ||||
| 		{"Unassociated alpha", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"SampleFormat", 339, (struct tiff_value[]) { | ||||
| 		{"Unsigned integer", 1}, | ||||
| 		{"Two's complement signed integer", 2}, | ||||
| 		{"IEEE floating-point", 3}, | ||||
| 		{"Undefined", 4}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"SMinSampleValue", 340, NULL}, | ||||
| 	{"SMaxSampleValue", 341, NULL}, | ||||
| 	{"TransferRange", 342, NULL}, | ||||
| 	{"ClipPath", 343, NULL},  // TIFF Technical Note 2: Clipping Path
 | ||||
| 	{"XClipPathUnits", 344, NULL},  // TIFF Technical Note 2: Clipping Path
 | ||||
| 	{"YClipPathUnits", 345, NULL},  // TIFF Technical Note 2: Clipping Path
 | ||||
| 	{"Indexed", 346, NULL},  // TIFF Technical Note 3: Indexed Images
 | ||||
| 	{"JPEGTables", 347, NULL},  // DRAFT TIFF Technical Note 2 + TIFFphotoshop
 | ||||
| 	{"OPIProxy", 351, NULL},  // Adobe PageMaker 6.0 TIFF Technical Notes
 | ||||
| 	{"JPEGProc", 512, (struct tiff_value[]) { | ||||
| 		{"Baseline sequential", 1}, | ||||
| 		{"Lossless Huffman", 14}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"JPEGInterchangeFormat", 513, NULL}, | ||||
| 	{"JPEGInterchangeFormatLength", 514, NULL}, | ||||
| 	{"JPEGRestartInterval", 515, NULL}, | ||||
| 	{"JPEGLosslessPredictors", 517, (struct tiff_value[]) { | ||||
| 		{"A", 1}, | ||||
| 		{"B", 2}, | ||||
| 		{"C", 3}, | ||||
| 		{"A+B+C", 4}, | ||||
| 		{"A+((B-C)/2)", 5}, | ||||
| 		{"B+((A-C)/2)", 6}, | ||||
| 		{"(A+B)/2", 7}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"JPEGPointTransforms", 518, NULL}, | ||||
| 	{"JPEGQTables", 519, NULL}, | ||||
| 	{"JPEGDCTables", 520, NULL}, | ||||
| 	{"JPEGACTables", 521, NULL}, | ||||
| 	{"YCbCrCoefficients", 529, NULL}, | ||||
| 	{"YCbCrSubSampling", 530, NULL}, | ||||
| 	{"YCbCrPositioning", 531, (struct tiff_value[]) { | ||||
| 		{"Centered", 1}, | ||||
| 		{"Co-sited", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"ReferenceBlackWhite", 532, NULL}, | ||||
| 	{"XMP", 700, NULL},  // Adobe XMP Specification Part 3 Table 12/13/39
 | ||||
| 	{"ImageID", 32781, NULL},  // Adobe PageMaker 6.0 TIFF Technical Notes
 | ||||
| 	{"Copyright", 33432, NULL}, | ||||
| 	// TODO(p): Extract IPTC DataSets, like we do directly with PSIRs.
 | ||||
| 	{"IPTC", 33723, NULL},  // Adobe XMP Specification Part 3 Table 12/39
 | ||||
| 	// TODO(p): Extract PSIRs, like we do directly with the JPEG segment.
 | ||||
| 	{"Photoshop", 34377, NULL},  // Adobe XMP Specification Part 3 Table 12/39
 | ||||
| 	{"Exif IFD Pointer", 34665, NULL},  // Exif 2.3
 | ||||
| 	{"GPS Info IFD Pointer", 34853, NULL},  // Exif 2.3
 | ||||
| 	{"TIFF/EP StandardID", 37398, NULL},  // ISO 12234 TIFF/EP image data format
 | ||||
| 	{"ImageSourceData", 37724, NULL},  // Adobe Photoshop TIFF Technical Notes
 | ||||
| 	{"DNGVersion", 50706, NULL},  // DNG 1.5.0.0
 | ||||
| 	{"DNGBackwardVersion", 50707, NULL},  // DNG 1.5.0.0
 | ||||
| 	{"UniqueCameraModel", 50708, NULL},  // DNG 1.5.0.0
 | ||||
| 	{"LocalizedCameraModel", 50709, NULL},  // DNG 1.5.0.0
 | ||||
| 	// TODO(p): Add more DNG tags that can be only in IFD0.
 | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
| // Exif 2.3 4.6.5
 | ||||
| static struct tiff_entry exif_entries[] = { | ||||
| 	{"ExposureTime", 33434, NULL}, | ||||
| 	{"FNumber", 33437, NULL}, | ||||
| 	{"ExposureProgram", 34850, (struct tiff_value[]) { | ||||
| 		{"Not defined", 0}, | ||||
| 		{"Manual", 1}, | ||||
| 		{"Normal program", 2}, | ||||
| 		{"Aperture priority", 3}, | ||||
| 		{"Shutter priority", 4}, | ||||
| 		{"Creative program", 5}, | ||||
| 		{"Action program", 6}, | ||||
| 		{"Portrait mode", 7}, | ||||
| 		{"Landscape mode", 8}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"SpectralSensitivity", 34852, NULL}, | ||||
| 	{"PhotographicSensitivity", 34855, NULL}, | ||||
| 	{"OECF", 34856, NULL}, | ||||
| 	{"SensitivityType", 34864, (struct tiff_value[]) { | ||||
| 		{"Unknown", 0}, | ||||
| 		{"Standard output sensitivity", 1}, | ||||
| 		{"Recommended exposure index", 2}, | ||||
| 		{"ISO speed", 3}, | ||||
| 		{"SOS and REI", 4}, | ||||
| 		{"SOS and ISO speed", 5}, | ||||
| 		{"REI and ISO speed", 6}, | ||||
| 		{"SOS and REI and ISO speed", 7}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"StandardOutputSensitivity", 34865, NULL}, | ||||
| 	{"RecommendedExposureIndex", 34866, NULL}, | ||||
| 	{"ISOSpeed", 34867, NULL}, | ||||
| 	{"ISOSpeedLatitudeyyy", 34868, NULL}, | ||||
| 	{"ISOSpeedLatitudezzz", 34869, NULL}, | ||||
| 	{"ExifVersion", 36864, NULL}, | ||||
| 	{"DateTimeOriginal", 36867, NULL}, | ||||
| 	{"DateTimeDigitized", 36868, NULL}, | ||||
| 	{"OffsetTime", 36880, NULL},  // 2.31
 | ||||
| 	{"OffsetTimeOriginal", 36881, NULL},  // 2.31
 | ||||
| 	{"OffsetTimeDigitized", 36882, NULL},  // 2.31
 | ||||
| 	{"ComponentsConfiguration", 37121, (struct tiff_value[]) { | ||||
| 		{"Does not exist", 0}, | ||||
| 		{"Y", 1}, | ||||
| 		{"Cb", 2}, | ||||
| 		{"Cr", 3}, | ||||
| 		{"R", 4}, | ||||
| 		{"G", 5}, | ||||
| 		{"B", 6}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"CompressedBitsPerPixel", 37122, NULL}, | ||||
| 	{"ShutterSpeedValue", 37377, NULL}, | ||||
| 	{"ApertureValue", 37378, NULL}, | ||||
| 	{"BrightnessValue", 37379, NULL}, | ||||
| 	{"ExposureBiasValue", 37380, NULL}, | ||||
| 	{"MaxApertureValue", 37381, NULL}, | ||||
| 	{"SubjectDistance", 37382, NULL}, | ||||
| 	{"MeteringMode", 37383, (struct tiff_value[]) { | ||||
| 		{"Unknown", 0}, | ||||
| 		{"Average", 1}, | ||||
| 		{"CenterWeightedAverage", 2}, | ||||
| 		{"Spot", 3}, | ||||
| 		{"MultiSpot", 4}, | ||||
| 		{"Pattern", 5}, | ||||
| 		{"Partial", 6}, | ||||
| 		{"Other", 255}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"LightSource", 37384, (struct tiff_value[]) { | ||||
| 		{"Unknown", 0}, | ||||
| 		{"Daylight", 1}, | ||||
| 		{"Fluorescent", 2}, | ||||
| 		{"Tungsten (incandescent light)", 3}, | ||||
| 		{"Flash", 4}, | ||||
| 		{"Fine weather", 9}, | ||||
| 		{"Cloudy weather", 10}, | ||||
| 		{"Shade", 11}, | ||||
| 		{"Daylight fluorescent (D 5700 - 7100K)", 12}, | ||||
| 		{"Day white fluorescent (N 4600 - 5500K)", 13}, | ||||
| 		{"Cool white fluorescent (W 3800 - 4500K)", 14}, | ||||
| 		{"White fluorescent (WW 3250 - 3800K)", 15}, | ||||
| 		{"Warm white fluorescent (L 2600 - 3250K)", 16}, | ||||
| 		{"Standard light A", 17}, | ||||
| 		{"Standard light B", 18}, | ||||
| 		{"Standard light C", 19}, | ||||
| 		{"D55", 20}, | ||||
| 		{"D65", 21}, | ||||
| 		{"D75", 22}, | ||||
| 		{"D50", 23}, | ||||
| 		{"ISO studio tungsten", 24}, | ||||
| 		{"Other light source", 255}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"Flash", 37385, NULL}, | ||||
| 	{"FocalLength", 37386, NULL}, | ||||
| 	{"SubjectArea", 37396, NULL}, | ||||
| 	{"MakerNote", 37500, NULL}, | ||||
| 	// TODO(p): Decode.
 | ||||
| 	{"UserComment", 37510, NULL}, | ||||
| 	{"SubSecTime", 37520, NULL}, | ||||
| 	{"SubSecTimeOriginal", 37521, NULL}, | ||||
| 	{"SubSecTimeDigitized", 37522, NULL}, | ||||
| 	{"Temperature", 37888, NULL},  // 2.31
 | ||||
| 	{"Humidity", 37889, NULL},  // 2.31
 | ||||
| 	{"Pressure", 37890, NULL},  // 2.31
 | ||||
| 	{"WaterDepth", 37891, NULL},  // 2.31
 | ||||
| 	{"Acceleration", 37892, NULL},  // 2.31
 | ||||
| 	{"CameraElevationAngle", 37893, NULL},  // 2.31
 | ||||
| 	{"FlashpixVersion", 40960, NULL}, | ||||
| 	{"ColorSpace", 40961, (struct tiff_value[]) { | ||||
| 		{"sRGB", 1}, | ||||
| 		{"Uncalibrated", 0xFFFF}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"PixelXDimension", 40962, NULL}, | ||||
| 	{"PixelYDimension", 40963, NULL}, | ||||
| 	{"RelatedSoundFile", 40964, NULL}, | ||||
| 	{"Interoperability IFD Pointer", 40965, NULL}, | ||||
| 	{"FlashEnergy", 41483, NULL}, | ||||
| 	{"SpatialFrequencyResponse", 41484, NULL}, | ||||
| 	{"FocalPlaneXResolution", 41486, NULL}, | ||||
| 	{"FocalPlaneYResolution", 41487, NULL}, | ||||
| 	{"FocalPlaneResolutionUnit", 41488, NULL}, | ||||
| 	{"SubjectLocation", 41492, NULL}, | ||||
| 	{"ExposureIndex", 41493, NULL}, | ||||
| 	{"SensingMethod", 41495, (struct tiff_value[]) { | ||||
| 		{"Not defined", 1}, | ||||
| 		{"One-chip color area sensor", 2}, | ||||
| 		{"Two-chip color area sensor", 3}, | ||||
| 		{"Three-chip color area sensor", 4}, | ||||
| 		{"Color sequential area sensor", 5}, | ||||
| 		{"Trilinear sensor", 7}, | ||||
| 		{"Color sequential linear sensor", 8}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"FileSource", 41728, (struct tiff_value[]) { | ||||
| 		{"Others", 0}, | ||||
| 		{"Scanner of transparent type", 1}, | ||||
| 		{"Scanner of reflex type", 2}, | ||||
| 		{"DSC", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"SceneType", 41729, (struct tiff_value[]) { | ||||
| 		{"Directly-photographed image", 1}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"CFAPattern", 41730, NULL}, | ||||
| 	{"CustomRendered", 41985, (struct tiff_value[]) { | ||||
| 		{"Normal process", 0}, | ||||
| 		{"Custom process", 1}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"ExposureMode", 41986, (struct tiff_value[]) { | ||||
| 		{"Auto exposure", 0}, | ||||
| 		{"Manual exposure", 1}, | ||||
| 		{"Auto bracket", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"WhiteBalance", 41987, (struct tiff_value[]) { | ||||
| 		{"Auto white balance", 0}, | ||||
| 		{"Manual white balance", 1}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"DigitalZoomRatio", 41988, NULL}, | ||||
| 	{"FocalLengthIn35mmFilm", 41989, NULL}, | ||||
| 	{"SceneCaptureType", 41990, (struct tiff_value[]) { | ||||
| 		{"Standard", 0}, | ||||
| 		{"Landscape", 1}, | ||||
| 		{"Portrait", 2}, | ||||
| 		{"Night scene", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"GainControl", 41991, (struct tiff_value[]) { | ||||
| 		{"None", 0}, | ||||
| 		{"Low gain up", 1}, | ||||
| 		{"High gain up", 2}, | ||||
| 		{"Low gain down", 3}, | ||||
| 		{"High gain down", 4}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"Contrast", 41992, (struct tiff_value[]) { | ||||
| 		{"Normal", 0}, | ||||
| 		{"Soft", 1}, | ||||
| 		{"Hard", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"Saturation", 41993, (struct tiff_value[]) { | ||||
| 		{"Normal", 0}, | ||||
| 		{"Low", 1}, | ||||
| 		{"High", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"Sharpness", 41994, (struct tiff_value[]) { | ||||
| 		{"Normal", 0}, | ||||
| 		{"Soft", 1}, | ||||
| 		{"Hard", 2}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"DeviceSettingDescription", 41995, NULL}, | ||||
| 	{"SubjectDistanceRange", 41996, (struct tiff_value[]) { | ||||
| 		{"Unknown", 0}, | ||||
| 		{"Macro", 1}, | ||||
| 		{"Close view", 2}, | ||||
| 		{"Distant view", 3}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"ImageUniqueID", 42016, NULL}, | ||||
| 	{"CameraOwnerName", 42032, NULL}, | ||||
| 	{"BodySerialNumber", 42033, NULL}, | ||||
| 	{"LensSpecification", 42034, NULL}, | ||||
| 	{"LensMake", 42035, NULL}, | ||||
| 	{"LensModel", 42036, NULL}, | ||||
| 	{"LensSerialNumber", 42037, NULL}, | ||||
| 	{"CompositeImage", 42080, NULL},  // 2.32
 | ||||
| 	{"SourceImageNumberOfCompositeImage", 42081, NULL},  // 2.32
 | ||||
| 	{"SourceExposureTimesOfCompositeImage", 42082, NULL},  // 2.32
 | ||||
| 	{"Gamma", 42240, NULL}, | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
| // Exif 2.3 4.6.6 (Notice it starts at 0.)
 | ||||
| static struct tiff_entry exif_gps_entries[] = { | ||||
| 	{"GPSVersionID", 0, NULL}, | ||||
| 	{"GPSLatitudeRef", 1, NULL}, | ||||
| 	{"GPSLatitude", 2, NULL}, | ||||
| 	{"GPSLongitudeRef", 3, NULL}, | ||||
| 	{"GPSLongitude", 4, NULL}, | ||||
| 	{"GPSAltitudeRef", 5, (struct tiff_value[]) { | ||||
| 		{"Sea level", 0}, | ||||
| 		{"Sea level reference (negative value)", 1}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"GPSAltitude", 6, NULL}, | ||||
| 	{"GPSTimeStamp", 7, NULL}, | ||||
| 	{"GPSSatellites", 8, NULL}, | ||||
| 	{"GPSStatus", 9, NULL}, | ||||
| 	{"GPSMeasureMode", 10, NULL}, | ||||
| 	{"GPSDOP", 11, NULL}, | ||||
| 	{"GPSSpeedRef", 12, NULL}, | ||||
| 	{"GPSSpeed", 13, NULL}, | ||||
| 	{"GPSTrackRef", 14, NULL}, | ||||
| 	{"GPSTrack", 15, NULL}, | ||||
| 	{"GPSImgDirectionRef", 16, NULL}, | ||||
| 	{"GPSImgDirection", 17, NULL}, | ||||
| 	{"GPSMapDatum", 18, NULL}, | ||||
| 	{"GPSDestLatitudeRef", 19, NULL}, | ||||
| 	{"GPSDestLatitude", 20, NULL}, | ||||
| 	{"GPSDestLongitudeRef", 21, NULL}, | ||||
| 	{"GPSDestLongitude", 22, NULL}, | ||||
| 	{"GPSDestBearingRef", 23, NULL}, | ||||
| 	{"GPSDestBearing", 24, NULL}, | ||||
| 	{"GPSDestDistanceRef", 25, NULL}, | ||||
| 	{"GPSDestDistance", 26, NULL}, | ||||
| 	{"GPSProcessingMethod", 27, NULL}, | ||||
| 	{"GPSAreaInformation", 28, NULL}, | ||||
| 	{"GPSDateStamp", 29, NULL}, | ||||
| 	{"GPSDifferential", 30, (struct tiff_value[]) { | ||||
| 		{"Measurement without differential correction", 0}, | ||||
| 		{"Differential correction applied", 1}, | ||||
| 		{} | ||||
| 	}}, | ||||
| 	{"GPSHPositioningError", 31, NULL}, | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
| // Exif 2.3 4.6.7 (Notice it starts at 1, and collides with GPS.)
 | ||||
| static struct tiff_entry exif_interop_entries[] = { | ||||
| 	{"InteroperabilityIndex", 1, NULL}, | ||||
| 	{} | ||||
| }; | ||||
| #include "tiff-tables.h" | ||||
| 
 | ||||
| // TODO(p): Consider if these can't be inlined into `tiff_entries`.
 | ||||
| static struct { | ||||
| @ -871,7 +370,7 @@ static struct { | ||||
| 	{330, tiff_entries},   // SubIFDs
 | ||||
| 	{34665, exif_entries},  // Exif IFD Pointer
 | ||||
| 	{34853, exif_gps_entries},  // GPS Info IFD Pointer
 | ||||
| 	{40965, exif_interop_entries},  // Interoperability IFD Pointer
 | ||||
| 	{40965, exif_interoperability_entries},  // Interoperability IFD Pointer
 | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user