exiftool_vendored 12.36.0 → 12.37.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.05';
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,7 +549,7 @@ 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
555
  0x00f => { Name => 'MovieWhiteBalanceSameAsPhoto', PrintConv => \%yesNo }, # (D6/Z7_2)
@@ -558,7 +565,7 @@ my %infoD6 = (
558
565
  },{ # CSa1 (Z7_2)
559
566
  Name => 'AF-CPrioritySel',
560
567
  PrintConv => \%releaseFocus,
561
- %infoZ72,
568
+ %infoZSeries,
562
569
  }],
563
570
  0x01e => { Name => 'AF-SPrioritySel', PrintConv => \%releaseFocus }, # CSa2 (D6), CSa2 (Z7_2)
564
571
  0x020 => [{ # CSa4 (D6)
@@ -572,7 +579,7 @@ my %infoD6 = (
572
579
  },{ # CSa4 (Z7_2)
573
580
  Name => 'AFPointSel',
574
581
  PrintConv => { 1 => 'Use All', 2 => 'Use Half' },
575
- %infoZ72,
582
+ %infoZSeries,
576
583
  }],
577
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)
578
585
  0x023 => { Name => 'FocusPointWrap', PrintConv => { 1 => 'Wrap', 2 => 'No Wrap' } }, # CSa16 (D6), CSa8 (Z7_2)
@@ -609,7 +616,7 @@ my %infoD6 = (
609
616
  },{ # CSb3 (Z7_2)
610
617
  Name => 'CenterWeightedAreaSize',
611
618
  PrintConv => { 1 => '12 mm', 2 => 'Average' },
612
- %infoZ72,
619
+ %infoZSeries,
613
620
  }],
614
621
  0x02f => { # CSb7-a (D6), CSb4-a (Z7_2)
615
622
  Name => 'FineTuneOptMatrixMetering',
@@ -673,7 +680,7 @@ my %infoD6 = (
673
680
  7 => '30 min',
674
681
  8 => 'No Limit',
675
682
  },
676
- %infoZ72,
683
+ %infoZSeries,
677
684
  }],
678
685
  0x035 => { # CSc3-a (D6), CSc2-a (Z7_2)
679
686
  Name => 'SelfTimerTime',
@@ -762,7 +769,7 @@ my %infoD6 = (
762
769
  6 => '1/80 s',
763
770
  7 => '1/60 s',
764
771
  },
765
- %infoZ72,
772
+ %infoZSeries,
766
773
  }],
767
774
  0x048 => { # CSe2 (D6/Z7_2)
768
775
  Name => 'FlashShutterSpeed',
@@ -836,7 +843,7 @@ my %infoD6 = (
836
843
  25 => 'Non-CPU Lens',
837
844
  26 => 'None',
838
845
  },
839
- %infoZ72,
846
+ %infoZSeries,
840
847
  }],
841
848
  0x053 => [{ # CSf4-a (D6)
842
849
  Name => 'MultiSelectorShootMode',
@@ -856,7 +863,7 @@ my %infoD6 = (
856
863
  4 => 'Zoom (High)',
857
864
  5 => 'None',
858
865
  },
859
- %infoZ72,
866
+ %infoZSeries,
860
867
  }],
861
868
  0x054 => [{ # CSf4-c (D6)
862
869
  Name => 'MultiSelectorPlaybackMode',
@@ -879,7 +886,7 @@ my %infoD6 = (
879
886
  5 => 'Zoom (High)',
880
887
  6 => 'Choose Folder',
881
888
  },
882
- %infoZ72,
889
+ %infoZSeries,
883
890
  }],
884
891
  0x056 => { # CSf4-b (D6)
885
892
  Name => 'MultiSelectorLiveView',
@@ -967,7 +974,7 @@ my %infoD6 = (
967
974
  1 => 'Manual (dark on light)',
968
975
  2 => 'Manual (light on dark)',
969
976
  },
970
- %infoZ72,
977
+ %infoZSeries,
971
978
  }],
972
979
  0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
973
980
  0x075 => { # Settings menu # (D6,Z7_2)
@@ -976,7 +983,7 @@ my %infoD6 = (
976
983
  1 => 'Auto',
977
984
  2 => '2160p',
978
985
  3 => '1080p',
979
- 4 => '1080i)',
986
+ 4 => '1080i',
980
987
  5 => '720p',
981
988
  6 => '576p',
982
989
  7 => '480p',
@@ -1022,7 +1029,7 @@ my %infoD6 = (
1022
1029
  10 => 'None',
1023
1030
  11 => 'LiveView Info Display On/Off',
1024
1031
  },
1025
- %infoZ72,
1032
+ %infoZSeries,
1026
1033
  }],
1027
1034
  0x08b => [{ # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), (continued from above)
1028
1035
  Name => 'CmdDialsReverseRotation',
@@ -1090,7 +1097,7 @@ my %infoD6 = (
1090
1097
  1 => 'Focus Point',
1091
1098
  2 => 'Off',
1092
1099
  },
1093
- %infoZ72,
1100
+ %infoZSeries,
1094
1101
  }],
1095
1102
  0x099 => { Name => 'DynamicAreaAFAssist',PrintConv => \%onOff }, # CSa17-c (D6), CSa9-b (Z7_2)
1096
1103
  0x09a => { Name => 'ExposureCompStepSize', PrintConv => \%thirdHalfFull }, # CSb3 (D6)
