exiftool_vendored 12.76.1 → 12.81.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +105 -4
  3. data/bin/MANIFEST +29 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +4 -3
  7. data/bin/config_files/acdsee.config +37 -57
  8. data/bin/config_files/example.config +16 -2
  9. data/bin/exiftool +102 -31
  10. data/bin/lib/Image/ExifTool/Canon.pm +12 -9
  11. data/bin/lib/Image/ExifTool/CanonVRD.pm +8 -2
  12. data/bin/lib/Image/ExifTool/Exif.pm +52 -4
  13. data/bin/lib/Image/ExifTool/FujiFilm.pm +14 -5
  14. data/bin/lib/Image/ExifTool/GPS.pm +5 -3
  15. data/bin/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
  16. data/bin/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
  17. data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
  18. data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
  19. data/bin/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
  20. data/bin/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
  21. data/bin/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
  22. data/bin/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
  23. data/bin/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
  24. data/bin/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
  25. data/bin/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
  26. data/bin/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
  27. data/bin/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
  28. data/bin/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
  29. data/bin/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
  30. data/bin/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
  31. data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
  32. data/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
  33. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  34. data/bin/lib/Image/ExifTool/Geolocation.pm +935 -0
  35. data/bin/lib/Image/ExifTool/Geotag.pm +14 -2
  36. data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
  37. data/bin/lib/Image/ExifTool/Import.pm +5 -2
  38. data/bin/lib/Image/ExifTool/JSON.pm +15 -10
  39. data/bin/lib/Image/ExifTool/M2TS.pm +32 -4
  40. data/bin/lib/Image/ExifTool/MWG.pm +1 -0
  41. data/bin/lib/Image/ExifTool/MacOS.pm +19 -4
  42. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  43. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  44. data/bin/lib/Image/ExifTool/Nikon.pm +331 -23
  45. data/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
  46. data/bin/lib/Image/ExifTool/Ogg.pm +3 -2
  47. data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
  48. data/bin/lib/Image/ExifTool/OpenEXR.pm +37 -19
  49. data/bin/lib/Image/ExifTool/PDF.pm +5 -5
  50. data/bin/lib/Image/ExifTool/PNG.pm +3 -3
  51. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  52. data/bin/lib/Image/ExifTool/QuickTime.pm +195 -12
  53. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
  54. data/bin/lib/Image/ExifTool/README +6 -5
  55. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  56. data/bin/lib/Image/ExifTool/TagLookup.pm +4871 -4752
  57. data/bin/lib/Image/ExifTool/TagNames.pod +722 -383
  58. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +43 -9
  59. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  60. data/bin/lib/Image/ExifTool/Writer.pl +65 -8
  61. data/bin/lib/Image/ExifTool/XMP.pm +18 -2
  62. data/bin/lib/Image/ExifTool/XMP2.pl +64 -0
  63. data/bin/lib/Image/ExifTool.pm +265 -49
  64. data/bin/lib/Image/ExifTool.pod +63 -25
  65. data/bin/perl-Image-ExifTool.spec +2 -2
  66. data/lib/exiftool_vendored/version.rb +1 -1
  67. metadata +22 -2
@@ -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.30';
68
+ $VERSION = '4.31';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -703,8 +703,8 @@ sub GetAFPointGrid($$;$);
703
703
  #
704
704
  '00 54 56 56 30 30 00 00' => 'Coastal Optical Systems 60mm 1:4 UV-VIS-IR Macro Apo',
705
705
  #
706
- 'BF 4E 26 26 1E 1E 01 04' => 'Irix 15mm f/2.4 Firefly', #30
707
- 'BF 3C 1B 1B 30 30 01 04' => 'Irix 11mm f/4 Firefly', #30
706
+ 'BF 4E 26 26 1E 1E 01 04' => 'Irix 15mm f/2.4 Firefly', #30 (guessing the Blackstone version may be the same ID - PH)
707
+ 'BF 3C 1B 1B 30 30 01 04' => 'Irix 11mm f/4 Firefly', #30 (guessing the Blackstone version may be the same ID - PH)
708
708
  #
