exiftool-vendored.pl 12.43.0 → 12.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/bin/Changes +45 -0
  2. package/bin/META.json +1 -1
  3. package/bin/META.yml +1 -1
  4. package/bin/README +2 -2
  5. package/bin/exiftool +26 -22
  6. package/bin/fmt_files/gpx.fmt +3 -0
  7. package/bin/fmt_files/gpx_wpt.fmt +3 -0
  8. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -4
  9. package/bin/lib/Image/ExifTool/Canon.pm +17 -11
  10. package/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
  11. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -0
  12. package/bin/lib/Image/ExifTool/EXE.pm +9 -1
  13. package/bin/lib/Image/ExifTool/Exif.pm +5 -5
  14. package/bin/lib/Image/ExifTool/FLIR.pm +4 -3
  15. package/bin/lib/Image/ExifTool/FlashPix.pm +9 -1
  16. package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
  17. package/bin/lib/Image/ExifTool/GPS.pm +21 -1
  18. package/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -1
  19. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  20. package/bin/lib/Image/ExifTool/Matroska.pm +24 -16
  21. package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
  22. package/bin/lib/Image/ExifTool/Nikon.pm +70 -24
  23. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +18 -5
  24. package/bin/lib/Image/ExifTool/Parrot.pm +95 -2
  25. package/bin/lib/Image/ExifTool/QuickTime.pm +86 -4
  26. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +7 -4
  27. package/bin/lib/Image/ExifTool/README +3 -1
  28. package/bin/lib/Image/ExifTool/Sony.pm +8 -1
  29. package/bin/lib/Image/ExifTool/TagLookup.pm +34 -8
  30. package/bin/lib/Image/ExifTool/TagNames.pod +94 -25
  31. package/bin/lib/Image/ExifTool/Validate.pm +3 -3
  32. package/bin/lib/Image/ExifTool/WriteExif.pl +81 -22
  33. package/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
  34. package/bin/lib/Image/ExifTool/Writer.pl +7 -4
  35. package/bin/lib/Image/ExifTool/XMP.pm +7 -3
  36. package/bin/lib/Image/ExifTool/XMP2.pl +11 -4
  37. package/bin/lib/Image/ExifTool.pm +1 -1
  38. package/bin/lib/Image/ExifTool.pod +6 -5
  39. package/bin/perl-Image-ExifTool.spec +1 -1
  40. package/bin/pp_build_exe.args +4 -4
  41. package/package.json +1 -1
