exiftool_vendored 12.33.0 → 12.37.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +66 -0
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/exiftool +65 -37
  7. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -2
  8. data/bin/lib/Image/ExifTool/Canon.pm +156 -10
  9. data/bin/lib/Image/ExifTool/Charset.pm +2 -0
  10. data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
  11. data/bin/lib/Image/ExifTool/Exif.pm +13 -1
  12. data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
  13. data/bin/lib/Image/ExifTool/GIF.pm +5 -1
  14. data/bin/lib/Image/ExifTool/GPS.pm +14 -10
  15. data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
  16. data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
  17. data/bin/lib/Image/ExifTool/Nikon.pm +992 -18
  18. data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
  19. data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
  20. data/bin/lib/Image/ExifTool/PDF.pm +5 -3
  21. data/bin/lib/Image/ExifTool/PNG.pm +1 -0
  22. data/bin/lib/Image/ExifTool/QuickTime.pm +17 -3
  23. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
  24. data/bin/lib/Image/ExifTool/README +4 -0
  25. data/bin/lib/Image/ExifTool/Sony.pm +29 -11
  26. data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
  27. data/bin/lib/Image/ExifTool/TagLookup.pm +6437 -5843
  28. data/bin/lib/Image/ExifTool/TagNames.pod +1292 -46
  29. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
  30. data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
  31. data/bin/lib/Image/ExifTool/Writer.pl +50 -5
  32. data/bin/lib/Image/ExifTool/XMP.pm +119 -30
  33. data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
  34. data/bin/lib/Image/ExifTool.pm +71 -8
  35. data/bin/lib/Image/ExifTool.pod +9 -1
  36. data/bin/perl-Image-ExifTool.spec +1 -1
  37. data/lib/exiftool_vendored/version.rb +1 -1
  38. metadata +2 -2
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
15
15
  use strict;
16
16
  use vars qw($VERSION);
17
17
 
18
- $VERSION = '1.17';
18
+ $VERSION = '1.18';
19
19
 
20
20
  my %offOn = ( 0 => 'Off', 1 => 'On' );
21
21
  my %onOff = ( 0 => 'On', 1 => 'Off' );
@@ -3358,6 +3358,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
3358
3358
  47 => 'AF-Area Mode + AF-On (Auto Area AF)',
3359
3359
  49 => 'Sync Release (Master Only)',
3360
3360
  50 => 'Sync Release (Remote Only)',
3361
+ 58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
3362
+ 59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
3361
3363
  },
3362
3364
  },
3363
3365
  15.1 => { # CSf1-a
@@ -3401,6 +3403,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
3401
3403
  47 => 'AF-Area Mode + AF-On (Auto Area AF)',
3402
3404
  49 => 'Sync Release (Master Only)',
3403
3405
  50 => 'Sync Release (Remote Only)',
3406
+ 58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
3407
+ 59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
3404
3408
  },
3405
3409
  },
