exiftool_vendored 12.56.0 → 12.57.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 +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)
|