exiftool_vendored 12.42.0 → 12.52.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.
- checksums.yaml +4 -4
- data/bin/Changes +226 -6
- data/bin/MANIFEST +14 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +116 -97
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +66 -37
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/Casio.pm +3 -3
- data/bin/lib/Image/ExifTool/DJI.pm +2 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +17 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +9 -7
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +31 -5
- data/bin/lib/Image/ExifTool/Geotag.pm +36 -8
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +6 -6
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -0
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +24 -3
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +6015 -759
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1927 -0
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +272 -48
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +746 -382
- data/bin/lib/Image/ExifTool/NikonCustom.pm +139 -106
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +6 -4
- data/bin/lib/Image/ExifTool/PNG.pm +8 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +166 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +161 -22
- data/bin/lib/Image/ExifTool/README +15 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +75 -47
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +13 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +4791 -4519
- data/bin/lib/Image/ExifTool/TagNames.pod +2056 -1446
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +12 -7
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -1
- data/bin/lib/Image/ExifTool/Writer.pl +46 -18
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool/ZIP.pm +19 -7
- data/bin/lib/Image/ExifTool.pm +146 -38
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +10 -4
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.63';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -480,6 +480,7 @@ $VERSION = '4.58';
|
|
|
480
480
|
255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
|
|
481
481
|
255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
|
|
482
482
|
255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
|
|
483
|
+
255.3 => 'Yongnuo YN 50mm f/1.8', #50
|
|
483
484
|
368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
|
|
484
485
|
368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
|
|
485
486
|
368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
|
|
@@ -493,6 +494,7 @@ $VERSION = '4.58';
|
|
|
493
494
|
'368.10' => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
|
|
494
495
|
'368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
|
|
495
496
|
'368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
|
|
497
|
+
'368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
|
|
496
498
|
# Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
|
|
497
499
|
488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
|
|
498
500
|
489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
|
|
@@ -597,21 +599,30 @@ $VERSION = '4.58';
|
|
|
597
599
|
'61182.19' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
598
600
|
'61182.20' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
599
601
|
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
|
|
600
|
-
'61182.22' => 'Canon RF
|
|
601
|
-
'61182.23' => 'Canon RF
|
|
602
|
-
'61182.24' => 'Canon RF
|
|
603
|
-
'61182.25' => 'Canon RF
|
|
604
|
-
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM
|
|
605
|
-
'61182.27' => 'Canon RF
|
|
606
|
-
'61182.28' => 'Canon RF 400mm
|
|
607
|
-
'61182.29' => 'Canon RF
|
|
608
|
-
'61182.30' => 'Canon RF
|
|
609
|
-
'61182.31' => 'Canon RF
|
|
610
|
-
|
|
611
|
-
'61182.
|
|
612
|
-
'61182.
|
|
613
|
-
'61182.
|
|
614
|
-
'61182.
|
|
602
|
+
'61182.22' => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
603
|
+
'61182.23' => 'Canon RF 50mm F1.8 STM', #42
|
|
604
|
+
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
605
|
+
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
606
|
+
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
607
|
+
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
608
|
+
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
609
|
+
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
610
|
+
'61182.30' => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
611
|
+
'61182.31' => 'Canon RF 16mm F2.8 STM', #42
|
|
612
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
613
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
614
|
+
'61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
615
|
+
'61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
616
|
+
'61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
617
|
+
'61182.37' => 'Canon RF 800mm F5.6L IS USM', #42
|
|
618
|
+
'61182.38' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
619
|
+
'61182.39' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
620
|
+
'61182.40' => 'Canon RF 1200mm F8L IS USM', #42
|
|
621
|
+
'61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
622
|
+
'61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
623
|
+
'61182.43' => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
624
|
+
# we need the RFLensType values for the following...
|
|
625
|
+
'61182.44' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
615
626
|
65535 => 'n/a',
|
|
616
627
|
);
|
|
617
628
|
|
|
@@ -968,8 +979,11 @@ $VERSION = '4.58';
|
|
|
968
979
|
0x80000437 => 'EOS 90D', #IB
|
|
969
980
|
0x80000450 => 'EOS R3', #42
|
|
970
981
|
0x80000453 => 'EOS R6', #PH
|
|
982
|
+
0x80000464 => 'EOS R7', #42
|
|
983
|
+
0x80000465 => 'EOS R10', #42
|
|
971
984
|
0x80000467 => 'PowerShot ZOOM',
|
|
972
985
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
986
|
+
0x80000481 => 'EOS R6 Mark II', #42
|
|
973
987
|
0x80000520 => 'EOS D2000C', #IB
|
|
974
988
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
|
975
989
|
);
|
|
@@ -1932,7 +1946,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1932
1946
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
|
1933
1947
|
},
|
|
1934
1948
|
{ # (int16u[3973]) - R3 ref IB
|
|
1935
|
-
Condition => '$count == 3973',
|
|
1949
|
+
Condition => '$count == 3973 or $count == 3778',
|
|
1936
1950
|
Name => 'ColorData11',
|
|
1937
1951
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
|
1938
1952
|
},
|
|
@@ -6365,10 +6379,11 @@ my %ciMaxFocal = (
|
|
|
6365
6379
|
1 => {
|
|
6366
6380
|
Name => 'TimeZone',
|
|
6367
6381
|
PrintConv => 'Image::ExifTool::TimeZoneString($val)',
|
|
6368
|
-
PrintConvInv =>
|
|
6369
|
-
|
|
6370
|
-
$val =~
|
|
6371
|
-
|
|
6382
|
+
PrintConvInv => q{
|
|
6383
|
+
$val =~ /Z$/ and return 0;
|
|
6384
|
+
$val =~ /([-+])(\d{1,2}):?(\d{2})$/ and return $1 . ($2 * 60 + $3);
|
|
6385
|
+
$val =~ /^(\d{2})(\d{2})$/ and return $1 * 60 + $2;
|
|
6386
|
+
return undef;
|
|
6372
6387
|
},
|
|
6373
6388
|
},
|
|
6374
6389
|
2 => {
|
|
@@ -6530,23 +6545,23 @@ my %ciMaxFocal = (
|
|
|
6530
6545
|
0x02 => 'FacesDetected',
|
|
6531
6546
|
);
|
|
6532
6547
|
|
|
6533
|
-
# G9 white balance information (MakerNotes tag 0x29) (ref IB)
|
|
6548
|
+
# G9 white balance information (MakerNotes tag 0x29) (ref IB, changed ref forum13640)
|
|
6534
6549
|
%Image::ExifTool::Canon::WBInfo = (
|
|
6535
6550
|
%binaryDataAttrs,
|
|
6536
6551
|
NOTES => 'WB tags for the Canon G9.',
|
|
6537
6552
|
FORMAT => 'int32u',
|
|
6538
6553
|
FIRST_ENTRY => 1,
|
|
6539
6554
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
6540
|
-
0x02 => { Name => '
|
|
6541
|
-
0x0a => { Name => '
|
|
6542
|
-
0x12 => { Name => '
|
|
6543
|
-
0x1a => { Name => '
|
|
6544
|
-
0x22 => { Name => '
|
|
6545
|
-
0x2a => { Name => '
|
|
6546
|
-
0x32 => { Name => '
|
|
6547
|
-
0x3a => { Name => '
|
|
6548
|
-
0x42 => { Name => '
|
|
6549
|
-
0x4a => { Name => '
|
|
6555
|
+
0x02 => { Name => 'WB_GRBGLevelsAuto', Format => 'int32s[4]' },
|
|
6556
|
+
0x0a => { Name => 'WB_GRBGLevelsDaylight', Format => 'int32s[4]' },
|
|
6557
|
+
0x12 => { Name => 'WB_GRBGLevelsCloudy', Format => 'int32s[4]' },
|
|
6558
|
+
0x1a => { Name => 'WB_GRBGLevelsTungsten', Format => 'int32s[4]' },
|
|
6559
|
+
0x22 => { Name => 'WB_GRBGLevelsFluorescent', Format => 'int32s[4]' },
|
|
6560
|
+
0x2a => { Name => 'WB_GRBGLevelsFluorHigh', Format => 'int32s[4]' },
|
|
6561
|
+
0x32 => { Name => 'WB_GRBGLevelsFlash', Format => 'int32s[4]' },
|
|
6562
|
+
0x3a => { Name => 'WB_GRBGLevelsUnderwater', Format => 'int32s[4]' },
|
|
6563
|
+
0x42 => { Name => 'WB_GRBGLevelsCustom1', Format => 'int32s[4]' },
|
|
6564
|
+
0x4a => { Name => 'WB_GRBGLevelsCustom2', Format => 'int32s[4]' },
|
|
6550
6565
|
);
|
|
6551
6566
|
|
|
6552
6567
|
# yet more face detect information (MakerNotes tag 0x2f) - PH (G12)
|
|
@@ -6803,17 +6818,28 @@ my %ciMaxFocal = (
|
|
|
6803
6818
|
276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
6804
6819
|
277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
6805
6820
|
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
|
6821
|
+
279 => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
6806
6822
|
280 => 'Canon RF 50mm F1.8 STM', #42
|
|
6807
6823
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6824
|
+
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
6808
6825
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6809
|
-
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6810
|
-
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6826
|
+
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6827
|
+
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6828
|
+
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6829
|
+
287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
6811
6830
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6812
6831
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6813
6832
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6814
6833
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6815
6834
|
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6816
|
-
|
|
6835
|
+
295 => 'Canon RF 800mm F5.6L IS USM', #42
|
|
6836
|
+
296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
6837
|
+
297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
6838
|
+
298 => 'Canon RF 1200mm F8L IS USM', #42
|
|
6839
|
+
299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
6840
|
+
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
6841
|
+
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6842
|
+
303 => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
6817
6843
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6818
6844
|
},
|
|
6819
6845
|
},
|
|
@@ -6858,6 +6884,7 @@ my %ciMaxFocal = (
|
|
|
6858
6884
|
8 => '4:5',
|
|
6859
6885
|
12 => '3:2 (APS-H crop)', #IB
|
|
6860
6886
|
13 => '3:2 (APS-C crop)', #IB
|
|
6887
|
+
258 => '4:3 crop', #PH (NC)
|
|
6861
6888
|
},
|
|
6862
6889
|
},
|
|
6863
6890
|
# (could use better names for these, or the Crop tags above, or both)
|
|
@@ -8310,7 +8337,7 @@ my %ciMaxFocal = (
|
|
|
8310
8337
|
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
|
8311
8338
|
%Image::ExifTool::Canon::ColorData11 = (
|
|
8312
8339
|
%binaryDataAttrs,
|
|
8313
|
-
NOTES => 'These tags are used by the EOS R3',
|
|
8340
|
+
NOTES => 'These tags are used by the EOS R3, R7 and R6mkII',
|
|
8314
8341
|
FORMAT => 'int16s',
|
|
8315
8342
|
FIRST_ENTRY => 0,
|
|
8316
8343
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8322,6 +8349,7 @@ my %ciMaxFocal = (
|
|
|
8322
8349
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8323
8350
|
PrintConv => {
|
|
8324
8351
|
34 => '34 (R3)', #IB
|
|
8352
|
+
48 => '48 (R7, R10, R6 Mark II)', #IB
|
|
8325
8353
|
},
|
|
8326
8354
|
},
|
|
8327
8355
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -9387,8 +9415,9 @@ my %filterConv = (
|
|
|
9387
9415
|
# numbers from the previous image, so we need special logic
|
|
9388
9416
|
# to handle the FileIndex wrap properly)
|
|
9389
9417
|
$val[1] == 10000 and $val[1] = 1, ++$val[0];
|
|
9390
|
-
return sprintf("%.3d
|
|
9418
|
+
return sprintf("%.3d%.4d",@val);
|
|
9391
9419
|
},
|
|
9420
|
+
PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
|
|
9392
9421
|
},
|
|
9393
9422
|
);
|
|
9394
9423
|
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::Canon;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.59';
|
|
25
25
|
|
|
26
26
|
sub WriteCRW($$);
|
|
27
27
|
sub ProcessCanonRaw($$$);
|
|
@@ -625,6 +625,13 @@ sub ProcessCanonRaw($$$)
|
|
|
625
625
|
$raf->Seek($blockStart+$blockSize-4, 0) or return 0;
|
|
626
626
|
$raf->Read($buff, 4) == 4 or return 0;
|
|
627
627
|
my $dirOffset = Get32u(\$buff,0) + $blockStart;
|
|
628
|
+
# avoid infinite recursion
|
|
629
|
+
$$et{ProcessedCanonRaw} or $$et{ProcessedCanonRaw} = { };
|
|
630
|
+
if ($$et{ProcessedCanonRaw}{$dirOffset}) {
|
|
631
|
+
$et->Warn("Not processing double-referenced $$dirInfo{DirName} directory");
|
|
632
|
+
return 0;
|
|
633
|
+
}
|
|
634
|
+
$$et{ProcessedCanonRaw}{$dirOffset} = 1;
|
|
628
635
|
$raf->Seek($dirOffset, 0) or return 0;
|
|
629
636
|
$raf->Read($buff, 2) == 2 or return 0;
|
|
630
637
|
my $entries = Get16u(\$buff,0); # get number of entries in directory
|
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Canon;
|
|
25
25
|
|
|
26
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.34';
|
|
27
27
|
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
|
29
29
|
sub WriteCanonVRD($$;$);
|
|
@@ -2046,17 +2046,16 @@ sub ProcessCanonVRD($$;$)
|
|
|
2046
2046
|
return 0;
|
|
2047
2047
|
}
|
|
2048
2048
|
}
|
|
2049
|
-
# exit quickly if writing and no CanonVRD tags are being edited
|
|
2050
|
-
if ($outfile and not exists $$et{EDIT_DIRS}{CanonVRD}) {
|
|
2051
|
-
print $out "$$et{INDENT} [nothing changed]\n" if $verbose;
|
|
2052
|
-
return 1 if $outfile eq $dataPt;
|
|
2053
|
-
return Write($outfile, $$dataPt) ? 1 : -1;
|
|
2054
|
-
}
|
|
2055
|
-
|
|
2056
2049
|
my $vrdType = 'VRD';
|
|
2057
2050
|
|
|
2058
2051
|
if ($outfile) {
|
|
2059
2052
|
$verbose and not $created and print $out " Rewriting CanonVRD trailer\n";
|
|
2053
|
+
# exit quickly if writing and no CanonVRD tags are being edited
|
|
2054
|
+
unless (exists $$et{EDIT_DIRS}{CanonVRD}) {
|
|
2055
|
+
print $out "$$et{INDENT} [nothing changed in CanonVRD]\n" if $verbose;
|
|
2056
|
+
return 1 if $outfile eq $dataPt;
|
|
2057
|
+
return Write($outfile, $$dataPt) ? 1 : -1;
|
|
2058
|
+
}
|
|
2060
2059
|
# delete CanonVRD information if specified
|
|
2061
2060
|
my $doDel = $$et{DEL_GROUP}{CanonVRD};
|
|
2062
2061
|
unless ($doDel) {
|
|
@@ -634,7 +634,7 @@ $VERSION = '1.38';
|
|
|
634
634
|
15 => 'High Speed Best Selection',
|
|
635
635
|
16 => 'Portrait',
|
|
636
636
|
17 => 'Scenery',
|
|
637
|
-
18 => 'Portrait
|
|
637
|
+
18 => 'Portrait with Scenery',
|
|
638
638
|
19 => 'Flower',
|
|
639
639
|
20 => 'Natural Green',
|
|
640
640
|
21 => 'Autumn Leaves',
|
|
@@ -723,7 +723,7 @@ $VERSION = '1.38';
|
|
|
723
723
|
14 => 'High Speed Best Selection',
|
|
724
724
|
15 => 'Portrait',
|
|
725
725
|
16 => 'Scenery',
|
|
726
|
-
17 => 'Portrait
|
|
726
|
+
17 => 'Portrait with Scenery',
|
|
727
727
|
18 => 'Flower',
|
|
728
728
|
19 => 'Natural Green',
|
|
729
729
|
20 => 'Autumn Leaves',
|
|
@@ -1408,7 +1408,7 @@ $VERSION = '1.38';
|
|
|
1408
1408
|
0 => 'Off',
|
|
1409
1409
|
1 => 'Portrait',
|
|
1410
1410
|
2 => 'Scenery',
|
|
1411
|
-
3 => 'Portrait
|
|
1411
|
+
3 => 'Portrait with Scenery',
|
|
1412
1412
|
4 => 'Children',
|
|
1413
1413
|
5 => 'Sports',
|
|
1414
1414
|
6 => 'Night Scene',
|
|
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
|
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
use Image::ExifTool::GPS;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.06';
|
|
20
20
|
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
|
22
22
|
|
|
@@ -176,6 +176,7 @@ sub ProcessDJIInfo($$$)
|
|
|
176
176
|
}
|
|
177
177
|
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
|
178
178
|
my ($tag, $val) = split /:/, $1, 2;
|
|
179
|
+
next unless defined $tag and defined $val;
|
|
179
180
|
if ($val =~ /^([\x20-\x7f]+)\0*$/) {
|
|
180
181
|
$val = $1;
|
|
181
182
|
} else {
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.07';
|
|
19
19
|
|
|
20
20
|
my %dateTimeInfo = (
|
|
21
21
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
|
@@ -138,6 +138,9 @@ my %event = (
|
|
|
138
138
|
identificationVerificationStatus => { },
|
|
139
139
|
identifiedBy => { },
|
|
140
140
|
typeStatus => { },
|
|
141
|
+
# new, ref forum13707
|
|
142
|
+
identifiedByID => { },
|
|
143
|
+
verbatimIdentification => { },
|
|
141
144
|
},
|
|
142
145
|
},
|
|
143
146
|
LivingSpecimen => { Struct => \%materialSample },
|
|
@@ -189,6 +192,11 @@ my %event = (
|
|
|
189
192
|
recordNumber => { },
|
|
190
193
|
reproductiveCondition => { },
|
|
191
194
|
sex => { },
|
|
195
|
+
# new, ref forum13707
|
|
196
|
+
degreeOfEstablishment => { },
|
|
197
|
+
georeferenceVerificationStatus => { },
|
|
198
|
+
pathway => { },
|
|
199
|
+
recordedByID => { },
|
|
192
200
|
},
|
|
193
201
|
},
|
|
194
202
|
OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 },
|
|
@@ -242,6 +250,7 @@ my %event = (
|
|
|
242
250
|
relationshipRemarks => { },
|
|
243
251
|
resourceID => { },
|
|
244
252
|
resourceRelationshipID => { },
|
|
253
|
+
relationshipOfResourceID => { }, # new, ref forum13707
|
|
245
254
|
},
|
|
246
255
|
},
|
|
247
256
|
Taxon => {
|
|
@@ -255,6 +264,7 @@ my %event = (
|
|
|
255
264
|
genus => { },
|
|
256
265
|
higherClassification => { },
|
|
257
266
|
infraspecificEpithet => { },
|
|
267
|
+
cultivarEpithet => { }, # new, ref forum13707
|
|
258
268
|
kingdom => { },
|
|
259
269
|
nameAccordingTo => { },
|
|
260
270
|
nameAccordingToID => { },
|
|
@@ -338,6 +348,8 @@ my %event = (
|
|
|
338
348
|
verbatimLongitude => { },
|
|
339
349
|
verbatimSRS => { },
|
|
340
350
|
waterBody => { },
|
|
351
|
+
# new, ref forum13707
|
|
352
|
+
verticalDatum => { },
|
|
341
353
|
},
|
|
342
354
|
},
|
|
343
355
|
);
|
|
@@ -21,7 +21,7 @@ use strict;
|
|
|
21
21
|
use vars qw($VERSION);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.18';
|
|
25
25
|
|
|
26
26
|
sub ProcessPEResources($$);
|
|
27
27
|
sub ProcessPEVersion($$);
|
|
@@ -1233,6 +1233,14 @@ sub ProcessEXE($$)
|
|
|
1233
1233
|
$tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO');
|
|
1234
1234
|
if ($1 eq "\xca\xfe\xba\xbe") {
|
|
1235
1235
|
SetByteOrder('MM');
|
|
1236
|
+
my $ver = Get32u(\$buff, 4);
|
|
1237
|
+
# Java bytecode .class files have the same magic number, so we need to look deeper
|
|
1238
|
+
# (ref https://github.com/file/file/blob/master/magic/Magdir/cafebabe#L6-L15)
|
|
1239
|
+
if ($ver > 30) {
|
|
1240
|
+
# this is Java bytecode
|
|
1241
|
+
$et->SetFileType('Java bytecode', 'application/java-byte-code', 'class');
|
|
1242
|
+
return 1;
|
|
1243
|
+
}
|
|
1236
1244
|
$et->SetFileType('Mach-O fat binary executable', undef, '');
|
|
1237
1245
|
return 1 if $fast3;
|
|
1238
1246
|
my $count = Get32u(\$buff, 4); # get architecture count
|
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
57
57
|
use Image::ExifTool::MakerNotes;
|
|
58
58
|
|
|
59
|
-
$VERSION = '4.
|
|
59
|
+
$VERSION = '4.42';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -1084,11 +1084,11 @@ my %opcodeInfo = (
|
|
|
1084
1084
|
{
|
|
1085
1085
|
Name => 'ThumbnailOffset',
|
|
1086
1086
|
Notes => q{
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
OtherImageStart in everything else
|
|
1087
|
+
called JPEGInterchangeFormat in the specification, this is ThumbnailOffset
|
|
1088
|
+
in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and
|
|
1089
|
+
MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageStart in
|
|
1090
|
+
MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawStart in SubIFD of NEF
|
|
1091
|
+
images and IFD2 of PEF images; and OtherImageStart in everything else
|
|
1092
1092
|
},
|
|
1093
1093
|
# thumbnail is found in IFD1 of JPEG and TIFF images, and
|
|
1094
1094
|
# IFD0 of EXIF information in FujiFilm AVI (RIFF) and MOV videos
|
|
@@ -1225,6 +1225,7 @@ my %opcodeInfo = (
|
|
|
1225
1225
|
{
|
|
1226
1226
|
Name => 'ThumbnailLength',
|
|
1227
1227
|
Notes => q{
|
|
1228
|
+
called JPEGInterchangeFormatLength in the specification, this is
|
|
1228
1229
|
ThumbnailLength in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW
|
|
1229
1230
|
images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images;
|
|
1230
1231
|
PreviewImageLength in MakerNotes and IFD0 of ARW and SR2 images;
|
|
@@ -2080,6 +2081,7 @@ my %opcodeInfo = (
|
|
|
2080
2081
|
Groups => { 2 => 'Time' },
|
|
2081
2082
|
Notes => 'time zone for ModifyDate',
|
|
2082
2083
|
Writable => 'string',
|
|
2084
|
+
Shift => 'Time',
|
|
2083
2085
|
PrintConvInv => q{
|
|
2084
2086
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2085
2087
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -2091,6 +2093,7 @@ my %opcodeInfo = (
|
|
|
2091
2093
|
Groups => { 2 => 'Time' },
|
|
2092
2094
|
Notes => 'time zone for DateTimeOriginal',
|
|
2093
2095
|
Writable => 'string',
|
|
2096
|
+
Shift => 'Time',
|
|
2094
2097
|
PrintConvInv => q{
|
|
2095
2098
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2096
2099
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -2102,6 +2105,7 @@ my %opcodeInfo = (
|
|
|
2102
2105
|
Groups => { 2 => 'Time' },
|
|
2103
2106
|
Notes => 'time zone for CreateDate',
|
|
2104
2107
|
Writable => 'string',
|
|
2108
|
+
Shift => 'Time',
|
|
2105
2109
|
PrintConvInv => q{
|
|
2106
2110
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2107
2111
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -4080,7 +4084,7 @@ my %opcodeInfo = (
|
|
|
4080
4084
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
|
4081
4085
|
},
|
|
4082
4086
|
0xcd30 => { # DNG 1.6
|
|
4083
|
-
Name => '
|
|
4087
|
+
Name => 'SemanticInstanceID',
|
|
4084
4088
|
# Writable => 'string',
|
|
4085
4089
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
|
4086
4090
|
},
|
|
@@ -4842,10 +4846,10 @@ my %subSecConv = (
|
|
|
4842
4846
|
Writable => 1,
|
|
4843
4847
|
Protected => 1,
|
|
4844
4848
|
WriteAlso => {
|
|
4845
|
-
GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
|
|
4846
|
-
GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4847
|
-
GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
|
|
4848
|
-
GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4849
|
+
GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef',
|
|
4850
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4851
|
+
GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef',
|
|
4852
|
+
GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4849
4853
|
},
|
|
4850
4854
|
PrintConvInv => q{
|
|
4851
4855
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
|
@@ -6012,7 +6016,8 @@ sub ProcessExif($$$)
|
|
|
6012
6016
|
my $tagID = Get16u($dataPt, $entry);
|
|
6013
6017
|
my $format = Get16u($dataPt, $entry+2);
|
|
6014
6018
|
my $count = Get32u($dataPt, $entry+4);
|
|
6015
|
-
|
|
6019
|
+
# (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
|
|
6020
|
+
if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
|
6016
6021
|
if ($mapFmt and $$mapFmt{$format}) {
|
|
6017
6022
|
$format = $$mapFmt{$format};
|
|
6018
6023
|
} else {
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.09';
|
|
18
18
|
|
|
19
19
|
sub ProcessBitStream($$$);
|
|
20
20
|
|
|
@@ -29,7 +29,19 @@ sub ProcessBitStream($$$);
|
|
|
29
29
|
SubDirectory => { TagTable => 'Image::ExifTool::FLAC::StreamInfo' },
|
|
30
30
|
},
|
|
31
31
|
1 => { Name => 'Padding', Binary => 1, Unknown => 1 },
|
|
32
|
-
2 => {
|
|
32
|
+
2 => [{ # (see forum14064)
|
|
33
|
+
Name => 'Application_riff',
|
|
34
|
+
Condition => '$$valPt =~ /^riff(?!RIFF)/', # (all "riff" blocks but header)
|
|
35
|
+
SubDirectory => {
|
|
36
|
+
TagTable => 'Image::ExifTool::RIFF::Main',
|
|
37
|
+
ByteOrder => 'LittleEndian',
|
|
38
|
+
Start => 4,
|
|
39
|
+
},
|
|
40
|
+
},{
|
|
41
|
+
Name => 'ApplicationUnknown',
|
|
42
|
+
Binary => 1,
|
|
43
|
+
Unknown => 1,
|
|
44
|
+
}],
|
|
33
45
|
3 => { Name => 'SeekTable', Binary => 1, Unknown => 1 },
|
|
34
46
|
4 => {
|
|
35
47
|
Name => 'VorbisComment',
|
|
@@ -255,9 +267,11 @@ sub ProcessFLAC($$)
|
|
|
255
267
|
print $out "FLAC metadata block, type $tag:\n";
|
|
256
268
|
$et->VerboseDump(\$buff, DataPos => $raf->Tell() - $size);
|
|
257
269
|
}
|
|
258
|
-
$et->HandleTag($tagTablePtr, $tag,
|
|
270
|
+
$et->HandleTag($tagTablePtr, $tag, $buff,
|
|
259
271
|
DataPt => \$buff,
|
|
260
272
|
DataPos => $raf->Tell() - $size,
|
|
273
|
+
Start => 0,
|
|
274
|
+
Size => $size,
|
|
261
275
|
);
|
|
262
276
|
last if $last; # all done if is set
|
|
263
277
|
}
|
|
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
24
24
|
use Image::ExifTool::Exif;
|
|
25
25
|
use Image::ExifTool::GPS;
|
|
26
26
|
|
|
27
|
-
$VERSION = '1.
|
|
27
|
+
$VERSION = '1.22';
|
|
28
28
|
|
|
29
29
|
sub ProcessFLIR($$;$);
|
|
30
30
|
sub ProcessFLIRText($$$);
|
|
@@ -99,7 +99,8 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
99
99
|
NOTES => q{
|
|
100
100
|
Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
|
|
101
101
|
images. These tags may also be extracted from the first frame of an FLIR
|
|
102
|
-
SEQ file, or all frames if the ExtractEmbedded option is used.
|
|
102
|
+
SEQ file, or all frames if the ExtractEmbedded option is used. Setting
|
|
103
|
+
ExtractEmbedded to 2 also the raw thermal data from all frames.
|
|
103
104
|
},
|
|
104
105
|
"_header" => {
|
|
105
106
|
Name => 'FFFHeader',
|
|
@@ -240,7 +241,8 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
240
241
|
16.1 => {
|
|
241
242
|
Name => 'RawThermalImage',
|
|
242
243
|
Groups => { 2 => 'Preview' },
|
|
243
|
-
|
|
244
|
+
# make a copy in case we want to extract more of them with -ee2
|
|
245
|
+
RawConv => 'my $copy = $$self{RawThermalImage}; \$copy',
|
|
244
246
|
},
|
|
245
247
|
);
|
|
246
248
|
|
|
@@ -271,7 +273,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
271
273
|
},
|
|
272
274
|
16.1 => {
|
|
273
275
|
Name => 'GainDeadMapImage',
|
|
274
|
-
RawConv => '\$$self{GainDeadMapImage}',
|
|
276
|
+
RawConv => 'my $copy = \$$self{GainDeadMapImage}; \$copy',
|
|
275
277
|
},
|
|
276
278
|
);
|
|
277
279
|
|
|
@@ -302,7 +304,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
302
304
|
},
|
|
303
305
|
16.1 => {
|
|
304
306
|
Name => 'CoarseMapImage',
|
|
305
|
-
RawConv => '\$$self{CoarseMapImage}',
|
|
307
|
+
RawConv => 'my $copy = \$$self{CoarseMapImage}; \$copy',
|
|
306
308
|
},
|
|
307
309
|
);
|
|
308
310
|
|
|
@@ -333,7 +335,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
333
335
|
},
|
|
334
336
|
20.1 => {
|
|
335
337
|
Name => 'PaintImage',
|
|
336
|
-
RawConv => '\$$self{PaintImage}',
|
|
338
|
+
RawConv => 'my $copy = \$$self{PaintImage}; \$copy',
|
|
337
339
|
},
|
|
338
340
|
);
|
|
339
341
|
|
|
@@ -1551,7 +1553,7 @@ sub ProcessFLIR($$;$)
|
|
|
1551
1553
|
$$et{INDENT}, $i, $recType, $recPos, $recLen;
|
|
1552
1554
|
|
|
1553
1555
|
# skip RawData records for embedded documents
|
|
1554
|
-
if ($recType == 1 and $$et{DOC_NUM}) {
|
|
1556
|
+
if ($recType == 1 and $$et{DOC_NUM} and $et->Options('ExtractEmbedded') < 2) {
|
|
1555
1557
|
$raf->Seek($base+$recPos+$recLen) or $success = 0, last;
|
|
1556
1558
|
next;
|
|
1557
1559
|
}
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.41';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -298,6 +298,7 @@ my %fpxFileType = (
|
|
|
298
298
|
%Image::ExifTool::FlashPix::Main = (
|
|
299
299
|
PROCESS_PROC => \&ProcessFPXR,
|
|
300
300
|
GROUPS => { 2 => 'Image' },
|
|
301
|
+
VARS => { LONG_TAGS => 0 },
|
|
301
302
|
NOTES => q{
|
|
302
303
|
The FlashPix file format, introduced in 1996, was developed by Kodak,
|
|
303
304
|
Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
|
|
@@ -467,6 +468,25 @@ my %fpxFileType = (
|
|
|
467
468
|
ByteOrder => 'BigEndian',
|
|
468
469
|
},
|
|
469
470
|
},
|
|
471
|
+
# recognize Autodesk Revit files by looking at BasicFileInfo
|
|
472
|
+
# (but don't yet support reading their metatdata)
|
|
473
|
+
BasicFileInfo => {
|
|
474
|
+
Name => 'BasicFileInfo',
|
|
475
|
+
Binary => 1,
|
|
476
|
+
RawConv => q{
|
|
477
|
+
$val =~ tr/\0//d; # brute force conversion to ASCII
|
|
478
|
+
if ($val =~ /\.(rfa|rft|rte|rvt)/) {
|
|
479
|
+
$self->OverrideFileType(uc($1), "application/$1", $1);
|
|
480
|
+
}
|
|
481
|
+
return $val;
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
IeImg => {
|
|
485
|
+
Name => 'EmbeddedImage',
|
|
486
|
+
Notes => 'embedded images in Scene7 vignette VNT files',
|
|
487
|
+
Groups => { 2 => 'Preview' },
|
|
488
|
+
Binary => 1,
|
|
489
|
+
},
|
|
470
490
|
);
|
|
471
491
|
|
|
472
492
|
# Summary Information properties
|
|
@@ -1318,7 +1338,9 @@ sub ConvertDTTM($)
|
|
|
1318
1338
|
my $hr = ($val >> 6) & 0x1f;
|
|
1319
1339
|
my $min = ($val & 0x3f);
|
|
1320
1340
|
$yr += 1900 if $val;
|
|
1321
|
-
|
|
1341
|
+
# ExifTool 12.48 dropped the "Z" on the time here because a test .doc
|
|
1342
|
+
# file written by Word 2011 on Mac certainly used local time here
|
|
1343
|
+
return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:00",$yr,$mon,$day,$hr,$min);
|
|
1322
1344
|
}
|
|
1323
1345
|
|
|
1324
1346
|
#------------------------------------------------------------------------------
|
|
@@ -2242,7 +2264,8 @@ sub ProcessFPX($$)
|
|
|
2242
2264
|
# remove instance number or class ID from tag if necessary
|
|
2243
2265
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $1) if
|
|
2244
2266
|
($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
|
|
2245
|
-
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1})
|
|
2267
|
+
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}) or
|
|
2268
|
+
($tag =~ /(.*)_[0-9]{4}$/s and $$tagTablePtr{$1}); # IeImg instances
|
|
2246
2269
|
}
|
|
2247
2270
|
|
|
2248
2271
|
my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
|