3406
3410
  16.1 => { # CSf1-p
@@ -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.04';
20
+ $VERSION = '1.06';
21
21
 
22
22
  sub ProcessNikonSettings($$$);
23
23
 
@@ -161,6 +161,39 @@ my %iSOAutoHiLimitD6 = (
161
161
  45 => 'ISO Hi 5.0',
162
162
  );
163
163
 
164
+ my %iSOAutoHiLimitZ7 = (
165
+ 1 => 'ISO 100',
166
+ 2 => 'ISO 125',
167
+ 4 => 'ISO 160',
168
+ 5 => 'ISO 200',
169
+ 6 => 'ISO 250',
170
+ 8 => 'ISO 320',
171
+ 9 => 'ISO 400',
172
+ 10 => 'ISO 500',
173
+ 12 => 'ISO 640',
174
+ 13 => 'ISO 800',
175
+ 14 => 'ISO 1000',
176
+ 16 => 'ISO 1250',
177
+ 17 => 'ISO 1600',
178
+ 18 => 'ISO 2000',
179
+ 20 => 'ISO 2500',
180
+ 21 => 'ISO 3200',
181
+ 22 => 'ISO 4000',
182
+ 24 => 'ISO 5000',
183
+ 25 => 'ISO 6400',
184
+ 26 => 'ISO 8000',
185
+ 28 => 'ISO 10000',
186
+ 29 => 'ISO 12800',
187
+ 30 => 'ISO 16000',
188
+ 32 => 'ISO 20000',
189
+ 33 => 'ISO 25600',
190
+ 38 => 'ISO Hi 0.3',
191
+ 39 => 'ISO Hi 0.5',
192
+ 40 => 'ISO Hi 0.7',
193
+ 41 => 'ISO Hi 1.0',
194
+ 42 => 'ISO Hi 2.0',
195
+ );
196
+
164
197
  my %lensFuncButtonZ7m2 = (
165
198
  1 => 'AF-On',
166
199
  2 => 'AF Lock Only',
@@ -305,16 +338,21 @@ my %times4s10s20s1m5m20m = (
305
338
 
306
339
  my %yesNo = ( 1 => 'Yes', 2 => 'No' );
307
340
 
308
- my %infoZ72 = (
309
- Condition => '$$self{Model} =~ /^NIKON Z 6_2/i or $$self{Model} =~ /^NIKON Z 7_2/i',
310
- Notes => 'Z7_2',
311
- );
312
-
313
341
  my %infoD6 = (
314
- Condition => '$$self{Model} =~ /^NIKON D6/i',
342
+ Condition => '$$self{Model} =~ /^NIKON D6\b/i',
315
343
  Notes => 'D6',
316
344
  );
317
345
 
346
+ my %infoZ7 = (
347
+ Condition => '$$self{Model} =~ /^NIKON Z (7|7_2)\b/i',
348
+ Notes => 'Z7 and Z7_2',
349
+ );
350
+
351
+ my %infoZSeries = (
352
+ Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc)\b/i',
353
+ Notes => 'Z Series cameras thru November 2021',
354
+ );
355
+
318
356
  # Nikon Settings tags (ref 1, tag ID's ref PH)
319
357
  %Image::ExifTool::NikonSettings::Main = (
320
358
  PROCESS_PROC => \&ProcessNikonSettings,
@@ -329,39 +367,8 @@ my %infoD6 = (
329
367
  %infoD6,
330
368
  },{
331
369
  Name => 'ISOAutoHiLimit',
332
- PrintConv => {
333
- 1 => 'ISO 100',
334
- 2 => 'ISO 125',
335
- 4 => 'ISO 160',
336
- 5 => 'ISO 200',
337
- 6 => 'ISO 250',
338
- 8 => 'ISO 320',
339
- 9 => 'ISO 400',
340
- 10 => 'ISO 500',
341
- 12 => 'ISO 640',
342
- 13 => 'ISO 800',
343
- 14 => 'ISO 1000',
344
- 16 => 'ISO 1250',
345
- 17 => 'ISO 1600',
346
- 18 => 'ISO 2000',
347
- 20 => 'ISO 2500',
348
- 21 => 'ISO 3200',
349
- 22 => 'ISO 4000',
350
- 24 => 'ISO 5000',
351
- 25 => 'ISO 6400',
352
- 26 => 'ISO 8000',
353
- 28 => 'ISO 10000',
354
- 29 => 'ISO 12800',
355
- 30 => 'ISO 16000',
356
- 32 => 'ISO 20000',
357
- 33 => 'ISO 25600',
358
- 38 => 'ISO Hi 0.3',
359
- 39 => 'ISO Hi 0.5',
360
- 40 => 'ISO Hi 0.7',
361
- 41 => 'ISO Hi 1.0',
362
- 42 => 'ISO Hi 2.0',
363
- },
364
- %infoZ72,
370
+ PrintConv => \%iSOAutoHiLimitZ7,
371
+ %infoZ7,
365
372
  }],
366
373
  0x002 => [{
367
374
  Name => 'ISOAutoFlashLimit',
@@ -441,7 +448,7 @@ my %infoD6 = (
441
448
  42 => 'ISO Hi 1.0',
442
449
  43 => 'ISO Hi 2.0',
443
450
  },
444
- %infoZ72,
451
+ %infoZ7,
445
452
  }],
446
453
  0x003 => { # (D6/Z7_2)
447
454
  Name => 'ISOAutoShutterTime',
@@ -542,18 +549,10 @@ my %infoD6 = (
542
549
  37 => 'ISO Hi 1.0',
543
550
  38 => 'ISO Hi 2.0',
544
551
  },
545
- %infoZ72,
552
+ %infoZ7,
546
553
  }],
547
554
  0x00e => { Name => 'MovieISOAutoControlManualMode',PrintConv => \%onOff }, # (D6/Z7_2)
548
- # 0x00f => [{ # this tag should reside here, but unable to confirm
549
- # Name => 'MovieISOAutoManualMode',
550
- # PrintConv => \%iSOAutoHiLimitD6,
551
- # %infoD6,
552
- # },{
553
- # Name => 'MovieISOAutoManualMode',
554
- # PrintConv => \%iSOAutoHiLimitZ7m2,
555
- # %infoZ72,
556
- # }],
555
+ 0x00f => { Name => 'MovieWhiteBalanceSameAsPhoto', PrintConv => \%yesNo }, # (D6/Z7_2)
557
556
  0x01d => [{ # CSa1 (D6)
558
557
  Name => 'AF-CPrioritySel',
559
558
  PrintConv => { # valid for cameras with 4 options for CS1, otherwise 1=Release, 2=Focus
@@ -566,7 +565,7 @@ my %infoD6 = (
566
565
  },{ # CSa1 (Z7_2)
567
566
  Name => 'AF-CPrioritySel',
568
567
  PrintConv => \%releaseFocus,
569
- %infoZ72,
568
+ %infoZSeries,
570
569
  }],
571
570
  0x01e => { Name => 'AF-SPrioritySel', PrintConv => \%releaseFocus }, # CSa2 (D6), CSa2 (Z7_2)
572
571
  0x020 => [{ # CSa4 (D6)
@@ -580,7 +579,7 @@ my %infoD6 = (
580
579
  },{ # CSa4 (Z7_2)
581
580
  Name => 'AFPointSel',
582
581
  PrintConv => { 1 => 'Use All', 2 => 'Use Half' },
583
- %infoZ72,
582
+ %infoZSeries,
584
583
  }],
585
584
  0x022 => { Name => 'AFActivation', PrintConv => { 1 => 'Shutter/AF-On', 2 => 'AF-On Only' } }, # CSa6-a (D6/Z7_2) (missing enable/disable out of focus release) # (D6)
586
585
  0x023 => { Name => 'FocusPointWrap', PrintConv => { 1 => 'Wrap', 2 => 'No Wrap' } }, # CSa16 (D6), CSa8 (Z7_2)
@@ -617,7 +616,7 @@ my %infoD6 = (
617
616
  },{ # CSb3 (Z7_2)
618
617
  Name => 'CenterWeightedAreaSize',
619
618
  PrintConv => { 1 => '12 mm', 2 => 'Average' },
620
- %infoZ72,
619
+ %infoZSeries,
621
620
  }],
622
621
  0x02f => { # CSb7-a (D6), CSb4-a (Z7_2)
623
622
  Name => 'FineTuneOptMatrixMetering',
@@ -681,7 +680,7 @@ my %infoD6 = (
681
680
  7 => '30 min',
682
681
  8 => 'No Limit',
683
682
  },
684
- %infoZ72,
683
+ %infoZSeries,
685
684
  }],
686
685
  0x035 => { # CSc3-a (D6), CSc2-a (Z7_2)
687
686
  Name => 'SelfTimerTime',
@@ -770,7 +769,7 @@ my %infoD6 = (
770
769
  6 => '1/80 s',
771
770
  7 => '1/60 s',
772
771
  },
773
- %infoZ72,
772
+ %infoZSeries,
774
773
  }],
775
774
  0x048 => { # CSe2 (D6/Z7_2)
776
775
  Name => 'FlashShutterSpeed',
@@ -844,7 +843,7 @@ my %infoD6 = (
844
843
  25 => 'Non-CPU Lens',
845
844
  26 => 'None',
846
845
  },
847
- %infoZ72,
846
+ %infoZSeries,
848
847
  }],