@@ -1113,7 +1120,7 @@ my %infoD6 = (
1113
1120
  },{ # CSf2-a (Z7_2)
1114
1121
  Name => 'Func1Button',
1115
1122
  PrintConv => \%funcButtonZ7m2,
1116
- %infoZ72,
1123
+ %infoZSeries,
1117
1124
  }],
1118
1125
  0x0a2 => [{ # CSf3-c (D6)
1119
1126
  Name => 'Func2Button',
@@ -1122,7 +1129,7 @@ my %infoD6 = (
1122
1129
  },{ # CSf2-b (Z7_2)
1123
1130
  Name => 'Func2Button',
1124
1131
  PrintConv => \%funcButtonZ7m2,
1125
- %infoZ72,
1132
+ %infoZSeries,
1126
1133
  }],
1127
1134
  0x0a3 => [{ # CSf3-f (D6)
1128
1135
  Name => 'AF-OnButton',
@@ -1174,7 +1181,7 @@ my %infoD6 = (
1174
1181
  11 => 'Zoom (High)',
1175
1182
  12 => 'None'
1176
1183
  },
1177
- %infoZ72,
1184
+ %infoZSeries,
1178
1185
  }],
1179
1186
  0x0a4 => { Name => 'SubSelector', PrintConv => \%tagSubSelector }, # CSf3-g-1 # (D6), CSf2-d-1 # (Z7_2)
1180
1187
  0x0a5 => [{ # CSf3-h (D6)
@@ -1247,7 +1254,7 @@ my %infoD6 = (
1247
1254
  24 => 'Non-CPU Lens',
1248
1255
  25 => 'None',
1249
1256
  },
1250
- %infoZ72,
1257
+ %infoZSeries,
1251
1258
  }],
1252
1259
  0x0a7 => [{ # CSf3-n (D6)
1253
1260
  Name => 'LensFunc1Button',
@@ -1287,7 +1294,7 @@ my %infoD6 = (
1287
1294
  },{ # CSf2-g (Z7_2)
1288
1295
  Name => 'LensFunc1Button',
1289
1296
  PrintConv => \%lensFuncButtonZ7m2,
1290
- %infoZ72,
1297
+ %infoZSeries,
1291
1298
  }],
1292
1299
  0x0a8 => { Name => 'CmdDialsApertureSetting', PrintConv => { 1 => 'Sub-command Dial', 2 => 'Aperture Ring' } }, # CSf6-c (D6)
1293
1300
  0x0a9 => { Name => 'MultiSelector', PrintConv => \%tagMultiSelector }, # CSf7 (D6)
@@ -1348,7 +1355,7 @@ my %infoD6 = (
1348
1355
  23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1349
1356
  25 => 'None',
1350
1357
  },
1351
- %infoZ72,
1358
+ %infoZSeries,
1352
1359
  }],
1353
1360
  0x0b3 => [{ # CSg2-b (D6)
1354
1361
  Name => 'MovieFunc1Button',
@@ -1392,7 +1399,7 @@ my %infoD6 = (
1392
1399
  23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1393
1400
  25 => 'None',
1394
1401
  },
1395
- %infoZ72,
1402
+ %infoZSeries,
1396
1403
  }],
1397
1404
  0x0b5 => { # CSg2-c (D6)
1398
1405
  Name => 'MovieFunc2Button',
@@ -1439,7 +1446,7 @@ my %infoD6 = (
1439
1446
  12 => 'Image Area',
1440
1447
  13 => 'None',
1441
1448
  },
1442
- %infoZ72,
1449
+ %infoZSeries,
1443
1450
  }],
1444
1451
  0x0b8 => { Name => 'LimitAFAreaModeSelD9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-a (D6)
1445
1452
  0x0b9 => { Name => 'LimitAFAreaModeSelD25', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-b (D6)
@@ -1568,6 +1575,7 @@ my %infoD6 = (
1568
1575
  PrintConv => {
1569
1576
  1 => '8 Bit',
1570
1577
  2 => '10 Bit',
1578
+ #5 => 'Auto', #observed on the Z50 - needs confirmation
1571
1579
  },
1572
1580
  },
1573
1581
  0x103 => { # (Z7_2)
@@ -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.72';
50
+ $VERSION = '2.73';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -6370,7 +6370,7 @@ my %eeBox2 = (
6370
6370
  'player.movie.visual.tint' => 'Tint',
6371
6371
  'player.movie.visual.contrast' => 'Contrast',
6372
6372
  'player.movie.audio.gain' => 'AudioGain',
6373
- 'player.movie.audio.treble' => 'Trebel',
6373
+ 'player.movie.audio.treble' => 'Treble',
6374
6374
  'player.movie.audio.bass' => 'Bass',
6375
6375
  'player.movie.audio.balance' => 'Balance',
6376
6376
  'player.movie.audio.pitchshift' => 'PitchShift',
@@ -6465,6 +6465,7 @@ my %eeBox2 = (
6465
6465
  %Image::ExifTool::QuickTime::iTunesInfo = (
6466
6466
  PROCESS_PROC => \&ProcessMOV,
6467
6467
  GROUPS => { 1 => 'iTunes', 2 => 'Audio' },
6468
+ VARS => { LONG_TAGS => 0 }, # (hack for discrepancy in the way long tags are counted in BuildTagLookup)
6468
6469
  NOTES => q{
6469
6470
  ExifTool will extract any iTunesInfo tags that exist, even if they are not
6470
6471
  defined in this table. These tags belong to the family 1 "iTunes" group,
@@ -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 58 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)