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.
- checksums.yaml +4 -4
- data/bin/Changes +23 -0
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/build_geolocation +7 -3
- data/bin/exiftool +2 -2
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +59 -5
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +5 -5
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +3 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -4
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
- data/bin/lib/Image/ExifTool/Google.pm +804 -0
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +2 -2
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +2 -2
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
- data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
- data/bin/lib/Image/ExifTool/Nikon.pm +4 -4
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +18 -7
- data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
- data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
- data/bin/lib/Image/ExifTool/README +7 -6
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
- data/bin/lib/Image/ExifTool/Sony.pm +18 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5745 -5695
- data/bin/lib/Image/ExifTool/TagNames.pod +662 -509
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +31 -30
- data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +4 -4
- data/bin/lib/Image/ExifTool.pod +3 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- 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.
|
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("
|
24
|
+
ValueConv => 'sprintf("%.2x.%.2x %.4x:%.2x:%.2x Rev.%s", unpack("CCvCCa", $val))',
|
24
25
|
ValueConvInv => q{
|
25
|
-
my @v = $val =~ /^
|
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
|
-
|
31
|
-
|
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
|
42
|
-
|
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::
|
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 => '
|
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 =>
|
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
|
-
|
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
|
-
|
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::
|
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 => '
|
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
|
-
|
306
|
-
|
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[
|
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 => {
|
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.
|
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
|
-
'
|
184
|
-
'
|
185
|
-
'
|
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',
|