849
848
  0x053 => [{ # CSf4-a (D6)
850
849
  Name => 'MultiSelectorShootMode',
@@ -864,7 +863,7 @@ my %infoD6 = (
864
863
  4 => 'Zoom (High)',
865
864
  5 => 'None',
866
865
  },
867
- %infoZ72,
866
+ %infoZSeries,
868
867
  }],
869
868
  0x054 => [{ # CSf4-c (D6)
870
869
  Name => 'MultiSelectorPlaybackMode',
@@ -887,7 +886,7 @@ my %infoD6 = (
887
886
  5 => 'Zoom (High)',
888
887
  6 => 'Choose Folder',
889
888
  },
890
- %infoZ72,
889
+ %infoZSeries,
891
890
  }],
892
891
  0x056 => { # CSf4-b (D6)
893
892
  Name => 'MultiSelectorLiveView',
@@ -975,9 +974,29 @@ my %infoD6 = (
975
974
  1 => 'Manual (dark on light)',
976
975
  2 => 'Manual (light on dark)',
977
976
  },
978
- %infoZ72,
977
+ %infoZSeries,
979
978
  }],
980
979
  0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
980
+ 0x075 => { # Settings menu # (D6,Z7_2)
981
+ Name => 'HDMIOutputResolution',
982
+ PrintConv => {
983
+ 1 => 'Auto',
984
+ 2 => '2160p',
985
+ 3 => '1080p',
986
+ 4 => '1080i',
987
+ 5 => '720p',
988
+ 6 => '576p',
989
+ 7 => '480p',
990
+ },
991
+ },
992
+ 0x077 => { # Settings menu # (D6,Z7_2)
993
+ Name => 'HDMIOutputRange',
994
+ PrintConv => {
995
+ 1 => 'Auto',
996
+ 2 => 'Limit',
997
+ 3 => 'Full',
998
+ },
999
+ },
981
1000
  0x080 => [{
982
1001
  Name => 'RemoteFuncButton',
983
1002
  PrintConv => {
@@ -1010,7 +1029,7 @@ my %infoD6 = (
1010
1029
  10 => 'None',
1011
1030
  11 => 'LiveView Info Display On/Off',
1012
1031
  },
1013
- %infoZ72,
1032
+ %infoZSeries,
1014
1033
  }],
1015
1034
  0x08b => [{ # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), (continued from above)
1016
1035
  Name => 'CmdDialsReverseRotation',
@@ -1051,6 +1070,7 @@ my %infoD6 = (
1051
1070
  8 => '180',
1052
1071
  },
1053
1072
  },
1073
+ 0x092 => { Name => 'HDMIExternalRecorder', PrintConv => \%onOff }, # Settings Menu/HDMI/Advanced entry (D6 & Z7_2)
1054
1074
  0x093 => { # CSa3-a (D6), CSa3 (Z7_2)
1055
1075
  Name => 'BlockShotAFResponse',
1056
1076
  PrintConv => {
@@ -1077,7 +1097,7 @@ my %infoD6 = (
1077
1097
  1 => 'Focus Point',
1078
1098
  2 => 'Off',
1079
1099
  },
1080
- %infoZ72,
1100
+ %infoZSeries,
1081
1101
  }],
1082
1102
  0x099 => { Name => 'DynamicAreaAFAssist',PrintConv => \%onOff }, # CSa17-c (D6), CSa9-b (Z7_2)
1083
1103
  0x09a => { Name => 'ExposureCompStepSize', PrintConv => \%thirdHalfFull }, # CSb3 (D6)
@@ -1100,7 +1120,7 @@ my %infoD6 = (
1100
1120
  },{ # CSf2-a (Z7_2)
1101
1121
  Name => 'Func1Button',
1102
1122
  PrintConv => \%funcButtonZ7m2,
1103
- %infoZ72,
1123
+ %infoZSeries,
1104
1124
  }],
1105
1125
  0x0a2 => [{ # CSf3-c (D6)
1106
1126
  Name => 'Func2Button',
@@ -1109,7 +1129,7 @@ my %infoD6 = (
1109
1129
  },{ # CSf2-b (Z7_2)
1110
1130
  Name => 'Func2Button',
1111
1131
  PrintConv => \%funcButtonZ7m2,
1112
- %infoZ72,
1132
+ %infoZSeries,
1113
1133
  }],
1114
1134
  0x0a3 => [{ # CSf3-f (D6)
1115
1135
  Name => 'AF-OnButton',
@@ -1161,7 +1181,7 @@ my %infoD6 = (
1161
1181
  11 => 'Zoom (High)',
1162
1182
  12 => 'None'
1163
1183
  },
1164
- %infoZ72,
1184
+ %infoZSeries,
1165
1185
  }],
1166
1186
  0x0a4 => { Name => 'SubSelector', PrintConv => \%tagSubSelector }, # CSf3-g-1 # (D6), CSf2-d-1 # (Z7_2)
1167
1187
  0x0a5 => [{ # CSf3-h (D6)
@@ -1234,7 +1254,7 @@ my %infoD6 = (
1234
1254
  24 => 'Non-CPU Lens',
1235
1255
  25 => 'None',
1236
1256
  },
1237
- %infoZ72,
1257
+ %infoZSeries,
1238
1258
  }],
1239
1259
  0x0a7 => [{ # CSf3-n (D6)
1240
1260
  Name => 'LensFunc1Button',
@@ -1274,7 +1294,7 @@ my %infoD6 = (
1274
1294
  },{ # CSf2-g (Z7_2)
1275
1295
  Name => 'LensFunc1Button',
1276
1296
  PrintConv => \%lensFuncButtonZ7m2,
1277
- %infoZ72,
1297
+ %infoZSeries,
1278
1298
  }],
1279
1299
  0x0a8 => { Name => 'CmdDialsApertureSetting', PrintConv => { 1 => 'Sub-command Dial', 2 => 'Aperture Ring' } }, # CSf6-c (D6)
1280
1300
  0x0a9 => { Name => 'MultiSelector', PrintConv => \%tagMultiSelector }, # CSf7 (D6)
@@ -1335,7 +1355,7 @@ my %infoD6 = (
1335
1355
  23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1336
1356
  25 => 'None',
1337
1357
  },
1338
- %infoZ72,
1358
+ %infoZSeries,
1339
1359
  }],
1340
1360
  0x0b3 => [{ # CSg2-b (D6)
1341
1361
  Name => 'MovieFunc1Button',
@@ -1379,7 +1399,7 @@ my %infoD6 = (
1379
1399
  23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1380
1400
  25 => 'None',
1381
1401
  },
1382
- %infoZ72,
1402
+ %infoZSeries,
1383
1403
  }],
1384
1404
  0x0b5 => { # CSg2-c (D6)
1385
1405
  Name => 'MovieFunc2Button',
@@ -1426,7 +1446,7 @@ my %infoD6 = (
1426
1446
  12 => 'Image Area',
1427
1447
  13 => 'None',
1428
1448
  },
1429
- %infoZ72,
1449
+ %infoZSeries,
1430
1450
  }],
