exiftool_vendored 12.56.0 → 12.57.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 +21 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +74 -30
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -0
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +665 -845
- 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/Photoshop.pm +36 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -0
- data/bin/lib/Image/ExifTool/README +11 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4654 -4628
- data/bin/lib/Image/ExifTool/TagNames.pod +194 -86
- data/bin/lib/Image/ExifTool/Writer.pl +36 -16
- data/bin/lib/Image/ExifTool.pm +38 -22
- 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' },
|
@@ -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.68';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
@@ -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)
|
@@ -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
|
}
|
@@ -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,
|
@@ -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';
|
@@ -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
|
@@ -713,7 +720,7 @@ numerical, and generated automatically otherwise.
|
|
713
720
|
BitShift are applied before evaluating RawConv.
|
714
721
|
|
715
722
|
BitShift : [Mask tags only] Bit shift for Mask-ed values. If not
|
716
|
-
specified, set to the number of trailing bits in
|
723
|
+
specified, set to the number of trailing zero bits in Mask.
|
717
724
|
When reading, the value is shifted right by this number of
|
718
725
|
bits after the Mask is applied.
|
719
726
|
|
@@ -1003,7 +1010,9 @@ numerical, and generated automatically otherwise.
|
|
1003
1010
|
current Base. This is a Perl expression which may use
|
1004
1011
|
$valuePtr to represent the location of the tag value in the
|
1005
1012
|
file, or $val for the value itself. If not specified, a Start
|
1006
|
-
of '$valuePtr' is assumed.
|
1013
|
+
of '$valuePtr' is assumed. Subdirectories in BinaryData may
|
1014
|
+
also use $dirStart to represent the offset of the current
|
1015
|
+
directory start relative to the start of the data block.
|
1007
1016
|
|
1008
1017
|
OffsetPt : [EXIF directories only] If specified, this is a Perl
|
1009
1018
|
expression that gives the position of a 32-bit word in the
|
@@ -19,7 +19,7 @@ use strict;
|
|
19
19
|
use vars qw($VERSION %sigmaLensTypes);
|
20
20
|
use Image::ExifTool::Exif;
|
21
21
|
|
22
|
-
$VERSION = '1.
|
22
|
+
$VERSION = '1.33';
|
23
23
|
|
24
24
|
# sigma LensType lookup (ref IB)
|
25
25
|
%sigmaLensTypes = (
|
@@ -255,6 +255,7 @@ $VERSION = '1.32';
|
|
255
255
|
0x6023 => 'Sigma 20mm F2 DG DN | C', #IB
|
256
256
|
0x6025 => 'Sigma 20mm F1.4 DG DN | A', #IB
|
257
257
|
0x6026 => 'Sigma 24mm F1.4 DG DN | A', #IB
|
258
|
+
0x602c => "Sigma 50mm F1.4 DG DN | A (2023)", #IB
|
258
259
|
0x8005 => 'Sigma 35mm F1.4 DG HSM | A', #PH (012)
|
259
260
|
0x8009 => 'Sigma 18-35mm F1.8 DC HSM | A', #PH
|
260
261
|
0x8900 => 'Sigma 70-300mm F4-5.6 DG OS', #PH (SD15)
|