exiftool-vendored.exe 12.67.0 → 12.69.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/exiftool_files/Changes +40 -2
- package/bin/exiftool_files/README +7 -7
- package/bin/exiftool_files/exiftool.pl +26 -20
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +25 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +95 -13
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +17 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +16 -11
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +38 -11
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +14 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +13 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +6 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +62 -52
- package/bin/exiftool_files/lib/Image/ExifTool/README +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +8 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +66 -21
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6881 -6710
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +445 -32
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +18 -16
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +22 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +52 -11
- package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +35 -0
- package/bin/exiftool_files/lib/Image/ExifTool.pm +36 -15
- package/bin/exiftool_files/lib/Image/ExifTool.pod +5 -5
- package/package.json +1 -1
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.27';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -676,6 +676,7 @@ sub GetAFPointGrid($$;$);
|
|
|
676
676
|
'07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
|
|
677
677
|
'71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
|
|
678
678
|
'FD 00 50 50 18 18 DF 00' => 'Voigtlander APO-Lanthar 50mm F2 Aspherical', #35
|
|
679
|
+
'FD 00 44 44 18 18 DF 00' => 'Voigtlander APO-Lanthar 35mm F2', #30
|
|
679
680
|
#
|
|
680
681
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
|
681
682
|
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
|
@@ -1188,6 +1189,7 @@ my %subjectDetectionZ9 = (
|
|
|
1188
1189
|
2 => 'People',
|
|
1189
1190
|
3 => 'Animals',
|
|
1190
1191
|
4 => 'Vehicles',
|
|
1192
|
+
5 => 'Birds',
|
|
1191
1193
|
6 => 'Airplanes',
|
|
1192
1194
|
);
|
|
1193
1195
|
|
|
@@ -2421,8 +2423,8 @@ my %base64coord = (
|
|
|
2421
2423
|
},
|
|
2422
2424
|
},
|
|
2423
2425
|
{ # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
|
|
2424
|
-
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30
|
|
2425
|
-
Condition => '$$valPt =~ /^080[
|
|
2426
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
|
|
2427
|
+
Condition => '$$valPt =~ /^080[0123478]/',
|
|
2426
2428
|
Name => 'ShotInfoZ7II',
|
|
2427
2429
|
SubDirectory => {
|
|
2428
2430
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
|
|
@@ -2481,7 +2483,7 @@ my %base64coord = (
|
|
|
2481
2483
|
},
|
|
2482
2484
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
|
2483
2485
|
0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
|
|
2484
|
-
0x0096 => {
|
|
2486
|
+
0x0096 => { # (not found in NRW files, but also not in all NEF's)
|
|
2485
2487
|
Name => 'NEFLinearizationTable', # same table as DNG LinearizationTable (ref JD)
|
|
2486
2488
|
Writable => 'undef',
|
|
2487
2489
|
Flags => [ 'Binary', 'Protected' ],
|
|
@@ -4586,7 +4588,7 @@ my %base64coord = (
|
|
|
4586
4588
|
RawConv => '$$self{AFInfo2Version} = $val',
|
|
4587
4589
|
},
|
|
4588
4590
|
5 => { #28
|
|
4589
|
-
Name => 'AFAreaMode',
|
|
4591
|
+
Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
|
|
4590
4592
|
PrintConv => {
|
|
4591
4593
|
192 => 'Pinpoint',
|
|
4592
4594
|
193 => 'Single',
|
|
@@ -4602,7 +4604,7 @@ my %base64coord = (
|
|
|
4602
4604
|
},
|
|
4603
4605
|
10 => {
|
|
4604
4606
|
Name => 'AFPointsUsed',
|
|
4605
|
-
Condition => '$$self{AFAreaMode} == 6',
|
|
4607
|
+
Condition => 'defined $$self{AFAreaMode} and $$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
|
|
4606
4608
|
Format => 'undef[51]',
|
|
4607
4609
|
ValueConv => 'join(" ", unpack("H2"x51, $val))',
|
|
4608
4610
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
@@ -5440,6 +5442,13 @@ my %nikonFocalConversions = (
|
|
|
5440
5442
|
37 => 'Nikkor Z 600mm f/4 TC VR S', #28
|
|
5441
5443
|
38 => 'Nikkor Z 85mm f/1.2 S', #28
|
|
5442
5444
|
39 => 'Nikkor Z 17-28mm f/2.8', #IB
|
|
5445
|
+
40 => 'NIKKOR Z 26mm f/2.8', #28
|
|
5446
|
+
41 => 'NIKKOR Z DX 12-28mm f/3.5-5.6 PZ VR', #28
|
|
5447
|
+
42 => 'Nikkor Z 180-600mm f/5.6-6.3 VR', #30
|
|
5448
|
+
43 => 'NIKKOR Z DX 24mm f/1.7', #28
|
|
5449
|
+
44 => 'NIKKOR Z 70-180mm f/2.8', #28
|
|
5450
|
+
45 => 'NIKKOR Z 600mm f/6.3 VR S', #28
|
|
5451
|
+
48 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
|
5443
5452
|
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
|
5444
5453
|
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
|
5445
5454
|
},
|
|
@@ -6056,6 +6065,24 @@ my %nikonFocalConversions = (
|
|
|
6056
6065
|
Format => 'int32u',
|
|
6057
6066
|
Priority => 0,
|
|
6058
6067
|
},
|
|
6068
|
+
671.1 => { # 0x29f
|
|
6069
|
+
Name => 'JPGCompression',
|
|
6070
|
+
Mask => 0x40,
|
|
6071
|
+
PrintConv => {
|
|
6072
|
+
0 => 'Size Priority',
|
|
6073
|
+
1 => 'Optimal Quality',
|
|
6074
|
+
},
|
|
6075
|
+
},
|
|
6076
|
+
# this works for one set of D3S samples, but is 0 in some others
|
|
6077
|
+
#671.2 => { # 0x29f
|
|
6078
|
+
# Name => 'Quality',
|
|
6079
|
+
# Mask => 0x03,
|
|
6080
|
+
# PrintConv => {
|
|
6081
|
+
# 1 => 'Fine',
|
|
6082
|
+
# 2 => 'Normal',
|
|
6083
|
+
# 3 => 'Basic',
|
|
6084
|
+
# },
|
|
6085
|
+
#},
|
|
6059
6086
|
0x2ce => { #(NC)
|
|
6060
6087
|
Name => 'CustomSettingsD3S',
|
|
6061
6088
|
Format => 'undef[27]',
|
|
@@ -8500,7 +8527,7 @@ my %nikonFocalConversions = (
|
|
|
8500
8527
|
DATAMEMBER => [ 0x0bea, 0x0beb ],
|
|
8501
8528
|
0x0be8 => {
|
|
8502
8529
|
Name => 'AFAreaInitialXPosition', #stored as a representation of the horizontal position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
|
|
8503
|
-
Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8530
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8504
8531
|
Format => 'int8s',
|
|
8505
8532
|
PrintConv => q{
|
|
8506
8533
|
#in FX mode and Single-point, the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754. Spacing is the same for Wide(L/C1/C2) with different start points.
|
|
@@ -8562,7 +8589,7 @@ my %nikonFocalConversions = (
|
|
|
8562
8589
|
},
|
|
8563
8590
|
0x0be9 => {
|
|
8564
8591
|
Name =>'AFAreaInitialYPosition', #stored as a representation of the vertical position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
|
|
8565
|
-
Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8592
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8566
8593
|
Format => 'int8s',
|
|
8567
8594
|
PrintConv => q{
|
|
8568
8595
|
#in FX mode and Single-point, the 17 vertical focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080. Spacing is the same for Wide(L/C1/C2)
|
|
@@ -8626,13 +8653,13 @@ my %nikonFocalConversions = (
|
|
|
8626
8653
|
},
|
|
8627
8654
|
0x0bea => {
|
|
8628
8655
|
Name => 'AFAreaInitialWidth',
|
|
8629
|
-
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8656
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8630
8657
|
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8631
8658
|
RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
|
|
8632
8659
|
},
|
|
8633
8660
|
0x0beb => {
|
|
8634
8661
|
Name => 'AFAreaInitialHeight',
|
|
8635
|
-
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8662
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8636
8663
|
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8637
8664
|
RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
|
|
8638
8665
|
},
|
|
@@ -8848,7 +8875,7 @@ my %nikonFocalConversions = (
|
|
|
8848
8875
|
%binaryDataAttrs,
|
|
8849
8876
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8850
8877
|
DATAMEMBER => [ 90, 176, 180, 328, 352, 858 ],
|
|
8851
|
-
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and
|
|
8878
|
+
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50, Zfc and Zf.',
|
|
8852
8879
|
#48 SelfTimer' #0=> no 1=> yes works for Z7II firmware 1.40, but not 1.30. Follow-up required.
|
|
8853
8880
|
90 => {
|
|
8854
8881
|
Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
|
|
@@ -36,7 +36,7 @@ use strict;
|
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.65';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -973,13 +973,20 @@ sub FoundPNG($$$$;$$$$)
|
|
|
973
973
|
undef $processProc if $wasCompressed and $processProc and $processProc eq \&ProcessPNG_Compressed;
|
|
974
974
|
# rewrite this directory if necessary (but always process TextualData normally)
|
|
975
975
|
if ($outBuff and not $processProc and $subTable ne \%Image::ExifTool::PNG::TextualData) {
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
976
|
+
# allow JUMBF to be deleted (may want to expand this for other types too?)
|
|
977
|
+
if ($dirName eq 'JUMBF' and $$et{DEL_GROUP}{$dirName}) {
|
|
978
|
+
$$outBuff = '';
|
|
979
|
+
++$$et{CHANGED};
|
|
980
|
+
$et->VPrint(0, " Deleting $dirName");
|
|
981
|
+
} else {
|
|
982
|
+
return 1 unless $$et{EDIT_DIRS}{$dirName};
|
|
983
|
+
$$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
|
|
984
|
+
if ($tagName eq 'XMP' and $$outBuff) {
|
|
985
|
+
# make sure the XMP is marked as read-only
|
|
986
|
+
Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
|
|
987
|
+
}
|
|
988
|
+
DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
|
|
981
989
|
}
|
|
982
|
-
DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
|
|
983
990
|
} else {
|
|
984
991
|
$processed = $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc);
|
|
985
992
|
}
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.20';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -1070,18 +1070,18 @@ my %shootingMode = (
|
|
|
1070
1070
|
},
|
|
1071
1071
|
},
|
|
1072
1072
|
# 0x71 - undef[128] (maybe text stamp text?)
|
|
1073
|
+
# 0x72,0x73,0x74,0x75,0x77,0x78: 0
|
|
1074
|
+
# 0x76: 0, (3 for G6 with HDR on, ref 18)
|
|
1075
|
+
0x76 => { #18/21/forum15298
|
|
1076
|
+
Name => 'MergedImages',
|
|
1077
|
+
Writable => 'int16u',
|
|
1078
|
+
Notes => 'number of images in HDR or Live View Composite picture',
|
|
1079
|
+
},
|
|
1073
1080
|
0x77 => { #18
|
|
1074
1081
|
Name => 'BurstSpeed',
|
|
1075
1082
|
Writable => 'int16u',
|
|
1076
1083
|
Notes => 'images per second',
|
|
1077
1084
|
},
|
|
1078
|
-
# 0x72,0x73,0x74,0x75,0x77,0x78: 0
|
|
1079
|
-
# 0x76: 0, (3 for G6 with HDR on, ref 18)
|
|
1080
|
-
0x76 => { #18/21
|
|
1081
|
-
Name => 'HDRShot',
|
|
1082
|
-
Writable => 'int16u',
|
|
1083
|
-
PrintConv => { 0 => 'Off', 3 => 'On' },
|
|
1084
|
-
},
|
|
1085
1085
|
0x79 => { #PH (GH2)
|
|
1086
1086
|
Name => 'IntelligentD-Range',
|
|
1087
1087
|
Writable => 'int16u',
|
|
@@ -2834,10 +2834,14 @@ sub ProcessLeicaTrailer($;$)
|
|
|
2834
2834
|
my $val = Image::ExifTool::Exif::RebuildMakerNotes($et, \%dirInfo, $tagTablePtr);
|
|
2835
2835
|
unless (defined $val) {
|
|
2836
2836
|
$et->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4;
|
|
2837
|
-
$val = $buff
|
|
2837
|
+
$val = $buff;
|
|
2838
2838
|
}
|
|
2839
2839
|
my $key = $et->FoundTag($tagInfo, $val);
|
|
2840
2840
|
$et->SetGroup($key, 'ExifIFD');
|
|
2841
|
+
if ($$et{MAKER_NOTE_FIXUP}) {
|
|
2842
|
+
$$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
|
|
2843
|
+
delete $$et{MAKER_NOTE_FIXUP};
|
|
2844
|
+
}
|
|
2841
2845
|
}
|
|
2842
2846
|
}
|
|
2843
2847
|
SetByteOrder($oldOrder);
|
|
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
|
|
|
58
58
|
use Image::ExifTool::GPS;
|
|
59
59
|
use Image::ExifTool::HP;
|
|
60
60
|
|
|
61
|
-
$VERSION = '3.
|
|
61
|
+
$VERSION = '3.44';
|
|
62
62
|
|
|
63
63
|
sub CryptShutterCount($$);
|
|
64
64
|
sub PrintFilter($$$);
|
|
@@ -556,6 +556,8 @@ my %pentaxModelID = (
|
|
|
556
556
|
0x13240 => 'K-1 Mark II', # (Ricoh)
|
|
557
557
|
0x13254 => 'K-3 Mark III', #IB (Ricoh)
|
|
558
558
|
0x13290 => 'WG-70', # (Ricoh)
|
|
559
|
+
0x1329a => 'GR IIIx', # (Ricoh)
|
|
560
|
+
0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
|
|
559
561
|
);
|
|
560
562
|
|
|
561
563
|
# Pentax city codes - (PH, Optio WP)
|
|
@@ -971,6 +973,7 @@ my %binaryDataAttrs = (
|
|
|
971
973
|
5 => 'Premium', #PH (K20D)
|
|
972
974
|
7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
|
|
973
975
|
8 => 'Dynamic Pixel Shift', #IB
|
|
976
|
+
9 => 'Monochrome', #github226
|
|
974
977
|
65535 => 'n/a', #PH (Q MOV video)
|
|
975
978
|
},
|
|
976
979
|
},
|
|
@@ -2144,6 +2147,7 @@ my %binaryDataAttrs = (
|
|
|
2144
2147
|
11 => 'Flat', #31 (K-70)
|
|
2145
2148
|
# 256 - seen for GR III
|
|
2146
2149
|
# 262 - seen for GR III
|
|
2150
|
+
32768 => 'n/a',
|
|
2147
2151
|
},
|
|
2148
2152
|
},
|
|
2149
2153
|
0x0050 => { #PH
|
|
@@ -2230,6 +2234,7 @@ my %binaryDataAttrs = (
|
|
|
2230
2234
|
18 => '18 (KP)', #PH
|
|
2231
2235
|
19 => '19 (GR III)', #PH
|
|
2232
2236
|
20 => '20 (K-3III)', #PH
|
|
2237
|
+
21 => '21 (K-3IIIMonochrome)', #github226
|
|
2233
2238
|
},
|
|
2234
2239
|
},
|
|
2235
2240
|
0x0067 => { #PH (K-5)
|
|
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
|
|
|
15
15
|
use Image::ExifTool::IPTC;
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.08';
|
|
19
19
|
|
|
20
20
|
sub ProcessPhotoMechanic($$);
|
|
21
21
|
|
|
@@ -138,6 +138,7 @@ my %rawCropConv = (
|
|
|
138
138
|
ValueConv => 'Image::ExifTool::Exif::ExifTime($val)',
|
|
139
139
|
ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)',
|
|
140
140
|
},
|
|
141
|
+
CreatorIdentity => { List => 'Seq' },
|
|
141
142
|
);
|
|
142
143
|
|
|
143
144
|
#------------------------------------------------------------------------------
|
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
48
48
|
use Image::ExifTool::Exif;
|
|
49
49
|
use Image::ExifTool::GPS;
|
|
50
50
|
|
|
51
|
-
$VERSION = '2.
|
|
51
|
+
$VERSION = '2.88';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -2393,6 +2393,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
2393
2393
|
Name => 'Audible_tags',
|
|
2394
2394
|
SubDirectory => { TagTable => 'Image::ExifTool::Audible::tags' },
|
|
2395
2395
|
},
|
|
2396
|
+
# ludt - directory containing 'tlou' tag
|
|
2396
2397
|
);
|
|
2397
2398
|
|
|
2398
2399
|
# Unknown information stored in HTC One (M8) videos - PH
|
|
@@ -2903,65 +2904,69 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
2903
2904
|
Name => 'ColorPrimaries',
|
|
2904
2905
|
Format => 'int16u',
|
|
2905
2906
|
PrintConv => {
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2907
|
+
1 => 'BT.709',
|
|
2908
|
+
2 => 'Unspecified',
|
|
2909
|
+
4 => 'BT.470 System M (historical)',
|
|
2910
|
+
5 => 'BT.470 System B, G (historical)',
|
|
2911
|
+
6 => 'BT.601',
|
|
2912
|
+
7 => 'SMPTE 240',
|
|
2913
|
+
8 => 'Generic film (color filters using illuminant C)',
|
|
2914
|
+
9 => 'BT.2020, BT.2100',
|
|
2915
|
+
10 => 'SMPTE 428 (CIE 1931 XYZ)', #forum14766
|
|
2916
|
+
11 => 'SMPTE RP 431-2',
|
|
2917
|
+
12 => 'SMPTE EG 432-1',
|
|
2918
|
+
22 => 'EBU Tech. 3213-E',
|
|
2919
|
+
},
|
|
2919
2920
|
},
|
|
2920
2921
|
6 => {
|
|
2921
2922
|
Name => 'TransferCharacteristics',
|
|
2922
2923
|
Format => 'int16u',
|
|
2923
2924
|
PrintConv => {
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2925
|
+
0 => 'For future use (0)',
|
|
2926
|
+
1 => 'BT.709',
|
|
2927
|
+
2 => 'Unspecified',
|
|
2928
|
+
3 => 'For future use (3)',
|
|
2929
|
+
4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
|
|
2930
|
+
5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
|
|
2931
|
+
6 => 'BT.601',
|
|
2932
|
+
7 => 'SMPTE 240 M',
|
|
2933
|
+
8 => 'Linear',
|
|
2934
|
+
9 => 'Logarithmic (100 : 1 range)',
|
|
2935
|
+
10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
|
|
2936
|
+
11 => 'IEC 61966-2-4',
|
|
2937
|
+
12 => 'BT.1361',
|
|
2938
|
+
13 => 'sRGB or sYCC',
|
|
2939
|
+
14 => 'BT.2020 10-bit systems',
|
|
2940
|
+
15 => 'BT.2020 12-bit systems',
|
|
2941
|
+
16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
|
|
2942
|
+
17 => 'SMPTE ST 428',
|
|
2943
|
+
18 => 'BT.2100 HLG, ARIB STD-B67',
|
|
2944
|
+
},
|
|
2944
2945
|
},
|
|
2945
2946
|
8 => {
|
|
2946
2947
|
Name => 'MatrixCoefficients',
|
|
2947
2948
|
Format => 'int16u',
|
|
2948
2949
|
PrintConv => {
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2950
|
+
0 => 'Identity matrix',
|
|
2951
|
+
1 => 'BT.709',
|
|
2952
|
+
2 => 'Unspecified',
|
|
2953
|
+
3 => 'For future use (3)',
|
|
2954
|
+
4 => 'US FCC 73.628',
|
|
2955
|
+
5 => 'BT.470 System B, G (historical)',
|
|
2956
|
+
6 => 'BT.601',
|
|
2957
|
+
7 => 'SMPTE 240 M',
|
|
2958
|
+
8 => 'YCgCo',
|
|
2959
|
+
9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
|
|
2960
|
+
10 => 'BT.2020 constant luminance',
|
|
2961
|
+
11 => 'SMPTE ST 2085 YDzDx',
|
|
2962
|
+
12 => 'Chromaticity-derived non-constant luminance',
|
|
2963
|
+
13 => 'Chromaticity-derived constant luminance',
|
|
2964
|
+
14 => 'BT.2100 ICtCp',
|
|
2965
|
+
},
|
|
2966
|
+
},
|
|
2967
|
+
10 => {
|
|
2968
|
+
Name => 'VideoFullRangeFlag',
|
|
2969
|
+
Mask => 0x80,
|
|
2965
2970
|
},
|
|
2966
2971
|
);
|
|
2967
2972
|
|
|
@@ -6399,6 +6404,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
6399
6404
|
Writable => 'int8s', #27
|
|
6400
6405
|
PrintConv => { 0 => 'No', 1 => 'Yes' },
|
|
6401
6406
|
},
|
|
6407
|
+
ownr => 'Owner', #PH (obscure) (ref ChrisAdan private communication)
|
|
6408
|
+
'xid ' => 'ISRC', #PH
|
|
6402
6409
|
);
|
|
6403
6410
|
|
|
6404
6411
|
# tag decoded from timed face records
|
|
@@ -7663,7 +7670,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
7663
7670
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Rights' },
|
|
7664
7671
|
},
|
|
7665
7672
|
name => { Name => 'UserName', Groups => { 2 => 'Author' } },
|
|
7666
|
-
# chtb
|
|
7673
|
+
# chtb - seen 632 bytes of random data
|
|
7667
7674
|
# priv - private data
|
|
7668
7675
|
# sign
|
|
7669
7676
|
# adkm - Adobe DRM key management system (ref http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf)
|
|
@@ -7686,6 +7693,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
7686
7693
|
},
|
|
7687
7694
|
medi => 'MediaFlags', #PH (?)
|
|
7688
7695
|
mode => 'ModeFlags', #PH (?) 0x04 is HD flag (https://compilr.com/heksesang/requiem-mac/UnDrm.java)
|
|
7696
|
+
# sing - seen 4 zeros
|
|
7697
|
+
# hi32 - seen "00 00 00 04"
|
|
7698
|
+
|
|
7689
7699
|
);
|
|
7690
7700
|
|
|
7691
7701
|
# MP4 hint sample description box (ref 5)
|
|
@@ -9492,7 +9502,7 @@ sub ProcessMOV($$;$)
|
|
|
9492
9502
|
$et->HandleTag($tagTablePtr, "$tag-offset", $raf->Tell()) if $$tagTablePtr{"$tag-offset"};
|
|
9493
9503
|
}
|
|
9494
9504
|
# stop processing at mdat/idat if -fast2 is used
|
|
9495
|
-
last if $fast > 1 and ($tag eq 'mdat' or $tag eq 'idat');
|
|
9505
|
+
last if $fast > 1 and ($tag eq 'mdat' or ($tag eq 'idat' and $$et{FileType} ne 'HEIC'));
|
|
9496
9506
|
# load values only if associated with a tag (or verbose) and not too big
|
|
9497
9507
|
if ($size > 0x2000000) { # start to get worried above 32 MB
|
|
9498
9508
|
# check for RIFF trailer (written by Auto-Vox dashcam)
|
|
@@ -343,9 +343,10 @@ numerical, and generated automatically otherwise.
|
|
|
343
343
|
but applied automatically to individual tags. Value specifies
|
|
344
344
|
pattern for split, or 1 for default pattern ',?\\s+'.
|
|
345
345
|
|
|
346
|
-
'Avoid' - avoid creating this tag if possible.
|
|
347
|
-
effective if another tag exists with the same
|
|
348
|
-
this flag also sets the default Priority to 0
|
|
346
|
+
'Avoid' - avoid creating this tag when writing if possible.
|
|
347
|
+
This is only effective if another tag exists with the same
|
|
348
|
+
name. Setting this flag also sets the default Priority to 0
|
|
349
|
+
for this tag.
|
|
349
350
|
|
|
350
351
|
'Binary' - set to 1 for binary data. This has the same effect
|
|
351
352
|
as setting ValueConv to '\$val', but it it a bit cleaner and
|
|
@@ -917,6 +918,9 @@ numerical, and generated automatically otherwise.
|
|
|
917
918
|
FixedSize : [EXIF only] Hack to ignore value size and use this instead.
|
|
918
919
|
Only valid if Format is also defined.
|
|
919
920
|
|
|
921
|
+
TruncateOK : [EXIF only] Hack to demote a truncated value in an IFD to a
|
|
922
|
+
minor error.
|
|
923
|
+
|
|
920
924
|
Struct : [XMP tags only] Reference to structure hash for structured XMP
|
|
921
925
|
tags. See "STRUCTURES" section below for more details. (For
|
|
922
926
|
backward compatibility, this may be a name to an entry in
|
|
@@ -30,7 +30,7 @@ use strict;
|
|
|
30
30
|
use vars qw($VERSION $AUTOLOAD);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
|
|
33
|
-
$VERSION = '1.
|
|
33
|
+
$VERSION = '1.66';
|
|
34
34
|
|
|
35
35
|
sub ConvertTimecode($);
|
|
36
36
|
sub ProcessSGLT($$$);
|
|
@@ -555,7 +555,7 @@ my %code2charset = (
|
|
|
555
555
|
},
|
|
556
556
|
},{ # (WebP) - have also seen with "Exif\0\0" header - PH
|
|
557
557
|
Name => 'EXIF',
|
|
558
|
-
Condition => '$$valPt =~ /^Exif\0\0(II\x2a\0|MM\0\x2a)/ and $self->Warn("Improper EXIF header",1)',
|
|
558
|
+
Condition => '$$valPt =~ /^Exif\0\0(II\x2a\0|MM\0\x2a)/ and ($self->Warn("Improper EXIF header",1) or 1)',
|
|
559
559
|
SubDirectory => {
|
|
560
560
|
TagTable => 'Image::ExifTool::Exif::Main',
|
|
561
561
|
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
|
@@ -570,6 +570,12 @@ my %code2charset = (
|
|
|
570
570
|
Notes => 'WebP files',
|
|
571
571
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
|
|
572
572
|
},
|
|
573
|
+
"XMP\0" => {
|
|
574
|
+
Name => 'XMP',
|
|
575
|
+
Notes => 'incorrectly written WebP files',
|
|
576
|
+
Condition => '$self->Warn("Incorrect XMP tag ID", 1) or 1',
|
|
577
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
|
|
578
|
+
},
|
|
573
579
|
ICCP => { #14 (WebP)
|
|
574
580
|
Name => 'ICC_Profile',
|
|
575
581
|
Notes => 'WebP files',
|