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.
- package/bin/Changes +45 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +26 -22
- package/bin/fmt_files/gpx.fmt +3 -0
- package/bin/fmt_files/gpx_wpt.fmt +3 -0
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -4
- package/bin/lib/Image/ExifTool/Canon.pm +17 -11
- package/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -0
- package/bin/lib/Image/ExifTool/EXE.pm +9 -1
- package/bin/lib/Image/ExifTool/Exif.pm +5 -5
- package/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- package/bin/lib/Image/ExifTool/FlashPix.pm +9 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
- package/bin/lib/Image/ExifTool/GPS.pm +21 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -1
- package/bin/lib/Image/ExifTool/ID3.pm +1 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +70 -24
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +18 -5
- package/bin/lib/Image/ExifTool/Parrot.pm +95 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +86 -4
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +7 -4
- package/bin/lib/Image/ExifTool/README +3 -1
- package/bin/lib/Image/ExifTool/Sony.pm +8 -1
- package/bin/lib/Image/ExifTool/TagLookup.pm +34 -8
- package/bin/lib/Image/ExifTool/TagNames.pod +94 -25
- package/bin/lib/Image/ExifTool/Validate.pm +3 -3
- package/bin/lib/Image/ExifTool/WriteExif.pl +81 -22
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- package/bin/lib/Image/ExifTool/Writer.pl +7 -4
- package/bin/lib/Image/ExifTool/XMP.pm +7 -3
- package/bin/lib/Image/ExifTool/XMP2.pl +11 -4
- package/bin/lib/Image/ExifTool.pm +1 -1
- package/bin/lib/Image/ExifTool.pod +6 -5
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- 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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
4519
|
-
the family 1 group name. (
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
29299
|
-
------
|
|
29300
|
-
'P1'
|
|
29301
|
-
'P2'
|
|
29302
|
-
'P3'
|
|
29303
|
-
'E1'
|
|
29304
|
-
'E2'
|
|
29305
|
-
'E3'
|
|
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
|
|
29438
|
-
Verbose (-v)
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
#
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
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
|
-
|
|
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
|
|
2411
|
-
|
|
2412
|
-
|
|
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)
|