exiftool_vendored 12.96.0 → 12.97.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.37';
68
+ $VERSION = '4.38';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -955,6 +955,7 @@ my %hdrLevelZ8 = (
955
955
  my %highFrameRateZ9 = (
956
956
  0 => 'Off',
957
957
  1 => 'CH',
958
+ 2 => 'CH*', #28 (Z6III)
958
959
  3 => 'C30',
959
960
  5 => 'C60',
960
961
  4 => 'C120',
@@ -987,6 +988,39 @@ my %infoZSeries = (
987
988
  Notes => 'Z Series cameras thru October 2023',
988
989
  );
989
990
 
991
+ my %iSOAutoHiLimitZ6III = ( #28
992
+ 5 => 'ISO 200',
993
+ 6 => 'ISO 250',
994
+ 7 => 'ISO 320',
995
+ 8 => 'ISO 400',
996
+ 9 => 'ISO 500',
997
+ 10 => 'ISO 640',
998
+ 11 => 'ISO 800',
999
+ 12 => 'ISO 1000',
1000
+ 13 => 'ISO 1250',
1001
+ 14 => 'ISO 1600',
1002
+ 15 => 'ISO 2000',
1003
+ 16 => 'ISO 2500',
1004
+ 17 => 'ISO 3200',
1005
+ 18 => 'ISO 4000',
1006
+ 19 => 'ISO 5000',
1007
+ 20 => 'ISO 6400',
1008
+ 21 => 'ISO 8000',
1009
+ 22 => 'ISO 10000',
1010
+ 23 => 'ISO 12800',
1011
+ 24 => 'ISO 16000',
1012
+ 25 => 'ISO 20000',
1013
+ 26 => 'ISO 25600',
1014
+ 27 => 'ISO 32000',
1015
+ 28 => 'ISO 40000',
1016
+ 29 => 'ISO 51200',
1017
+ 30 => 'ISO 64000',
1018
+ 31 => 'ISO Hi 0.3',
1019
+ 32 => 'ISO Hi 0.7',
1020
+ 33 => 'ISO Hi 1.0',
1021
+ 35 => 'ISO Hi 1.7',
1022
+ );
1023
+
990
1024
  my %iSOAutoHiLimitZ7 = (
991
1025
  0 => 'ISO 64',
992
1026
  1 => 'ISO 80',
@@ -1112,6 +1146,18 @@ my %movieFlickerReductionZ9 = (
1112
1146
  2 => '60Hz',
1113
1147
  );
1114
1148
 
1149
+ my %movieFrameRateZ6III = ( #28
1150
+ 0 => '240p',
1151
+ 1 => '200p',
1152
+ 2 => '120p',
1153
+ 3 => '100p',
1154
+ 4 => '60p',
1155
+ 5 => '50p',
1156
+ 6 => '30p',
1157
+ 7 => '25p',
1158
+ 8 => '24p',
1159
+ );
1160
+
1115
1161
  my %movieFrameRateZ7 = (
1116
1162
  0 => '120p',
1117
1163
  1 => '100p',
@@ -1126,6 +1172,7 @@ my %movieFrameSizeZ9 = (
1126
1172
  1 => '1920x1080',
1127
1173
  2 => '3840x2160',
1128
1174
  3 => '7680x4320',
1175
+ 7 => '5376x3024', #28 (Z6III)
1129
1176
  );
1130
1177
 
1131
1178
  my %movieSlowMotion = (
@@ -1226,6 +1273,13 @@ my %secondarySlotFunctionZ9 = (
1226
1273
  3 => 'JPG Primary + JPG Secondary',
1227
1274
  );
1228
1275
 
1276
+ my %subjectDetectionAreaMZ6III = ( #28
1277
+ 0 => 'Off',
1278
+ 1 => 'All',
1279
+ 2 => 'Wide (L)',
1280
+ 3 => 'Wide (S)',
1281
+ );
1282
+
1229
1283
  my %subjectDetectionZ9 = (
1230
1284
  0 => 'Off',
1231
1285
  1 => 'Auto',
@@ -2465,7 +2519,16 @@ my %base64coord = (
2465
2519
  ByteOrder => 'BigEndian',
2466
2520
  },
2467
2521
  },
2468
- { # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
2522
+ { # (Z6_3 firmware version 1.00, ref 28)
2523
+ Condition => '$$valPt =~ /^0809/',
2524
+ Name => 'ShotInfoZ6III',
2525
+ SubDirectory => {
2526
+ TagTable => 'Image::ExifTool::Nikon::ShotInfoZ6III',
2527
+ DecryptStart => 4,
2528
+ ByteOrder => 'LittleEndian',
2529
+ },
2530
+ },
2531
+ { # (Z6_2 firmware version 1.00 and Z7_2 firmware versions 1.00 & 1.01, ref 28)
2469
2532
  # 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
2470
2533
  Condition => '$$valPt =~ /^080[0123478]/',
2471
2534
  Name => 'ShotInfoZ7II',
@@ -5374,7 +5437,7 @@ my %nikonFocalConversions = (
5374
5437
  %binaryDataAttrs,
5375
5438
  NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
5376
5439
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5377
- DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56, 0x58 ],
5440
+ DATAMEMBER => [ 0x03, 0x2f, 0x30, 0x4c, 0x56, 0x58 ],
5378
5441
  0x00 => {
5379
5442
  Name => 'LensDataVersion',
5380
5443
  Format => 'string[4]',
@@ -5478,6 +5541,7 @@ my %nikonFocalConversions = (
5478
5541
  Condition => '$$self{NewLensData}',
5479
5542
  Notes => 'tags from here onward used for Nikkor Z lenses only',
5480
5543
  Format => 'int16u',
5544
+ RawConv => '$$self{LensID} = $val', #28 non-zero = > Native Z lens; 0 => DSLR lens via FTZ style adapter or non-Nikon Z-mount lens (or no lens attached)
5481
5545
  PrintConv => {
5482
5546
  1 => 'Nikkor Z 24-70mm f/4 S',
5483
5547
  2 => 'Nikkor Z 14-30mm f/4 S',
@@ -5517,19 +5581,21 @@ my %nikonFocalConversions = (
5517
5581
  45 => 'Nikkor Z 600mm f/6.3 VR S', #28
5518
5582
  46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
5519
5583
  48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
5584
+ 2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
5520
5585
  32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
5521
5586
  32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
5522
5587
  },
5523
5588
  },
5524
- 0x35 => { #28
5525
- Name => 'LensMountType',
5526
- RawConv => '$$self{LensMountType} = $val', # 0=> DSLR lens via FTZ style adapter; 1=> Native Z lens;
5527
- Format => 'int8u',
5528
- #Unknown => 1,
5529
- PrintConv => {
5530
- 0 => 'F-mount Lens',
5531
- 1 => 'Z-mount Lens',
5532
- },
5589
+ 0x34 => { #28
5590
+ Name => 'LensFirmwareVersion',
5591
+ Condition => '$$self{LensID} and $$self{LensID} != 0', #only valid for Z-mount lenses
5592
+ Format => 'int16u', #4 bits each for version, release amd modification in VRM scheme.
5593
+ PrintConv => q{
5594
+ my $version = int($val / 256);
5595
+ my $release = int(($val - 256 * $version)/16);
5596
+ my $modification = $val - (256 * $version + 16 * $release);
5597
+ return sprintf("%.0f.%.0f.%.0f", $version,$release,$modification);
5598
+ },
5533
5599
  },
5534
5600
  0x36 => { #PH
5535
5601
  Name => 'MaxAperture',
@@ -5562,41 +5628,50 @@ my %nikonFocalConversions = (
5562
5628
  0x4c => { #28
5563
5629
  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.
5564
5630
  Format => 'int8u',
5565
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5631
+ Condition => '$$self{LensID} and $$self{LensID} != 0 and $$self{FocusMode} ne "Manual"',
5566
5632
  RawConv => '$$self{FocusDistanceRangeWidth} = $val',
5567
5633
  Unknown => 1,
5568
5634
  },
5569
5635
  0x4e => { #28
5570
5636
  Name => 'FocusDistance',
5571
5637
  Format => 'int16u',
5572
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5638
+ Condition => '$$self{LensID} and $$self{LensID} != 0', #only valid for Z-mount lenses
5573
5639
  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
5574
5640
  ValueConv => '2**(($val-80)/12)', # in m #slighly more accurate than the legacy calcualtion of '0.01 * 10**($val/40)'. Tested at all focus positions using the 105mm,70-200mm & 600mm
5575
5641
  ValueConvInv => '$val>0 ? log(12*($val+80)/log(2) : 0', #was '$val>0 ? 40*log($val*100)/log(10) : 0'
5576
5642
  PrintConv => q{
5577
- (defined $$self{FocusStepsFromInfinity} and not $$self{FocusStepsFromInfinity}) ? "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
5643
+ (defined $$self{FocusStepsFromInfinity} and $$self{FocusStepsFromInfinity} eq 0) ? "Inf" : $val < 100 ? $val < 10 ? $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val) : sprintf("%.1f m", $val) : sprintf("%.0f m", $val),
5578
5644
  },
5579
5645
  },
5580
- 0x56 => { #28 #not valif for focus mode M
5646
+ 0x56 => { #28 #not valid for focus mode M
5581
5647
  Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
5582
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5648
+ Condition => '$$self{LensID} and $$self{LensID} != 0 and $$self{FocusMode} ne "Manual"', #valid for Z-mount lenses in focus modes other than M
5583
5649
  Format => 'int8u',
5584
5650
  RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
5585
5651
  Unknown => 1,
5586
5652
  },
5587
5653
  0x58 => { #28
5588
5654
  Name => 'FocusStepsFromInfinity',
5589
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1', #valid for both AF and manual focus modes
5655
+ Condition => '$$self{LensID} and $$self{LensID} != 0', #valid for Z-mount lenses in both AF and manual focus modes
5590
5656
  Format => 'int8u',
5591
5657
  RawConv => '$$self{FocusStepsFromInfinity} = $val', # 0 at Infinity, otherwise a small positive number monotonically increasing towards CFD.
5592
5658
  Unknown => 1,
5593
5659
  },
5594
5660
  0x5a => { #28
5595
5661
  Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
5596
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5662
+ Condition => '$$self{LensID} and $$self{LensID} != 0', # Only valid for Z-mount lenses.
5597
5663
  Format => 'int32s',
5598
5664
  #Unknown => 1,
5599
5665
  },
5666
+ 0x5f => { #28
5667
+ Name => 'LensMountType',
5668
+ Format => 'int8u',
5669
+ Mask => 0x01,
5670
+ PrintConv => {
5671
+ 0 => 'Z-mount',
5672
+ 1 => 'F-mount',
5673
+ },
5674
+ },
5600
5675
  );
5601
5676
 
5602
5677
  # Unknown Nikon lens data (note: data may need decrypting after byte 4)
@@ -5637,38 +5712,6 @@ my %nikonFocalConversions = (
5637
5712
  Notes => 'P6000',
5638
5713
  PrintConv => \%offOn,
5639
5714
  },
5640
- # for Nikon Z6iii JPG and RAW images (version 0809),
5641
- # the offset table starts at 0x24 and is as follows
5642
- # JPG Offset Size NEF Offset Size
5643
- # 0) 0x0000 0 0) 0x009c 21604
5644
- # 1) 0x0000 0 1) 0x5500 6008
5645
- # 2) 0x009c 2528 2) 0x6c78 2528
5646
- # 3) 0x0a7c 200 3) 0x7658 200
5647
- # 4) 0x0b44 2488 4) 0x7720 2488
5648
- # 5) 0x14fc 1468 5) 0x80d8 1468
5649
- # 6) 0x1ab8 1032 6) 0x8694 1032
5650
- # 7) 0x1ec0 256 7) 0x8a9c 256
5651
- # 8) 0x1fc0 800 8) 0x8b9c 800
5652
- # 9) 0x22e0 144 9) 0x8ebc 144
5653
- # 10) 0x2370 64 10) 0x8f4c 64
5654
- # 11) 0x0000 0 11) 0x0000 0
5655
- # 12) 0x23b0 5009 12) 0x8f8c 5009
5656
- # 13) 0x3741 1536 13) 0xa31d 1536
5657
- # 14) 0x3d41 11928 14) 0xa91d 11928
5658
- # 15) 0x6bd9 5937 15) 0xd7b5 5937
5659
- # 16) 0x830a 500 16) 0xeee6 500
5660
- # 17) 0x84fe 160 17) 0xf0da 160
5661
- # 18) 0x859e 464 18) 0xf17a 464
5662
- # 19) 0x876e 8 19) 0xf34a 8
5663
- # 20) 0x8776 64 20) 0xf352 64
5664
- # 21) 0x87b6 6 21) 0xf392 6
5665
- # 22) 0x87bc 48 22) 0xf398 48
5666
- # 23) 0x87ec 20 23) 0xf3c8 20
5667
- # 24) 0x8800 108 24) 0xf3dc 108
5668
- # 25) 0x886c 8 25) 0xf448 8
5669
- # 26) 0x8874 2420 26) 0xf450 2420
5670
- # 27) 0x0000 0 27) 0x0000 0
5671
- # 28) 0x0000 0 28) 0x0000 0
5672
5715
  0x66 => {
5673
5716
  Name => 'VR_0x66',
5674
5717
  Condition => '$$self{ShotInfoVersion} eq "0204"',
@@ -8292,6 +8335,69 @@ my %nikonFocalConversions = (
8292
8335
  },
8293
8336
  );
8294
8337
 
8338
+ # shot information for the Z6III firmware 1.00 (encrypted) - ref 28
8339
+ %Image::ExifTool::Nikon::ShotInfoZ6III = (
8340
+ PROCESS_PROC => \&ProcessNikonEncrypted,
8341
+ WRITE_PROC => \&ProcessNikonEncrypted,
8342
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8343
+ VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
8344
+ DATAMEMBER => [ 0x04 ],
8345
+ IS_SUBDIR => [ 0x88, 0x90 ],
8346
+ WRITABLE => 1,
8347
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8348
+ NOTES => 'These tags are extracted from encrypted data in images from the Z6III.',
8349
+ 0x00 => {
8350
+ Name => 'ShotInfoVersion',
8351
+ Format => 'string[4]',
8352
+ Writable => 0,
8353
+ },
8354
+ 0x04 => {
8355
+ Name => 'FirmwareVersion',
8356
+ DataMember => 'FirmwareVersion',
8357
+ Format => 'string[8]',
8358
+ Writable => 0,
8359
+ RawConv => '$$self{FirmwareVersion} = $val',
8360
+ },
8361
+ 0x0e => {
8362
+ Name => 'FirmwareVersion2',
8363
+ Format => 'string[8]',
8364
+ Writable => 0,
8365
+ Hidden => 1,
8366
+ },
8367
+ 0x18 => {
8368
+ Name => 'FirmwareVersion3',
8369
+ Format => 'string[8]',
8370
+ Writable => 0,
8371
+ Hidden => 1,
8372
+ },
8373
+ 0x24 => {
8374
+ Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
8375
+ Format => 'int32u',
8376
+ Writable => 0,
8377
+ Hidden => 1,
8378
+ },
8379
+ #0x28 Offset1 - non-zero for NEF only
8380
+ #0x2c Offset2 - non-zero for NEF only
8381
+ #0x38 Offset5 - contains SkinSoftening at 0x2d1 - mapping is %offLowNormalHighZ7
8382
+ 0x88 => {
8383
+ Name => 'OrientationOffset',
8384
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8385
+ Format => 'int32u',
8386
+ SubDirectory => {
8387
+ TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
8388
+ Start => '$val',
8389
+ }
8390
+ },
8391
+ 0x90 => {
8392
+ Name => 'MenuOffset',
8393
+ Format => 'int32u',
8394
+ SubDirectory => {
8395
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ6III',
8396
+ Start => '$val',
8397
+ },
8398
+ },
8399
+ );
8400
+
8295
8401
  # shot information for the Z7II firmware 1.00 (encrypted) - ref 28
8296
8402
  %Image::ExifTool::Nikon::ShotInfoZ7II = (
8297
8403
  PROCESS_PROC => \&ProcessNikonEncrypted,
@@ -8680,7 +8786,7 @@ my %nikonFocalConversions = (
8680
8786
  my $DynamicL = 2;
8681
8787
 
8682
8788
  my $start = 502; #FX, 16:9 & 1:1 formats
8683
- my $increment = 259; #FX, & 16:9 formats
8789
+ my $increment = 259; #FX & 16:9 formats
8684
8790
 
8685
8791
  $start = $start + 5 * $increment if $imageArea == $OneToOne; # need to provide additional offset for the cropped horizontal pixels in 1:1 (19 vs 29 horizontal focus positions)
8686
8792
  $start = $start - $increment if $val < 49 and ($imageArea == $FX or $imageArea == $WideScreen); #calculations for the left side of the frames are offset by 1 position from the right side
@@ -8994,6 +9100,203 @@ my %nikonFocalConversions = (
8994
9100
  },
8995
9101
  );
8996
9102
 
9103
+ %Image::ExifTool::Nikon::MenuSettingsZ6III = (
9104
+ %binaryDataAttrs,
9105
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9106
+ NOTES => 'These tags are used by the Z6III.',
9107
+ DATAMEMBER => [ 360, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
9108
+ IS_SUBDIR => [ 1255 ],
9109
+ 360 => {
9110
+ Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
9111
+ Hidden => 1,
9112
+ RawConv => '$$self{SingleFrame} = $val',
9113
+ },
9114
+ 364 => {
9115
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9116
+ PrintConv => \%highFrameRateZ9,
9117
+ },
9118
+ 444 => {
9119
+ Name => 'MultipleExposureMode',
9120
+ RawConv => '$$self{MultipleExposureMode} = $val',
9121
+ PrintConv => \%multipleExposureModeZ9,
9122
+ },
9123
+ 446 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
9124
+ 476 => {
9125
+ Name => 'IntervalDurationHours',
9126
+ Format => 'int32u',
9127
+ },
9128
+ 480 => {
9129
+ Name => 'IntervalDurationMinutes',
9130
+ Format => 'int32u',
9131
+ },
9132
+ 484 => {
9133
+ Name => 'IntervalDurationSeconds',
9134
+ Format => 'int32u',
9135
+ },
9136
+ 492 => {
9137
+ Name => 'Intervals',
9138
+ Format => 'int32u',
9139
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
9140
+ },
9141
+ 496 => {
9142
+ Name => 'ShotsPerInterval',
9143
+ Format => 'int32u',
9144
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9145
+ },
9146
+ 500 => {
9147
+ Name => 'IntervalExposureSmoothing',
9148
+ Format => 'int8u',
9149
+ PrintConv => \%offOn,
9150
+ },
9151
+ 502 => {
9152
+ Name => 'IntervalPriority',
9153
+ Format => 'int8u',
9154
+ PrintConv => \%offOn,
9155
+ },
9156
+ 536 => {
9157
+ Name => 'FocusShiftNumberShots',
9158
+ },
9159
+ 540 => {
9160
+ Name => 'FocusShiftStepWidth',
9161
+ },
9162
+ 544 => {
9163
+ Name => 'FocusShiftInterval',
9164
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
9165
+ },
9166
+ 548 => {
9167
+ Name => 'FocusShiftExposureLock',
9168
+ PrintConv => \%offOn,
9169
+ },
9170
+ 648 => { Name => 'AutoISO', PrintConv => \%offOn },
9171
+ 650 => {
9172
+ Name => 'ISOAutoHiLimit',
9173
+ Format => 'int16u',
9174
+ Unknown => 1,
9175
+ ValueConv => '($val-104)/8',
9176
+ ValueConvInv => '8 * ($val + 104)',
9177
+ PrintConv => \%iSOAutoHiLimitZ6III,
9178
+ },
9179
+ #652 => ISOAutoFlashLimit # only when ISOAutoFlashLimitSameAsHiLimit == 0
9180
+ #654 => ISOAutoFlashLimitSameAsHiLimit 1=> Same as ISOAutoHiLimit 0=> Separate (use ISOAutoFlashLimit)
9181
+ 718 => {
9182
+ Name => 'DiffractionCompensation',
9183
+ Format => 'int8u',
9184
+ PrintConv => \%offOn,
9185
+ },
9186
+ 719 => {
9187
+ Name => 'AutoDistortionControl',
9188
+ Format => 'int8u',
9189
+ PrintConv => \%offOn,
9190
+ },
9191
+ 720 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
9192
+ 722 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
9193
+ 724 => {
9194
+ Name => 'FlashControlMode',
9195
+ RawConv => '$$self{FlashControlMode} = $val',
9196
+ PrintConv => \%flashControlModeZ7,
9197
+ },
9198
+ 730 => {
9199
+ Name => 'FlashGNDistance',
9200
+ Condition => '$$self{FlashControlMode} == 2',
9201
+ Unknown => 1,
9202
+ ValueConv => '$val + 3',
9203
+ PrintConv => \%flashGNDistance,
9204
+ },
9205
+ 734 => {
9206
+ Name => 'FlashOutput', # range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). also found in FlashInfoUnknown at offset 0x0a (with different mappings)
9207
+ Condition => '$$self{FlashControlMode} >= 3',
9208
+ Unknown => 1,
9209
+ ValueConv => '2 ** (-$val/3)',
9210
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
9211
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
9212
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9213
+ },
9214
+ 742 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9215
+ 744 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9216
+ 748 => {
9217
+ Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
9218
+ RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
9219
+ PrintConv => \%flashGroupOptionsMode,
9220
+ },
9221
+ 750 => {
9222
+ Name => 'FlashMasterCompensation',
9223
+ Format => 'int8s',
9224
+ Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
9225
+ Unknown => 1,
9226
+ ValueConv => '$val/6',
9227
+ ValueConvInv => '6 * $val',
9228
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9229
+ PrintConvInv => '$val',
9230
+ },
9231
+ 754 => {
9232
+ Name => 'FlashMasterOutput',
9233
+ Unknown => 1,
9234
+ Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
9235
+ ValueConv => '2 ** (-$val/3)',
9236
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
9237
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
9238
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9239
+ },
9240
+ 832 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9241
+ 834 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9242
+ 838 => {
9243
+ Name => 'BracketSet',
9244
+ RawConv => '$$self{BracketSet} = $val',
9245
+ PrintConv => \%bracketSetZ9,
9246
+ },
9247
+ 840 => {
9248
+ Name => 'BracketProgram',
9249
+ Condition => '$$self{BracketSet} < 3',
9250
+ Notes => 'AE and/or Flash Bracketing',
9251
+ PrintConv => \%bracketProgramZ9,
9252
+ },
9253
+ 842 => {
9254
+ Name => 'BracketIncrement',
9255
+ Condition => '$$self{BracketSet} < 3',
9256
+ Notes => 'AE and/or Flash Bracketing',
9257
+ PrintConv => \%bracketIncrementZ9,
9258
+ },
9259
+ 852 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9260
+ 858 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9261
+ 864 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9262
+ 868 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (6048x4032)', 1 => 'Medium (4528x3024)', 2 => 'Small (3024x2016)' }, Unknown => 1},
9263
+ 878 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9264
+ 880 => {
9265
+ Name => 'DynamicAFAreaSize',
9266
+ Condition => '$$self{AFAreaMode} == 2',
9267
+ RawConv => '$$self{DynamicAFAreaSize} = $val',
9268
+ PrintConv => \%dynamicAfAreaModesZ9,
9269
+ },
9270
+ 884 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
9271
+ 888 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
9272
+ 902 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 },
9273
+ 904 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
9274
+ 906 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
9275
+ 908 => { Name => 'PixelShiftDelay', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => '$val == 0? "No Delay" : sprintf("%.0f sec",$val)' }, #seconds in set {0,1,2,3,5,10}
9276
+ 910 => { Name => 'PixelShiftInterval', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => '$val == 0? "No Delay" : sprintf("%.0f sec",$val)' }, #seconds in integer range [0,30]
9277
+ 1002 => { Name => 'SubjectDetectionAreaMF', PrintConv => \%subjectDetectionAreaMZ6III }, #new tag with Z6III
9278
+ 1004 => { Name => 'LinkVRToFocusPoint', PrintConv => \%offOn, Unknown => 1 }, #new tag with Z6III
9279
+ #1044 => { Name => 'MovieFrameRateH264',PrintConv => \%movieFrameRateZ6III, Unknown => 1 }, #new tag with Z6III - only valid for H.264, frame rates for other movie types are at 1164
9280
+ 1046 => { Name => 'MovieSlowMotion', PrintConv => \%movieSlowMotion, Unknown => 1 },
9281
+ 1050 => { Name => 'MovieType', RawConv => '$$self{MovieType} = $val' , PrintConv => \%movieTypeZ9},
9282
+ 1162 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9283
+ 1164 => { Name => 'MovieFrameRate', Condition => '$$self{MovieType} != 1', PrintConv => \%movieFrameRateZ6III, Unknown => 1 },
9284
+ 1255 => {
9285
+ Name => 'CustomSettingsZ6III',
9286
+ Format => 'undef[700]',
9287
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ6III' },
9288
+ },
9289
+ 2300 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9290
+ 2302 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9291
+ 2308 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5 and Lo1, Lo2, Hi1, Hi2
9292
+ 2444 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
9293
+ 2450 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
9294
+ 2476 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9295
+ 2480 => { Name => 'SaveFocusPosition', PrintConv => \%offOn, Unknown => 1 },
9296
+ 2487 => { Name => 'SilentPhotography', PrintConv => \%offOn, Unknown => 1 },
9297
+ 2496 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
9298
+ ),
9299
+
8997
9300
  %Image::ExifTool::Nikon::MenuSettingsZ7II = (
8998
9301
  %binaryDataAttrs,
8999
9302
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -9079,16 +9382,6 @@ my %nikonFocalConversions = (
9079
9382
  PrintConv => \%offOn,
9080
9383
  },
9081
9384
  #324 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
9082
- 326 => {
9083
- Name => 'NikonMeteringMode',
9084
- Unknown => 1,
9085
- PrintConv => {
9086
- 0 => 'Matrix',
9087
- 1 => 'Center',
9088
- 2 => 'Spot',
9089
- 3 => 'Highlight'
9090
- },
9091
- },
9092
9385
  326 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
9093
9386
  328 => {
9094
9387
  Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu