exiftool-vendored.pl 13.43.0 → 13.44.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 +19 -2
- package/bin/MANIFEST +2 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +48 -48
- package/bin/exiftool +81 -81
- package/bin/lib/Image/ExifTool/Apple.pm +0 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- package/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- package/bin/lib/Image/ExifTool/EXE.pm +1 -1
- package/bin/lib/Image/ExifTool/Exif.pm +1 -0
- package/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +2 -2
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- package/bin/lib/Image/ExifTool/Google.pm +2 -2
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +0 -1
- package/bin/lib/Image/ExifTool/Import.pm +1 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
- package/bin/lib/Image/ExifTool/Kandao.pm +399 -0
- package/bin/lib/Image/ExifTool/LNK.pm +1 -1
- package/bin/lib/Image/ExifTool/MRC.pm +4 -4
- package/bin/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/lib/Image/ExifTool/MacOS.pm +1 -2
- package/bin/lib/Image/ExifTool/Matroska.pm +56 -15
- package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- package/bin/lib/Image/ExifTool/NikonCustom.pm +5 -6
- package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- package/bin/lib/Image/ExifTool/PPM.pm +1 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +18 -2
- package/bin/lib/Image/ExifTool/PhaseOne.pm +17 -1
- package/bin/lib/Image/ExifTool/Plot.pm +2 -2
- package/bin/lib/Image/ExifTool/Protobuf.pm +2 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +25 -5
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- package/bin/lib/Image/ExifTool/README +5 -5
- package/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- package/bin/lib/Image/ExifTool/Reconyx.pm +2 -2
- package/bin/lib/Image/ExifTool/Sony.pm +12 -3
- package/bin/lib/Image/ExifTool/TNEF.pm +2 -2
- package/bin/lib/Image/ExifTool/TagLookup.pm +18 -2
- package/bin/lib/Image/ExifTool/TagNames.pod +244 -109
- package/bin/lib/Image/ExifTool/Text.pm +1 -1
- package/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- package/bin/lib/Image/ExifTool/Writer.pl +3 -2
- package/bin/lib/Image/ExifTool/XMP.pm +4 -2
- package/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- package/bin/lib/Image/ExifTool.pm +5 -2
- package/bin/lib/Image/ExifTool.pod +79 -79
- package/bin/perl-Image-ExifTool.spec +47 -47
- package/package.json +4 -4
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.19';
|
|
19
19
|
|
|
20
20
|
sub HandleStruct($$;$$$$);
|
|
21
21
|
|
|
@@ -42,8 +42,8 @@ my %uidInfo = (
|
|
|
42
42
|
GROUPS => { 2 => 'Video' },
|
|
43
43
|
VARS => { NO_LOOKUP => 1 }, # omit tags from lookup
|
|
44
44
|
NOTES => q{
|
|
45
|
-
The following tags are extracted from Matroska multimedia container files.
|
|
46
|
-
This container format is used by file types such as MKA, MKV, MKS and WEBM.
|
|
45
|
+
The following tags are extracted from Matroska multimedia container files.
|
|
46
|
+
This container format is used by file types such as MKA, MKV, MKS and WEBM.
|
|
47
47
|
For speed, by default ExifTool extracts tags only up to the first Cluster
|
|
48
48
|
unless a Seek element specifies the position of a Tags element after this.
|
|
49
49
|
However, the L<Verbose|../ExifTool.html#Verbose> (-v) and L<Unknown|../ExifTool.html#Unknown> = 2 (-U) options force processing of
|
|
@@ -167,7 +167,7 @@ my %uidInfo = (
|
|
|
167
167
|
0x489 => {
|
|
168
168
|
Name => 'Duration',
|
|
169
169
|
Format => 'float',
|
|
170
|
-
ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val',
|
|
170
|
+
ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val / 1000',
|
|
171
171
|
PrintConv => '$$self{TimecodeScale} ? ConvertDuration($val) : $val',
|
|
172
172
|
},
|
|
173
173
|
0x461 => {
|
|
@@ -661,7 +661,19 @@ my %uidInfo = (
|
|
|
661
661
|
SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' },
|
|
662
662
|
},
|
|
663
663
|
# Targets elements
|
|
664
|
-
0x28ca => {
|
|
664
|
+
0x28ca => {
|
|
665
|
+
Name => 'TargetTypeValue',
|
|
666
|
+
Format => 'unsigned',
|
|
667
|
+
PrintConv => {
|
|
668
|
+
10 => 'Shot',
|
|
669
|
+
20 => 'Scene/Subtrack',
|
|
670
|
+
30 => 'Chapter/Track',
|
|
671
|
+
40 => 'Session',
|
|
672
|
+
50 => 'Movie/Album',
|
|
673
|
+
60 => 'Season/Edition',
|
|
674
|
+
70 => 'Collection',
|
|
675
|
+
},
|
|
676
|
+
},
|
|
665
677
|
0x23ca => { Name => 'TargetType', Format => 'string' },
|
|
666
678
|
0x23c5 => { Name => 'TagTrackUID', %uidInfo },
|
|
667
679
|
0x23c9 => { Name => 'TagEditionUID', %uidInfo },
|
|
@@ -737,7 +749,8 @@ my %uidInfo = (
|
|
|
737
749
|
# standardized tag names (ref 2)
|
|
738
750
|
%Image::ExifTool::Matroska::StdTag = (
|
|
739
751
|
GROUPS => { 2 => 'Video' },
|
|
740
|
-
|
|
752
|
+
PRIORITY => 0, # (don't want named tags to override numbered tags, eg. "DURATION")
|
|
753
|
+
VARS => { LONG_TAGS => 3 },
|
|
741
754
|
NOTES => q{
|
|
742
755
|
Standardized Matroska tags, stored in a SimpleTag structure (see
|
|
743
756
|
L<https://www.matroska.org/technical/tagging.html>).
|
|
@@ -866,6 +879,15 @@ my %uidInfo = (
|
|
|
866
879
|
ProcessProc => 'Image::ExifTool::XMP::ProcessGSpherical',
|
|
867
880
|
},
|
|
868
881
|
},
|
|
882
|
+
#
|
|
883
|
+
# other tags seen
|
|
884
|
+
#
|
|
885
|
+
_STATISTICS_WRITING_DATE_UTC => { Name => 'StatisticsWritingDateUTC', %dateInfo },
|
|
886
|
+
_STATISTICS_WRITING_APP => 'StatisticsWritingApp',
|
|
887
|
+
_STATISTICS_TAGS => 'StatisticsTags',
|
|
888
|
+
DURATION => 'Duration',
|
|
889
|
+
NUMBER_OF_FRAMES => 'NumberOfFrames',
|
|
890
|
+
NUMBER_OF_BYTES => 'NumberOfBytes',
|
|
869
891
|
);
|
|
870
892
|
|
|
871
893
|
#------------------------------------------------------------------------------
|
|
@@ -885,6 +907,7 @@ sub HandleStruct($$;$$$$)
|
|
|
885
907
|
$name =~ tr/0-9a-zA-Z_//dc;
|
|
886
908
|
$name =~ s/_([a-z])/\U$1/g;
|
|
887
909
|
$name = "Tag_$name" if length $name < 2;
|
|
910
|
+
$et->VPrint(0, " [adding $tag = $name]\n");
|
|
888
911
|
$tagInfo = AddTagToTable($tagTbl, $tag, { Name => $name });
|
|
889
912
|
}
|
|
890
913
|
my ($id, $nm);
|
|
@@ -894,6 +917,7 @@ sub HandleStruct($$;$$$$)
|
|
|
894
917
|
unless ($$tagTbl{$id}) {
|
|
895
918
|
my %copy = %$tagInfo;
|
|
896
919
|
$copy{Name} = $nm;
|
|
920
|
+
$et->VPrint(0, " [adding $id = $nm]\n");
|
|
897
921
|
$tagInfo = AddTagToTable($tagTbl, $id, \%copy);
|
|
898
922
|
}
|
|
899
923
|
} else {
|
|
@@ -965,7 +989,8 @@ sub ProcessMKV($$)
|
|
|
965
989
|
{
|
|
966
990
|
my ($et, $dirInfo) = @_;
|
|
967
991
|
my $raf = $$dirInfo{RAF};
|
|
968
|
-
my ($buff, $buf2, @dirEnd, $trackIndent, %trackTypes,
|
|
992
|
+
my ($buff, $buf2, @dirEnd, $trackIndent, %trackTypes, %trackNum,
|
|
993
|
+
$struct, %seekInfo, %seek);
|
|
969
994
|
|
|
970
995
|
$raf->Read($buff, 4) == 4 or return 0;
|
|
971
996
|
return 0 unless $buff =~ /^\x1a\x45\xdf\xa3/;
|
|
@@ -1024,6 +1049,7 @@ sub ProcessMKV($$)
|
|
|
1024
1049
|
# use INDENT to decide whether or not we are done this Track element
|
|
1025
1050
|
delete $$et{SET_GROUP1} if $trackIndent and $trackIndent eq $$et{INDENT};
|
|
1026
1051
|
$$et{INDENT} = substr($$et{INDENT}, 0, -2);
|
|
1052
|
+
pop @{$$et{PATH}};
|
|
1027
1053
|
} else {
|
|
1028
1054
|
$dirName = $dirEnd[-1][1];
|
|
1029
1055
|
last;
|
|
@@ -1043,7 +1069,7 @@ sub ProcessMKV($$)
|
|
|
1043
1069
|
$$et{SeekHeadOffset} = $pos if $tag == 0x14d9b74; # save offset of seek head
|
|
1044
1070
|
my $size = GetVInt($buff, $pos);
|
|
1045
1071
|
last unless defined $size;
|
|
1046
|
-
my ($unknownSize, $seekInfoOnly);
|
|
1072
|
+
my ($unknownSize, $seekInfoOnly, $tagName);
|
|
1047
1073
|
$size < 0 and $unknownSize = 1, $size = 1e20;
|
|
1048
1074
|
if (@dirEnd and $pos + $dataPos + $size > $dirEnd[-1][0]) {
|
|
1049
1075
|
$et->Warn("Invalid or corrupted $dirEnd[-1][1] master element");
|
|
@@ -1063,10 +1089,11 @@ sub ProcessMKV($$)
|
|
|
1063
1089
|
$seekInfoOnly = 1;
|
|
1064
1090
|
}
|
|
1065
1091
|
if ($tagInfo) {
|
|
1092
|
+
$tagName = $$tagInfo{Name};
|
|
1066
1093
|
if ($$tagInfo{SubDirectory} and not $$tagInfo{NotEBML}) {
|
|
1067
1094
|
# stop processing at first cluster unless we are using -v -U or -ee
|
|
1068
1095
|
# or there are Tags after this
|
|
1069
|
-
if (
|
|
1096
|
+
if ($tagName eq 'Cluster' and $processAll < 2) {
|
|
1070
1097
|
# jump to Tags if possible
|
|
1071
1098
|
unless ($processAll) {
|
|
1072
1099
|
if ($seek{Tags} and $seek{Tags} > $pos + $dataPos and $raf->Seek($seek{Tags},0)) {
|
|
@@ -1081,13 +1108,18 @@ sub ProcessMKV($$)
|
|
|
1081
1108
|
} else {
|
|
1082
1109
|
# just fall through into the contained EBML elements
|
|
1083
1110
|
$$et{INDENT} .= '| ';
|
|
1084
|
-
$
|
|
1085
|
-
$dirName
|
|
1111
|
+
$dirName = $tagName;
|
|
1112
|
+
$et->VerboseDir($dirName, undef, $size);
|
|
1113
|
+
push @{$$et{PATH}}, $dirName;
|
|
1086
1114
|
push @dirEnd, [ $pos + $dataPos + $size, $dirName, $struct ];
|
|
1087
1115
|
$struct = { } if $dirName eq 'SimpleTag'; # keep track of SimpleTag elements
|
|
1088
|
-
|
|
1116
|
+
# set Chapter# and Info family 1 group names
|
|
1117
|
+
if ($tagName eq 'ChapterAtom') {
|
|
1089
1118
|
$$et{SET_GROUP1} = 'Chapter' . (++$chapterNum);
|
|
1090
1119
|
$trackIndent = $$et{INDENT};
|
|
1120
|
+
} elsif ($tagName eq 'Info' and not $$et{SET_GROUP1}) {
|
|
1121
|
+
$$et{SET_GROUP1} = 'Info';
|
|
1122
|
+
$trackIndent = $$et{INDENT};
|
|
1091
1123
|
}
|
|
1092
1124
|
next;
|
|
1093
1125
|
}
|
|
@@ -1170,10 +1202,19 @@ sub ProcessMKV($$)
|
|
|
1170
1202
|
$val = $val * 256 + $_ foreach @vals;
|
|
1171
1203
|
}
|
|
1172
1204
|
}
|
|
1173
|
-
|
|
1174
|
-
|
|
1205
|
+
if ($tagName eq 'TrackNumber') {
|
|
1206
|
+
# set Track# family 1 group name for tags directly in the track
|
|
1175
1207
|
$$et{SET_GROUP1} = 'Track' . $val;
|
|
1176
1208
|
$trackIndent = $$et{INDENT};
|
|
1209
|
+
} elsif ($tagName eq 'TrackUID' and $$et{SET_GROUP1}) {
|
|
1210
|
+
# save the Track# group associated with this TrackUID
|
|
1211
|
+
$trackNum{$val} = $$et{SET_GROUP1};
|
|
1212
|
+
} elsif ($tagName eq 'TagTrackUID' and $trackNum{$val}) {
|
|
1213
|
+
# set Track# group for associated SimpleTags tags
|
|
1214
|
+
$$et{SET_GROUP1} = $trackNum{$val};
|
|
1215
|
+
# we're already one deeper than the level where we want to
|
|
1216
|
+
# reset the group name, so trigger at one indent level higher
|
|
1217
|
+
$trackIndent = substr($$et{INDENT}, 0, -2);
|
|
1177
1218
|
}
|
|
1178
1219
|
}
|
|
1179
1220
|
my %parms = (
|
|
@@ -1184,7 +1225,7 @@ sub ProcessMKV($$)
|
|
|
1184
1225
|
);
|
|
1185
1226
|
if ($$tagInfo{NoSave} or $struct) {
|
|
1186
1227
|
$et->VerboseInfo($tag, $tagInfo, Value => $val, %parms) if $verbose;
|
|
1187
|
-
$$struct{
|
|
1228
|
+
$$struct{$tagName} = $val if $struct;
|
|
1188
1229
|
} elsif ($$tagInfo{SeekInfo}) {
|
|
1189
1230
|
my $p = $pos;
|
|
1190
1231
|
$val = GetVInt($buff, $p) unless defined $val;
|
|
@@ -5843,7 +5843,7 @@ my %nikonFocalConversions = (
|
|
|
5843
5843
|
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
|
5844
5844
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
|
5845
5845
|
30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
|
|
5846
|
-
31 => 'Nikkor Z 24-120mm f/4 S', #
|
|
5846
|
+
31 => 'Nikkor Z 24-120mm f/4 S', #github250
|
|
5847
5847
|
32 => 'Nikkor Z 800mm f/6.3 VR S', #28
|
|
5848
5848
|
35 => 'Nikkor Z 28-75mm f/2.8', #IB
|
|
5849
5849
|
36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
|
|
@@ -9010,7 +9010,7 @@ my %nikonFocalConversions = (
|
|
|
9010
9010
|
RawConv => '$$self{FocusShiftShooting} = $val',
|
|
9011
9011
|
PrintConv => q{
|
|
9012
9012
|
return 'Off' if $val == 0 ;
|
|
9013
|
-
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
|
9013
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
|
9014
9014
|
if ($$self{PixelShiftActive} and $$self{PixelShiftActive} eq 1) {$i = sprintf("Frame %.0f",$val);} #for the Z8 fw3 with PixelShift Enabled, the frame count is correct, but the frame total needs to be multiplied by the number of PixelShift frames (which I cannot find)
|
|
9015
9015
|
return "On: $i"
|
|
9016
9016
|
},
|
|
@@ -9018,7 +9018,7 @@ my %nikonFocalConversions = (
|
|
|
9018
9018
|
},
|
|
9019
9019
|
#
|
|
9020
9020
|
# Note: Offsets after this are shifted by +2 for Z8 firmware 3.0 (see Hook above)
|
|
9021
|
-
#
|
|
9021
|
+
#
|
|
9022
9022
|
0x0028 => {
|
|
9023
9023
|
Name => 'IntervalShooting', #will be 'On' when Interval Shooting is selected via the Photo Shooting Menu and also when a non-zero interval is specified when using Focus Shift and/or Pixel Shift Shooting
|
|
9024
9024
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
@@ -9929,14 +9929,14 @@ my %nikonFocalConversions = (
|
|
|
9929
9929
|
618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
|
|
9930
9930
|
622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
|
|
9931
9931
|
636 => {
|
|
9932
|
-
Name => 'HighFrequencyFlickerReduction',
|
|
9932
|
+
Name => 'HighFrequencyFlickerReduction',
|
|
9933
9933
|
PrintConv => \%offOn,
|
|
9934
9934
|
Unknown => 1,
|
|
9935
9935
|
Hook => '$varSize += 4 if $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.00"',
|
|
9936
9936
|
},
|
|
9937
9937
|
#
|
|
9938
9938
|
# firmware 3.00 adds 4 bytes somewhere in the range 638-730 (hence the Hook above)
|
|
9939
|
-
#
|
|
9939
|
+
#
|
|
9940
9940
|
730 => {
|
|
9941
9941
|
Name => 'MovieImageArea',
|
|
9942
9942
|
Unknown => 1,
|
|
@@ -115,10 +115,10 @@ my %buttonsCommonZ8Z9 = ( #button roles shared by the Z8 & Z9. Assigments bega
|
|
|
115
115
|
SeparateTable => 'ButtonsZ8',
|
|
116
116
|
PrintConv => {
|
|
117
117
|
%buttonsCommonZ8Z9,
|
|
118
|
-
116 => 'Pixel Shift Shooting',
|
|
118
|
+
116 => 'Pixel Shift Shooting',
|
|
119
119
|
117 => 'Cycle AF-area Mode',
|
|
120
120
|
119 => 'Focus Limiter',
|
|
121
|
-
120 => 'Jump to Source Image',
|
|
121
|
+
120 => 'Jump to Source Image',
|
|
122
122
|
121 => 'Raw Processing (Current)',
|
|
123
123
|
122 => 'Raw Processing (Multiple)',
|
|
124
124
|
123 => 'Trim',
|
|
@@ -140,7 +140,7 @@ my %buttonsCommonZ8Z9 = ( #button roles shared by the Z8 & Z9. Assigments bega
|
|
|
140
140
|
SeparateTable => 'ButtonsZ9',
|
|
141
141
|
PrintConv => {
|
|
142
142
|
%buttonsCommonZ8Z9,
|
|
143
|
-
116 => 'Save and Load Power Zoom Position',
|
|
143
|
+
116 => 'Save and Load Power Zoom Position',
|
|
144
144
|
117 => 'Cycle AF-area Mode',
|
|
145
145
|
118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
|
|
146
146
|
119 => 'Raw Processing (Multiple)',
|
|
@@ -9880,11 +9880,10 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
|
9880
9880
|
17 => { Name => 'LimitAF-AreaModeSelPinpoint', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
|
9881
9881
|
19 => { Name => 'LimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
|
9882
9882
|
20 => { Name => 'LimitAF-AreaModeSelWideAF_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
|
9883
|
-
21 => { Name => 'LimitAFAreaModeSelAuto', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
|
9883
|
+
21 => { Name => 'LimitAFAreaModeSelAuto', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
|
9884
9884
|
22 => { Name => 'FocusPointWrap', PrintConv => { 0 => 'No Wrap', 1 => 'Wrap' }, Unknown => 1 }, # CSa10
|
|
9885
9885
|
23 => { Name => 'ManualFocusPointIllumination', PrintConv => {0 => 'On During Focus Point Selection Only', 1 => 'On', }, Unknown => 1 }, # CSa10a
|
|
9886
9886
|
24 => { Name => 'DynamicAreaAFAssist', PrintConv => { 0 => 'Focus Point Only',1 => 'Focus and Surrounding Points',}, Unknown => 1 }, # CSa10b
|
|
9887
|
-
|
|
9888
9887
|
26 => { Name => 'AF-AssistIlluminator', PrintConv => \%offOn }, # CSa11
|
|
9889
9888
|
27 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%offOn }, # CSa14
|
|
9890
9889
|
29 => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2
|
|
@@ -9999,7 +9998,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
|
9999
9998
|
},
|
|
10000
9999
|
},
|
|
10001
10000
|
85 => { Name => 'ContinuousModeDisplay', PrintConv => \%offOn }, # CSd14
|
|
10002
|
-
87 => { # CSe1-a Previous cameras reported this with HighSpeedSync indicator appended as '(Auto FP)'.
|
|
10001
|
+
87 => { # CSe1-a Previous cameras reported this with HighSpeedSync indicator appended as '(Auto FP)'.
|
|
10003
10002
|
Name => 'FlashSyncSpeed',
|
|
10004
10003
|
ValueConv => '($val-144)/8',
|
|
10005
10004
|
PrintConv => {
|
|
@@ -53,7 +53,7 @@ my %formatType = (
|
|
|
53
53
|
L<http://www.openexr.com/> for the official specification.
|
|
54
54
|
},
|
|
55
55
|
_ver => { Name => 'EXRVersion', Notes => 'low byte of Flags word' },
|
|
56
|
-
_flags => { Name => 'Flags',
|
|
56
|
+
_flags => { Name => 'Flags',
|
|
57
57
|
PrintConv => { BITMASK => {
|
|
58
58
|
9 => 'Tiled',
|
|
59
59
|
10 => 'Long names',
|
|
@@ -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.28';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -1493,6 +1493,22 @@ my %shootingMode = (
|
|
|
1493
1493
|
Writable => 'int16u',
|
|
1494
1494
|
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
1495
1495
|
},
|
|
1496
|
+
0xf1 => { #github365
|
|
1497
|
+
Name => 'LUT1Name',
|
|
1498
|
+
Writable => 'string',
|
|
1499
|
+
},
|
|
1500
|
+
0xf3 => { #github365
|
|
1501
|
+
Name => 'LUT1Opacity',
|
|
1502
|
+
Writable => 'int8u', # (percent)
|
|
1503
|
+
},
|
|
1504
|
+
0xf4 => { #github365
|
|
1505
|
+
Name => 'LUT2Name',
|
|
1506
|
+
Writable => 'string',
|
|
1507
|
+
},
|
|
1508
|
+
0xf5 => { #github365
|
|
1509
|
+
Name => 'LUT2Opacity',
|
|
1510
|
+
Writable => 'int8u', # (percent)
|
|
1511
|
+
},
|
|
1496
1512
|
0x0e00 => {
|
|
1497
1513
|
Name => 'PrintIM',
|
|
1498
1514
|
Description => 'Print Image Matching',
|
|
@@ -2279,7 +2295,7 @@ my %shootingMode = (
|
|
|
2279
2295
|
Format => 'int16u[4]',
|
|
2280
2296
|
RawConv => '$$self{NumFacePositions} < 1 ? undef : $val',
|
|
2281
2297
|
Notes => q{
|
|
2282
|
-
4 numbers: X/Y coordinates of the face center and width/height of face.
|
|
2298
|
+
4 numbers: X/Y coordinates of the face center and width/height of face.
|
|
2283
2299
|
Coordinates are relative to an image twice the size of the thumbnail, or 320
|
|
2284
2300
|
pixels wide
|
|
2285
2301
|
},
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.12';
|
|
19
19
|
|
|
20
20
|
sub WritePhaseOne($$$);
|
|
21
21
|
sub ProcessPhaseOne($$$);
|
|
@@ -193,6 +193,22 @@ my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' );
|
|
|
193
193
|
Flags => ['Unknown','Hidden'],
|
|
194
194
|
PrintConv => \&Image::ExifTool::LimitLongValues,
|
|
195
195
|
},
|
|
196
|
+
0x0262 => { Name => 'SequenceID', Format => 'string' },
|
|
197
|
+
0x0263 => {
|
|
198
|
+
Name => 'SequenceKind',
|
|
199
|
+
PrintConv => {
|
|
200
|
+
0 => 'Bracketing: Shutter Speed',
|
|
201
|
+
1 => 'Bracketing: Aperture',
|
|
202
|
+
2 => 'Bracketing: ISO',
|
|
203
|
+
3 => 'Hyperfocal',
|
|
204
|
+
4 => 'Time Lapse',
|
|
205
|
+
5 => 'HDR',
|
|
206
|
+
6 => 'Focus Stacking',
|
|
207
|
+
},
|
|
208
|
+
PrintConvInv => '$val',
|
|
209
|
+
},
|
|
210
|
+
0x0264 => 'SequenceFrameNumber',
|
|
211
|
+
0x0265 => 'SequenceFrameCount',
|
|
196
212
|
# 0x0300 - int32u: 100,101,102
|
|
197
213
|
0x0301 => { Name => 'FirmwareVersions', Format => 'string' },
|
|
198
214
|
# 0x0304 - int32u: 8,3073,3076
|
|
@@ -461,7 +461,7 @@ sub Draw($$)
|
|
|
461
461
|
$mark = $markerData{$m[0]};
|
|
462
462
|
$mark or $markID{$mark} = '', next; # skip 'none' or unrecognized marker name
|
|
463
463
|
if ($fill and $fill ne 'none') {
|
|
464
|
-
my $op = $m[3] || ($$cols[$i] eq 'none' ? 50 : 20);
|
|
464
|
+
my $op = $m[3] || ($$cols[$i] eq 'none' ? 50 : 20);
|
|
465
465
|
$mark .= qq( fill="$fill" style="fill-opacity: $op%");
|
|
466
466
|
} else {
|
|
467
467
|
$mark .= ' fill="none"';
|
|
@@ -573,7 +573,7 @@ sub Draw($$)
|
|
|
573
573
|
$xsclr = int($xscl * 100 + 0.5) / 100;
|
|
574
574
|
if ($style =~ /\bf/) {
|
|
575
575
|
my @m = split /-/, $$marks[0];
|
|
576
|
-
my $op = $m[3] || ($style =~ /\bl/ ? 20 : 50);
|
|
576
|
+
my $op = $m[3] || ($style =~ /\bl/ ? 20 : 50);
|
|
577
577
|
$fill = " fill='$$cols[0]'";
|
|
578
578
|
$fill .= " style='fill-opacity: $op%'" if $$cols[0] ne 'none';
|
|
579
579
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
# and 'int64s' formats for VARINT (type 0) values, 'int64u',
|
|
10
10
|
# 'int64s', 'rational64u', 'rational64s' and 'double' for I64
|
|
11
11
|
# (type 1), 'undef', 'string' and 'rational' for LEN (type 2),
|
|
12
|
-
# and 'int32u', 'int32s', 'rational32u', 'rational32s',
|
|
12
|
+
# and 'int32u', 'int32s', 'rational32u', 'rational32s',
|
|
13
13
|
# 'fixed32u', 'fixed32s' and 'float' for I32 (type 5) values.
|
|
14
14
|
#
|
|
15
15
|
# References: 1) https://protobuf.dev/programming-guides/encoding/
|
|
@@ -133,7 +133,7 @@ sub ProcessProtobuf($$$;$)
|
|
|
133
133
|
}
|
|
134
134
|
# prefix for unknown tags
|
|
135
135
|
my $unkPre = $$tagTbl{TAG_PREFIX} ? $$tagTbl{TAG_PREFIX} . '_' : 'Protobuf ';
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
# loop through protobuf records
|
|
138
138
|
for (;;) {
|
|
139
139
|
my $pos = $$dirInfo{Pos};
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.25';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -601,7 +601,7 @@ my %userDefined = (
|
|
|
601
601
|
# 0010: 73 6e 61 6c 00 00 00 00 00 f7 b6 d2 00 0a 46 e0 [snal..........F.]
|
|
602
602
|
# 0020: 68 67 6c 67 00 00 00 00 01 02 0a a2 00 00 00 21 [hglg...........!]
|
|
603
603
|
# 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
604
|
-
# (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
|
|
604
|
+
# (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
|
|
605
605
|
],
|
|
606
606
|
# fre1 - 4 bytes: "june" (Kodak PixPro SP360)
|
|
607
607
|
frea => {
|
|
@@ -988,6 +988,25 @@ my %userDefined = (
|
|
|
988
988
|
ProcessProc => \&ProcessInsta360,
|
|
989
989
|
},
|
|
990
990
|
},
|
|
991
|
+
# Kandao tags (Kandao QooCam 3 Ultra)
|
|
992
|
+
kvar => {
|
|
993
|
+
Name => 'KVAR',
|
|
994
|
+
BlockExtract => 1,
|
|
995
|
+
Notes => q{
|
|
996
|
+
by default, data in this tag is parsed to extract some embedded metadata,
|
|
997
|
+
but it may also be extracted as a KVAR file via the "KVAR" tag or by setting
|
|
998
|
+
the API BlockExtract option
|
|
999
|
+
},
|
|
1000
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Kandao::Main' },
|
|
1001
|
+
},
|
|
1002
|
+
kfix => {
|
|
1003
|
+
Name => 'KFIX',
|
|
1004
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Kandao::Main' },
|
|
1005
|
+
},
|
|
1006
|
+
kstb => { # (NC)
|
|
1007
|
+
Name => 'KSTB',
|
|
1008
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Kandao::Main' },
|
|
1009
|
+
},
|
|
991
1010
|
);
|
|
992
1011
|
|
|
993
1012
|
# stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)
|
|
@@ -2668,6 +2687,7 @@ my %userDefined = (
|
|
|
2668
2687
|
ByteOrder => 'BigEndian',
|
|
2669
2688
|
},
|
|
2670
2689
|
},
|
|
2690
|
+
# PREX - seen written by Sony ILCE-7M5 (apparently contains another video profile?)
|
|
2671
2691
|
);
|
|
2672
2692
|
|
|
2673
2693
|
# FPRF atom information (ref 11)
|
|
@@ -3421,7 +3441,7 @@ my %userDefined = (
|
|
|
3421
3441
|
ssrc => { Name => 'Non-primarySourceTrack', Format => 'int32u' }, #29
|
|
3422
3442
|
sync => { Name => 'SyncronizedTrack', Format => 'int32u' }, #29
|
|
3423
3443
|
# hint - Original media for hint track (ref 29)
|
|
3424
|
-
# cdep (Structural Dependency QT tag?)
|
|
3444
|
+
# cdep (Structural Dependency QT tag?)
|
|
3425
3445
|
);
|
|
3426
3446
|
|
|
3427
3447
|
# track aperture mode dimensions atoms
|
|
@@ -9026,13 +9046,13 @@ sub GetString($$)
|
|
|
9026
9046
|
sub PrintableTagID($;$)
|
|
9027
9047
|
{
|
|
9028
9048
|
my $tag = $_[0];
|
|
9029
|
-
my $n = ($tag =~ s/([
|
|
9049
|
+
my $n = ($tag =~ s/([^-_a-zA-Z0-9])/'x'.unpack('H*',$1)/eg);
|
|
9030
9050
|
if ($n and $_[1]) {
|
|
9031
9051
|
if ($n > 2 and $_[1] & 0x01) {
|
|
9032
9052
|
$tag = '0x' . unpack('H8', $_[0]);
|
|
9033
9053
|
$tag =~ s/^0x0000/0x/;
|
|
9034
9054
|
} elsif ($_[1] & 0x02) {
|
|
9035
|
-
($tag = $_[0]) =~ s/([
|
|
9055
|
+
($tag = $_[0]) =~ s/([^-_a-zA-Z0-9])/'\\x'.unpack('H*',$1)/eg;
|
|
9036
9056
|
}
|
|
9037
9057
|
}
|
|
9038
9058
|
return $tag;
|
|
@@ -111,7 +111,7 @@ my %insvLimit = (
|
|
|
111
111
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
112
112
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
113
113
|
most of these tags are combined into the single table below, ExifTool
|
|
114
|
-
currently reads
|
|
114
|
+
currently reads 117 different types of timed GPS metadata from video files.
|
|
115
115
|
},
|
|
116
116
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
117
117
|
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
|
@@ -348,7 +348,7 @@ numerical, and generated automatically otherwise.
|
|
|
348
348
|
but applied automatically to individual tags. Value specifies
|
|
349
349
|
pattern for split, or 1 for default pattern ',?\\s+'.
|
|
350
350
|
|
|
351
|
-
'Avoid' - avoid creating this tag when writing if possible.
|
|
351
|
+
'Avoid' - avoid creating this tag when writing if possible.
|
|
352
352
|
This is only effective if another tag exists with the same
|
|
353
353
|
name. Setting this flag also sets the default Priority to 0
|
|
354
354
|
for this tag.
|
|
@@ -632,7 +632,7 @@ numerical, and generated automatically otherwise.
|
|
|
632
632
|
value, and $tag is the tag key. The subroutine takes 2
|
|
633
633
|
arguments: the Raw value and a reference to the current
|
|
634
634
|
ExifTool object. The advanced formatting expression (if any)
|
|
635
|
-
may be accessed via the ExifTool "FMT_EXPR" member variable.
|
|
635
|
+
may be accessed via the ExifTool "FMT_EXPR" member variable.
|
|
636
636
|
The expression or subroutine is evaluated if and when the tag
|
|
637
637
|
value is requested (ie. only after all extraction is
|
|
638
638
|
complete), so if necessary at this time the values of all
|
|
@@ -650,7 +650,7 @@ numerical, and generated automatically otherwise.
|
|
|
650
650
|
enabled. If this isn't possible (as with Composite tags where
|
|
651
651
|
the converted values of the source tags are needed), set the
|
|
652
652
|
Priority to 0 to avoid taking priority over a valid tag. If
|
|
653
|
-
ValueConv is not specified, the Raw value is not converted.
|
|
653
|
+
ValueConv is not specified, the Raw value is not converted.
|
|
654
654
|
Composite tags which Require or Desire other tags may access
|
|
655
655
|
the ValueConv, PrintConv and Raw values of these tags through
|
|
656
656
|
the elements of the @val, @prt and @raw lists respectively
|
|
@@ -822,7 +822,7 @@ numerical, and generated automatically otherwise.
|
|
|
822
822
|
SubDirectory is writable as a block, or if the SubDirectory
|
|
823
823
|
can not be edited (in which case Writable is set to 0). If
|
|
824
824
|
non-zero, the SubDirectory is also extracted as a block, so
|
|
825
|
-
the Binary and Protected flags should usually set as well.
|
|
825
|
+
the Binary and Protected flags should usually set as well.
|
|
826
826
|
There is currently no way to specify a write format for a
|
|
827
827
|
SubDirectory that is not writable as a block (the default is
|
|
828
828
|
'int32u' for IFD-type SubDirectories, and 'undef' for all
|
|
@@ -970,7 +970,7 @@ numerical, and generated automatically otherwise.
|
|
|
970
970
|
data record), $dataPt (reference to the data block), and $pos
|
|
971
971
|
(position of this tag in the data block), and assign a new
|
|
972
972
|
value to $format to dynamically set the tag format, and/or
|
|
973
|
-
increment $varSize to add a byte offset to subsequent tags.
|
|
973
|
+
increment $varSize to add a byte offset to subsequent tags.
|
|
974
974
|
$varSize may be set to a large number to effectively abort
|
|
975
975
|
processing of the directory after this tag. Must have
|
|
976
976
|
corresponding DATAMEMBER entry in writable tables. Must not
|
|
@@ -391,7 +391,7 @@ my %code2charset = (
|
|
|
391
391
|
smpl => { #16
|
|
392
392
|
Name => 'Sampler',
|
|
393
393
|
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Sampler' },
|
|
394
|
-
},
|
|
394
|
+
},
|
|
395
395
|
inst => { #16
|
|
396
396
|
Name => 'Instrument',
|
|
397
397
|
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Instrument' },
|
|
@@ -546,11 +546,11 @@ my %code2charset = (
|
|
|
546
546
|
'id3 ' => {
|
|
547
547
|
Name => 'ID3',
|
|
548
548
|
SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' },
|
|
549
|
-
},
|
|
549
|
+
},
|
|
550
550
|
'ID3 ' => { # (NC)
|
|
551
551
|
Name => 'ID3-2',
|
|
552
552
|
SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' },
|
|
553
|
-
},
|
|
553
|
+
},
|
|
554
554
|
#
|
|
555
555
|
# WebP-specific tags
|
|
556
556
|
#
|
|
@@ -420,7 +420,7 @@ my %convUnicode = (
|
|
|
420
420
|
WRITABLE => 1,
|
|
421
421
|
FIRST_ENTRY => 0,
|
|
422
422
|
NOTES => 'Maker notes tags for Reconyx MicroFire cameras.',
|
|
423
|
-
0x10 => { Name => 'FileNumber', Format => 'int16u' },
|
|
423
|
+
0x10 => { Name => 'FileNumber', Format => 'int16u' },
|
|
424
424
|
0x12 => { Name => 'DirectoryNumber', Format => 'int16u' },
|
|
425
425
|
0x14 => {
|
|
426
426
|
Name => 'DirectoryCreateDate',
|
|
@@ -695,7 +695,7 @@ my %convUnicode = (
|
|
|
695
695
|
0x51 => { Name => 'UserLabel', Format => 'string[51]' },
|
|
696
696
|
0x84 => { Name => 'SerialNumber', Format => 'string[15]' },
|
|
697
697
|
0x93 => { Name => 'DirectoryNumber', Format => 'int16u' },
|
|
698
|
-
0x95 => { Name => 'FileNumber', Format => 'int16u' },
|
|
698
|
+
0x95 => { Name => 'FileNumber', Format => 'int16u' },
|
|
699
699
|
);
|
|
700
700
|
|
|
701
701
|
__END__
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.82';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -261,7 +261,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
261
261
|
49475 => 'Tamron 50-300mm F4.5-6.3 Di III VC VXD', #JR (Model A069)
|
|
262
262
|
49476 => 'Tamron 28-300mm F4-7.1 Di III VC VXD', #JR (Model A074)
|
|
263
263
|
49477 => 'Tamron 90mm F2.8 Di III Macro VXD', #JR (Model F072)
|
|
264
|
-
49478 => 'Tamron 16-30mm F2.8 Di III VXD G2', #JR (Model A064)
|
|
264
|
+
49478 => 'Tamron 16-30mm F2.8 Di III VXD G2', #JR (Model A064)
|
|
265
265
|
|
|
266
266
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
|
267
267
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
|
@@ -1534,6 +1534,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1534
1534
|
0 => 'Compressed RAW',
|
|
1535
1535
|
1 => 'Uncompressed RAW',
|
|
1536
1536
|
2 => 'Lossless Compressed RAW', #JR (NC) seen for ILCE-1
|
|
1537
|
+
3 => 'Compressed RAW (HQ)', # ILCE-7M5
|
|
1537
1538
|
65535 => 'n/a', # seen for ILCE-7SM3 JPEG-only
|
|
1538
1539
|
},
|
|
1539
1540
|
},
|
|
@@ -2095,6 +2096,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
2095
2096
|
'4 0 1 0' => 'ARW 4.0.1', #github195 (ZV-E1)
|
|
2096
2097
|
'5 0 0 0' => 'ARW 5.0', # (ILCE-9M3)
|
|
2097
2098
|
'5 0 1 0' => 'ARW 5.0.1', # (ILCE-1 with FirmWare 2.0)
|
|
2099
|
+
'6 0 0 0' => 'ARW 6.0.0', # (ILCE-7M5)
|
|
2098
2100
|
# what about cRAW images?
|
|
2099
2101
|
},
|
|
2100
2102
|
},
|
|
@@ -7564,6 +7566,12 @@ my %isoSetting2010 = (
|
|
|
7564
7566
|
# appears to be difference between used FNumber and MaxAperture, 256 being +1 APEX or stop
|
|
7565
7567
|
# however, not always valid e.g. bracketing, Shutter-prio e.a.
|
|
7566
7568
|
# difference between 0x0002 and 0x0004 mostly 0.0, 0.1 or 0.2 stops.
|
|
7569
|
+
0x000a => { #github369
|
|
7570
|
+
Name => 'ShutterCount',
|
|
7571
|
+
Format => 'int32u',
|
|
7572
|
+
Condition => '$$self{Model} =~ /^ILCE-7M5$/',
|
|
7573
|
+
Notes => 'ILCE-7M5',
|
|
7574
|
+
},
|
|
7567
7575
|
0x0020 => {
|
|
7568
7576
|
Name => 'Shutter',
|
|
7569
7577
|
Format => 'int16u[3]',
|
|
@@ -7594,6 +7602,7 @@ my %isoSetting2010 = (
|
|
|
7594
7602
|
# NEX-5N/7. For the A99V it is definitely more than 16 bits, but it wraps at
|
|
7595
7603
|
# 65536 for the A7R.
|
|
7596
7604
|
Format => 'int32u',
|
|
7605
|
+
Condition => '$$self{Model} !~ /^ILCE-7M5$/',
|
|
7597
7606
|
Notes => q{
|
|
7598
7607
|
total number of image exposures made by the camera, modulo 65536 for some
|
|
7599
7608
|
models
|
|
@@ -9988,7 +9997,7 @@ my %isoSetting2010 = (
|
|
|
9988
9997
|
PrintConv => \%sonyExposureProgram3,
|
|
9989
9998
|
},
|
|
9990
9999
|
0x0037 => {
|
|
9991
|
-
Name => 'CreativeStyle',
|
|
10000
|
+
Name => 'CreativeStyle',
|
|
9992
10001
|
Notes => 'offsets after this are shifted by 1 for the ILME-FX2',
|
|
9993
10002
|
Hook => '$varSize += 1 if $$self{Model} =~ /^(ILME-FX2)/',
|
|
9994
10003
|
PrintConv => {
|