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.
@@ -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 + 6' }, # CSg6-a
9942
- 223 => { Name => 'MovieAFSpeedApply', rintConv => {0 => 'Always', 1 => 'Only During Recording'},}, # CSg6-b
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', ValueConv => '$val - 6', ValueConvInv => '$val + 6' }, # CSg4-a (Z7_2)
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.79';
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.67';
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 => '$$valPt=~/^\x9b\x63\x0f\x8d\x63\x74\x40\xec\x82\x04\xbc\x5f\xf5\x09\x17\x28/ and $$self{OPTIONS}{ExtractEmbedded}',
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 the Mask.
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.32';
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)