exiftool_vendored 12.56.0 → 12.58.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 +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',
|