exiftool_vendored 13.36.0 → 13.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +23 -0
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/build_geolocation +7 -3
  8. data/bin/exiftool +2 -2
  9. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  10. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  11. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
  12. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  13. data/bin/lib/Image/ExifTool/Canon.pm +59 -5
  14. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  15. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  16. data/bin/lib/Image/ExifTool/DJI.pm +5 -5
  17. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  18. data/bin/lib/Image/ExifTool/EXE.pm +3 -2
  19. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  20. data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
  21. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  22. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -4
  23. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  24. data/bin/lib/Image/ExifTool/GM.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
  26. data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
  27. data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
  28. data/bin/lib/Image/ExifTool/Google.pm +804 -0
  29. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  30. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  31. data/bin/lib/Image/ExifTool/ID3.pm +3 -3
  32. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  33. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  34. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  35. data/bin/lib/Image/ExifTool/LNK.pm +2 -2
  36. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  37. data/bin/lib/Image/ExifTool/M2TS.pm +2 -2
  38. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  39. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  40. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  41. data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
  42. data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
  43. data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
  44. data/bin/lib/Image/ExifTool/Nikon.pm +4 -4
  45. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  47. data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
  48. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  49. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  50. data/bin/lib/Image/ExifTool/Pentax.pm +18 -7
  51. data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
  52. data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
  53. data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
  54. data/bin/lib/Image/ExifTool/README +7 -6
  55. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  56. data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
  57. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  58. data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
  59. data/bin/lib/Image/ExifTool/Sony.pm +18 -3
  60. data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
  61. data/bin/lib/Image/ExifTool/TagLookup.pm +5745 -5695
  62. data/bin/lib/Image/ExifTool/TagNames.pod +662 -509
  63. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  64. data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
  65. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  66. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  67. data/bin/lib/Image/ExifTool/XMP.pm +31 -30
  68. data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
  69. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  70. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  71. data/bin/lib/Image/ExifTool.pm +4 -4
  72. data/bin/lib/Image/ExifTool.pod +3 -3
  73. data/bin/perl-Image-ExifTool.spec +1 -1
  74. data/lib/exiftool_vendored/version.rb +1 -1
  75. metadata +4 -6
@@ -8,6 +8,7 @@
8
8
  # References: 1) RCNX_MN10.pdf (courtesy of Reconyx Inc.)
9
9
  # 2) ultrafire_makernote.pdf (courtesy of Reconyx Inc.)
10
10
  # 3) Reconyx private communication
11
+ # 4) "Reconyx Metadata 1_4.pdf"
11
12
  #------------------------------------------------------------------------------
12
13
 
13
14
  package Image::ExifTool::Reconyx;
@@ -15,20 +16,56 @@ package Image::ExifTool::Reconyx;
15
16
  use strict;
16
17
  use vars qw($VERSION);
17
18
 
18
- $VERSION = '1.06';
19
+ $VERSION = '1.07';
19
20
 
20
21
  # info for Type2 version tags
21
22
  my %versionInfo = (
22
23
  Format => 'undef[7]',
23
- ValueConv => 'sprintf("V%.2x.%.2x %.4x:%.2x:%.2x Rev.%s", unpack("CCvCCa", $val))',
24
+ ValueConv => 'sprintf("%.2x.%.2x %.4x:%.2x:%.2x Rev.%s", unpack("CCvCCa", $val))',
24
25
  ValueConvInv => q{
25
- my @v = $val =~ /^V([0-9a-f]+)\.([0-9a-f]+) (\d{4}):(\d{2}):(\d{2})\s*Rev\.(\w)/i or return undef;
26
+ my @v = $val =~ /^([0-9a-f]+)\.([0-9a-f]+) (\d{4}):(\d{2}):(\d{2})\s*Rev\.(\w)/i or return undef;
26
27
  pack('CCvCCa', map(hex, @v[0..4]), $v[5]);
27
28
  },
28
29
  );
29
30
 