709
709
  '4A 40 11 11 2C 0C 4D 02' => 'Samyang 8mm f/3.5 Fish-Eye CS',
710
710
  '4A 48 24 24 24 0C 4D 02.1' => 'Samyang 10mm f/2.8 ED AS NCS CS',
@@ -890,6 +890,12 @@ my %bracketProgramZ9 = (
890
890
  9 => '9F',
891
891
  );
892
892
 
893
+ my %dialsFrameAdvanceZoomPositionZ9 = (
894
+ 0 => 'Hold',
895
+ 1 => 'Focus Point',
896
+ 2 => 'Face Priority',
897
+ );
898
+
893
899
  my %dynamicAfAreaModesZ9 = (
894
900
  0 => 'Small',
895
901
  1 => 'Medium',
@@ -949,6 +955,7 @@ my %highFrameRateZ9 = (
949
955
  3 => 'C30',
950
956
  5 => 'C60',
951
957
  4 => 'C120',
958
+ 6 => 'C15',
952
959
  );
953
960
 
954
961
  my %imageAreaD6 = (
@@ -1118,6 +1125,12 @@ my %movieFrameSizeZ9 = (
1118
1125
  3 => '7680x4320',
1119
1126
  );
1120
1127
 
1128
+ my %movieSlowMotion = (
1129
+ 0 => 'Off',
1130
+ 1 => 'On (4x)', # 120p recording with playback @ 30p [1920 x 1080; 30p x 4] or 100p recording with playback @ 25p [1920 x 1080; 25p x 4]
1131
+ 2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
1132
+ );
1133
+
1121
1134
  my %movieToneMapZ9 = (
1122
1135
  0 => 'SDR',
1123
1136
  1 => 'HLG',
@@ -1125,7 +1138,7 @@ my %movieToneMapZ9 = (
1125
1138
  );
1126
1139
 
1127
1140
  my %movieTypeZ9 = (
1128
- 1 => 'H.265 8-bit (MP4)',
1141
+ 1 => 'H.264 8-bit (MP4)',
1129
1142
  2 => 'H.265 8-bit (MOV)',
1130
1143
  3 => 'H.265 10-bit (MOV)',
1131
1144
  4 => 'ProRes 422 HQ 10-bit (MOV)',
@@ -1172,6 +1185,22 @@ my %offLowNormalHighZ7 = (
1172
1185
  3 => 'High',
1173
1186
  );
1174
1187
 
1188
+ my %pixelShiftDelay = (
1189
+ 0 => 'Off',
1190
+ 1 => '1 s',
1191
+ 2 => '2 s',
1192
+ 3 => '3 s',
1193
+ 4 => '5 s',
1194
+ 5 => '10 s',
1195
+ );
1196
+
1197
+ my %pixelShiftNumberShots = (
1198
+ 0 => '4',
1199
+ 1 => '8',
1200
+ 2 => '16',
1201
+ 3 => '32',
1202
+ );
1203
+
1175
1204
  my %portraitImpressionBalanceZ8 = (
1176
1205
  0 => 'Off',
1177
1206
  1 => 'Mode 1',
@@ -8382,7 +8411,7 @@ my %nikonFocalConversions = (
8382
8411
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8383
8412
  VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
8384
8413
  DATAMEMBER => [ 0x04 ],
8385
- IS_SUBDIR => [ 0x30, 0x84, 0x8c ],
8414
+ IS_SUBDIR => [ 0x30, 0x80, 0x84, 0x8c ],
8386
8415
  WRITABLE => 1,
8387
8416
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8388
8417
  NOTES => 'These tags are extracted from encrypted data in images from the Z8.',
@@ -8425,6 +8454,16 @@ my %nikonFocalConversions = (
8425
8454
  Start => '$val',
8426
8455
  },
8427
8456
  },
8457
+ 0x80 => {
8458
+ Name => 'AutoCaptureOffset',
8459
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "02.00"',
8460
+ Format => 'int32u',
8461
+ AlwaysDecrypt => 1, # (necessary because FirmwareVersion is extracted after decryption time)
8462
+ SubDirectory => {
8463
+ TagTable => 'Image::ExifTool::Nikon::AutoCaptureInfo',
8464
+ Start => '$val',
8465
+ },
8466
+ },
8428
8467
  0x84 => {
8429
8468
  Name => 'OrientOffset',
8430
8469
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
@@ -8709,13 +8748,24 @@ my %nikonFocalConversions = (
8709
8748
  0x10 => [
8710
8749
  {
8711
8750
  Name => 'MenuSettingsOffsetZ8',
8751
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} lt "02.00"',
8712
8752
  Format => 'int32u',
8713
- Notes => 'Firmware versions 1.0.0',
8753
+ Notes => 'Firmware versions 1.0.0 and 1.1.0',
8714
8754
  SubDirectory => {
8715
8755
  TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8',
8716
8756
  Start => '$dirStart + $val',
8717
8757
  },
8718
8758
  },
8759
+ {
8760
+ Name => 'MenuSettingsOffsetZ8v2',
8761
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "02.00"',
8762
+ Notes => 'Firmware version 2.0',
8763
+ Format => 'int32u',
8764
+ SubDirectory => {
8765
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8v2',
8766
+ Start => '$dirStart + $val',
8767
+ },
8768
+ },
8719
8769
  ],
8720
8770
  );
8721
8771
 
@@ -9065,15 +9115,7 @@ my %nikonFocalConversions = (
9065
9115
  #463 => SilentPhotography
9066
9116
  502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9067
9117
  504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9068
- 506 => {
9069
- Name => 'MovieSlowMotion',
9070
- Unknown => 1,
9071
- PrintConv => {
9072
- 0 => 'Off',
9073
- 1 => 'On (4x)', # 120p recording with playback @ 30p [1920 x 1080; 30p x 4] or 100p recording with playback @ 25p [1920 x 1080; 25p x 4]
9074
- 2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
9075
- },
9076
- },
9118
+ 506 => { Name => 'MovieSlowMotion', PrintConv => \%movieSlowMotion, Unknown => 1 },
9077
9119
  510 => {
9078
9120
  Name => 'MovieType',
9079
9121
  Unknown => 1,
@@ -9284,7 +9326,7 @@ my %nikonFocalConversions = (
9284
9326
  },
9285
9327
  618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
9286
9328
  622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
9287
- 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9329
+ 636 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9288
9330
  730 => {
9289
9331
  Name => 'MovieImageArea',
9290
9332
  Unknown => 1,
@@ -9333,7 +9375,7 @@ my %nikonFocalConversions = (
9333
9375
  Format => 'undef[730]',
9334
9376
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ8' },
9335
9377
  },
9336
- 1682 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9378
+ 1698 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9337
9379
  1684 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9338
9380
  1690 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9339
9381
  1712 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
@@ -9384,6 +9426,260 @@ my %nikonFocalConversions = (
9384
9426
  1890 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9385
9427
  1899 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
9386
9428
  );
9429
+ %Image::ExifTool::Nikon::MenuSettingsZ8v2 = (
9430
+ %binaryDataAttrs,
9431
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9432
+ DATAMEMBER => [ 152, 200, 204, 244, 440, 548, 554, 570, 596, 2046 ],
9433
+ IS_SUBDIR => [ 943 ],
9434
+ NOTES => 'These tags are used by the Z8 firmware 1.00.',
9435
+ 72 => {
9436
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9437
+ PrintConv => \%highFrameRateZ9,
9438
+ },
9439
+ 152 => {
9440
+ Name => 'MultipleExposureMode',
9441
+ RawConv => '$$self{MultipleExposureMode} = $val',
9442
+ PrintConv => \%multipleExposureModeZ9,
9443
+ },
9444
+ 154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
9445
+ 184 => {
9446
+ Name => 'IntervalDurationHours',
9447
+ Format => 'int32u',
9448
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9449
+ },
9450
+ 188 => {
9451
+ Name => 'IntervalDurationMinutes',
9452
+ Format => 'int32u',
9453
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9454
+ },
9455
+ 192 => {
9456
+ Name => 'IntervalDurationSeconds',
9457
+ Format => 'int32u',
9458
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9459
+ },
9460
+ 200 => {
9461
+ Name => 'Intervals',
9462
+ Format => 'int32u',
9463
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
9464
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9465
+ },
9466
+ 204 => {
9467
+ Name => 'ShotsPerInterval',
9468
+ Format => 'int32u',
9469
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9470
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9471
+ },
9472
+ 208 => {
9473
+ Name => 'IntervalExposureSmoothing',
9474
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9475
+ Format => 'int8u',
9476
+ PrintConv => \%offOn,
9477
+ },
9478
+ 210 => {
9479
+ Name => 'IntervalPriority',
9480
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9481
+ Format => 'int8u',
9482
+ PrintConv => \%offOn,
9483
+ },
9484
+ 244 => {
9485
+ Name => 'FocusShiftNumberShots', #1-300
9486
+ RawConv => '$$self{FocusShiftNumberShots} = $val',
9487
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9488
+ },
9489
+ 248 => {
9490
+ Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
9491
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9492
+ },
9493
+ 252 => {
9494
+ Name => 'FocusShiftInterval',
9495
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9496
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
9497
+ },
9498
+ 256 => {
9499
+ Name => 'FocusShiftExposureLock',
9500
+ Unknown => 1,
9501
+ PrintConv => \%offOn,
9502
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9503
+ },
9504
+ 286 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9505
+ 288 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9506
+ 324 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9507
+ 338 => { Name => 'AutoISO', PrintConv => \%offOn },
9508
+ 340 => {
9509
+ Name => 'ISOAutoHiLimit',
9510
+ Format => 'int16u',
9511
+ Unknown => 1,
9512
+ ValueConv => '($val-104)/8',
9513
+ ValueConvInv => '8 * ($val + 104)',
9514
+ PrintConv => \%iSOAutoHiLimitZ7,
9515
+ },
9516
+ 342 => {
9517
+ Name => 'ISOAutoFlashLimit',
9518
+ Format => 'int16u',
9519
+ Unknown => 1,
9520
+ ValueConv => '($val-104)/8',
9521
+ ValueConvInv => '8 * ($val + 104)',
9522
+ PrintConv => \%iSOAutoHiLimitZ7,
9523
+ },
9524
+ 350 => {
9525
+ Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
9526
+ ValueConv => '$val / 8',
9527
+ Format => 'int16s',
9528
+ PrintConv => \%iSOAutoShutterTimeZ9,
9529
+ },
9530
+ 432 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9531
+ 434 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
9532
+ 436 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
9533
+ 440 => {
9534
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
9535
+ RawConv => '$$self{FlashControlMode} = $val',
9536
+ PrintConv => \%flashControlModeZ7,
9537
+ },
9538
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9539
+ 550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9540
+ 554 => {
9541
+ Name => 'BracketSet',
9542
+ RawConv => '$$self{BracketSet} = $val',
9543
+ PrintConv => \%bracketSetZ9,
9544
+ },
9545
+ 556 => {
9546
+ Name => 'BracketProgram',
9547
+ Condition => '$$self{BracketSet} < 3',
9548
+ Notes => 'AE and/or Flash Bracketing',
9549
+ PrintConv => \%bracketProgramZ9,
9550
+ },
9551
+ 558 => {
9552
+ Name => 'BracketIncrement',
9553
+ Condition => '$$self{BracketSet} < 3',
9554
+ Notes => 'AE and/or Flash Bracketing',
9555
+ PrintConv => \%bracketIncrementZ9,
9556
+ },
9557
+ 570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9558
+ #572 HDRSaveRaw 0=> No; 1=> Yes
9559
+ 576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9560
+ 582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9561
+ 586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
9562
+ 592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9563
+ 594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9564
+ 596 => {
9565
+ Name => 'DynamicAFAreaSize',
9566
+ Condition => '$$self{AFAreaMode} == 2',
9567
+ RawConv => '$$self{DynamicAFAreaSize} = $val',
9568
+ PrintConv => \%dynamicAfAreaModesZ9,
9569
+ },
9570
+ 618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
9571
+ 622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
9572
+ 636 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9573
+ 730 => {
9574
+ Name => 'MovieImageArea',
9575
+ Unknown => 1,
9576
+ Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
9577
+ PrintConv => \%imageAreaZ9b,
9578
+ },
9579
+ #736 => { Name => 'MovieSlowMotion', PrintConv => \%movieSlowMotion, Unknown => 1 }, #only valid for MovieType H.264 8-bit
9580
+ 740 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
9581
+ 742 => {
9582
+ Name => 'MovieISOAutoHiLimit',
9583
+ Format => 'int16u',
9584
+ Unknown => 1,
9585
+ ValueConv => '($val-104)/8',
9586
+ ValueConvInv => '8 * ($val + 104)',
9587
+ PrintConv => \%iSOAutoHiLimitZ7,
9588
+ },
9589
+ 744 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
9590
+ 746 => {
9591
+ Name => 'MovieISOAutoManualMode',
9592
+ Format => 'int16u',
9593
+ Unknown => 1,
9594
+ ValueConv => '($val-104)/8',
9595
+ ValueConvInv => '8 * ($val + 104)',
9596
+ PrintConv => \%iSOAutoHiLimitZ7,
9597
+ },
9598
+ 820 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
9599
+ 822 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9600
+ 828 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
9601
+ 830 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
9602
+ 832 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
9603
+ 834 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
9604
+ 836 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
9605
+ 840 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9606
+ 842 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
9607
+ 844 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
9608
+ 846 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9609
+ 848 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
9610
+ 850 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
9611
+ 878 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9612
+ 880 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9613
+ 886 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
9614
+ 887 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
9615
+ 888 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9616
+ 896 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9617
+ 943 => {
9618
+ Name => 'CustomSettingsZ8',
9619
+ Format => 'undef[755]',
9620
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ8' },
9621
+ },
9622
+ 1698 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9623
+ 1700 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9624
+ 1706 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9625
+ 1728 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9626
+ 1732 => { Name => 'NonCPULens1FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
9627
+ 1734 => { Name => 'NonCPULens2FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9628
+ 1736 => { Name => 'NonCPULens3FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9629
+ 1738 => { Name => 'NonCPULens4FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9630
+ 1740 => { Name => 'NonCPULens5FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9631
+ 1742 => { Name => 'NonCPULens6FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9632
+ 1744 => { Name => 'NonCPULens7FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9633
+ 1746 => { Name => 'NonCPULens8FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9634
+ 1748 => { Name => 'NonCPULens9FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9635
+ 1750 => { Name => 'NonCPULens10FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9636
+ 1752 => { Name => 'NonCPULens11FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9637
+ 1754 => { Name => 'NonCPULens12FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9638
+ 1756 => { Name => 'NonCPULens13FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9639
+ 1758 => { Name => 'NonCPULens14FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9640
+ 1760 => { Name => 'NonCPULens15FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9641
+ 1762 => { Name => 'NonCPULens16FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9642
+ 1764 => { Name => 'NonCPULens17FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9643
+ 1766 => { Name => 'NonCPULens18FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9644
+ 1768 => { Name => 'NonCPULens19FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9645
+ 1770 => { Name => 'NonCPULens20FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9646
+ 1812 => { Name => 'NonCPULens1MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9647
+ 1816 => { Name => 'NonCPULens2MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9648
+ 1820 => { Name => 'NonCPULens3MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9649
+ 1824 => { Name => 'NonCPULens4MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9650
+ 1828 => { Name => 'NonCPULens5MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9651
+ 1832 => { Name => 'NonCPULens6MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9652
+ 1836 => { Name => 'NonCPULens7MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9653
+ 1840 => { Name => 'NonCPULens8MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9654
+ 1844 => { Name => 'NonCPULens9MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9655
+ 1848 => { Name => 'NonCPULens10MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9656
+ 1852 => { Name => 'NonCPULens11MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9657
+ 1856 => { Name => 'NonCPULens12MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9658
+ 1860 => { Name => 'NonCPULens13MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9659
+ 1864 => { Name => 'NonCPULens14MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9660
+ 1868 => { Name => 'NonCPULens15MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9661
+ 1872 => { Name => 'NonCPULens16MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9662
+ 1876 => { Name => 'NonCPULens17MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9663
+ 1880 => { Name => 'NonCPULens18MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9664
+ 1884 => { Name => 'NonCPULens19MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9665
+ 1888 => { Name => 'NonCPULens20MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9666
+ 1824 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
9667
+ 1842 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
9668
+ 1843 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
9669
+ 1878 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
9670
+ 1906 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9671
+ 1915 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
9672
+ 2046 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
9673
+ 2048 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
9674
+ 2050 => { Name => 'PixelShiftDelay', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftDelay },
9675
+ 2052 => { Name => 'PlaybackButton', %buttonsZ9 }, #CSf2
9676
+ 2054 => { Name => 'WBButton', %buttonsZ9}, #CSf2
9677
+ 2056 => { Name => 'BracketButton', %buttonsZ9}, #CSf2
9678
+ 2058 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ9}, #CSf2
9679
+ 2060 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ9}, #CSf2
9680
+ 2062 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ9}, #CSf2
9681
+ 2064 => { Name => 'BracketButtonPlaybackMode', %buttonsZ9}, #CSf2
9682
+ );
9387
9683
  %Image::ExifTool::Nikon::MenuSettingsZ9 = (
9388
9684
  %binaryDataAttrs,
9389
9685
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -9733,7 +10029,7 @@ my %nikonFocalConversions = (
9733
10029
  RawConv => '$$self{DynamicAFAreaSize} = $val',
9734
10030
  PrintConv => \%dynamicAfAreaModesZ9,
9735
10031
  },
9736
- 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
10032
+ 636 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9737
10033
  646 => {
9738
10034
  Name => 'MovieImageArea',
9739
10035
  Unknown => 1,
@@ -9833,7 +10129,7 @@ my %nikonFocalConversions = (
9833
10129
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9834
10130
  DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 570, 596 ],
9835
10131
  IS_SUBDIR => [ 847 ],
9836
- NOTES => 'These tags are used by the Z9 firmware 3.00.',
10132
+ NOTES => 'These tags are used by the Z9 firmware 4.0.0 and 4.1.0',
9837
10133
  72 => {
9838
10134
  Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9839
10135
  PrintConv => \%highFrameRateZ9,
@@ -9970,7 +10266,7 @@ my %nikonFocalConversions = (
9970
10266
  RawConv => '$$self{DynamicAFAreaSize} = $val',
9971
10267
  PrintConv => \%dynamicAfAreaModesZ9,
9972
10268
  },
9973
- 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
10269
+ 636 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9974
10270
  646 => {
9975
10271
  Name => 'MovieImageArea',
9976
10272
  Unknown => 1,
@@ -10116,6 +10412,18 @@ my %nikonFocalConversions = (
10116
10412
  Format => 'fixed32u',
10117
10413
  PrintConv => '$val ? sprintf("%.1f sec",$val/1000) : "Off"',
10118
10414
  },
10415
+ 2052 => { #CSf2-m3
10416
+ Name => 'CommandDialFrameAdvanceZoom',
10417
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
10418
+ PrintConv => \%dialsFrameAdvanceZoomPositionZ9,
10419
+ Unknown => 1
10420
+ },
10421
+ 2054 => { #CSf2-n3
10422
+ Name => 'SubCommandDialFrameAdvanceZoom',
10423
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
10424
+ PrintConv => \%dialsFrameAdvanceZoomPositionZ9,
10425
+ Unknown => 1
10426
+ },
10119
10427
  2056 => { Name => 'PlaybackButton', %buttonsZ9}, #CSf2
10120
10428
  2058 => { Name => 'WBButton', %buttonsZ9}, #CSf2
10121
10429
  2060 => { Name => 'BracketButton', %buttonsZ9}, #CSf2
@@ -11406,7 +11714,7 @@ my %nikonFocalConversions = (
11406
11714
  },
11407
11715
  );
11408
11716
 
11409
- # MakerNotes0x56 - burst info for Z9
11717
+ # MakerNotes0x56 - burst info for Z8 and Z9
11410
11718
  %Image::ExifTool::Nikon::MakerNotes0x56 = (
11411
11719
  %binaryDataAttrs,
11412
11720
  GROUPS => { 0 => 'MakerNotes' },
@@ -11416,7 +11724,7 @@ my %nikonFocalConversions = (
11416
11724
  Writable => 0,
11417
11725
  },
11418
11726
  4 => {
11419
- Name => 'BurstGroupID', #all frames shot within a burst (using CL/CH/C30/C60/C120) will share the same BurstGroupID. Value will be > 0 for all images shot in continuous modes. 0 for single-frame.
11727
+ Name => 'BurstGroupID', #all frames shot within a burst (using CL/CH/C30/C60/C120) will share the same BurstGroupID. Value will be > 0 for all images shot in continuous modes (or via Pixel Shift). 0 for single-frame.
11420
11728
  Format => 'int16u'
11421
11729
  },
11422
11730
  );
@@ -11440,7 +11748,7 @@ my %nikonFocalConversions = (
11440
11748
  Name => 'VignetteInfo', # Z-series vignette correction information
11441
11749
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::VignetteInfo' },
11442
11750
  },
11443
- # 0x07 - undef[104]
11751
+ # 0x07 - undef[104] #possibly Z-series diffration correction information (#28)
11444
11752
  # 0x08 - undef[24]
11445
11753
  # 0x09 - undef[36]
11446
11754
  );
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
15
15
  use strict;
16
16
  use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ9);
17
17
 
18
- $VERSION = '1.24';
18
+ $VERSION = '1.25';
19
19
 
20
20
  @ISA = qw(Exporter);
21
21
  @EXPORT_OK = qw(%buttonsZ9);
@@ -77,6 +77,7 @@ $VERSION = '1.24';
77
77
  66 => 'Voice Memo',
78
78
  70 => 'Photo Shooting Bank',
79
79
  71 => 'ISO',
80
+ 72 => 'Shooting Mode',
80
81
  73 => 'Exposure Compensation',
81
82
  76 => 'Silent Mode',
82
83
  78 => 'LiveView Information',
@@ -90,6 +91,9 @@ $VERSION = '1.24';
90
91
  86 => 'Save Focus Position',
91
92
  87 => 'Recall Focus Position',
92
93
  88 => 'Recall Shooting Functions (Hold)',
94
+ 89 => 'Set Picture Control (HLG)',
95
+ 90 => 'Skin Softening',
96
+ 91 => 'Portrait Impression Balance',
93
97
  97 => 'High Frequency Flicker Reduction',
94
98
  98 => 'Switch FX/DX',
95
99
  99 => 'View Mode (Photo LV)',
@@ -104,7 +108,25 @@ $VERSION = '1.24';
104
108
  110 => 'DISP - Cycle Information Display (playback)', # Playback mode
105
109
  111 => 'Resume Shooting',
106
110
  112 => 'Switch Eyes',
111
+ 113 => 'Power Zoom +',
112
+ 114 => 'Power Zoom -',
107
113
  115 => 'Delete',
114
+ 116 => 'Pixel Shift Shooting',
115
+ 117 => 'Cycle AF-area Mode',
116
+ 118 => 'Raw Processing (Current)', #118-131 are Retouch options
117
+ 119 => 'Raw Processing (Multiple)',
118
+ 120 => 'Trim',
119
+ 121 => 'Resize (Current)',
120
+ 122 => 'Resize (Multiple)',
121
+ 123 => 'D-Lighting',
122
+ 124 => 'Straighten',
123
+ 125 => 'Distortion Control',
124
+ 126 => 'Perspective Control',
125
+ 127 => 'Monochrome',
126
+ 128 => 'Overlay (Add)',
127
+ 129 => 'Lighten',
128
+ 130 => 'Darken',
129
+ 131 => 'Motion Blend',
108
130
  },
109
131
  );
110
132
  my %dialsZ9 = (
@@ -118,6 +140,18 @@ my %dialsZ9 = (
118
140
  7 => 'Rating',
119
141
  8 => 'Page',
120
142
  9 => 'Skip To First Shot In Series',
143
+ 10 => 'Uploaded to FTP',
144
+ 11 => 'Uploaded to Computer',
145
+ );
146
+ my %dialsVideoZ9 = (
147
+ 0 => '2 s',
148
+ 1 => '5 s',
149
+ 2 => '10 s',
150
+ 3 => '1 Frame',
151
+ 4 => '5 Frames',
152
+ 5 => '10 Frames',
153
+ 6 => 'First/Last Frame',
154
+ 7 => 'Playback Speed',
121
155
  );
122
156
  my %evfGridsZ9 = (
123
157
  0 => '3x3',
@@ -9974,6 +10008,9 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9974
10008
  421 => { Name => 'Func1ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-a
9975
10009
  423 => { Name => 'Func2ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-b
9976
10010
  437 => { Name => 'MovieRecordButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-m
10011
+ 453 => { Name => 'WBButtonPlaybackMode', %buttonsZ9}, #CSf2
10012
+ 461 => { Name => 'CommandDialVideoPlaybackMode', PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
10013
+ 465 => { Name => 'SubCommandDialVideoPlaybackMode', PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
9977
10014
  467 => { Name => 'FocusPointLock', PrintConv => \%offOn, Unknown => 1}, # CSf4-c
9978
10015
  459 => { Name => 'CommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-k
9979
10016
  463 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
@@ -10055,6 +10092,11 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10055
10092
  },
10056
10093
  681 => { Name => 'ViewModeShowEffectsOfSettings', PrintConv => { 0=>'Always', 1=> 'Only When Flash Not Used'}, Unknown => 1 }, #CS8-a
10057
10094
  683 => { Name => 'DispButton', %buttonsZ9}, #CSf2
10095
+ 753 => { #CSd5
10096
+ Name => 'ExposureDelay',
10097
+ Format => 'int16u',
10098
+ PrintConv => '$val ? sprintf("%.1f sec",$val/1000) : "Off"',
10099
+ },
10058
10100
  );
10059
10101
 
10060
10102
  # Z9 custom settings (ref 1) #base at offset26 + 1035 (firmware 1.0.0)
@@ -10806,7 +10848,19 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10806
10848
  471 => { Name => 'QualityButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-h
10807
10849
  477 => { Name => 'WhiteBalanceButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-i
10808
10850
  483 => { Name => 'CommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-k
10851
+ 485 => { # CSf3-m2
10852
+ Name => 'CommandDialVideoPlaybackMode',
10853
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
10854
+ PrintConv => \%dialsVideoZ9,
10855
+ Unknown => 1
10856
+ },
10809
10857
  487 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
10858
+ 489 => { # CSf3-n2
10859
+ Name => 'SubCommandDialVideoPlaybackMode',
10860
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
10861
+ PrintConv => \%dialsVideoZ9,
10862
+ Unknown => 1
10863
+ },
10810
10864
  491 => { Name => 'FocusPointLock', PrintConv => \%offOn, Unknown => 1}, # CSf4-c
10811
10865
  493 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
10812
10866
  505 => { Name => 'VerticalMovieFuncButton', %buttonsZ9, Unknown => 1}, # CSg2-d
@@ -17,7 +17,7 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.03';
20
+ $VERSION = '1.04';
21
21
 
22
22
  my $MAX_PACKETS = 2; # maximum packets to scan from each stream at start of file
23
23
 
@@ -145,6 +145,7 @@ sub ProcessOGG($$)
145
145
  # calculate total data length
146
146
  my $dataLen = Get8u(\$buff, 27);
147
147
  if ($nseg) {
148
+ last unless $raf;
148
149
  $raf->Read($buff, $nseg-1) == $nseg-1 or last;
149
150
  my @segs = unpack('C*', $buff);
150
151
  # could check that all these (but the last) are 255...
@@ -160,7 +161,7 @@ sub ProcessOGG($$)
160
161
  }
161
162
  }
162
163
  # read page data
163
- $raf->Read($buff, $dataLen) == $dataLen or last;
164
+ last unless $raf and $raf->Read($buff, $dataLen) == $dataLen;
164
165
  if ($verbose > 1) {
165
166
  printf $out "Page %d, stream 0x%x, flag 0x%x (%d bytes)\n",
166
167
  $pageNum, $stream, $flag, $dataLen;