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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +35 -2
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/config_files/rotate_regions.config +1 -1
  7. data/bin/exiftool +95 -47
  8. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  9. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +19 -15
  11. data/bin/lib/Image/ExifTool/Canon.pm +26 -6
  12. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  13. data/bin/lib/Image/ExifTool/Exif.pm +24 -5
  14. data/bin/lib/Image/ExifTool/FlashPix.pm +6 -2
  15. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  16. data/bin/lib/Image/ExifTool/GPS.pm +7 -2
  17. data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
  18. data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
  19. data/bin/lib/Image/ExifTool/LNK.pm +5 -4
  20. data/bin/lib/Image/ExifTool/MIE.pm +3 -3
  21. data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
  22. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  23. data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
  24. data/bin/lib/Image/ExifTool/Nikon.pm +998 -903
  25. data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
  26. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  27. data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
  28. data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
  29. data/bin/lib/Image/ExifTool/Photoshop.pm +38 -7
  30. data/bin/lib/Image/ExifTool/QuickTime.pm +23 -7
  31. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +3 -1
  32. data/bin/lib/Image/ExifTool/README +19 -2
  33. data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
  34. data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
  35. data/bin/lib/Image/ExifTool/Sigma.pm +5 -4
  36. data/bin/lib/Image/ExifTool/Sony.pm +23 -1
  37. data/bin/lib/Image/ExifTool/TagLookup.pm +4670 -4628
  38. data/bin/lib/Image/ExifTool/TagNames.pod +261 -89
  39. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  40. data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
  41. data/bin/lib/Image/ExifTool/Writer.pl +39 -17
  42. data/bin/lib/Image/ExifTool/XMP.pm +2 -2
  43. data/bin/lib/Image/ExifTool.pm +94 -33
  44. data/bin/lib/Image/ExifTool.pod +4 -4
  45. data/bin/perl-Image-ExifTool.spec +1 -1
  46. data/lib/exiftool_vendored/version.rb +1 -1
  47. 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 + 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' },
@@ -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.41';
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. Decimal values have
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.67';
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{VALUE}{FileType};
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.83';
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 => '$$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,
@@ -1961,7 +1976,7 @@ my %eeBox2 = (
1961
1976
  Name => 'SanyoMOV',
1962
1977
  Condition => q{
1963
1978
  $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and
1964
- $self->{VALUE}->{FileType} eq "MOV"
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
- $self->{VALUE}->{FileType} eq "MP4"
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{VALUE}{FileType} eq 'M4A';
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{VALUE}{FileType} and $$et{VALUE}{FileType} eq 'MP4' and
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-1900);
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 the Mask.
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.61';
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{VALUE}{FileType} =~ /^(LA|OFR|PAC|WV)$/;
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.05';
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{VALUE}{FileType};
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.32';
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"). Decimal values have been added to differentiate lenses
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.57';
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',