30
- # maker notes for Reconyx Hyperfire cameras (ref PH)
31
- %Image::ExifTool::Reconyx::Main = (
31
+ my %moonPhase = (
32
+ 0 => 'New',
33
+ 1 => 'New Crescent',
34
+ 2 => 'First Quarter',
35
+ 3 => 'Waxing Gibbous',
36
+ 4 => 'Full',
37
+ 5 => 'Waning Gibbous',
38
+ 6 => 'Last Quarter',
39
+ 7 => 'Old Crescent',
40
+ );
41
+
42
+ my %sunday0 = (
43
+ 0 => 'Sunday',
44
+ 1 => 'Monday',
45
+ 2 => 'Tuesday',
46
+ 3 => 'Wednesday',
47
+ 4 => 'Thursday',
48
+ 5 => 'Friday',
49
+ 6 => 'Saturday',
50
+ );
51
+
52
+ my %sunday1 = (
53
+ 1 => 'Sunday',
54
+ 2 => 'Monday',
55
+ 3 => 'Tuesday',
56
+ 4 => 'Wednesday',
57
+ 5 => 'Thursday',
58
+ 6 => 'Friday',
59
+ 7 => 'Saturday',
60
+ );
61
+
62
+ my %convUnicode = (
63
+ ValueConv => '$self->Decode($val, "UCS2", "II")',
64
+ ValueConvInv => '$self->Encode($val, "UCS2", "II")',
65
+ );
66
+
67
+ # maker notes for Reconyx HyperFire cameras (ref PH)
68
+ %Image::ExifTool::Reconyx::HyperFire = (
32
69
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
33
70
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
34
71
  WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
@@ -38,20 +75,20 @@ my %versionInfo = (
38
75
  WRITABLE => 1,
39
76
  FIRST_ENTRY => 0,
40
77
  NOTES => q{
41
- The following tags are extracted from the maker notes of Reconyx Hyperfire
42
- cameras such as the HC500, HC600 and PC900.
78
+ The following tags are extracted from the maker notes of Reconyx RapidFire
79
+ and HyperFire models such as the HC500, HC600 and PC900.
43
80
  },
44
81
  0x00 => { #1
45
82
  Name => 'MakerNoteVersion',
46
- PrintConv => 'sprintf("0x%.4x", $val)',
47
83
  Writable => 0, # (we use this for identification, 0xf101 --> rev 1.0)
84
+ PrintConv => 'sprintf("0x%.4x", $val)',
48
85
  PrintConvInv => 'hex $val',
49
86
  },
50
87
  0x01 => { #1
51
88
  Name => 'FirmwareVersion',
52
89
  Format => 'int16u[3]',
53
- PrintConv => '$val=~tr/ /./; $val',
54
90
  Writable => 0, # (we use this for identification, 0x0003 --> ver 2 or 3)
91
+ PrintConv => '$val=~tr/ /./; $val',
55
92
  },
56
93
  0x04 => { #1
57
94
  Name => 'FirmwareDate',
@@ -113,16 +150,7 @@ my %versionInfo = (
113
150
  0x12 => {
114
151
  Name => 'MoonPhase',
115
152
  Groups => { 2 => 'Time' },
116
- PrintConv => {
117
- 0 => 'New',
118
- 1 => 'New Crescent',
119
- 2 => 'First Quarter',
120
- 3 => 'Waxing Gibbous',
121
- 4 => 'Full',
122
- 5 => 'Waning Gibbous',
123
- 6 => 'Last Quarter',
124
- 7 => 'Old Crescent',
125
- },
153
+ PrintConv => \%moonPhase,
126
154
  },
127
155
  0x13 => {
128
156
  Name => 'AmbientTemperatureFahrenheit',
@@ -136,16 +164,7 @@ my %versionInfo = (
136
164
  PrintConv => '"$val C"',
137
165
  PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val',
138
166
  },
139
- 0x15 => {
140
- Name => 'SerialNumber',
141
- Format => 'undef[30]',
142
- RawConv => '$_ = $self->Decode($val, "UCS2"); s/\0.*//; $_',
143
- RawConvInv => q{
144
- $_ = $self->Encode($val, "UCS2");
145
- $_ = substr($_, 0, 30) if length($_) > 30;
146
- return $_;
147
- },
148
- },
167
+ 0x15 => { Name => 'SerialNumber', Format => 'unicode[15]', %convUnicode },
149
168
  0x24 => 'Contrast', #1
150
169
  0x25 => 'Brightness', #1
151
170
  0x26 => 'Sharpness', #1
@@ -169,7 +188,7 @@ my %versionInfo = (
169
188
  );
170
189
 
171
190
  # maker notes for Reconyx UltraFire cameras (ref PH)
172
- %Image::ExifTool::Reconyx::Type2 = (
191
+ %Image::ExifTool::Reconyx::UltraFire = (
173
192
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
174
193
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
175
194
  WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
@@ -177,7 +196,7 @@ my %versionInfo = (
177
196
  TAG_PREFIX => 'Reconyx',
178
197
  WRITABLE => 1,
179
198
  FIRST_ENTRY => 0,
180
- NOTES => 'Tags extracted from models such as the UltraFire.',
199
+ NOTES => 'Maker notes tags for Reconyx UltraFire models.',
181
200
  # 0x0a - int32u makernote ID 0x00020000 #2
182
201
  # 0x0e - int16u makernote size #2
183
202
  # 0x12 - int32u public structure ID 0x07f100001 #2
@@ -212,17 +231,11 @@ my %versionInfo = (
212
231
  Groups => { 2 => 'Time' },
213
232
  Priority => 0, # (not as reliable as EXIF)
214
233
  Shift => 'Time',
215
- ValueConv => q{
216
- my @a = split ' ', $val;
217
- $a[5] += pop(@a) * 256;
218
- sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', reverse @a);
219
- },
234
+ ValueConv => 'sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", reverse unpack("C5v",$val))',
220
235
  ValueConvInv => q{
221
236
  my @a = ($val =~ /\d+/g);
222
237
  return undef unless @a >= 6;
223
- unshift @a, ($a[0] >> 8);
224
- $a[1] -= $a[0] * 256;
225
- join ' ', @a[6,5,4,3,2,1,0];
238
+ pack('C5v', @a[5,4,3,2,1,0]);
226
239
  },
227
240
  PrintConv => '$self->ConvertDateTime($val)',
228
241
  PrintConvInv => '$self->InverseDateTime($val)',
@@ -230,29 +243,12 @@ my %versionInfo = (
230
243
  0x42 => { #2
231
244
  Name => 'DayOfWeek',
232
245
  Groups => { 2 => 'Time' },
233
- PrintConv => {
234
- 0 => 'Sunday',
235
- 1 => 'Monday',
236
- 2 => 'Tuesday',
237
- 3 => 'Wednesday',
238
- 4 => 'Thursday',
239
- 5 => 'Friday',
240
- 6 => 'Saturday',
241
- },
246
+ PrintConv => \%sunday0,
242
247
  },
243
248
  0x43 => {
244
249
  Name => 'MoonPhase',
245
250
  Groups => { 2 => 'Time' },
246
- PrintConv => {
247
- 0 => 'New',
248
- 1 => 'New Crescent',
249
- 2 => 'First Quarter',
250
- 3 => 'Waxing Gibbous',
251
- 4 => 'Full',
252
- 5 => 'Waning Gibbous',
253
- 6 => 'Last Quarter',
254
- 7 => 'Old Crescent',
255
- },
251
+ PrintConv => \%moonPhase,
256
252
  },
257
253
  0x44 => {
258
254
  Name => 'AmbientTemperatureFahrenheit',
@@ -278,18 +274,12 @@ my %versionInfo = (
278
274
  PrintConv => '"$val V"',
279
275
  PrintConvInv => '$val=~s/ ?V$//; $val',
280
276
  },
281
- 0x4b => {
282
- Name => 'SerialNumber',
283
- Format => 'string[15]',
284
- },
285
- 0x5a => {
286
- Name => 'UserLabel',
287
- Format => 'string[21]',
288
- },
277
+ 0x4b => { Name => 'SerialNumber', Format => 'string[15]' },
278
+ 0x5a => { Name => 'UserLabel', Format => 'string[21]' },
289
279
  );
290
280
 
291
281
  # maker notes for Reconyx HF2 PRO cameras (ref 3)
292
- %Image::ExifTool::Reconyx::Type3 = (
282
+ %Image::ExifTool::Reconyx::HyperFire2 = (
293
283
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
294
284
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
295
285
  WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
@@ -297,13 +287,36 @@ my %versionInfo = (
297
287
  TAG_PREFIX => 'Reconyx',
298
288
  WRITABLE => 1,
299
289
  FIRST_ENTRY => 0,
300
- NOTES => 'Tags extracted from models such as the HF2 PRO.',
290
+ NOTES => 'Maker notes tags for Reconyx HyperFire 2 models.',
301
291
  # 0x0a => { Name => 'StructureVersion', Format => 'int16u' },
302
292
  # 0x0c => { Name => 'ParentFileSize', Format => 'int32u' },
303
293
  0x10 => { Name => 'FileNumber', Format => 'int16u' },
304
294
  0x12 => { Name => 'DirectoryNumber', Format => 'int16u' },
305
- # 0x14 => { Name => 'DirCreateDate', Format => 'int16u' },
306
- # 0x16 => { Name => 'DirCreateTime', Format => 'int16u' },
295
+ 0x14 => {
296
+ Name => 'DirectoryCreateDate',
297
+ Format => 'int16u[2]',
298
+ Groups => { 2 => 'Time' },
299
+ Shift => 'Time',
300
+ # similar to ZIP date/time, but date word comes first
301
+ ValueConv => q{
302
+ my @a = split / /, $val;
303
+ sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d',
304
+ ($a[0] >> 9) + 1980, # year
305
+ ($a[0] >> 5) & 0x0f, # month
306
+ $a[0] & 0x1f, # day
307
+ ($a[1] >> 11) & 0x1f, # hour
308
+ ($a[1] >> 5) & 0x3f, # minute
309
+ ($a[1] & 0x1f) * 2 # second
310
+ );
311
+ },
312
+ ValueConvInv => q{
313
+ my @a = $val =~ /\d+/g;
314
+ sprintf('%d %d', (($a[0]-1980) << 9) | ($a[1] << 5) | $a[2],
315
+ ($a[3] << 11) | ($a[4] << 5) | int($a[5] / 2));
316
+ },
317
+ PrintConv => '$self->ConvertDateTime($val)',
318
+ PrintConvInv => '$self->InverseDateTime($val)',
319
+ },
307
320
  # 0x18 - int16[8] SDCardLabel
308
321
  # 0x28 => { Name => 'MakerNoteVersion', Format => 'int16u' },
309
322
  0x2a => {
@@ -353,7 +366,7 @@ my %versionInfo = (
353
366
  ValueConvInv => q{
354
367
  my @a = ($val =~ /\d+/g);
355
368
  return undef unless @a >= 6;
356
- join ' ', @a[6,5,4,3,2,1,0];
369
+ join ' ', @a[5,4,3,2,1,0];
357
370
  },
358
371
  PrintConv => '$self->ConvertDateTime($val)',
359
372
  PrintConvInv => '$self->InverseDateTime($val)',
@@ -362,30 +375,13 @@ my %versionInfo = (
362
375
  Name => 'DayOfWeek',
363
376
  Groups => { 2 => 'Time' },
364
377
  Format => 'int16u',
365
- PrintConv => {
366
- 0 => 'Sunday',
367
- 1 => 'Monday',
368
- 2 => 'Tuesday',
369
- 3 => 'Wednesday',
370
- 4 => 'Thursday',
371
- 5 => 'Friday',
372
- 6 => 'Saturday',
373
- },
378
+ PrintConv => \%sunday0,
374
379
  },
375
380
  0x4c => {
376
381
  Name => 'MoonPhase',
377
382
  Groups => { 2 => 'Time' },
378
383
  Format => 'int16u',
379
- PrintConv => {
380
- 0 => 'New',
381
- 1 => 'New Crescent',
382
- 2 => 'First Quarter',
383
- 3 => 'Waxing Gibbous',
384
- 4 => 'Full',
385
- 5 => 'Waning Gibbous',
386
- 6 => 'Last Quarter',
387
- 7 => 'Old Crescent',
388
- },
384
+ PrintConv => \%moonPhase,
389
385
  },
390
386
  0x4e => {
391
387
  Name => 'AmbientTemperatureFahrenheit',
@@ -411,7 +407,295 @@ my %versionInfo = (
411
407
  0x64 => { Name => 'BatteryVoltageAvg', Format => 'int16u' },
412
408
  0x66 => { Name => 'BatteryType', Format => 'int16u' },
413
409
  0x68 => { Name => 'UserLabel', Format => 'string[22]' },
414
- 0x7e => { Name => 'SerialNumber', Format => 'unicode[15]' },
410
+ 0x7e => { Name => 'SerialNumber', Format => 'unicode[15]', %convUnicode },
411
+ );
412
+
413
+ # maker notes for Reconyx MicroFire cameras (ref 4) (no samples for testing)
414
+ %Image::ExifTool::Reconyx::MicroFire = (
415
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
416
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
417
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
418
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
419
+ TAG_PREFIX => 'Reconyx',
420
+ WRITABLE => 1,
421
+ FIRST_ENTRY => 0,
422
+ NOTES => 'Maker notes tags for Reconyx MicroFire cameras.',
423
+ 0x10 => { Name => 'FileNumber', Format => 'int16u' },
424
+ 0x12 => { Name => 'DirectoryNumber', Format => 'int16u' },
425
+ 0x14 => {
426
+ Name => 'DirectoryCreateDate',
427
+ Format => 'int16u[2]',
428
+ Groups => { 2 => 'Time' },
429
+ Shift => 'Time',
430
+ # similar to ZIP date/time, but date word comes first
431
+ ValueConv => q{
432
+ my @a = split / /, $val;
433
+ sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d',
434
+ ($a[0] >> 9) + 1980, # year
435
+ ($a[0] >> 5) & 0x0f, # month
436
+ $a[0] & 0x1f, # day
437
+ ($a[1] >> 11) & 0x1f, # hour
438
+ ($a[1] >> 5) & 0x3f, # minute
439
+ ($a[1] & 0x1f) * 2 # second
440
+ );
441
+ },
442
+ ValueConvInv => q{
443
+ my @a = $val =~ /\d+/g;
444
+ sprintf('%d %d', (($a[0]-1980) << 9) | ($a[1] << 5) | $a[2],
445
+ ($a[3] << 11) | ($a[4] << 5) | int($a[5]/2));
446
+ },
447
+ PrintConv => '$self->ConvertDateTime($val)',
448
+ PrintConvInv => '$self->InverseDateTime($val)',
449
+ },
450
+ 0x18 => {
451
+ Name => 'SDCardID',
452
+ Format => 'int16u[8]',
453
+ PrintConv => 'join "-", map sprintf("%.4x",$_), split / /, $val',
454
+ },
455
+ # 0x28 - INFO structure version
456
+ 0x2a => {
457
+ Name => 'FirmwareVersion',
458
+ Format => 'int16u[3]',
459
+ ValueConv => 'my @a = split " ",$val; sprintf("%d.%d%c",@a)',
460
+ ValueConvInv => '$val=~/(\d+)\.(\d+)([a-zA-Z])/ ? "$1 $2 ".ord($3) : undef',
461
+ },
462
+ 0x30 => {
463
+ Name => 'FirmwareDate',
464
+ Format => 'int16u[2]',
465
+ ValueConv => 'my ($y,$d) = split " ", $val; sprintf("%.4x:%.2x:%.2x",$y,$d>>8,$d&0xff)',
466
+ ValueConvInv => 'my @a=split ":", $val; hex($a[0])." ".hex($a[1].$a[2])',
467
+ },
468
+ 0x34 => {
469
+ Name => 'BluetoothFirmwareVersion',
470
+ Format => 'int16u[3]',
471
+ ValueConv => 'my @a = split " ",$val; sprintf("%d.%d%c",@a)',
472
+ ValueConvInv => '$val=~/(\d+)\.(\d+)([a-zA-Z])/ ? "$1 $2 ".ord($3) : undef',
473
+ },
474
+ 0x3a => {
475
+ Name => 'BluetoothFirmwareDate',
476
+ Format => 'int16u',
477
+ ValueConv => q{
478
+ sprintf('%.4d:%.2d:%.2d',
479
+ ($val >> 9) + 1980, # year
480
+ ($val >> 5) & 0x0f, # month
481
+ $val & 0x1f, # day
482
+ );
483
+ },
484
+ ValueConvInv => q{
485
+ my @a = $val =~ /\d+/g;
486
+ return (($a[0]-1980) << 9) | ($a[1] << 5) | $a[2];
487
+ },
488
+ },
489
+ 0x3c => {
490
+ Name => 'WifiFirmwareVersion',
491
+ Format => 'int16u[3]',
492
+ ValueConv => 'my @a = split " ",$val; sprintf("%d.%d%c",@a)',
493
+ ValueConvInv => '$val=~/(\d+)\.(\d+)([a-zA-Z])/ ? "$1 $2 ".ord($3) : undef',
494
+ },
495
+ 0x42 => {
496
+ Name => 'WifiFirmwareDate',
497
+ Format => 'int16u',
498
+ ValueConv => q{
499
+ sprintf('%.4d:%.2d:%.2d',
500
+ ($val >> 9) + 1980, # year
501
+ ($val >> 5) & 0x0f, # month
502
+ $val & 0x1f, # day
503
+ );
504
+ },
505
+ ValueConvInv => q{
506
+ my @a = $val =~ /\d+/g;
507
+ return (($a[0]-1980) << 9) | ($a[1] << 5) | $a[2];
508
+ },
509
+ },
510
+ 0x44 => {
511
+ Name => 'TriggerMode',
512
+ Format => 'string[2]',
513
+ PrintConv => {
514
+ M => 'Motion Sensor',
515
+ E => 'External Sensor',
516
+ T => 'Time Lapse',
517
+ C => 'CodeLoc Not Entered',
518
+ },
519
+ },
520
+ 0x46 => {
521
+ Name => 'Sequence',
522
+ Format => 'int16u[2]',
523
+ PrintConv => '$val =~ s/ / of /; $val',
524
+ PrintConvInv => 'join(" ", $val=~/\d+/g)',
525
+ },
526
+ 0x4a => {
527
+ Name => 'EventNumber',
528
+ Format => 'int16u[2]',
529
+ ValueConv => 'my @a=split " ",$val;($a[0]<<16)+$a[1]',
530
+ ValueConvInv => '($val >> 16) . " " . ($val & 0xffff)',
531
+ },
532
+ 0x4e => {
533
+ Name => 'DateTimeOriginal',
534
+ Description => 'Date/Time Original',
535
+ Format => 'int16u[6]',
536
+ Groups => { 2 => 'Time' },
537
+ Priority => 0, # (not as reliable as EXIF)
538
+ Shift => 'Time',
539
+ ValueConv => q{
540
+ my @a = split ' ', $val;
541
+ sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a[5,3,4,2,1,0]);
542
+ },
543
+ ValueConvInv => q{
544
+ my @a = ($val =~ /\d+/g);
545
+ return undef unless @a >= 6;
546
+ join ' ', @a[5,4,3,1,2,0];
547
+ },
548
+ PrintConv => '$self->ConvertDateTime($val)',
549
+ PrintConvInv => '$self->InverseDateTime($val)',
550
+ },
551
+ 0x5a => {
552
+ Name => 'DayOfWeek',
553
+ Format => 'int16u',
554
+ Groups => { 2 => 'Time' },
555
+ PrintConv => \%sunday1,
556
+ },
557
+ 0x5c => {
558
+ Name => 'MoonPhase',
559
+ Format => 'int16u',
560
+ Groups => { 2 => 'Time' },
561
+ PrintConv => \%moonPhase,
562
+ },
563
+ 0x5e => {
564
+ Name => 'AmbientTemperatureFahrenheit',
565
+ Format => 'int16s',
566
+ PrintConv => '"$val F"',
567
+ PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val',
568
+ },
569
+ 0x60 => {
570
+ Name => 'AmbientTemperature',
571
+ Format => 'int16s',
572
+ PrintConv => '"$val C"',
573
+ PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val',
574
+ },
575
+ 0x62 => { Name => 'Contrast', Format => 'int16u' },
576
+ 0x64 => { Name => 'Brightness', Format => 'int16u' },
577
+ 0x66 => { Name => 'Sharpness', Format => 'int16u' },
578
+ 0x68 => { Name => 'Saturation', Format => 'int16u' },
579
+ 0x6a => { Name => 'Flash', Format => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' } },
580
+ 0x6c => { Name => 'AmbientInfrared', Format => 'int16u' },
581
+ 0x6e => { Name => 'AmbientLight', Format => 'int16u' },
582
+ 0x70 => { Name => 'MotionSensitivity', Format => 'int16u' },
583
+ 0x72 => { Name => 'BatteryVoltage', Format => 'int16u',
584
+ ValueConv => '$val / 1000', ValueConvInv => '$val * 1000',
585
+ },
586
+ 0x74 => { Name => 'BatteryType', Format => 'int16u',
587
+ PrintConv => {
588
+ 0 => 'Lithium',
589
+ 1 => 'NiMH',
590
+ 2 => 'Alkaline',
591
+ 3 => 'Lead Acid',
592
+ },
593
+ },
594
+ 0x76 => { Name => 'UserLabel', Format => 'string[22]' },
595
+ 0x8c => { Name => 'SerialNumber', Format => 'unicode[15]', %convUnicode },
596
+ );
597
+
598
+ # maker notes for Reconyx HyperFire 4K (ref 4)
599
+ %Image::ExifTool::Reconyx::HyperFire4K = (
600
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
601
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
602
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
603
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
604
+ TAG_PREFIX => 'Reconyx',
605
+ WRITABLE => 1,
606
+ FIRST_ENTRY => 0,
607
+ NOTES => 'Maker notes tags for Reconyx HyperFire 4K models.',
608
+ # 0x0c => { Name => 'AgregateStructureVersion', Format => 'int32u' },
609
+ # 0x10 => { Name => 'AgregateStructureSize', Format => 'int32u' },
610
+ # 0x14 => { Name => 'InfoStructureVersion', Format => 'int32u' },
611
+ # 0x18 => { Name => 'InfoStructureSize', Format => 'int16u' },
612
+ 0x1a => { Name => 'FirmwareVersion', %versionInfo },
613
+ 0x21 => { Name => 'UIBFirmwareVersion', %versionInfo },
614
+ 0x28 => {
615
+ Name => 'TriggerMode',
616
+ Format => 'undef[1]',
617
+ PrintConv => {
618
+ M => 'Motion Sensor',
619
+ E => 'External Sensor',
620
+ T => 'Time Lapse',
621
+ C => 'CodeLoc Not Entered',
622
+ S => 'Cell Status',
623
+ L => 'Cell Live View',
624
+ },
625
+ },
626
+ 0x29 => {
627
+ Name => 'Sequence',
628
+ Format => 'int8u[2]',
629
+ PrintConv => '$val =~ s/ / of /; $val',
630
+ PrintConvInv => 'join(" ", $val=~/\d+/g)',
631
+ },
632
+ 0x2b => {
633
+ Name => 'EventNumber',
634
+ Format => 'int32u',
635
+ },
636
+ 0x2f => {
637
+ Name => 'DateTimeOriginal',
638
+ Description => 'Date/Time Original',
639
+ Format => 'undef[7]',
640
+ Groups => { 2 => 'Time' },
641
+ Priority => 0, # (not as reliable as EXIF)
642
+ Shift => 'Time',
643
+ ValueConv => 'sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", reverse unpack("C5v",$val))',
644
+ ValueConvInv => q{
645
+ my @a = ($val =~ /\d+/g);
646
+ return undef unless @a >= 6;
647
+ pack('C5v', @a[5,4,3,2,1,0]);
648
+ },
649
+ PrintConv => '$self->ConvertDateTime($val)',
650
+ PrintConvInv => '$self->InverseDateTime($val)',
651
+ },
652
+ 0x36 => {
653
+ Name => 'DayOfWeek',
654
+ Groups => { 2 => 'Time' },
655
+ PrintConv => \%sunday1,
656
+ },
657
+ 0x37 => {
658
+ Name => 'MoonPhase',
659
+ Groups => { 2 => 'Time' },
660
+ PrintConv => \%moonPhase,
661
+ },
662
+ 0x38 => {
663
+ Name => 'AmbientTemperatureFahrenheit',
664
+ Format => 'int16s',
665
+ PrintConv => '"$val F"',
666
+ PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val',
667
+ },
668
+ 0x3a => {
669
+ Name => 'AmbientTemperature',
670
+ Format => 'int16s',
671
+ PrintConv => '"$val C"',
672
+ PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val',
673
+ },
674
+ 0x3c => { Name => 'Contrast', Format => 'int16u' },
675
+ 0x3e => { Name => 'Brightness', Format => 'int16u' },
676
+ 0x40 => { Name => 'Sharpness', Format => 'int16u' },
677
+ 0x42 => { Name => 'Saturation', Format => 'int16u' },
678
+ 0x44 => { Name => 'Flash', Format => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' } },
679
+ 0x45 => { Name => 'AmbientLight', Format => 'int32u' },
680
+ 0x49 => { Name => 'MotionSensitivity', Format => 'int16u' },
681
+ 0x4b => { Name => 'BatteryVoltage', Format => 'int16u',
682
+ ValueConv => '$val / 1000', ValueConvInv => '$val * 1000',
683
+ },
684
+ 0x4d => { Name => 'BatteryVoltageAvg', Format => 'int16u',
685
+ ValueConv => '$val / 1000', ValueConvInv => '$val * 1000',
686
+ },
687
+ 0x4f => { Name => 'BatteryType', Format => 'int16u',
688
+ PrintConv => {
689
+ 1 => 'NiMH',
690
+ 2 => 'Lithium',
691
+ 3 => 'External',
692
+ 4 => 'SC10 Solar',
693
+ },
694
+ },
695
+ 0x51 => { Name => 'UserLabel', Format => 'string[51]' },
696
+ 0x84 => { Name => 'SerialNumber', Format => 'string[15]' },
697
+ 0x93 => { Name => 'DirectoryNumber', Format => 'int16u' },
698
+ 0x95 => { Name => 'FileNumber', Format => 'int16u' },
415
699
  );
416
700
 
417
701
  __END__
@@ -947,7 +947,7 @@ my %formatMinMax = (
947
947
  # if necessary to differentiate tags with the same ID but different names
948
948
  %Image::ExifTool::Samsung::Trailer = (
949
949
  GROUPS => { 0 => 'MakerNotes', 2 => 'Other' },
950
- VARS => { NO_ID => 1, HEX_ID => 0 },
950
+ VARS => { ID_FMT => 'none' },
951
951
  PROCESS_PROC => \&ProcessSamsung,
952
952
  TAG_PREFIX => 'SamsungTrailer',
953
953
  PRIORITY => 0, # (first one takes priority so DepthMapWidth/Height match first DepthMapData)
@@ -19,7 +19,7 @@ package Image::ExifTool::Shortcuts;
19
19
  use strict;
20
20
  use vars qw($VERSION);
21
21
 
22
- $VERSION = '1.68';
22
+ $VERSION = '1.69';
23
23
 
24
24
  # this is a special table used to define command-line shortcuts
25
25
  # (documentation Notes may be added for these via %shortcutNotes in BuildTagLookup.pm)
@@ -123,6 +123,7 @@ $VERSION = '1.68';
123
123
  'MakerNoteFujiFilm',
124
124
  'MakerNoteGE',
125
125
  'MakerNoteGE2',
126
+ 'MakerNoteGoogle',
126
127
  'MakerNoteHasselblad',
127
128
  'MakerNoteHP',
128
129
  'MakerNoteHP2',
@@ -180,12 +181,14 @@ $VERSION = '1.68';
180
181
  'MakerNotePentax5',
181
182
  'MakerNotePentax6',
182
183
  'MakerNotePhaseOne',
183
- 'MakerNoteReconyx',
184
- 'MakerNoteReconyx2',
185
- 'MakerNoteReconyx3',
184
+ 'MakerNoteReconyxHyperFire',
185
+ 'MakerNoteReconyxUltraFire',
186
+ 'MakerNoteReconyxHyperFire2',
187
+ 'MakerNoteReconyxMicroFire',
188
+ 'MakerNoteReconyxHyperFire4K',
189
+ 'MakerNoteRicohPentax',
186
190
  'MakerNoteRicoh',
187
191
  'MakerNoteRicoh2',
188
- 'MakerNoteRicohPentax',
189
192
  'MakerNoteRicohText',
190
193
  'MakerNoteSamsung1a',
191
194
  'MakerNoteSamsung1b',