1431
1451
  0x0b8 => { Name => 'LimitAFAreaModeSelD9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-a (D6)
1432
1452
  0x0b9 => { Name => 'LimitAFAreaModeSelD25', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-b (D6)
@@ -1549,6 +1569,29 @@ my %infoD6 = (
1549
1569
  0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # (D6)
1550
1570
  0x0fc => { Name => 'SilentPhotography', PrintConv => \%onOff }, # (D6,Z7_2) # tag is associated with Silent LiveView Photography (as distinguisehed from Silent Interval or Silent Focus Shift)
1551
1571
  0x0fd => { Name => 'ExtendedShutterSpeeds', PrintConv => \%onOff }, # CSd7 (D6), CSd6 (Z7_2)
1572
+ 0x102 => { # (Z7_2)
1573
+ Name => 'HDMIBitDepth',
1574
+ RawConv => '$$self{HDMIBitDepth} = $val',
1575
+ PrintConv => {
1576
+ 1 => '8 Bit',
1577
+ 2 => '10 Bit',
1578
+ #5 => 'Auto', #observed on the Z50 - needs confirmation
1579
+ },
1580
+ },
1581
+ 0x103 => { # (Z7_2)
1582
+ Name => 'HDMIOutputHDR',
1583
+ Condition => '$$self{HDMIBitDepth} == 2', # HDR(HLC) output option only available only for 10 bit
1584
+ RawConv => '$$self{HDMIOutputHDR} = $val',
1585
+ PrintConv => {
1586
+ 2 => 'On', # unusual decode perhaps due to sharing sub-menu with tag HDMIOutputN-Log?
1587
+ 3 => 'Off',
1588
+ },
1589
+ },
1590
+ 0x104 => { # valid for 10 bit with either N-Log or HDR/HLG selected (Z7_2)
1591
+ Name => 'HDMIViewAssist',
1592
+ Condition => '$$self{HDMIBitDepth} == 2',
1593
+ PrintConv => \%onOff
1594
+ },
1552
1595
  0x109 => { # (D6,Z7_2)
1553
1596
  Name => 'BracketSet',
1554
1597
  RawConv => '$$self{BracketSet} = $val',
@@ -1640,6 +1683,11 @@ my %infoD6 = (
1640
1683
  8 => 'Off, Low, Normal, High, Extra High',
1641
1684
  },
1642
1685
  },
1686
+ 0x10e => { # (D6/Z7_2)
1687
+ Name => 'MonitorBrightness',
1688
+ # settings: -5 to +5
1689
+ ValueConv => '$val - 6',
1690
+ },
1643
1691
  0x116 => { Name => 'GroupAreaC1', PrintConv =>\%groupAreaCustom }, # CSa10-a (new with D6) # (D6)
1644
1692
  0x117 => { Name => 'AutoAreaAFStartingPoint', PrintConv => \%enableDisable }, # CSa12 (D6)
1645
1693
  0x118 => { Name => 'FocusPointPersistence', PrintConv => { 1 => 'Auto', 2 => 'Off' } }, # CSa13 (new with D6) # (D6)
@@ -1823,8 +1871,9 @@ my %infoD6 = (
1823
1871
  },
1824
1872
  },
1825
1873
  0x151 => { Name => 'LensFunc2Button', PrintConv => \%lensFuncButtonZ7m2 }, # CSf2-h (Z7_2)
1874
+ #0x153 => { Name => 'ViewfinderBrightness', } #(Z7_2) # commented out to reduce output volume. Range [-5,+5]. PrintConv matches MonitorBrightness.
1826
1875
  0x158 => { Name => 'USBPowerDelivery', PrintConv => \%enableDisable }, # (Z7_2)
1827
- 0x15b => { Name => 'GroupAreaC2', PrintConv =>\%groupAreaCustom }, # CSa10-b (new with D6) # (D6)
1876
+ 0x159 => { Name => 'EnergySavingMode', PrintConv =>\%onOff }, # (Z7_2)
1828
1877
  0x15c => { Name => 'BracketingBurstOptions',PrintConv => \%enableDisable }, # CSe9 (D6)
1829
1878
  # 0x15d => CSf3-j-2 (D6) 'Same as Multi-Selector with Info(U/D) & Playback(R/L)' and 'Same as Multi-Selector with Info(R/L) & Playback(U/D)' (skipped to reduce volume of output)
1830
1879
  0x15e => { Name => 'PrimarySlot', PrintConv => { 1 => 'CFexpress/XQD Card', 2 => 'SD Card' } }, # (Z7_2)
@@ -1900,10 +1949,12 @@ my %infoD6 = (
1900
1949
  13 => 'None',
1901
1950
  },
1902
1951
  },
1952
+ #0x168 => { Name => 'ControlPanelBrightness', # (Z7_2) #commented to reduce output volume
1903
1953
  0x169 => { Name => 'LimitAF-AreaModeSelAutoPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1904
1954
  0x16a => { Name => 'LimitAF-AreaModeSelAutoAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1905
1955
  0x16b => { Name => 'LimitAF-AreaModeSelWideLPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-e (Z7_2)
1906
1956
  0x16c => { Name => 'LimitAF-AreaModeSelWideLAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-f (Z7_2)
1957
+ 0x16d => { Name => 'SaveFocus', PrintConv => \%onOff }, # (Z7_2)
1907
1958
  0x16e => { # (Z7_2)
1908
1959
  Name => 'AFAreaMode',
1909
1960
  RawConv => '$$self{AFAreaMode} = $val',
@@ -1919,6 +1970,19 @@ my %infoD6 = (
1919
1970
  10 => 'Auto (Animals)',
1920
1971
  },
1921
1972
  },
1973
+ 0x16f => { # (Z7_2)
1974
+ Name => 'MovieAFAreaMode',
1975
+ PrintConv => {
1976
+ 1 => 'Single-point',
1977
+ 2 => 'Wide (S)',
1978
+ 3 => 'Wide (L)',
1979
+ 4 => 'Wide (L-people)',
1980
+ 5 => 'Wide (L-animals)',
1981
+ 6 => 'Auto',
1982
+ 7 => 'Auto (People)',
1983
+ 8 => 'Auto (Animals)',
1984
+ },
1985
+ },
1922
1986
  0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
1923
1987
  0x171 => { # CSb8 (D6 firmware v1.3.0)
1924
1988
  Name => 'KeepExposureWithTeleconverter',
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.53';
24
+ $VERSION = '1.54';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -280,10 +280,12 @@ my %supportedFilter = (
280
280
  ConvertToDict => 1,
281
281
  },
282
282
  Cs1 => {
283
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
283
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
284
+ ConvertToDict => 1, # (just in case)
284
285
  },
285
286
  CS0 => {
286
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
287
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
288
+ ConvertToDict => 1, # (just in case)
287
289
  },
288
290
  );
289
291
 
@@ -259,6 +259,7 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
259
259
  },
260
260
  tRNS => {
261
261
  Name => 'Transparency',
262
+ # may have as many entries as the PLTE table, but who wants to see all that?
262
263
  ValueConv => q{
263
264
  return \$val if length($val) > 6;
264
265
  join(" ",unpack($Image::ExifTool::PNG::colorType == 3 ? "C*" : "n*", $val));
@@ -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.70';
50
+ $VERSION = '2.73';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -482,6 +482,17 @@ my %eeBox2 = (
482
482
  # (Pittasoft Blackview dashcam MP4 videos)
483
483
  Condition => '$$valPt =~ /^\0\0..(cprt|sttm|ptnm|ptrh|thum|gps |3gf )/s',
484
484
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Pittasoft' },
485
+ },{
486
+ Name => 'ThumbnailImage',
487
+ # (DJI Zenmuse XT2 thermal camera)
488
+ Groups => { 2 => 'Preview' },
489
+ Condition => '$$valPt =~ /^.{4}mdat\xff\xd8\xff/s',
490
+ RawConv => q{
491
+ my $len = unpack('N', $val);
492
+ return undef if $len <= 8 or $len > length($val);
493
+ return substr($val, 8, $len-8);
494
+ },
495
+ Binary => 1,
485
496
  },{
486
497
  Unknown => 1,
487
498
  Binary => 1,
@@ -558,6 +569,7 @@ my %eeBox2 = (
558
569
  # *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) ***
559
570
  Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/',
560
571
  WriteGroup => 'XMP', # (write main XMP tags here)
572
+ PreservePadding => 1,
561
573
  SubDirectory => {
562
574
  TagTable => 'Image::ExifTool::XMP::Main',
563
575
  Start => 16,
@@ -607,6 +619,7 @@ my %eeBox2 = (
607
619
  Name => 'PreviewImage',
608
620
  Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
609
621
  Groups => { 2 => 'Preview' },
622
+ PreservePadding => 1,
610
623
  # 0x00 - undef[16]: UUID
611
624
  # 0x10 - int32u[2]: "0 1" (version and/or item count?)
612
625
  # 0x18 - int32u: PRVW atom size
@@ -6357,7 +6370,7 @@ my %eeBox2 = (
6357
6370
  'player.movie.visual.tint' => 'Tint',
6358
6371
  'player.movie.visual.contrast' => 'Contrast',
6359
6372
  'player.movie.audio.gain' => 'AudioGain',
6360
- 'player.movie.audio.treble' => 'Trebel',
6373
+ 'player.movie.audio.treble' => 'Treble',
6361
6374
  'player.movie.audio.bass' => 'Bass',
6362
6375
  'player.movie.audio.balance' => 'Balance',
6363
6376
  'player.movie.audio.pitchshift' => 'PitchShift',
@@ -6452,6 +6465,7 @@ my %eeBox2 = (
6452
6465
  %Image::ExifTool::QuickTime::iTunesInfo = (
6453
6466
  PROCESS_PROC => \&ProcessMOV,
6454
6467
  GROUPS => { 1 => 'iTunes', 2 => 'Audio' },
6468
+ VARS => { LONG_TAGS => 0 }, # (hack for discrepancy in the way long tags are counted in BuildTagLookup)
6455
6469
  NOTES => q{
6456
6470
  ExifTool will extract any iTunesInfo tags that exist, even if they are not
6457
6471
  defined in this table. These tags belong to the family 1 "iTunes" group,
@@ -9425,7 +9439,7 @@ ItemID: foreach $id (keys %$items) {
9425
9439
  for (;;) {
9426
9440
  last if $pos + 16 > $size;
9427
9441
  my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val);
9428
- last if $pos + $len > $size;
9442
+ last if $pos + $len > $size or not $len;
9429
9443
  my ($value, $langInfo, $oldDir);
9430
9444
  my $format = $$tagInfo{Format};
9431
9445
  if ($type eq 'data' and $len >= 16) {
@@ -99,7 +99,7 @@ my %insvLimit = (
99
99
  The tags below are extracted from timed metadata in QuickTime and other
100
100
  formats of video files when the ExtractEmbedded option is used. Although
101
101
  most of these tags are combined into the single table below, ExifTool
102
- currently reads 57 different formats of timed GPS metadata from video files.
102
+ currently reads 59 different formats of timed GPS metadata from video files.
103
103
  },
104
104
  VARS => { NO_ID => 1 },
105
105
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
@@ -1581,6 +1581,31 @@ sub ProcessFreeGPS($$$)
1581
1581
  substr($time,7,6) = pack 'C*', map { $_ ^= 0x70 } unpack 'C*', substr($time,7,6);
1582
1582
  # (other values are currently unknown)
1583
1583
 
1584
+ } elsif ($$dataPt =~ /^.{64}A([NS])([EW])\0/s) {
1585
+
1586
+ # Vantrue S1 dashcam
1587
+ # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 00 00 00 [....freeGPS x...]
1588
+ # 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
1589
+ # 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
1590
+ # 0030: 68 6f 72 73 6f 6e 74 65 63 68 00 00 00 00 00 00 [horsontech......]
1591
+ # 0040: 41 4e 45 00 15 00 00 00 07 00 00 00 02 00 00 00 [ANE.............]
1592
+ # 0050: 03 00 00 00 35 00 00 00 05 00 00 00 4f 74 4c 44 [....5.......OtLD]
1593
+ # 0060: e2 77 a0 45 89 c1 98 42 71 bd ac 42 02 ab 0d 43 [.w.E...Bq..B...C]
1594
+ # 0070: 05 00 00 00 7f 00 00 00 07 01 00 00 00 00 00 00 [................]
1595
+ ($latRef, $lonRef) = ($1, $2);
1596
+ ($yr,$mon,$day,$hr,$min,$sec,@acc) = unpack('x68V6x20V3', $$dataPt);
1597
+ return 0 unless $mon>=1 and $mon<=12 and $day>=1 and $day<=31;
1598
+ $yr += 2000 if $yr < 2000;
1599
+ # (not sure about acc scaling)
1600
+ map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 1000 } @acc;
1601
+ SetByteOrder('II');
1602
+ $lon = GetFloat($dataPt, 0x5c);
1603
+ $lat = GetFloat($dataPt, 0x60);
1604
+ $spd = GetFloat($dataPt, 0x64) * $knotsToKph;
1605
+ $trk = GetFloat($dataPt, 0x68);
1606
+ $alt = GetFloat($dataPt, 0x6c);
1607
+ SetByteOrder('MM');
1608
+
1584
1609
  } else {
1585
1610
 
1586
1611
  # decode binary GPS format (Viofo A119S, ref 2)
@@ -450,6 +450,10 @@ numerical, and generated automatically otherwise.
450
450
  may be written if the tag already exists. By default, all
451
451
  MakerNotes tags are permanent unless otherwise specified.
452
452
 
453
+ 'PreservePadding' - [QuickTime only] flag to preserve the
454
+ original size of the QuickTime atom by padding with nulls when
455
+ writing with the QuickTimePad option.
456
+
453
457
  'PrintHex' - specifies that unknown PrintConv values should
454
458
  be printed in hex (eg. 'Unknown (0x1)'). Also causes
455
459
  numerical tag values to be printed in hex in the HTML tag name