exiftool-vendored.pl 12.49.0 → 12.50.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.
@@ -49,6 +49,7 @@
49
49
  # 36) Hayo Baann (forum10207)
50
50
  # 37) Tom Lachecki, private communication
51
51
  # 38) https://github.com/exiftool/exiftool/pull/40 (and forum10893)
52
+ # 39) Stefan Grube private communication (Z9)
52
53
  # IB) Iliah Borg private communication (LibRaw)
53
54
  # JD) Jens Duttke private communication
54
55
  # NJ) Niels Kristian Bech Jensen private communication
@@ -63,7 +64,7 @@ use Image::ExifTool::Exif;
63
64
  use Image::ExifTool::GPS;
64
65
  use Image::ExifTool::XMP;
65
66
 
66
- $VERSION = '4.12';
67
+ $VERSION = '4.13';
67
68
 
68
69
  sub LensIDConv($$$);
69
70
  sub ProcessNikonAVI($$$);
@@ -858,7 +859,7 @@ my %focusModeZ7 = (
858
859
 
859
860
  my %infoZSeries = (
860
861
  Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
861
- Notes => 'Z Series cameras thru Decemeber 2021',
862
+ Notes => 'Z Series cameras thru December 2021',
862
863
  );
863
864
  my %iSOAutoHiLimitZ7 = (
864
865
  0 => 'ISO 64',
@@ -1127,8 +1128,6 @@ my %afPoints153 = (
1127
1128
 
1128
1129
  # AF point indices for models with 81 focus points, eg. Z6/Z7/Z50 (ref 38)
1129
1130
  # - 9 rows (A-I) with 9 columns (1-9), center is E5
1130
- # NOTE: the AF points start 2 bytes into the data, so the map starts
1131
- # at 17 instead of 1
1132
1131
  #
1133
1132
  # 7 6 5 4 3 2 1 0
1134
1133
  # 00 : [H5][G5][F5][A5][B5][C5][D5][E5]
@@ -1143,23 +1142,23 @@ my %afPoints153 = (
1143
1142
  # 09 : [H1][G1][F1][A1][B1][C1][D1][E1]
1144
1143
  # 0a : [ ][ ][ ][ ][ ][ ][ ][I1]
1145
1144
  my %afPoints81 = (
1146
- 17 => 'E5', 34 => 'I6', 51 => 'H7', 68 => 'G8', 85 => 'F9',
1147
- 18 => 'D5', 35 => 'E4', 52 => 'I7', 69 => 'H8', 86 => 'G9',
1148
- 19 => 'C5', 36 => 'D4', 53 => 'E3', 70 => 'I8', 87 => 'H9',
1149
- 20 => 'B5', 37 => 'C4', 54 => 'D3', 71 => 'E2', 88 => 'I9',
1150
- 21 => 'A5', 38 => 'B4', 55 => 'C3', 72 => 'D2', 89 => 'E1',
1151
- 22 => 'F5', 39 => 'A4', 56 => 'B3', 73 => 'C2', 90 => 'D1',
1152
- 23 => 'G5', 40 => 'F4', 57 => 'A3', 74 => 'B2', 91 => 'C1',
1153
- 24 => 'H5', 41 => 'G4', 58 => 'F3', 75 => 'A2', 92 => 'B1',
1154
- 25 => 'I5', 42 => 'H4', 59 => 'G3', 76 => 'F2', 93 => 'A1',
1155
- 26 => 'E6', 43 => 'I4', 60 => 'H3', 77 => 'G2', 94 => 'F1',
1156
- 27 => 'D6', 44 => 'E7', 61 => 'I3', 78 => 'H2', 95 => 'G1',
1157
- 28 => 'C6', 45 => 'D7', 62 => 'E8', 79 => 'I2', 96 => 'H1',
1158
- 29 => 'B6', 46 => 'C7', 63 => 'D8', 80 => 'E9', 97 => 'I1',
1159
- 30 => 'A6', 47 => 'B7', 64 => 'C8', 81 => 'D9',
1160
- 31 => 'F6', 48 => 'A7', 65 => 'B8', 82 => 'C9',
1161
- 32 => 'G6', 49 => 'F7', 66 => 'A8', 83 => 'B9',
1162
- 33 => 'H6', 50 => 'G7', 67 => 'F8', 84 => 'A9',
1145
+ 1 => 'E5', 18 => 'I6', 35 => 'H7', 52 => 'G8', 69 => 'F9',
1146
+ 2 => 'D5', 19 => 'E4', 36 => 'I7', 53 => 'H8', 70 => 'G9',
1147
+ 3 => 'C5', 20 => 'D4', 37 => 'E3', 54 => 'I8', 71 => 'H9',
1148
+ 4 => 'B5', 21 => 'C4', 38 => 'D3', 55 => 'E2', 72 => 'I9',
1149
+ 5 => 'A5', 22 => 'B4', 39 => 'C3', 56 => 'D2', 73 => 'E1',
1150
+ 6 => 'F5', 23 => 'A4', 40 => 'B3', 57 => 'C2', 74 => 'D1',
1151
+ 7 => 'G5', 24 => 'F4', 41 => 'A3', 58 => 'B2', 75 => 'C1',
1152
+ 8 => 'H5', 25 => 'G4', 42 => 'F3', 59 => 'A2', 76 => 'B1',
1153
+ 9 => 'I5', 26 => 'H4', 43 => 'G3', 60 => 'F2', 77 => 'A1',
1154
+ 10 => 'E6', 27 => 'I4', 44 => 'H3', 61 => 'G2', 78 => 'F1',
1155
+ 11 => 'D6', 28 => 'E7', 45 => 'I3', 62 => 'H2', 79 => 'G1',
1156
+ 12 => 'C6', 29 => 'D7', 46 => 'E8', 63 => 'I2', 80 => 'H1',
1157
+ 13 => 'B6', 30 => 'C7', 47 => 'D8', 64 => 'E9', 81 => 'I1',
1158
+ 14 => 'A6', 31 => 'B7', 48 => 'C8', 65 => 'D9',
1159
+ 15 => 'F6', 32 => 'A7', 49 => 'B8', 66 => 'C9',
1160
+ 16 => 'G6', 33 => 'F7', 50 => 'A8', 67 => 'B9',
1161
+ 17 => 'H6', 34 => 'G7', 51 => 'F8', 68 => 'A9',
1163
1162
  );
1164
1163
 
1165
1164
  my %cropHiSpeed = ( #IB
@@ -1600,10 +1599,14 @@ my %base64coord = (
1600
1599
  81 => 'Auto (Electronic Front Curtain)', #JanSkoda (Z6II)
1601
1600
  },
1602
1601
  },
1603
- 0x0035 => { #32
1602
+ 0x0035 => [{ #32
1604
1603
  Name => 'HDRInfo',
1604
+ Condition => '$count != 6',
1605
1605
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo' },
1606
- },
1606
+ },{
1607
+ Name => 'HDRInfo2',
1608
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo2' },
1609
+ }],
1607
1610
  0x0037 => { #XavierJubier
1608
1611
  Name => 'MechanicalShutterCount',
1609
1612
  Writable => 'int32u',
@@ -2088,7 +2091,7 @@ my %base64coord = (
2088
2091
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
2089
2092
  DecryptStart => 4,
2090
2093
  # TODO: eventually set the length dynamically according to actual offsets!
2091
- DecryptLen => 0xec4b + 2105, # decoded thru end of Offset26
2094
+ DecryptLen => 0xec4b + 2105, # decoded thru end of Offset26
2092
2095
  ByteOrder => 'LittleEndian',
2093
2096
  },
2094
2097
  },
@@ -2489,6 +2492,12 @@ my %base64coord = (
2489
2492
  TagTable => 'Image::ExifTool::Nikon::MultiExposure',
2490
2493
  ByteOrder => 'LittleEndian',
2491
2494
  },
2495
+ },{
2496
+ Name => 'MultiExposure2',
2497
+ Condition => '$$valPt =~ /^010[23]/', # 0102 is NC (PH)
2498
+ SubDirectory => {
2499
+ TagTable => 'Image::ExifTool::Nikon::MultiExposure2',
2500
+ },
2492
2501
  }],
2493
2502
  0x00b1 => { #14/PH/JD (D80)
2494
2503
  Name => 'HighISONoiseReduction',
@@ -2805,10 +2814,10 @@ my %base64coord = (
2805
2814
  Name => 'VRMode',
2806
2815
  PrintConv => {
2807
2816
  0 => 'Off',
2808
- 1 => 'Sport',
2809
- 3 => 'Normal',
2817
+ 1 => 'Normal', #39 (was 'Sport')
2818
+ 3 => 'Sport', #39 (was 'Normal')
2810
2819
  },
2811
- %infoZSeries
2820
+ %infoZSeries,
2812
2821
  },{
2813
2822
  Name => 'VRMode',
2814
2823
  PrintConv => {
@@ -2819,6 +2828,13 @@ my %base64coord = (
2819
2828
  },
2820
2829
  }],
2821
2830
  # 7 - values: 0, 1
2831
+ 8 => { #39
2832
+ Name => 'VRType',
2833
+ PrintConv => {
2834
+ 2 => 'In-body', # (IBIS)
2835
+ 3 => 'In-body + Lens', # (IBIS + VR)
2836
+ },
2837
+ },
2822
2838
  );
2823
2839
 
2824
2840
  # Face detection information - PH (S8100)
@@ -3351,8 +3367,10 @@ my %base64coord = (
3351
3367
  sprintf("%s%.2d:%.2d", $sign, $h, abs($val)-60*$h);
3352
3368
  },
3353
3369
  PrintConvInv => q{
3354
- $val =~ /([-+]?)(\d+):(\d+)/ or return undef;
3355
- return $1 . ($2 * 60 + $3);
3370
+ $val =~ /Z$/ and return 0;
3371
+ $val =~ /([-+])(\d{1,2}):?(\d{2})$/ and return $1 . ($2 * 60 + $3);
3372
+ $val =~ /^(\d{2})(\d{2})$/ and return $1 * 60 + $2;
3373
+ return undef;
3356
3374
  },
3357
3375
  },
3358
3376
  2 => {
@@ -3569,7 +3587,6 @@ my %base64coord = (
3569
3587
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3570
3588
  DATAMEMBER => [ 0, 4, 6 ],
3571
3589
  NOTES => "These tags are written by Nikon DSLR's which have the live view feature.",
3572
- # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
3573
3590
  0 => {
3574
3591
  Name => 'AFInfo2Version',
3575
3592
  Format => 'undef[4]',
@@ -3680,7 +3697,7 @@ my %base64coord = (
3680
3697
  { #PH/JD
3681
3698
  Name => 'PrimaryAFPoint',
3682
3699
  # PrimaryAFPoint may only be valid for PhaseDetect - certainly true on the D6, possibly other bodies? (ref 28)
3683
- Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
3700
+ Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
3684
3701
  Notes => q{
3685
3702
  models with 51-point AF -- 5 rows (A-E) and 11 columns (1-11): D3, D3S, D3X,
3686
3703
  D4, D4S, D300, D300S, D700, D800, D800e and D810
@@ -3786,22 +3803,6 @@ my %base64coord = (
3786
3803
  1 => 'E9 (Center)',
3787
3804
  },
3788
3805
  },
3789
- { #PH (Z7) (NC)
3790
- Name => 'PrimaryAFPoint',
3791
- Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
3792
- Notes => q{
3793
- Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
3794
- at the center
3795
- },
3796
- PrintConv => {
3797
- 0 => '(none)',
3798
- 246 => 'I15 (Center)',
3799
- OTHER => sub {
3800
- my ($val, $inv) = @_;
3801
- return GetAFPointGrid($val, 29, $inv);
3802
- },
3803
- },
3804
- },
3805
3806
  {
3806
3807
  Name => 'PrimaryAFPoint',
3807
3808
  Condition => '$$self{AFInfo2Version} eq "0100"',
@@ -3815,7 +3816,7 @@ my %base64coord = (
3815
3816
  8 => [
3816
3817
  { #JD/PH
3817
3818
  Name => 'AFPointsUsed',
3818
- Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
3819
+ Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
3819
3820
  Notes => q{
3820
3821
  models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center
3821
3822
  point is C6
@@ -3919,33 +3920,78 @@ my %base64coord = (
3919
3920
  PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
3920
3921
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
3921
3922
  },
3922
- { #38 (Z6/Z7/Z50)
3923
- Name => 'AFPointsUsed',
3924
- Condition => '$$self{PhaseDetectAF} == 8 and $$self{Model} =~ /^NIKON Z/',
3925
- Notes => q{
3926
- models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
3927
- phase detect AF points. Center point is E5
3928
- },
3929
- Format => 'undef[13]',
3930
- ValueConv => 'join(" ", unpack("H2"x13, $val))',
3931
- ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3932
- PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
3933
- PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
3934
- },
3935
3923
  { #PH
3936
3924
  Name => 'AFPointsUsed',
3937
3925
  # version 301 uses a separate field at offset 0x0a for this tag (ref 28)
3938
- Condition => '$$self{AFInfo2Version} ne "0301"',
3926
+ Condition => '$$self{AFInfo2Version} !~ /^03/',
3939
3927
  Format => 'undef[7]',
3940
3928
  ValueConv => 'join(" ", unpack("H2"x7, $val))',
3941
3929
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3942
3930
  PrintConv => '"Unknown ($val)"',
3943
3931
  PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val',
3944
3932
  },
3933
+ { #PH
3934
+ Name => 'PrimaryAFPoint',
3935
+ Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
3936
+ Notes => 'newer models with 51-point AF',
3937
+ PrintConvColumns => 5,
3938
+ PrintConv => {
3939
+ 0 => '(none)',
3940
+ %afPoints51,
3941
+ 1 => 'C6 (Center)', # (add " (Center)" to central point)
3942
+ },
3943
+ },
3944
+ { #PH (Z7)
3945
+ Name => 'PrimaryAFPoint',
3946
+ Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
3947
+ PrintConv => {
3948
+ 0 => '(none)',
3949
+ %afPoints81,
3950
+ 1 => 'E5 (Center)', # (add " (Center)" to central point)
3951
+ },
3952
+ },
3953
+ # this was wrong, but keep the code as a comment in case it may be useful later
3954
+ #{ #PH (Z7) (NC)
3955
+ # Name => 'PrimaryAFPoint',
3956
+ # Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
3957
+ # Notes => q{
3958
+ # Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
3959
+ # at the center
3960
+ # },
3961
+ # PrintConv => {
3962
+ # 0 => '(none)',
3963
+ # 246 => 'I15 (Center)',
3964
+ # OTHER => sub {
3965
+ # my ($val, $inv) = @_;
3966
+ # return GetAFPointGrid($val, 29, $inv);
3967
+ # },
3968
+ # },
3969
+ #},
3945
3970
  ],
3946
- 0x0a => { #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
3947
- Name => 'AFPointsUsed',
3948
- Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
3971
+ 0x0a => [{ #PH (D780)
3972
+ Name => 'AFPointsUsed',
3973
+ Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
3974
+ Notes => 'newer models with 51-point AF',
3975
+ Format => 'undef[7]',
3976
+ ValueConv => 'join(" ", unpack("H2"x7, $val))',
3977
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3978
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints51); },
3979
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints51); },
3980
+ },{ #38 (Z6/Z7/Z50)
3981
+ Name => 'AFPointsUsed',
3982
+ Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
3983
+ Notes => q{
3984
+ models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
3985
+ phase detect AF points. Center point is E5
3986
+ },
3987
+ Format => 'undef[11]',
3988
+ ValueConv => 'join(" ", unpack("H2"x11, $val))',
3989
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3990
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
3991
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
3992
+ },{ #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
3993
+ Name => 'AFPointsUsed',
3994
+ Condition => '$$self{PhaseDetectAF} == 9 and $$self{AFInfo2Version} =~ /^03/',
3949
3995
  Notes => q{
3950
3996
  models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
3951
3997
  point is D8
@@ -3955,7 +4001,7 @@ my %base64coord = (
3955
4001
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3956
4002
  PrintConv => sub { PrintAFPoints(shift, \%afPoints105); },
3957
4003
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints105); },
3958
- },
4004
+ }],
3959
4005
  0x10 => { #PH (D90 and D5000)
3960
4006
  Name => 'AFImageWidth',
3961
4007
  Condition => '$$self{AFInfo2Version} eq "0100"',
@@ -5003,9 +5049,10 @@ my %nikonFocalConversions = (
5003
5049
  27 => 'Nikkor Z MC 50mm f/2.8', #IB
5004
5050
  28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
5005
5051
  29 => 'Nikkor Z 28mm f/2.8', #IB
5006
- 30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
5007
- 31 => 'Nikkor Z 24-120 f/4', #28
5008
- 32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5052
+ 30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
5053
+ 31 => 'Nikkor Z 24-120 f/4', #28
5054
+ 32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5055
+ 36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
5009
5056
  },
5010
5057
  },
5011
5058
  0x35 => { #28
@@ -5049,31 +5096,31 @@ my %nikonFocalConversions = (
5049
5096
  0x4c => { #28
5050
5097
  Name => 'FocusDistanceRangeWidth', #reflects the number of discrete absolute lens positions that are mapped to the reported FocusDistance. Will be 1 near CFD reflecting very narrow focus distance bands (i.e., quite accurate). Near Infinity will be something like 32. Note: 0 at infinity.
5051
5098
  Format => 'int8u',
5052
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5099
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5053
5100
  RawConv => '$$self{FocusDistanceRangeWidth} = $val',
5054
5101
  Unknown => 1,
5055
5102
  },
5056
5103
  0x4e => { #28
5057
- Name => 'FocusDistance',
5104
+ Name => 'FocusDistance',
5058
5105
  Format => 'int16u',
5059
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5106
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5060
5107
  RawConv => '$val = $val/256', # 1st byte is the fractional component. This byte was not previously considered in the legacy calculation (which only used the 2nd byte). When 2nd byte < 80; distance is < 1 meter
5061
5108
  ValueConv => '0.01 * 10**($val/40)', # in m
5062
5109
  ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
5063
5110
  PrintConv => q{
5064
- (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
5111
+ (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
5065
5112
  },
5066
5113
  },
5067
5114
  0x56 => { #28
5068
5115
  Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
5069
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5116
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5070
5117
  Format => 'int8u',
5071
5118
  RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
5072
5119
  Unknown => 1,
5073
5120
  },
5074
5121
  0x5a => { #28
5075
5122
  Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
5076
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5123
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5077
5124
  Format => 'int32s',
5078
5125
  Unknown => 1,
5079
5126
  },
@@ -5478,14 +5525,14 @@ my %nikonFocalConversions = (
5478
5525
  },
5479
5526
  0x27d => {
5480
5527
  Name => 'ShutterCount',
5481
- Condition => '$$self{FirmwareVersion} =~ /^1.01/',
5528
+ Condition => '$$self{FirmwareVersion} =~ /^1\.01/',
5482
5529
  Notes => 'firmware 1.10',
5483
5530
  Format => 'int32u',
5484
5531
  Priority => 0,
5485
5532
  },
5486
5533
  0x27f => {
5487
5534
  Name => 'ShutterCount',
5488
- Condition => '$$self{FirmwareVersion} =~ /^2.0/',
5535
+ Condition => '$$self{FirmwareVersion} =~ /^2\.0/',
5489
5536
  Notes => 'firmware 2.00, 2.01 and 2.02',
5490
5537
  Format => 'int32u',
5491
5538
  Priority => 0,
@@ -7379,7 +7426,7 @@ my %nikonFocalConversions = (
7379
7426
  # (moves around too much and doesn't fit cleanly in the offset table)
7380
7427
  #0x38be => {
7381
7428
  # Name => 'Rotation',
7382
- # Condition => '$$self{FirmwareVersion} =~ /^1.0/',
7429
+ # Condition => '$$self{FirmwareVersion} =~ /^1\.0/',
7383
7430
  # Mask => 0x30,
7384
7431
  # PrintConv => {
7385
7432
  # 0 => 'Horizontal',
@@ -7685,7 +7732,7 @@ my %nikonFocalConversions = (
7685
7732
  },
7686
7733
  0x189d => { #PH (NC)
7687
7734
  Name => 'CustomSettingsD4S',
7688
- Condition => '$$self{FirmwareVersion} =~ /^1.00/',
7735
+ Condition => '$$self{FirmwareVersion} =~ /^1\.00/',
7689
7736
  Notes => 'firmware version 1.00',
7690
7737
  Format => 'undef[56]',
7691
7738
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
@@ -7693,7 +7740,7 @@ my %nikonFocalConversions = (
7693
7740
  0x18c2 => { # CSf1-c (no idea why it is so far away from the rest of the settings)
7694
7741
  Name => 'MultiSelectorLiveViewMode',
7695
7742
  Groups => { 1 => 'NikonCustom' },
7696
- Condition => '$$self{FirmwareVersion} !~ /^1.00/',
7743
+ Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
7697
7744
  Mask => 0xc0,
7698
7745
  PrintConv => {
7699
7746
  0 => 'Reset',
@@ -7794,7 +7841,7 @@ my %nikonFocalConversions = (
7794
7841
  },
7795
7842
  0x193d => {
7796
7843
  Name => 'CustomSettingsD4S',
7797
- Condition => '$$self{FirmwareVersion} !~ /^1.00/',
7844
+ Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
7798
7845
  Notes => 'firmware version 1.01',
7799
7846
  Format => 'undef[56]',
7800
7847
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
@@ -8206,6 +8253,7 @@ my %nikonFocalConversions = (
8206
8253
  0xec4b => {
8207
8254
  Name => 'MenuSettingsZ9',
8208
8255
  Format => 'undef[1646]',
8256
+ Condition => '$$self{FirmwareVersion} lt "03.00"',
8209
8257
  SubDirectory => {
8210
8258
  TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
8211
8259
  },
@@ -8799,9 +8847,9 @@ my %nikonFocalConversions = (
8799
8847
  16 => '+03:00 (Moscow, Nairobi)',
8800
8848
  17 => '+02:00 (Athens, Helsinki)',
8801
8849
  18 => '+01:00 (Madrid, Paris, Berlin)',
8802
- 19 => '+00:00 (London)',
8803
- 20 => '-01:00 (Azores)',
8804
- 21 => '-02:00 (Fernando de Noronha)',
8850
+ 19 => '+00:00 (London)',
8851
+ 20 => '-01:00 (Azores)',
8852
+ 21 => '-02:00 (Fernando de Noronha)',
8805
8853
  22 => '-03:00 (Buenos Aires, Sao Paulo)',
8806
8854
  23 => '-03:30 (Newfoundland)',
8807
8855
  24 => '-04:00 (Manaus, Caracas)',
@@ -10129,6 +10177,36 @@ my %nikonFocalConversions = (
10129
10177
  },
10130
10178
  );
10131
10179
 
10180
+ # Multi exposure2 / image overlay information (ref 39)
10181
+ %Image::ExifTool::Nikon::MultiExposure2 = (
10182
+ %binaryDataAttrs,
10183
+ FORMAT => 'int32u',
10184
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
10185
+ 0 => {
10186
+ Name => 'MultiExposureVersion',
10187
+ Format => 'string[4]',
10188
+ Writable => 0,
10189
+ },
10190
+ 1 => {
10191
+ Name => 'MultiExposureMode',
10192
+ PrintConv => {
10193
+ 0 => 'Off',
10194
+ 1 => 'Multiple Exposure',
10195
+ 3 => 'HDR',
10196
+ },
10197
+ },
10198
+ 2 => 'MultiExposureShots',
10199
+ 3 => {
10200
+ Name => 'MultiExposureOverlayMode',
10201
+ PrintConv => {
10202
+ 0 => 'Add',
10203
+ 1 => 'Average',
10204
+ 2 => 'Light',
10205
+ 3 => 'Dark',
10206
+ },
10207
+ },
10208
+ );
10209
+
10132
10210
  # HDR information (ref 32)
10133
10211
  %Image::ExifTool::Nikon::HDRInfo = (
10134
10212
  %binaryDataAttrs,
@@ -10137,12 +10215,13 @@ my %nikonFocalConversions = (
10137
10215
  0 => {
10138
10216
  Name => 'HDRInfoVersion',
10139
10217
  Format => 'string[4]',
10218
+ Writable => 0,
10140
10219
  },
10141
10220
  4 => {
10142
10221
  Name => 'HDR',
10143
10222
  PrintConv => {
10144
10223
  0 => 'Off',
10145
- 1 => 'On',
10224
+ 1 => 'On (normal)',
10146
10225
  48 => 'Auto', #PH (NC)
10147
10226
  },
10148
10227
  },
@@ -10180,6 +10259,35 @@ my %nikonFocalConversions = (
10180
10259
  },
10181
10260
  );
10182
10261
 
10262
+ # ref 39 (Z9)
10263
+ %Image::ExifTool::Nikon::HDRInfo2 = (
10264
+ %binaryDataAttrs,
10265
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
10266
+ 0 => {
10267
+ Name => 'HDRInfoVersion', # 0200
10268
+ Format => 'string[4]',
10269
+ Writable => 0,
10270
+ },
10271
+ 4 => {
10272
+ Name => 'HDR',
10273
+ PrintConv => {
10274
+ 0 => 'Off',
10275
+ 1 => 'On (normal)',
10276
+ },
10277
+ },
10278
+ 5 => {
10279
+ Name => 'HDRLevel',
10280
+ PrintConv => {
10281
+ 0 => 'n/a',
10282
+ 1 => 'Normal',
10283
+ 2 => 'Low',
10284
+ 3 => 'High',
10285
+ 4 => 'High+',
10286
+ 5 => 'Auto',
10287
+ },
10288
+ },
10289
+ );
10290
+
10183
10291
  # location information (ref PH)
10184
10292
  %Image::ExifTool::Nikon::LocationInfo = (
10185
10293
  %binaryDataAttrs,
@@ -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.78';
43
+ $VERSION = '2.79';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -433,6 +433,7 @@ my %olympusCameraTypes = (
433
433
  S0092 => 'E-M1MarkIII', #IB
434
434
  S0093 => 'E-P7', #IB
435
435
  S0095 => 'OM-1', #IB
436
+ S0101 => 'OM-5', #IB
436
437
  SR45 => 'D220',
437
438
  SR55 => 'D320L',
438
439
  SR83 => 'D340L',
@@ -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.40';
61
+ $VERSION = '3.41';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -365,10 +365,15 @@ sub DecodeAFPoints($$$$;$);
365
365
  '8 255.4' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH
366
366
  '8 255.5' => 'Sigma 50-200mm F4-5.6 DC OS', #26
367
367
  '8 255.6' => 'Sigma 24-70mm F2.8 EX DG HSM', #29
368
+
369
+ '9 0' => '645 Manual Lens', #PH (NC)
370
+ '9 3' => 'HD PENTAX-FA 43mm F1.9 Limited', #IB
371
+ '9 24' => 'HD PENTAX-FA 77mm F1.8 Limited', #IB
372
+ '9 39' => 'HD PENTAX-FA 31mm F1.8 AL Limited', #IB
373
+ '9 247' => 'HD PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED [IF]', #IB
368
374
  #
369
375
  # 645 lenses
370
376
  #
371
- '9 0' => '645 Manual Lens', #PH (NC)
372
377
  '10 0' => '645 A Series Lens', #PH
373
378
  '11 1' => 'smc PENTAX-FA 645 75mm F2.8', #PH
374
379
  '11 2' => 'smc PENTAX-FA 645 45mm F2.8', #PH