@@ -2043,7 +2043,7 @@ my %tagLookup = (
2043
2043
  'customrawhighlightpoint' => { 109 => 0x51 },
2044
2044
  'customrawshadow' => { 109 => 0x85 },
2045
2045
  'customrawshadowpoint' => { 109 => 0x52 },
2046
- 'customrendered' => { 119 => 0xa401, 484 => 'CustomRendered' },
2046
+ 'customrendered' => { 119 => 0xa401, 191 => 0x6420, 484 => 'CustomRendered' },
2047
2047
  'customsaturation' => { 109 => 0x4d, 297 => 0x503 },
2048
2048
  'customsettingsalldefault' => { 279 => '0.2', 288 => '0.2' },
2049
2049
  'customsettingsbank' => { 279 => '0.1', 280 => '0.1', 282 => '0.1', 283 => '0.1', 288 => '0.1', 292 => '0.2', 293 => '0.2', 295 => 0x1 },
@@ -2345,7 +2345,7 @@ my %tagLookup = (
2345
2345
  'drangepriority' => { 127 => 0x1443 },
2346
2346
  'drangepriorityauto' => { 127 => 0x1444 },
2347
2347
  'drangepriorityfixed' => { 127 => 0x1445 },
2348
- 'drivemode' => { 113 => 0x3103, 125 => '0.1', 181 => 0x6, 184 => 0x1e, 187 => 0xe, 297 => 0x600, 355 => 0x34, 387 => 0x1002, 397 => 0x3, 407 => 0x4, 408 => 0x7e, 409 => 0x34 },
2348
+ 'drivemode' => { 113 => 0x3103, 125 => '0.1', 181 => 0x6, 184 => 0x1e, 187 => 0xe, 191 => 0x64d0, 297 => 0x600, 355 => 0x34, 387 => 0x1002, 397 => 0x3, 407 => 0x4, 408 => 0x7e, 409 => 0x34 },
2349
2349
  'drivemode2' => { 184 => 0xa, 336 => 0x7, 418 => 0xe, 425 => 0x1 },
2350
2350
  'drivemodesetting' => { 409 => 0x4 },
2351
2351
  'drivespeed' => { 125 => '0.2' },
@@ -2742,7 +2742,8 @@ my %tagLookup = (
2742
2742
  'firmwarename' => { 394 => 0xa001 },
2743
2743
  'firmwarerevision' => { 19 => 0xa4, 64 => 0x1e, 385 => 0x0 },
2744
2744
  'firmwarerevision2' => { 385 => 0xc },
2745
- 'firmwareversion' => { 7 => 0x10b, 11 => 0x136, 14 => 0xff, 15 => 0x107, 138 => [0x415,0xce5], 154 => 0x57, 156 => 'FirmwareVersion', 318 => 0x320, 320 => 0x2, 322 => 0x3109, 355 => 0x230, 380 => ['CNFV','FIRM'], 382 => 0x18, 383 => 0x2a, 387 => 0x2 },
2745
+ 'firmwareversion' => { 7 => 0x10b, 11 => 0x136, 14 => 0xff, 15 => 0x107, 127 => 0x1447, 138 => [0x415,0xce5], 154 => 0x57, 156 => 'FirmwareVersion', 318 => 0x320, 320 => 0x2, 322 => 0x3109, 355 => 0x230, 380 => ['CNFV','FIRM'], 382 => 0x18, 383 => 0x2a, 387 => 0x2 },
2746
+ 'firmwareversion2' => { 127 => 0x1448 },
2746
2747
  'firmwareversions' => { 364 => 0x301 },
2747
2748
  'firstphotodate' => { 466 => 'FirstPhotoDate' },
2748
2749
  'firstpublicationdate' => { 307 => 'FirstPublicationDate' },
@@ -2884,9 +2885,10 @@ my %tagLookup = (
2884
2885
  'focusbracketstepsize' => { 297 => 0x308 },
2885
2886
  'focuscontinuous' => { 34 => 0x20 },
2886
2887
  'focusdisplayaiservoandmf' => { 84 => 0x515 },
2887
- 'focusdistance' => { 163 => 'FocusDistance', 181 => 0x13, 187 => 0x49bb, 219 => 0x9, 220 => 0xa, 224 => [0xb,0x4f], 300 => 0x305, 314 => 0x0, 318 => 0x304, 319 => 0x304 },
2888
+ 'focusdistance' => { 163 => 'FocusDistance', 181 => 0x13, 187 => 0x49bb, 219 => 0x9, 220 => 0xa, 224 => [0xb,0x4e], 300 => 0x305, 314 => 0x0, 318 => 0x304, 319 => 0x304 },
2888
2889
  'focusdistancelower' => { 7 => 0x45, 9 => 0x8e, 11 => 0x45, 13 => 0x56, 14 => 0x45, 15 => 0x45, 16 => 0x52, 17 => 0x52, 18 => 0x56, 20 => 0x52, 21 => 0x8e, 22 => 0x59, 23 => 0x57, 24 => 0x8e, 25 => 0x94, 26 => 0x95, 27 => 0xa7, 28 => 0x56, 29 => 0xa7, 57 => 0x15, 77 => 0x14 },
2889
2890
  'focusdistancerange' => { 1 => 0xc },
2891
+ 'focusdistancerangewidth' => { 224 => 0x4c },
2890
2892
  'focusdistanceupper' => { 7 => 0x43, 9 => 0x8c, 11 => 0x43, 13 => 0x54, 14 => 0x43, 15 => 0x43, 16 => 0x50, 17 => 0x50, 18 => 0x54, 20 => 0x50, 21 => 0x8c, 22 => 0x57, 23 => 0x55, 24 => 0x8c, 25 => 0x92, 26 => 0x93, 27 => 0xa5, 28 => 0x54, 29 => 0xa5, 57 => 0x14, 77 => 0x13 },
2891
2893
  'focusholdbutton' => { 184 => 0x44 },
2892
2894
  'focusinfoversion' => { 300 => 0x0 },
@@ -2904,7 +2906,7 @@ my %tagLookup = (
2904
2906
  'focuspointlock' => { 295 => 0x1d3 },
2905
2907
  'focuspointpersistence' => { 295 => 0x105 },
2906
2908
  'focuspointwrap' => { 279 => '2.2', 280 => '2.2', 282 => '2.1', 283 => '2.1', 287 => '1.1', 288 => '2.2', 289 => '1.1', 292 => '2.2', 293 => '2.1', 294 => '2.5', 295 => 0x16 },
2907
- 'focusposition' => { 219 => 0x8, 220 => 0x8, 224 => 0x9, 355 => 0x10, 418 => 0x9bb },
2909
+ 'focusposition' => { 219 => 0x8, 220 => 0x8, 355 => 0x10, 418 => 0x9bb },
2908
2910
  'focusposition2' => { 425 => [0x29,0x2b,0x2f], 445 => 0x2d, 448 => 0x20 },
2909
2911
  'focuspositionhorizontal' => { 194 => 0x43 },
2910
2912
  'focuspositionvertical' => { 194 => 0x45 },
@@ -3054,9 +3056,9 @@ my %tagLookup = (
3054
3056
  'gpshpositioningerror' => { 130 => 0x1f, 484 => 'GPSHPositioningError' },
3055
3057
  'gpsimgdirection' => { 130 => 0x11, 484 => 'GPSImgDirection' },
3056
3058
  'gpsimgdirectionref' => { 130 => 0x10, 484 => 'GPSImgDirectionRef' },
3057
- 'gpslatitude' => { 116 => 'GpsLatitude', 130 => 0x2, 160 => 'Latitude', 484 => 'GPSLatitude' },
3059
+ 'gpslatitude' => { 114 => 'GPS-GPSLatitude', 116 => 'GpsLatitude', 130 => 0x2, 160 => 'Latitude', 484 => 'GPSLatitude' },
3058
3060
  'gpslatituderef' => { 130 => 0x1 },
3059
- 'gpslongitude' => { 116 => 'GpsLongitude', 130 => 0x4, 160 => 'Longitude', 484 => 'GPSLongitude' },
3061
+ 'gpslongitude' => { 114 => 'GPS-GPSLongitude', 116 => 'GpsLongitude', 130 => 0x4, 160 => 'Longitude', 484 => 'GPSLongitude' },
3060
3062
  'gpslongituderef' => { 130 => 0x3 },
3061
3063
  'gpslongtitude' => { 116 => 'GpsLongtitude' },
3062
3064
  'gpsmapdatum' => { 130 => 0x12, 160 => 'Datum', 484 => 'GPSMapDatum' },
@@ -3754,6 +3756,7 @@ my %tagLookup = (
3754
3756
  'lenscorrectionsettings' => { 483 => 'LensCorrectionSettings' },
3755
3757
  'lensdistortinfo' => { 475 => 'LensDistortInfo' },
3756
3758
  'lensdistortionparams' => { 302 => 0x206 },
3759
+ 'lensdriveend' => { 224 => 0x56 },
3757
3760
  'lensdrivenoaf' => { 84 => 0x505 },
3758
3761
  'lensdrivewhenafimpossible' => { 2 => 0xb },
3759
3762
  'lense-mountversion' => { 409 => 0x3f0, 454 => 0xd },
@@ -3778,6 +3781,8 @@ my %tagLookup = (
3778
3781
  'lensmodulationoptimizer' => { 127 => 0x1045 },
3779
3782
  'lensmount' => { 409 => 0x99, 433 => 0x1892, 435 => 0x18be, 436 => 0x18ee, 437 => 0x17f2, 439 => 0x105, 440 => 0x105, 450 => 0x604, 451 => 0x5e },
3780
3783
  'lensmount2' => { 454 => 0x8 },
3784
+ 'lensmounttype' => { 224 => 0x35 },
3785
+ 'lenspositionabsolute' => { 224 => 0x5a },
3781
3786
  'lensprofilechromaticaberrationscale' => { 478 => 'LensProfileChromaticAberrationScale', 480 => 'LensProfileChromaticAberrationScale' },
3782
3787
  'lensprofiledigest' => { 478 => 'LensProfileDigest', 480 => 'LensProfileDigest' },
3783
3788
  'lensprofiledistortionscale' => { 478 => 'LensProfileDistortionScale', 480 => 'LensProfileDistortionScale' },
@@ -4431,7 +4436,14 @@ my %tagLookup = (
4431
4436
  'menubuttonreturn' => { 90 => 0xb },
4432
4437
  'menumonitorofftime' => { 279 => '26.1', 280 => '22.1', 282 => '22.1', 283 => '22.1', 287 => '21.1', 288 => '8.2', 289 => '21.1', 292 => '22.1', 293 => '22.1', 294 => '22.1', 295 => 0x35 },
4433
4438
  'menusettingsz7iioffset' => { 260 => 0xceb6 },
4439
+ 'metadataauthority' => { 490 => 'metadataAuthority' },
4440
+ 'metadataauthorityidentifier' => { 490 => [\'metadataAuthority','metadataAuthorityIdentifier'] },
4441
+ 'metadataauthorityname' => { 490 => [\'metadataAuthority','metadataAuthorityName'] },
4434
4442
  'metadatadate' => { 502 => 'MetadataDate' },
4443
+ 'metadatalastedited' => { 490 => 'metadataLastEdited' },
4444
+ 'metadatalasteditor' => { 490 => 'metadataLastEditor' },
4445
+ 'metadatalasteditoridentifier' => { 490 => [\'metadataLastEditor','metadataLastEditorIdentifier'] },
4446
+ 'metadatalasteditorname' => { 490 => [\'metadataLastEditor','metadataLastEditorName'] },
4435
4447
  'metadatamoddate' => { 504 => 'metadataModDate' },
4436
4448
  'metaversion' => { 428 => 0x34 },
4437
4449
  'meterinfo1row1' => { 421 => 0x0, 422 => 0x0 },
@@ -4725,6 +4737,7 @@ my %tagLookup = (
4725
4737
  'occurrenceorganismquantity' => { 118 => [\'Occurrence','OccurrenceOrganismQuantity'] },
4726
4738
  'occurrenceorganismquantitytype' => { 118 => [\'Occurrence','OccurrenceOrganismQuantityType'] },
4727
4739
  'occurrenceothercatalognumbers' => { 118 => [\'Occurrence','OccurrenceOtherCatalogNumbers'] },
4740
+ 'occurrencepathway' => { 118 => [\'Occurrence','OccurrencePathway'] },
4728
4741
  'occurrencepreparations' => { 118 => [\'Occurrence','OccurrencePreparations'] },
4729
4742
  'occurrencepreviousidentifications' => { 118 => [\'Occurrence','OccurrencePreviousIdentifications'] },
4730
4743
  'occurrencerecordedby' => { 118 => [\'Occurrence','OccurrenceRecordedBy'] },
@@ -5029,6 +5042,7 @@ my %tagLookup = (
5029
5042
  'parametricshadows' => { 478 => 'ParametricShadows', 480 => 'ParametricShadows' },
5030
5043
  'parametricshadowsplit' => { 478 => 'ParametricShadowSplit', 480 => 'ParametricShadowSplit' },
5031
5044
  'parentalrating' => { 179 => 'WM/ParentalRating' },
5045
+ 'parentid' => { 490 => 'parentId' },
5032
5046
  'parentmediaeventid' => { 468 => 'ParentMediaEventID' },
5033
5047
  'parentmeid' => { 468 => 'ParentMEID' },
5034
5048
  'parentproductid' => { 372 => '@ppi' },
@@ -7030,7 +7044,7 @@ my %tagLookup = (
7030
7044
  'whitebalancebuttonplaybackmode' => { 295 => 0x1c5 },
7031
7045
  'whitebalancecomp' => { 305 => 0x1001 },
7032
7046
  'whitebalancedetected' => { 138 => 0x3fb },
7033
- 'whitebalancefinetune' => { 127 => 0x100a, 184 => 0x38, 186 => 0x112, 226 => 0xb, 387 => 0x1004, 407 => 0x6, 408 => 0x5, 420 => 0x112 },
7047
+ 'whitebalancefinetune' => { 127 => 0x100a, 184 => 0x38, 186 => 0x112, 226 => [0xb,0x3f], 387 => 0x1004, 407 => 0x6, 408 => 0x5, 420 => 0x112 },
7034
7048
  'whitebalancemode' => { 138 => 0x3fa, 355 => 0x1a },
7035
7049
  'whitebalancered' => { 74 => 0x6 },
7036
7050
  'whitebalanceset' => { 336 => 0xa },
@@ -7117,6 +7131,7 @@ my %tagExists = (
7117
7131
  'acceldata' => 1,
7118
7132
  'accelerometermatrix' => 1,
7119
7133
  'accelerometertime' => 1,
7134
+ 'accelerometerunknown' => 1,
7120
7135
  'accelmode' => 1,
7121
7136
  'accelypr' => 1,
7122
7137
  'accessdate' => 1,
@@ -7291,6 +7306,10 @@ my %tagExists = (
7291
7306
  'appname' => 1,
7292
7307
  'archivallocation' => 1,
7293
7308
  'archivedfilename' => 1,
7309
+ 'arcoreaccel' => 1,
7310
+ 'arcorecustom' => 1,
7311
+ 'arcoregyro' => 1,
7312
+ 'arcorevideo' => 1,
7294
7313
  'ardronefile' => 1,
7295
7314
  'ardronetelemetry' => 1,
7296
7315
  'artist2' => 1,
@@ -7997,6 +8016,7 @@ my %tagExists = (
7997
8016
  'colorpalette' => 1,
7998
8017
  'colorpopstrength' => 1,
7999
8018
  'colorprimaries' => 1,
8019
+ 'colorprofiles' => 1,
8000
8020
  'colorresolutiondepth' => 1,
8001
8021
  'colorresponseunit' => 1,
8002
8022
  'colors' => 1,
@@ -9102,6 +9122,7 @@ my %tagExists = (
9102
9122
  'gyro360fly' => 1,
9103
9123
  'gyromode' => 1,
9104
9124
  'gyroscope' => 1,
9125
+ 'gyroscopeunknown' => 1,
9105
9126
  'gyroypr' => 1,
9106
9127
  'handler' => 1,
9107
9128
  'handlerclass' => 1,
@@ -9781,6 +9802,7 @@ my %tagExists = (
9781
9802
  'marl' => 1,
9782
9803
  'masksubarea' => 1,
9783
9804
  'mastergainadjustment' => 1,
9805
+ 'matrixcoefficients' => 1,
9784
9806
  'matrixworldtocamera' => 1,
9785
9807
  'matrixworldtoscreen' => 1,
9786
9808
  'mattcolor' => 1,
@@ -10022,6 +10044,7 @@ my %tagExists = (
10022
10044
  'metaimagesize' => 1,
10023
10045
  'metarelation' => 1,
10024
10046
  'metasampledesc' => 1,
10047
+ 'metatype' => 1,
10025
10048
  'metdata' => 1,
10026
10049
  'meterinfo' => 1,
10027
10050
  'meteringbutton' => 1,
@@ -11731,6 +11754,7 @@ my %tagExists = (
11731
11754
  'trademark' => 1,
11732
11755
  'transactionid' => 1,
11733
11756
  'transfercharacteristic' => 1,
11757
+ 'transfercharacteristics' => 1,
11734
11758
  'transferrange' => 1,
11735
11759
  'transfersequence' => 1,
11736
11760
  'transformation' => 1,
@@ -12171,6 +12195,8 @@ my %tagExists = (
12171
12195
  my %compositeModules = (
12172
12196
  'filenumber' => 'Image::ExifTool::Canon',
12173
12197
  'flash' => 'Image::ExifTool::XMP',
12198
+ 'gpslatitude' => 'Image::ExifTool::GPS',
12199
+ 'gpslongitude' => 'Image::ExifTool::GPS',
12174
12200
  'gpsposition' => 'Image::ExifTool::Exif',
12175
12201
  'jpgfromraw' => 'Image::ExifTool::Exif',
12176
12202
  'originaldecisiondata' => 'Image::ExifTool::Canon',
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 25802 tags, with 16493 unique tag names.
15
+ They contain a total of 25828 tags, with 16515 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -902,9 +902,9 @@ for the official EXIF 2.32 specification.
902
902
  0xc71f RowInterleaveFactor - no
903
903
  0xc725 ProfileLookTableDims IFD0 int32u[3]!
904
904
  0xc726 ProfileLookTableData IFD0 float[n]!
905
- 0xc740 OpcodeList1 SubIFD undef!
906
- 0xc741 OpcodeList2 SubIFD undef!
907
- 0xc74e OpcodeList3 SubIFD undef!
905
+ 0xc740 OpcodeList1 SubIFD undef~!
906
+ 0xc741 OpcodeList2 SubIFD undef~!
907
+ 0xc74e OpcodeList3 SubIFD undef~!
908
908
  0xc761 NoiseProfile SubIFD double[n]!
909
909
  0xc763 TimeCodes IFD0 int8u[n]
910
910
  0xc764 FrameRate IFD0 rational64s
@@ -4514,10 +4514,11 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
4514
4514
 
4515
4515
  =head3 XMP iptcExt Tags
4516
4516
 
4517
- This table contains tags defined by the IPTC Extension schema version 1.6.
4518
- The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for
4519
- the family 1 group name. (see
4520
- L<http://www.iptc.org/standards/photo-metadata/iptc-standard/>)
4517
+ This table contains tags defined by the IPTC Extension schema version 1.6
4518
+ and IPTC Video Metadata version 1.3. The actual namespace prefix is
4519
+ "Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (See
4520
+ L<http://www.iptc.org/standards/photo-metadata/iptc-standard/> and
4521
+ L<https://iptc.org/standards/video-metadata-hub/>.)
4521
4522
 
4522
4523
  These tags belong to the ExifTool XMP-iptcExt family 1 group.
4523
4524
 
@@ -4655,9 +4656,17 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
4655
4656
  LocationShownWorldRegion string_+
4656
4657
  MaxAvailHeight integer
4657
4658
  MaxAvailWidth integer
4659
+ MetadataAuthority Entity Struct
4660
+ MetadataAuthorityIdentifier string_+
4661
+ MetadataAuthorityName lang-alt_
4662
+ MetadataLastEdited date
4663
+ MetadataLastEditor Entity Struct
4664
+ MetadataLastEditorIdentifier string_+
4665
+ MetadataLastEditorName lang-alt_
4658
4666
  ModelAge integer+
4659
4667
  OrganisationInImageCode string+
4660
4668
  OrganisationInImageName string+
4669
+ ParentID string
4661
4670
  PersonHeard Entity Struct+
4662
4671
  PersonHeardIdentifier string_+
4663
4672
  PersonHeardName lang-alt_+
@@ -10720,7 +10729,8 @@ imaging cameras by FLIR Systems Inc.
10720
10729
 
10721
10730
  Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
10722
10731
  images. These tags may also be extracted from the first frame of an FLIR
10723
- SEQ file, or all frames if the ExtractEmbedded option is used.
10732
+ SEQ file, or all frames if the ExtractEmbedded option is used. Setting
10733
+ ExtractEmbedded to 2 also the raw thermal data from all frames.
10724
10734
 
10725
10735
  Tag ID Tag Name Writable
10726
10736
  ------ -------- --------
@@ -11209,6 +11219,8 @@ Tags extracted from FLIR Public image Format (FPF) files.
11209
11219
  0x1444 DRangePriorityAuto int16u
11210
11220
  0x1445 DRangePriorityFixed int16u
11211
11221
  0x1446 FlickerReduction int32u
11222
+ 0x1447 FirmwareVersion string
11223
+ 0x1448 FirmwareVersion2 string
11212
11224
  0x3803 VideoRecordingMode int32u
11213
11225
  0x3804 PeripheralLighting int16u
11214
11226
  0x3806 VideoCompression int16u
@@ -13445,6 +13457,8 @@ DiMAGE X and Xt.
13445
13457
  ------ -------- --------
13446
13458
  0x5500 BuildNumber string
13447
13459
  0x5501 SerialNumber string
13460
+ 0x6420 CustomRendered string
13461
+ 0x64d0 DriveMode string
13448
13462
  0x665e Sensor string
13449
13463
  0x6705 ManufactureDate string
13450
13464
 
@@ -13502,6 +13516,7 @@ DiMAGE X and Xt.
13502
13516
  0x0039 LocationInfo Nikon LocationInfo
13503
13517
  0x003d BlackLevel int16u[4]
13504
13518
  0x003e ImageSizeRAW yes
13519
+ 0x003f WhiteBalanceFineTune rational64s[2]
13505
13520
  0x0045 CropArea int16u[4]
13506
13521
  0x004e NikonSettings NikonSettings
13507
13522
  0x004f ColorTemperatureAuto int16u
@@ -14555,7 +14570,6 @@ Tags found in the encrypted LensData from cameras such as the Z6 and Z7.
14555
14570
  0 LensDataVersion no
14556
14571
  4 ExitPupilPosition int8u
14557
14572
  5 AFAperture int8u
14558
- 9 FocusPosition int8u
14559
14573
  11 FocusDistance int8u
14560
14574
  12 FocalLength int8u
14561
14575
  13 LensIDNumber int8u
@@ -14567,10 +14581,14 @@ Tags found in the encrypted LensData from cameras such as the Z6 and Z7.
14567
14581
  19 MCUVersion int8u
14568
14582
  20 EffectiveMaxAperture int8u
14569
14583
  48 LensID int16u
14584
+ 53 LensMountType? int8u
14570
14585
  54 MaxAperture int16u
14571
14586
  56 FNumber int16u
14572
14587
  60 FocalLength int16u
14573
- 79 FocusDistance int8u
14588
+ 76 FocusDistanceRangeWidth? int8u
14589
+ 78 FocusDistance int16u~
14590
+ 86 LensDriveEnd? int8u
14591
+ 90 LensPositionAbsolute? int32s
14574
14592
 
14575
14593
  =head3 Nikon LensDataUnknown Tags
14576
14594
 
@@ -21676,6 +21694,7 @@ specification.
21676
21694
  'Contents' Contents XMP
21677
21695
  'Current User' CurrentUser no
21678
21696
  'ICC Profile 0001' ICC_Profile ICC_Profile
21697
+ 'IeImg' EmbeddedImage no
21679
21698
  'Preview' PreviewImage no
21680
21699
  'Property' PreviewInfo FlashPix PreviewInfo
21681
21700
  'Subimage 0000 Header' SubimageHdr FlashPix SubimageHdr
@@ -23905,6 +23924,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
23905
23924
  OccurrenceOrganismQuantity string_
23906
23925
  OccurrenceOrganismQuantityType string_
23907
23926
  OccurrenceOtherCatalogNumbers string_
23927
+ OccurrencePathway string_
23908
23928
  OccurrencePreparations string_
23909
23929
  OccurrencePreviousIdentifications string_
23910
23930
  OccurrenceRecordedBy string_
@@ -24137,6 +24157,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
24137
24157
  OrganismQuantity string
24138
24158
  OrganismQuantityType string
24139
24159
  OtherCatalogNumbers string
24160
+ Pathway string
24140
24161
  Preparations string
24141
24162
  PreviousIdentifications string
24142
24163
  RecordNumber string
@@ -28349,7 +28370,7 @@ and are not currently writable.
28349
28370
  'av1C' AV1Configuration QuickTime AV1Config
28350
28371
  'clap' CleanAperture no
28351
28372
  'colr' ICC_Profile ICC_Profile
28352
- ColorRepresentation no
28373
+ ColorRepresentation QuickTime ColorRep
28353
28374
  'hvcC' HEVCConfiguration QuickTime HEVCConfig
28354
28375
  'irot' Rotation int8u!
28355
28376
  'ispe' ImageSpatialExtent no
@@ -28371,6 +28392,15 @@ and are not currently writable.
28371
28392
  2.4 ChromaSamplePosition no
28372
28393
  3 InitialDelaySamples? no
28373
28394
 
28395
+ =head3 QuickTime ColorRep Tags
28396
+
28397
+ Index1 Tag Name Writable
28398
+ ------ -------- --------
28399
+ 0 ColorProfiles no
28400
+ 4 ColorPrimaries no
28401
+ 6 TransferCharacteristics no
28402
+ 8 MatrixCoefficients no
28403
+
28374
28404
  =head3 QuickTime HEVCConfig Tags
28375
28405
 
28376
28406
  Index1 Tag Name Writable
@@ -28711,7 +28741,7 @@ Child atoms found in "sinf" and/or "pinf" atoms.
28711
28741
  'avcC' AVCConfiguration? no
28712
28742
  'btrt' BitrateInfo QuickTime Bitrate
28713
28743
  'clap' CleanAperture QuickTime CleanAperture
28714
- 'colr' ColorRepresentation no
28744
+ 'colr' ColorRepresentation QuickTime ColorRep
28715
28745
  'fiel' VideoFieldOrder no
28716
28746
  'gama' Gamma no
28717
28747
  'pasp' PixelAspectRatio no
@@ -28798,6 +28828,7 @@ MP4 metadata sample description.
28798
28828
  Tag ID Tag Name Writable
28799
28829
  ------ -------- --------
28800
28830
  0x0004 MetaFormat no
28831
+ 0x0008 MetaType no
28801
28832
  'btrt' BitrateInfo QuickTime Bitrate
28802
28833
  'keys' Keys QuickTime Keys
28803
28834
 
@@ -29295,14 +29326,19 @@ Streaming metadata found in Parrot drone videos. See
29295
29326
  L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
29296
29327
  specification.
29297
29328
 
29298
- Tag ID Tag Name Writable
29299
- ------ -------- --------
29300
- 'P1' ParrotV1 Parrot V1
29301
- 'P2' ParrotV2 Parrot V2
29302
- 'P3' ParrotV3 Parrot V3
29303
- 'E1' ParrotTimeStamp Parrot TimeStamp
29304
- 'E2' ParrotFollowMe Parrot FollowMe
29305
- 'E3' ParrotAutomation Parrot Automation
29329
+ Tag ID Tag Name Writable
29330
+ ------ -------- --------
29331
+ 'P1' ParrotV1 Parrot V1
29332
+ 'P2' ParrotV2 Parrot V2
29333
+ 'P3' ParrotV3 Parrot V3
29334
+ 'E1' ParrotTimeStamp Parrot TimeStamp
29335
+ 'E2' ParrotFollowMe Parrot FollowMe
29336
+ 'E3' ParrotAutomation Parrot Automation
29337
+ 'application/arcore-accel' ARCoreAccel Parrot ARCoreAccel
29338
+ 'application/arcore-custom-event'
29339
+ ARCoreCustom Parrot ARCoreCustom
29340
+ 'application/arcore-gyro' ARCoreGyro Parrot ARCoreGyro
29341
+ 'application/arcore-video-0' ARCoreVideo Parrot ARCoreVideo
29306
29342
 
29307
29343
  =head3 Parrot V1 Tags
29308
29344
 
@@ -29430,12 +29466,44 @@ Parrot streaming metadata automation extension.
29430
29466
  28 AutomationAnimation no
29431
29467
  29 AutomationFlags no
29432
29468
 
29469
+ =head3 Parrot ARCoreAccel Tags
29470
+
29471
+ ARCore accelerometer data.
29472
+
29473
+ Index1 Tag Name Writable
29474
+ ------ -------- --------
29475
+ 4 AccelerometerUnknown? no
29476
+ 5 Accelerometer no
29477
+
29478
+ =head3 Parrot ARCoreCustom Tags
29479
+
29480
+ Index1 Tag Name Writable
29481
+ ------ -------- --------
29482
+ [no tags known]
29483
+
29484
+ =head3 Parrot ARCoreGyro Tags
29485
+
29486
+ ARCore accelerometer data.
29487
+
29488
+ Index1 Tag Name Writable
29489
+ ------ -------- --------
29490
+ 4 GyroscopeUnknown? no
29491
+ 5 Gyroscope no
29492
+
29493
+ =head3 Parrot ARCoreVideo Tags
29494
+
29495
+ Index1 Tag Name Writable
29496
+ ------ -------- --------
29497
+ [no tags known]
29498
+
29433
29499
  =head2 Matroska Tags
29434
29500
 
29435
29501
  The following tags are extracted from Matroska multimedia container files.
29436
29502
  This container format is used by file types such as MKA, MKV, MKS and WEBM.
29437
- For speed, ExifTool extracts tags only up to the first Cluster unless the
29438
- Verbose (-v) or Unknown = 2 (-U) option is used. See
29503
+ For speed, by default ExifTool extracts tags only up to the first Cluster.
29504
+ However, the Verbose (-v) and Unknown = 2 (-U) options force processing of
29505
+ Cluster data, and the ExtractEmbedded (-ee) option skips over Clusters to
29506
+ read subsequent tags. See
29439
29507
  L<http://www.matroska.org/technical/specs/index.html> for the official
29440
29508
  Matroska specification.
29441
29509
 
@@ -29617,6 +29685,7 @@ Matroska specification.
29617
29685
  0x3eb5 Signature? no
29618
29686
  0x7670 Projection Matroska Projection
29619
29687
  0x2b59c TrackLanguage no
29688
+ 0x2b59d TrackLanguageIETF no
29620
29689
  0x3314f TrackTimecodeScale no
29621
29690
  0x383e3 FrameRate no
29622
29691
  0x3e383 VideoFrameRate no
@@ -37236,14 +37305,14 @@ values, may created via the ExifTool configuration file.
37236
37305
  GPSDestLongitude GPS:GPSDestLongitude no
37237
37306
  GPS:GPSDestLongitudeRef
37238
37307
  GPSDestLongitudeRef XMP-exif:GPSDestLongitude no
37239
- GPSLatitude GPS:GPSLatitude no
37308
+ GPSLatitude GPS:GPSLatitude yes/
37240
37309
  GPS:GPSLatitudeRef
37241
37310
  GPSLatitude QuickTime:GPSCoordinates no
37242
37311
  GPSLatitude QuickTime:LocationInformation no
37243
37312
  GPSLatitude Sony:GPSLatitude no
37244
37313
  Sony:GPSLatitudeRef
37245
37314
  GPSLatitudeRef XMP-exif:GPSLatitude no
37246
- GPSLongitude GPS:GPSLongitude no
37315
+ GPSLongitude GPS:GPSLongitude yes/
37247
37316
  GPS:GPSLongitudeRef
37248
37317
  GPSLongitude QuickTime:GPSCoordinates no
37249
37318
  GPSLongitude QuickTime:LocationInformation no
@@ -17,7 +17,7 @@ package Image::ExifTool::Validate;
17
17
  use strict;
18
18
  use vars qw($VERSION %exifSpec);
19
19
 
20
- $VERSION = '1.18';
20
+ $VERSION = '1.19';
21
21
 
22
22
  use Image::ExifTool qw(:Utils);
23
23
  use Image::ExifTool::Exif;
@@ -82,8 +82,8 @@ my %otherSpec = (
82
82
  CR2 => { 0xc5d8 => 1, 0xc5d9 => 1, 0xc5e0 => 1, 0xc640 => 1, 0xc6dc => 1, 0xc6dd => 1 },
83
83
  NEF => { 0x9216 => 1, 0x9217 => 1 },
84
84
  DNG => { 0x882a => 1, 0x9211 => 1, 0x9216 => 1 },
85
- ARW => { 0x7000 => 1, 0x7001 => 1, 0x7010 => 1, 0x7011 => 1, 0x7020 => 1,
86
- 0x7031 => 1, 0x7032 => 1, 0x7034 => 1, 0x7035 => 1, 0x7036 => 1, 0x7037 => 1,
85
+ ARW => { 0x7000 => 1, 0x7001 => 1, 0x7010 => 1, 0x7011 => 1, 0x7020 => 1, 0x7031 => 1,
86
+ 0x7032 => 1, 0x7034 => 1, 0x7035 => 1, 0x7036 => 1, 0x7037 => 1, 0x7038 => 1,
87
87
  0x7310 => 1, 0x7313 => 1, 0x7316 => 1, 0x74c7 => 1, 0x74c8 => 1, 0xa500 => 1 },
88
88
  RW2 => { All => 1 }, # ignore all unknown tags in RW2
89
89
  RWL => { All => 1 },
@@ -586,7 +586,7 @@ sub WriteExif($$$)
586
586
  $et->Error("$str $name directory", 1);
587
587
  }
588
588
  }
589
- my ($index, $dirEnd, $numEntries);
589
+ my ($index, $dirEnd, $numEntries, %hasOldID, $unsorted);
590
590
  if ($dirStart + 4 < $dataLen) {
591
591
  $numEntries = Get16u($dataPt, $dirStart);
592
592
  $dirEnd = $dirStart + 2 + 12 * $numEntries;
@@ -596,19 +596,20 @@ sub WriteExif($$$)
596
596
  return undef unless $n and defined $rtn;
597
597
  $numEntries = $n; # continue processing the entries we have
598
598
  }
599
- # sort entries if necessary (but not in maker notes IFDs)
600
- unless ($inMakerNotes) {
601
- my $lastID = -1;
602
- for ($index=0; $index<$numEntries; ++$index) {
603
- my $tagID = Get16u($dataPt, $dirStart + 2 + 12 * $index);
604
- # check for proper sequence (but ignore null entries at end)
605
- if ($tagID < $lastID and ($tagID or $$tagTablePtr{0})) {
606
- SortIFD($dataPt, $dirStart, $numEntries, $$tagTablePtr{0});
607
- $et->Warn("Entries in $name were out of sequence. Fixed.",1);
608
- last;
609
- }
610
- $lastID = $tagID;
611
- }
599
+ # create lookup for existing tag ID's and determine if directory is sorted
600
+ my $lastID = -1;
601
+ for ($index=0; $index<$numEntries; ++$index) {
602
+ my $tagID = Get16u($dataPt, $dirStart + 2 + 12 * $index);
603
+ $hasOldID{$tagID} = 1;
604
+ # check for proper sequence (but ignore null entries at end)
605
+ $unsorted = 1 if $tagID < $lastID and ($tagID or $$tagTablePtr{0});
606
+ $lastID = $tagID;
607
+ }
608
+ # sort entries if out-of-order (but not in maker notes IFDs or RAW files)
609
+ if ($unsorted and not ($inMakerNotes or $et->IsRawType())) {
610
+ SortIFD($dataPt, $dirStart, $numEntries, $$tagTablePtr{0});
611
+ $et->Warn("Entries in $name were out of sequence. Fixed.",1);
612
+ $unsorted = 0;
612
613
  }
613
614
  } else {
614
615
  $numEntries = 0;
@@ -616,11 +617,12 @@ sub WriteExif($$$)
616
617
  }
617
618
 
618
619
  # loop through new values and accumulate all information for this IFD
619
- my (%set, %mayDelete, $tagInfo);
620
+ my (%set, %mayDelete, $tagInfo, %hasNewID);
620
621
  my $wrongDir = $crossDelete{$dirName};
621
622
  my @newTagInfo = $et->GetNewTagInfoList($tagTablePtr);
622
623
  foreach $tagInfo (@newTagInfo) {
623
624
  my $tagID = $$tagInfo{TagID};
625
+ $hasNewID{$tagID} = 1;
624
626
  # must evaluate Condition later when we have all DataMember's available
625
627
  $set{$tagID} = (ref $$tagTablePtr{$tagID} eq 'ARRAY' or $$tagInfo{Condition}) ? '' : $tagInfo;
626
628
  }
@@ -972,7 +974,7 @@ Entry: for (;;) {
972
974
  $readCount = $oldSize / $formatSize[$readFormat];
973
975
  }
974
976
  }
975
- if ($oldID <= $lastTagID and not $inMakerNotes) {
977
+ if ($oldID <= $lastTagID and not ($inMakerNotes or $et->IsRawType())) {
976
978
  my $str = $oldInfo ? "$$oldInfo{Name} tag" : sprintf('tag 0x%x',$oldID);
977
979
  if ($oldID == $lastTagID) {
978
980
  $et->Warn("Duplicate $str in $name");
@@ -1006,6 +1008,23 @@ Entry: for (;;) {
1006
1008
  }
1007
1009
  } else {
1008
1010
  $isNew = $oldID <=> $newID;
1011
+ # special logic needed if directory has out-of-order entries
1012
+ if ($unsorted and $isNew) {
1013
+ if ($isNew > 0 and $hasOldID{$newID}) {
1014
+ # we wanted to create the new tag, but an old tag
1015
+ # does exist with this ID, so defer writing the new tag
1016
+ $isNew = -1;
1017
+ }
1018
+ if ($isNew < 0 and $hasNewID{$oldID}) {
1019
+ # we wanted to write the old tag, but we have
1020
+ # a new tag with this ID, so move it up in the order
1021
+ my @tmpTags = ( $oldID );
1022
+ $_ == $oldID or push @tmpTags, $_ foreach @newTags;
1023
+ @newTags = @tmpTags;
1024
+ $newID = $oldID;
1025
+ $isNew = 0;
1026
+ }
1027
+ }
1009
1028
  }
1010
1029
  my $newInfo = $oldInfo;
1011
1030
  my $newFormat = $oldFormat;
@@ -2170,17 +2189,39 @@ NoOverwrite: next if $isNew > 0;
2170
2189
  my @offsetList;
2171
2190
  if ($ifd >= 0) {
2172
2191
  my $offsetInfo = $offsetInfo[$ifd] or next;
2192
+ if ($$offsetInfo{0x111} and $$offsetInfo{0x144}) {
2193
+ # SubIFD may contain double-referenced data as both strips and tiles
2194
+ # for Sony ARW files when SonyRawFileType is "Lossless Compressed RAW 2"
2195
+ if ($dirName eq 'SubIFD' and $$et{TIFF_TYPE} eq 'ARW' and
2196
+ $$offsetInfo{0x117} and $$offsetInfo{0x145} and
2197
+ $$offsetInfo{0x111}[2]==1) # (must be a single strip or the tile offsets could get out of sync)
2198
+ {
2199
+ # some Sony ARW images contain double-referenced raw data stored as both strips
2200
+ # and tiles. Copy the data using only the strip tags, but store the TileOffets
2201
+ # information for updating later (see PanasonicRaw:PatchRawDataOffset for a
2202
+ # description of offsetInfo elements)
2203
+ $$offsetInfo{0x111}[5] = $$offsetInfo{0x144}; # hack to save TileOffsets
2204
+ # delete tile information from offsetInfo because we will copy as strips
2205
+ delete $$offsetInfo{0x144};
2206
+ delete $$offsetInfo{0x145};
2207
+ } else {
2208
+ $et->Error("TIFF $dirName contains both strip and tile data");
2209
+ }
2210
+ }
2173
2211
  # patch Panasonic RAW/RW2 StripOffsets/StripByteCounts if necessary
2174
2212
  my $stripOffsets = $$offsetInfo{0x111};
2175
- if ($stripOffsets and $$stripOffsets[0]{PanasonicHack}) {
2213
+ my $rawDataOffset = $$offsetInfo{0x118};
2214
+ if ($stripOffsets and $$stripOffsets[0]{PanasonicHack} or
2215
+ $rawDataOffset and $$rawDataOffset[0]{PanasonicHack})
2216
+ {
2176
2217
  require Image::ExifTool::PanasonicRaw;
2177
2218
  my $err = Image::ExifTool::PanasonicRaw::PatchRawDataOffset($offsetInfo, $raf, $ifd);
2178
2219
  $err and $et->Error($err);
2179
2220
  }
2180
2221
  my $tagID;
2181
- # loop through all tags in reverse order so we save thumbnail
2222
+ # loop through all tags in reverse numerical order so we save thumbnail
2182
2223
  # data before main image data if both exist in the same IFD
2183
- foreach $tagID (reverse sort keys %$offsetInfo) {
2224
+ foreach $tagID (reverse sort { $a <=> $b } keys %$offsetInfo) {
2184
2225
  my $tagInfo = $$offsetInfo{$tagID}[0];
2185
2226
  next unless $$tagInfo{IsOffset}; # handle byte counts with offsets
2186
2227
  my $sizeInfo = $$offsetInfo{$$tagInfo{OffsetPair}};
@@ -2406,10 +2447,28 @@ NoOverwrite: next if $isNew > 0;
2406
2447
  # also add to subIfdDataFixup if necessary
2407
2448
  $subIfdDataFixup->AddFixup($offsetPos, $dataTag) if $subIfdDataFixup;
2408
2449
  # must also (sometimes) update StripOffsets in Panasonic RW2 images
2450
+ # and TileOffsets in Sony ARW images
2409
2451
  my $otherPos = $$offsetPair[0][5];
2410
- if ($otherPos and $$tagInfo{PanasonicHack}) {
2411
- Set32u($newOffset, \$newData, $otherPos);
2412
- $fixup->AddFixup($otherPos, $dataTag);
2452
+ if ($otherPos) {
2453
+ if ($$tagInfo{PanasonicHack}) {
2454
+ Set32u($newOffset, \$newData, $otherPos);
2455
+ $fixup->AddFixup($otherPos, $dataTag);
2456
+ } elsif (ref $otherPos eq 'ARRAY') {
2457
+ # the image data was copied as one large strip, and is double-referenced
2458
+ # as tile data, so all we need to do now is properly update the tile offsets
2459
+ my $oldRawDataOffset = $$offsetPair[0][3][0];
2460
+ my $count = $$otherPos[2];
2461
+ my $i;
2462
+ # point to offsets in value data if more than one pointer
2463
+ $$otherPos[1] = Get32u(\$newData, $$otherPos[1]) if $count > 1;
2464
+ for ($i=0; $i<$count; ++$i) {
2465
+ my $oldTileOffset = $$otherPos[3][$i];
2466
+ my $ptrPos = $$otherPos[1] + 4 * $i;
2467
+ Set32u($newOffset + $oldTileOffset - $oldRawDataOffset, \$newData, $ptrPos);
2468
+ $fixup->AddFixup($ptrPos, $dataTag);
2469
+ $subIfdDataFixup->AddFixup($ptrPos, $dataTag) if $subIfdDataFixup;
2470
+ }
2471
+ }
2413
2472
  }
2414
2473
  if ($ifd >= 0) {
2415
2474
  # buff length must be even (Note: may have changed since $size was set)