exiftool_vendored 12.56.0 → 12.58.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +35 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/rotate_regions.config +1 -1
- data/bin/exiftool +95 -47
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +19 -15
- data/bin/lib/Image/ExifTool/Canon.pm +26 -6
- data/bin/lib/Image/ExifTool/DJI.pm +28 -2
- data/bin/lib/Image/ExifTool/Exif.pm +24 -5
- data/bin/lib/Image/ExifTool/FlashPix.pm +6 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/LNK.pm +5 -4
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
- data/bin/lib/Image/ExifTool/Nikon.pm +998 -903
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
- data/bin/lib/Image/ExifTool/Photoshop.pm +38 -7
- data/bin/lib/Image/ExifTool/QuickTime.pm +23 -7
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +3 -1
- data/bin/lib/Image/ExifTool/README +19 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +5 -4
- data/bin/lib/Image/ExifTool/Sony.pm +23 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4670 -4628
- data/bin/lib/Image/ExifTool/TagNames.pod +261 -89
- data/bin/lib/Image/ExifTool/Validate.pm +5 -5
- data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
- data/bin/lib/Image/ExifTool/Writer.pl +39 -17
- data/bin/lib/Image/ExifTool/XMP.pm +2 -2
- data/bin/lib/Image/ExifTool.pm +94 -33
- data/bin/lib/Image/ExifTool.pod +4 -4
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -9938,8 +9938,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
9938
9938
|
},
|
9939
9939
|
},
|
9940
9940
|
217 => { Name => 'MovieMultiSelector', %buttonsZ9, Unknown => 1}, # CSg2-h
|
9941
|
-
221 => { Name => 'MovieAFSpeed', ValueConv => '$val - 5', ValueConvInv => '$val +
|
9942
|
-
223 => { Name => 'MovieAFSpeedApply',
|
9941
|
+
221 => { Name => 'MovieAFSpeed', ValueConv => '$val - 5', ValueConvInv => '$val + 5' }, # CSg6-a
|
9942
|
+
223 => { Name => 'MovieAFSpeedApply', PrintConv => {0 => 'Always', 1 => 'Only During Recording'},}, # CSg6-b
|
9943
9943
|
225 => { # CSg7
|
9944
9944
|
Name => 'MovieAFTrackingSensitivity',
|
9945
9945
|
PrintConv => {
|
@@ -1512,7 +1512,7 @@ my %infoZSeries = (
|
|
1512
1512
|
6 => 'None',
|
1513
1513
|
},
|
1514
1514
|
}],
|
1515
|
-
0x0ee => { Name => 'MovieAFSpeed',
|
1515
|
+
0x0ee => { Name => 'MovieAFSpeed', ValueConv => '$val - 6', ValueConvInv => '$val + 6' }, # CSg4-a (Z7_2)
|
1516
1516
|
0x0ef => { # CSg4-b (Z7_2)
|
1517
1517
|
Name => 'MovieAFSpeedApply',
|
1518
1518
|
PrintConv => {
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
40
40
|
use Image::ExifTool::Exif;
|
41
41
|
use Image::ExifTool::APP12;
|
42
42
|
|
43
|
-
$VERSION = '2.
|
43
|
+
$VERSION = '2.80';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -116,6 +116,7 @@ my %olympusLensTypes = (
|
|
116
116
|
'0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
|
117
117
|
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
118
118
|
'0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
|
119
|
+
'0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
|
119
120
|
# Sigma lenses
|
120
121
|
'1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
|
121
122
|
'1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
|
@@ -3191,6 +3192,7 @@ my %indexInfo = (
|
|
3191
3192
|
}
|
3192
3193
|
],
|
3193
3194
|
# 0x31a Continuous AF parameters?
|
3195
|
+
# 0x31b ContinuousFocusMode? (ref forum78245)
|
3194
3196
|
0x328 => { #PH
|
3195
3197
|
Name => 'AFInfo',
|
3196
3198
|
SubDirectory => { TagTable => 'Image::ExifTool::Olympus::AFInfo' },
|
@@ -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.42';
|
62
62
|
|
63
63
|
sub CryptShutterCount($$);
|
64
64
|
sub PrintFilter($$$);
|
@@ -72,10 +72,7 @@ sub DecodeAFPoints($$$$;$);
|
|
72
72
|
Notes => q{
|
73
73
|
The first number gives the series of the lens, and the second identifies the
|
74
74
|
lens model. Note that newer series numbers may not always be properly
|
75
|
-
identified by cameras running older firmware versions.
|
76
|
-
been added to differentiate lenses which would otherwise have the same
|
77
|
-
LensType, and are used by the Composite LensID tag when attempting to
|
78
|
-
identify the specific lens model.
|
75
|
+
identified by cameras running older firmware versions.
|
79
76
|
},
|
80
77
|
OTHER => sub {
|
81
78
|
my ($val, $inv, $conv) = @_;
|
@@ -4081,6 +4078,7 @@ my %binaryDataAttrs = (
|
|
4081
4078
|
ValueConvInv => '$val=~s/\.\d+$//; $val',
|
4082
4079
|
PrintConv => \%pentaxLensTypes,
|
4083
4080
|
SeparateTable => 1,
|
4081
|
+
PrintInt => 1,
|
4084
4082
|
},
|
4085
4083
|
3 => { #PH
|
4086
4084
|
Name => 'ExtenderStatus',
|
@@ -4104,6 +4102,7 @@ my %binaryDataAttrs = (
|
|
4104
4102
|
ValueConvInv => '$val=~s/\.\d+$//; $val',
|
4105
4103
|
PrintConv => \%pentaxLensTypes,
|
4106
4104
|
SeparateTable => 1,
|
4105
|
+
PrintInt => 1,
|
4107
4106
|
},
|
4108
4107
|
3 => {
|
4109
4108
|
Name => 'LensData',
|
@@ -4139,6 +4138,7 @@ my %binaryDataAttrs = (
|
|
4139
4138
|
},
|
4140
4139
|
PrintConv => \%pentaxLensTypes,
|
4141
4140
|
SeparateTable => 1,
|
4141
|
+
PrintInt => 1,
|
4142
4142
|
},
|
4143
4143
|
4 => {
|
4144
4144
|
Name => 'LensData',
|
@@ -4174,6 +4174,7 @@ my %binaryDataAttrs = (
|
|
4174
4174
|
},
|
4175
4175
|
PrintConv => \%pentaxLensTypes,
|
4176
4176
|
SeparateTable => 1,
|
4177
|
+
PrintInt => 1,
|
4177
4178
|
},
|
4178
4179
|
13 => {
|
4179
4180
|
Name => 'LensData',
|
@@ -4209,6 +4210,7 @@ my %binaryDataAttrs = (
|
|
4209
4210
|
},
|
4210
4211
|
PrintConv => \%pentaxLensTypes,
|
4211
4212
|
SeparateTable => 1,
|
4213
|
+
PrintInt => 1,
|
4212
4214
|
},
|
4213
4215
|
12 => {
|
4214
4216
|
Name => 'LensData',
|
@@ -4245,6 +4247,7 @@ my %binaryDataAttrs = (
|
|
4245
4247
|
},
|
4246
4248
|
PrintConv => \%pentaxLensTypes,
|
4247
4249
|
SeparateTable => 1,
|
4250
|
+
PrintInt => 1,
|
4248
4251
|
},
|
4249
4252
|
15 => {
|
4250
4253
|
Name => 'LensData',
|
@@ -28,7 +28,7 @@ use strict;
|
|
28
28
|
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
|
31
|
-
$VERSION = '1.
|
31
|
+
$VERSION = '1.69';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
@@ -74,7 +74,7 @@ my %thumbnailInfo = (
|
|
74
74
|
my @tags = qw{ImageWidth ImageHeight FileType};
|
75
75
|
my $info = $et->ImageInfo(\$val, @tags);
|
76
76
|
my ($w, $h, $type) = @$info{@tags};
|
77
|
-
$w and $h and $type eq 'JPEG' or warn("Not a valid JPEG image\n"), return undef;
|
77
|
+
$w and $h and $type and $type eq 'JPEG' or warn("Not a valid JPEG image\n"), return undef;
|
78
78
|
my $wbytes = int(($w * 24 + 31) / 32) * 4;
|
79
79
|
return pack('N6n2', 1, $w, $h, $wbytes, $wbytes * $h, length($val), 24, 1) . $val;
|
80
80
|
},
|
@@ -571,6 +571,13 @@ my %unicodeString = (
|
|
571
571
|
ValueConv => '100 * $val / 255',
|
572
572
|
PrintConv => 'sprintf("%d%%",$val)',
|
573
573
|
},
|
574
|
+
_xvis => {
|
575
|
+
Name => 'LayerVisible',
|
576
|
+
Format => 'int8u',
|
577
|
+
List => 1,
|
578
|
+
ValueConv => '$val & 0x02',
|
579
|
+
PrintConv => { 0x02 => 'No', 0x00 => 'Yes' },
|
580
|
+
},
|
574
581
|
# tags extracted from additional layer information (tag ID's are real)
|
575
582
|
# - must be able to accommodate a blank entry to preserve the list ordering
|
576
583
|
luni => {
|
@@ -589,6 +596,16 @@ my %unicodeString = (
|
|
589
596
|
List => 1,
|
590
597
|
Unknown => 1,
|
591
598
|
},
|
599
|
+
lclr => {
|
600
|
+
Name => 'LayerColors',
|
601
|
+
Format => 'int16u',
|
602
|
+
Count => 1,
|
603
|
+
List => 1,
|
604
|
+
PrintConv => {
|
605
|
+
0=>'None', 1=>'Red', 2=>'Orange', 3=>'Yellow',
|
606
|
+
4=>'Green', 5=>'Blue', 6=>'Violet', 7=>'Gray',
|
607
|
+
},
|
608
|
+
},
|
592
609
|
shmd => { # layer metadata (undocumented structure)
|
593
610
|
# (for now, only extract layerTime. May also contain "layerXMP" --
|
594
611
|
# it would be nice to decode this but I need a sample)
|
@@ -603,6 +620,13 @@ my %unicodeString = (
|
|
603
620
|
ValueConv => 'length $val ? ConvertUnixTime($val,1) : ""',
|
604
621
|
PrintConv => 'length $val ? $self->ConvertDateTime($val) : ""',
|
605
622
|
},
|
623
|
+
lsct => {
|
624
|
+
Name => 'LayerSections',
|
625
|
+
Format => 'int32u',
|
626
|
+
Count => 1,
|
627
|
+
List => 1,
|
628
|
+
PrintConv => { 0 => 'Layer', 1 => 'Folder (open)', 2 => 'Folder (closed)', 3 => 'Divider' },
|
629
|
+
},
|
606
630
|
);
|
607
631
|
|
608
632
|
# tags extracted from ImageSourceData found in TIFF images (ref PH)
|
@@ -682,7 +706,7 @@ sub ProcessLayersAndMask($$$)
|
|
682
706
|
local $_;
|
683
707
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
684
708
|
my $raf = $$dirInfo{RAF};
|
685
|
-
my $fileType = $$et{
|
709
|
+
my $fileType = $$et{FileType};
|
686
710
|
my $data;
|
687
711
|
|
688
712
|
return 0 unless $fileType eq 'PSD' or $fileType eq 'PSB'; # (no layer section in CS1 files)
|
@@ -748,17 +772,16 @@ sub ProcessLayers($$$)
|
|
748
772
|
my $pos = 0;
|
749
773
|
return 0 if $dirLen < 2;
|
750
774
|
$raf->Read($buff, 2) == 2 or return 0;
|
751
|
-
my $num = Get16s(\$buff, 0);
|
775
|
+
my $num = Get16s(\$buff, 0); # number of layers
|
752
776
|
$num = -$num if $num < 0; # (first channel is transparency data if negative)
|
753
777
|
$et->VerboseDir('Layers', $num, $dirLen);
|
754
778
|
$et->HandleTag($tagTablePtr, '_xcnt', $num, Start => $pos, Size => 2, %dinfo); # LayerCount
|
755
779
|
my $oldIndent = $$et{INDENT};
|
756
780
|
$$et{INDENT} .= '| ';
|
757
|
-
|
758
781
|
$pos += 2;
|
759
782
|
my $psb = $$et{IsPSB}; # is PSB format?
|
760
783
|
my $psiz = $psb ? 8 : 4;
|
761
|
-
for ($i=0; $i<$num; ++$i) {
|
784
|
+
for ($i=0; $i<$num; ++$i) { # process each layer
|
762
785
|
$et->VPrint(0, $oldIndent.'+ [Layer '.($i+1)." of $num]\n");
|
763
786
|
last if $pos + 18 > $dirLen;
|
764
787
|
$raf->Read($buff, 18) == 18 or last;
|
@@ -776,6 +799,7 @@ sub ProcessLayers($$$)
|
|
776
799
|
$sig =~ /^(8BIM|MIB8)$/ or last; # verify signature
|
777
800
|
$et->HandleTag($tagTablePtr, '_xbnd', undef, Start => 4, Size => 4, %dinfo);
|
778
801
|
$et->HandleTag($tagTablePtr, '_xopc', undef, Start => 8, Size => 1, %dinfo);
|
802
|
+
$et->HandleTag($tagTablePtr, '_xvis', undef, Start =>10, Size => 1, %dinfo);
|
779
803
|
my $nxt = $pos + 16 + Get32u(\$buff, 12);
|
780
804
|
$n = Get32u(\$buff, 16); # get size of layer mask data
|
781
805
|
$pos += 20 + $n; # skip layer mask data
|
@@ -823,7 +847,7 @@ sub ProcessLayers($$$)
|
|
823
847
|
$raf->Read($buff, $n) == $n or last;
|
824
848
|
$dinfo{DataPos} = $pos;
|
825
849
|
while ($count{$tag} < $i) {
|
826
|
-
$et->HandleTag($tagTablePtr, $tag, '');
|
850
|
+
$et->HandleTag($tagTablePtr, $tag, $tag eq 'lsct' ? 0 : '');
|
827
851
|
++$count{$tag};
|
828
852
|
}
|
829
853
|
$et->HandleTag($tagTablePtr, $tag, undef, Start => 0, Size => $n, %dinfo);
|
@@ -840,6 +864,13 @@ sub ProcessLayers($$$)
|
|
840
864
|
}
|
841
865
|
$pos = $nxt;
|
842
866
|
}
|
867
|
+
# pad lists if necessary to have an entry for each layer
|
868
|
+
foreach (sort keys %count) {
|
869
|
+
while ($count{$_} < $num) {
|
870
|
+
$et->HandleTag($tagTablePtr, $_, $_ eq 'lsct' ? 0 : '');
|
871
|
+
++$count{$_};
|
872
|
+
}
|
873
|
+
}
|
843
874
|
$$et{INDENT} = $oldIndent;
|
844
875
|
return 1;
|
845
876
|
}
|
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
47
47
|
use Image::ExifTool::Exif;
|
48
48
|
use Image::ExifTool::GPS;
|
49
49
|
|
50
|
-
$VERSION = '2.
|
50
|
+
$VERSION = '2.84';
|
51
51
|
|
52
52
|
sub ProcessMOV($$;$);
|
53
53
|
sub ProcessKeys($$$);
|
@@ -419,6 +419,18 @@ my %channelLabel = (
|
|
419
419
|
0x1ffff => 'Discrete_65535',
|
420
420
|
);
|
421
421
|
|
422
|
+
my %qtFlags = ( #12
|
423
|
+
0 => 'undef', 22 => 'unsigned int', 71 => 'float[2] size',
|
424
|
+
1 => 'UTF-8', 23 => 'float', 72 => 'float[4] rect',
|
425
|
+
2 => 'UTF-16', 24 => 'double', 74 => 'int64s',
|
426
|
+
3 => 'ShiftJIS', 27 => 'BMP', 75 => 'int8u',
|
427
|
+
4 => 'UTF-8 sort', 28 => 'QT atom', 76 => 'int16u',
|
428
|
+
5 => 'UTF-16 sort', 65 => 'int8s', 77 => 'int32u',
|
429
|
+
13 => 'JPEG', 66 => 'int16s', 78 => 'int64u',
|
430
|
+
14 => 'PNG', 67 => 'int32s', 79 => 'double[3][3]',
|
431
|
+
21 => 'signed int', 70 => 'float[2] point',
|
432
|
+
);
|
433
|
+
|
422
434
|
# properties which don't get inherited from the parent
|
423
435
|
my %dontInherit = (
|
424
436
|
ispe => 1, # size of parent may be different
|
@@ -1159,7 +1171,10 @@ my %eeBox2 = (
|
|
1159
1171
|
},
|
1160
1172
|
{
|
1161
1173
|
Name => 'GarminGPS',
|
1162
|
-
Condition =>
|
1174
|
+
Condition => q{
|
1175
|
+
$$valPt=~/^\x9b\x63\x0f\x8d\x63\x74\x40\xec\x82\x04\xbc\x5f\xf5\x09\x17\x28/ and
|
1176
|
+
$$self{OPTIONS}{ExtractEmbedded}
|
1177
|
+
},
|
1163
1178
|
SubDirectory => {
|
1164
1179
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
1165
1180
|
ProcessProc => \&ProcessGarminGPS,
|
@@ -1961,7 +1976,7 @@ my %eeBox2 = (
|
|
1961
1976
|
Name => 'SanyoMOV',
|
1962
1977
|
Condition => q{
|
1963
1978
|
$$valPt =~ /^SANYO DIGITAL CAMERA\0/ and
|
1964
|
-
|
1979
|
+
$$self{FileType} eq "MOV"
|
1965
1980
|
},
|
1966
1981
|
SubDirectory => {
|
1967
1982
|
TagTable => 'Image::ExifTool::Sanyo::MOV',
|
@@ -1972,7 +1987,7 @@ my %eeBox2 = (
|
|
1972
1987
|
Name => 'SanyoMP4',
|
1973
1988
|
Condition => q{
|
1974
1989
|
$$valPt =~ /^SANYO DIGITAL CAMERA\0/ and
|
1975
|
-
|
1990
|
+
$$self{FileType} eq "MP4"
|
1976
1991
|
},
|
1977
1992
|
SubDirectory => {
|
1978
1993
|
TagTable => 'Image::ExifTool::Sanyo::MP4',
|
@@ -7146,7 +7161,7 @@ my %eeBox2 = (
|
|
7146
7161
|
$$self{AudioFormat} = $val;
|
7147
7162
|
return undef unless $val =~ /^[\w ]{4}$/i;
|
7148
7163
|
# check for protected audio format
|
7149
|
-
$self->OverrideFileType('M4P') if $val eq 'drms' and $$self{
|
7164
|
+
$self->OverrideFileType('M4P') if $val eq 'drms' and $$self{FileType} eq 'M4A';
|
7150
7165
|
return $val;
|
7151
7166
|
},
|
7152
7167
|
# see this link for print conversions (not complete):
|
@@ -9656,6 +9671,7 @@ ItemID: foreach $id (keys %$items) {
|
|
9656
9671
|
}
|
9657
9672
|
}
|
9658
9673
|
$langInfo or $langInfo = $tagInfo;
|
9674
|
+
my $str = $qtFlags{$flags} ? " ($qtFlags{$flags})" : '';
|
9659
9675
|
$et->VerboseInfo($tag, $langInfo,
|
9660
9676
|
Value => ref $value ? $$value : $value,
|
9661
9677
|
DataPt => \$val,
|
@@ -9664,7 +9680,7 @@ ItemID: foreach $id (keys %$items) {
|
|
9664
9680
|
Size => $len,
|
9665
9681
|
Format => $format,
|
9666
9682
|
Index => $index,
|
9667
|
-
Extra => sprintf(", Type='${type}', Flags=0x%x, Lang=0x%.4x",$flags,$lang),
|
9683
|
+
Extra => sprintf(", Type='${type}', Flags=0x%x%s, Lang=0x%.4x",$flags,$str,$lang),
|
9668
9684
|
) if $verbose;
|
9669
9685
|
# use "Keys" in path instead of ItemList if this was defined by a Keys tag
|
9670
9686
|
my $isKey = $$tagInfo{Groups} && $$tagInfo{Groups}{1} && $$tagInfo{Groups}{1} eq 'Keys';
|
@@ -9793,7 +9809,7 @@ ItemID: foreach $id (keys %$items) {
|
|
9793
9809
|
++$index if defined $index;
|
9794
9810
|
}
|
9795
9811
|
# tweak file type based on track content ("iso*" and "dash" ftyp only)
|
9796
|
-
if ($topLevel and $$et{
|
9812
|
+
if ($topLevel and $$et{FileType} and $$et{FileType} eq 'MP4' and
|
9797
9813
|
$$et{save_ftyp} and $$et{HasHandler} and $$et{save_ftyp} =~ /^(iso|dash)/ and
|
9798
9814
|
$$et{HasHandler}{soun} and not $$et{HasHandler}{vide})
|
9799
9815
|
{
|
@@ -1488,7 +1488,7 @@ sub ProcessFreeGPS($$$)
|
|
1488
1488
|
# Kenwood dashcam sometimes stores absolute year and local time
|
1489
1489
|
# (but sometimes year since 2000 and UTC time in same video!)
|
1490
1490
|
require Time::Local;
|
1491
|
-
my $time = Image::ExifTool::TimeLocal($sec,$min,$hr,$day,$mon-1,$yr
|
1491
|
+
my $time = Image::ExifTool::TimeLocal($sec,$min,$hr,$day,$mon-1,$yr);
|
1492
1492
|
($sec,$min,$hr,$day,$mon,$yr) = gmtime($time);
|
1493
1493
|
$yr += 1900;
|
1494
1494
|
++$mon;
|
@@ -2924,6 +2924,7 @@ sub ProcessGarminGPS($$$)
|
|
2924
2924
|
my $epoch = (66 * 365 + 17) * 24 * 3600; # time is relative to Jan 1, 1904
|
2925
2925
|
my $scl = 180 / (32768 * 65536); # scaling factor for lat/lon
|
2926
2926
|
$et->VerboseDir('GarminGPS');
|
2927
|
+
$$et{SET_GROUP1} = 'Garmin';
|
2927
2928
|
while ($pos + 20 <= $dataLen) {
|
2928
2929
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2929
2930
|
my $time = Image::ExifTool::ConvertUnixTime(Get32u($dataPt, $pos) - $epoch) . 'Z';
|
@@ -2938,6 +2939,7 @@ sub ProcessGarminGPS($$$)
|
|
2938
2939
|
$pos += 20;
|
2939
2940
|
}
|
2940
2941
|
delete $$et{DOC_NUM};
|
2942
|
+
delete $$et{SET_GROUP1};
|
2941
2943
|
return 1;
|
2942
2944
|
}
|
2943
2945
|
|
@@ -249,6 +249,13 @@ key:
|
|
249
249
|
within this atom. Currently used only for Canon CNTH atom,
|
250
250
|
which contains garbage after the first contained atom.
|
251
251
|
|
252
|
+
NIKON_OFFSETS [Nikon Encrypted tables only] Pointer to int32u NumberOffsets
|
253
|
+
for offset-type encrypted Nikon directories. When set,
|
254
|
+
directory and decryption lengths are calculated automatically.
|
255
|
+
|
256
|
+
ALLOW_REPROCESS Flag to allow reprocessing of another directory at this
|
257
|
+
same location in the file, bypassing recursion avoidance test.
|
258
|
+
|
252
259
|
DATAMEMBER : BinaryData tables only. A reference to a list of sorted tag ID's
|
253
260
|
which must be extracted as data members when writing. Must also list "var_"
|
254
261
|
format tags and tags with Hook so offsets are properly calculated if the table
|
@@ -404,6 +411,10 @@ numerical, and generated automatically otherwise.
|
|
404
411
|
|
405
412
|
'IsComposite' - flag set for Composite tags
|
406
413
|
|
414
|
+
'IsImageData' - flag set if this is an image data offset to
|
415
|
+
be included in ImageDataMD5 calculation. Must have an
|
416
|
+
OffsetPair entry which is the ID of the corresponding size.
|
417
|
+
|
407
418
|
'IsOffset' - flag set if the tag represents an offset to some
|
408
419
|
data, and causes value will be adjusted to an absolute file
|
409
420
|
offset. If set to 2, the offset base of the parent directory
|
@@ -465,6 +476,10 @@ numerical, and generated automatically otherwise.
|
|
465
476
|
documentation, padded to the number of digits given by the
|
466
477
|
PrintHex value.
|
467
478
|
|
479
|
+
'PrintInt' - remove decimal part of tag ID in HTML tag name
|
480
|
+
documentation. (To avoid confusing ExifTool users because
|
481
|
+
the LensType decimal numbers are for internal use only.)
|
482
|
+
|
468
483
|
'PrintSort' - causes PrintConv values to be sorted by value
|
469
484
|
rather than key in the HTML tag name documentation.
|
470
485
|
|
@@ -713,7 +728,7 @@ numerical, and generated automatically otherwise.
|
|
713
728
|
BitShift are applied before evaluating RawConv.
|
714
729
|
|
715
730
|
BitShift : [Mask tags only] Bit shift for Mask-ed values. If not
|
716
|
-
specified, set to the number of trailing bits in
|
731
|
+
specified, set to the number of trailing zero bits in Mask.
|
717
732
|
When reading, the value is shifted right by this number of
|
718
733
|
bits after the Mask is applied.
|
719
734
|
|
@@ -1003,7 +1018,9 @@ numerical, and generated automatically otherwise.
|
|
1003
1018
|
current Base. This is a Perl expression which may use
|
1004
1019
|
$valuePtr to represent the location of the tag value in the
|
1005
1020
|
file, or $val for the value itself. If not specified, a Start
|
1006
|
-
of '$valuePtr' is assumed.
|
1021
|
+
of '$valuePtr' is assumed. Subdirectories in BinaryData may
|
1022
|
+
also use $dirStart to represent the offset of the current
|
1023
|
+
directory start relative to the start of the data block.
|
1007
1024
|
|
1008
1025
|
OffsetPt : [EXIF directories only] If specified, this is a Perl
|
1009
1026
|
expression that gives the position of a 32-bit word in the
|
@@ -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.62';
|
34
34
|
|
35
35
|
sub ConvertTimecode($);
|
36
36
|
sub ProcessSGLT($$$);
|
@@ -1522,7 +1522,7 @@ my %code2charset = (
|
|
1522
1522
|
},
|
1523
1523
|
# (can't calculate duration like this for compressed audio types)
|
1524
1524
|
RawConv => q{
|
1525
|
-
return undef if $$self{
|
1525
|
+
return undef if $$self{FileType} =~ /^(LA|OFR|PAC|WV)$/;
|
1526
1526
|
return(($val[0] and not ($val[2] or $val[3])) ? $val[1] / $val[0] : undef);
|
1527
1527
|
},
|
1528
1528
|
PrintConv => 'ConvertDuration($val)',
|
@@ -1996,7 +1996,7 @@ sub ProcessRIFF($$)
|
|
1996
1996
|
$$raf{NoBuffer} = 1 if $et->Options('FastScan'); # disable buffering in FastScan mode
|
1997
1997
|
$mime = $riffMimeType{$type} if $type;
|
1998
1998
|
$et->SetFileType($type, $mime);
|
1999
|
-
$$et{VALUE}{FileType} .= ' (RF64)' if $rf64;
|
1999
|
+
$$et{VALUE}{FileType} .= ' (RF64)' if $rf64 and $$et{VALUE}{FileType};
|
2000
2000
|
$$et{RIFFStreamType} = ''; # initialize stream type
|
2001
2001
|
$$et{RIFFStreamCodec} = []; # initialize codec array
|
2002
2002
|
SetByteOrder('II');
|
@@ -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.06';
|
18
18
|
|
19
19
|
# currently support this version Rawzor images
|
20
20
|
my $implementedRawzorVersion = 199; # (up to version 1.99)
|
@@ -138,7 +138,7 @@ sub ProcessRWZ($$)
|
|
138
138
|
}
|
139
139
|
# set OriginalFileType from FileType of original file
|
140
140
|
# then change FileType and MIMEType to indicate a Rawzor image
|
141
|
-
my $origFileType = $$et{
|
141
|
+
my $origFileType = $$et{FileType};
|
142
142
|
if ($origFileType) {
|
143
143
|
$et->HandleTag($tagTablePtr, OriginalFileType => $origFileType);
|
144
144
|
$et->OverrideFileType('RWZ');
|
@@ -19,15 +19,13 @@ use strict;
|
|
19
19
|
use vars qw($VERSION %sigmaLensTypes);
|
20
20
|
use Image::ExifTool::Exif;
|
21
21
|
|
22
|
-
$VERSION = '1.
|
22
|
+
$VERSION = '1.34';
|
23
23
|
|
24
24
|
# sigma LensType lookup (ref IB)
|
25
25
|
%sigmaLensTypes = (
|
26
26
|
Notes => q{
|
27
27
|
Sigma LensType values are hexadecimal numbers stored as a string (without
|
28
|
-
the leading "0x").
|
29
|
-
which would otherwise have the same LensType, and are used by the Composite
|
30
|
-
LensID tag when attempting to identify the specific lens model.
|
28
|
+
the leading "0x").
|
31
29
|
},
|
32
30
|
# 0x0 => 'Sigma 50mm F2.8 EX Macro', (0x0 used for other lenses too)
|
33
31
|
# 0x8 - 18-125mm LENSARANGE@18mm=22-4
|
@@ -255,6 +253,7 @@ $VERSION = '1.32';
|
|
255
253
|
0x6023 => 'Sigma 20mm F2 DG DN | C', #IB
|
256
254
|
0x6025 => 'Sigma 20mm F1.4 DG DN | A', #IB
|
257
255
|
0x6026 => 'Sigma 24mm F1.4 DG DN | A', #IB
|
256
|
+
0x602c => "Sigma 50mm F1.4 DG DN | A (2023)", #IB
|
258
257
|
0x8005 => 'Sigma 35mm F1.4 DG HSM | A', #PH (012)
|
259
258
|
0x8009 => 'Sigma 18-35mm F1.8 DC HSM | A', #PH
|
260
259
|
0x8900 => 'Sigma 70-300mm F4-5.6 DG OS', #PH (SD15)
|
@@ -556,6 +555,7 @@ $VERSION = '1.32';
|
|
556
555
|
SeparateTable => 'LensType',
|
557
556
|
PrintHex => 1,
|
558
557
|
PrintConv => \%sigmaLensTypes,
|
558
|
+
PrintInt => 1,
|
559
559
|
},{ #PH
|
560
560
|
Name => 'LensType',
|
561
561
|
Condition => '$$self{MakerNoteSigmaVer} >= 3',
|
@@ -564,6 +564,7 @@ $VERSION = '1.32';
|
|
564
564
|
SeparateTable => 'LensType',
|
565
565
|
PrintHex => 1,
|
566
566
|
PrintConv => \%sigmaLensTypes,
|
567
|
+
PrintInt => 1,
|
567
568
|
}],
|
568
569
|
0x002a => { #PH
|
569
570
|
Name => 'LensFocalRange',
|
@@ -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.58';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -2045,6 +2045,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
2045
2045
|
369 => 'DSC-RX100M5A', #JR
|
2046
2046
|
371 => 'ILCE-6400', #IB
|
2047
2047
|
372 => 'DSC-RX0M2', #JR
|
2048
|
+
373 => 'DSC-HX95', #github191
|
2048
2049
|
374 => 'DSC-RX100M7', #IB
|
2049
2050
|
375 => 'ILCE-7RM4', #IB
|
2050
2051
|
376 => 'ILCE-9M2', #JR
|
@@ -2161,6 +2162,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
2161
2162
|
# set to 65535 for E-mount lenses (values 0x80xx)
|
2162
2163
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 65535 : int($val)',
|
2163
2164
|
PrintConv => \%sonyLensTypes,
|
2165
|
+
PrintInt => 1,
|
2164
2166
|
},
|
2165
2167
|
0xb028 => { #2
|
2166
2168
|
# (used by the DSLR-A100)
|
@@ -5570,6 +5572,7 @@ my %faceInfo = (
|
|
5570
5572
|
Format => 'int16u',
|
5571
5573
|
SeparateTable => 'LensType2',
|
5572
5574
|
PrintConv => \%sonyLensTypes2,
|
5575
|
+
PrintInt => 1,
|
5573
5576
|
},
|
5574
5577
|
0x400 => { #JR
|
5575
5578
|
Name => 'ImageNumber',
|
@@ -6603,6 +6606,7 @@ my %isoSetting2010 = (
|
|
6603
6606
|
Format => 'int16u',
|
6604
6607
|
SeparateTable => 'LensType2',
|
6605
6608
|
PrintConv => \%sonyLensTypes2,
|
6609
|
+
PrintInt => 1,
|
6606
6610
|
},
|
6607
6611
|
0x1896 => {
|
6608
6612
|
Name => 'LensType',
|
@@ -6612,6 +6616,7 @@ my %isoSetting2010 = (
|
|
6612
6616
|
SeparateTable => 1,
|
6613
6617
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
6614
6618
|
PrintConv => \%sonyLensTypes,
|
6619
|
+
PrintInt => 1,
|
6615
6620
|
},
|
6616
6621
|
0x1898 => {
|
6617
6622
|
Name => 'DistortionCorrParamsPresent',
|
@@ -6809,6 +6814,7 @@ my %isoSetting2010 = (
|
|
6809
6814
|
Format => 'int16u',
|
6810
6815
|
SeparateTable => 'LensType2',
|
6811
6816
|
PrintConv => \%sonyLensTypes2,
|
6817
|
+
PrintInt => 1,
|
6812
6818
|
},
|
6813
6819
|
0x18c2 => {
|
6814
6820
|
Name => 'LensType',
|
@@ -6818,6 +6824,7 @@ my %isoSetting2010 = (
|
|
6818
6824
|
SeparateTable => 1,
|
6819
6825
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
6820
6826
|
PrintConv => \%sonyLensTypes,
|
6827
|
+
PrintInt => 1,
|
6821
6828
|
},
|
6822
6829
|
0x18c4 => {
|
6823
6830
|
Name => 'DistortionCorrParamsPresent',
|
@@ -6946,6 +6953,7 @@ my %isoSetting2010 = (
|
|
6946
6953
|
Format => 'int16u',
|
6947
6954
|
SeparateTable => 'LensType2',
|
6948
6955
|
PrintConv => \%sonyLensTypes2,
|
6956
|
+
PrintInt => 1,
|
6949
6957
|
},
|
6950
6958
|
0x18f2 => {
|
6951
6959
|
Name => 'LensType',
|
@@ -6955,6 +6963,7 @@ my %isoSetting2010 = (
|
|
6955
6963
|
SeparateTable => 1,
|
6956
6964
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
6957
6965
|
PrintConv => \%sonyLensTypes,
|
6966
|
+
PrintInt => 1,
|
6958
6967
|
},
|
6959
6968
|
0x18f4 => {
|
6960
6969
|
Name => 'DistortionCorrParamsPresent',
|
@@ -7075,6 +7084,7 @@ my %isoSetting2010 = (
|
|
7075
7084
|
Format => 'int16u',
|
7076
7085
|
SeparateTable => 'LensType2',
|
7077
7086
|
PrintConv => \%sonyLensTypes2,
|
7087
|
+
PrintInt => 1,
|
7078
7088
|
},
|
7079
7089
|
0x17f6 => {
|
7080
7090
|
Name => 'LensType',
|
@@ -7084,6 +7094,7 @@ my %isoSetting2010 = (
|
|
7084
7094
|
SeparateTable => 1,
|
7085
7095
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
7086
7096
|
PrintConv => \%sonyLensTypes,
|
7097
|
+
PrintInt => 1,
|
7087
7098
|
},
|
7088
7099
|
0x17f8 => {
|
7089
7100
|
Name => 'DistortionCorrParamsPresent',
|
@@ -7439,6 +7450,7 @@ my %isoSetting2010 = (
|
|
7439
7450
|
Format => 'int16u',
|
7440
7451
|
SeparateTable => 'LensType2',
|
7441
7452
|
PrintConv => \%sonyLensTypes2,
|
7453
|
+
PrintInt => 1,
|
7442
7454
|
},
|
7443
7455
|
0x0109 => {
|
7444
7456
|
Name => 'LensType',
|
@@ -7450,6 +7462,7 @@ my %isoSetting2010 = (
|
|
7450
7462
|
# has a value of 0 for E-mount lenses (values 0x80xx)
|
7451
7463
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
7452
7464
|
PrintConv => \%sonyLensTypes,
|
7465
|
+
PrintInt => 1,
|
7453
7466
|
},
|
7454
7467
|
0x010b => {
|
7455
7468
|
Name => 'DistortionCorrParamsPresent',
|
@@ -7726,6 +7739,7 @@ my %isoSetting2010 = (
|
|
7726
7739
|
Format => 'int16u',
|
7727
7740
|
SeparateTable => 'LensType2',
|
7728
7741
|
PrintConv => \%sonyLensTypes2,
|
7742
|
+
PrintInt => 1,
|
7729
7743
|
},
|
7730
7744
|
0x0109 => {
|
7731
7745
|
Name => 'LensType',
|
@@ -7737,6 +7751,7 @@ my %isoSetting2010 = (
|
|
7737
7751
|
# has a value of 0 for E-mount lenses (values 0x80xx)
|
7738
7752
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
7739
7753
|
PrintConv => \%sonyLensTypes,
|
7754
|
+
PrintInt => 1,
|
7740
7755
|
},
|
7741
7756
|
0x010b => {
|
7742
7757
|
Name => 'DistortionCorrParamsPresent',
|
@@ -8535,6 +8550,7 @@ my %isoSetting2010 = (
|
|
8535
8550
|
Notes => 'E-mount lenses',
|
8536
8551
|
SeparateTable => 'LensType2',
|
8537
8552
|
PrintConv => \%sonyLensTypes2,
|
8553
|
+
PrintInt => 1,
|
8538
8554
|
},
|
8539
8555
|
0x0608 => {
|
8540
8556
|
Name => 'LensType',
|
@@ -8543,6 +8559,7 @@ my %isoSetting2010 = (
|
|
8543
8559
|
Notes => 'A-mount lenses on SLT and NEX',
|
8544
8560
|
SeparateTable => 1,
|
8545
8561
|
PrintConv => \%sonyLensTypes,
|
8562
|
+
PrintInt => 1,
|
8546
8563
|
},
|
8547
8564
|
0x064a => {
|
8548
8565
|
Name => 'VignettingCorrParams',
|
@@ -8713,6 +8730,7 @@ my %isoSetting2010 = (
|
|
8713
8730
|
Notes => 'E-mount lenses',
|
8714
8731
|
SeparateTable => 'LensType2',
|
8715
8732
|
PrintConv => \%sonyLensTypes2,
|
8733
|
+
PrintInt => 1,
|
8716
8734
|
},
|
8717
8735
|
0x0062 => {
|
8718
8736
|
Name => 'LensType',
|
@@ -8721,6 +8739,7 @@ my %isoSetting2010 = (
|
|
8721
8739
|
Notes => 'A-mount lenses on SLT and NEX',
|
8722
8740
|
SeparateTable => 1,
|
8723
8741
|
PrintConv => \%sonyLensTypes,
|
8742
|
+
PrintInt => 1,
|
8724
8743
|
},
|
8725
8744
|
0x0064 => {
|
8726
8745
|
Name => 'DistortionCorrParams',
|
@@ -8937,6 +8956,7 @@ my %isoSetting2010 = (
|
|
8937
8956
|
Format => 'int16u',
|
8938
8957
|
SeparateTable => 'LensType2',
|
8939
8958
|
PrintConv => \%sonyLensTypes2,
|
8959
|
+
PrintInt => 1,
|
8940
8960
|
},
|
8941
8961
|
0x000b => {
|
8942
8962
|
Name => 'CameraE-mountVersion',
|
@@ -9622,6 +9642,7 @@ my %isoSetting2010 = (
|
|
9622
9642
|
Format => 'int16u',
|
9623
9643
|
SeparateTable => 'LensType2',
|
9624
9644
|
PrintConv => \%sonyLensTypes2,
|
9645
|
+
PrintInt => 1,
|
9625
9646
|
},
|
9626
9647
|
0x004d => {
|
9627
9648
|
Name => 'LensType',
|
@@ -9631,6 +9652,7 @@ my %isoSetting2010 = (
|
|
9631
9652
|
SeparateTable => 1,
|
9632
9653
|
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
9633
9654
|
PrintConv => \%sonyLensTypes,
|
9655
|
+
PrintInt => 1,
|
9634
9656
|
},
|
9635
9657
|
0x004f => {
|
9636
9658
|
Name => 'DistortionCorrParams',
|