exiftool-vendored.exe 13.35.1 → 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.
- package/bin/exiftool.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +59 -5
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +5 -4
- package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Google.pm +804 -0
- package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +30 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +6 -5
- package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +19 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +12 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +30 -8
- package/bin/exiftool_files/lib/Image/ExifTool/README +7 -6
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +375 -91
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +8 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +20 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +5745 -5695
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +662 -509
- package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +31 -30
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +0 -482
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool.pod +3 -3
- package/bin/exiftool_files/windows_exiftool.txt +1 -1
- package/package.json +3 -3
|
@@ -211,12 +211,13 @@ key:
|
|
|
211
211
|
an ID_LABEL of "Index" is assumed for tables which use
|
|
212
212
|
ProcessBinaryData or set the IS_BINARY flag.
|
|
213
213
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
to
|
|
218
|
-
|
|
219
|
-
language translations in
|
|
214
|
+
ID_FMT Format for tag ID's in the documentation. Setting is 'hex' to
|
|
215
|
+
print tag ID in hexadecimal (with 4 hex digits or more), 'dec'
|
|
216
|
+
to leave as decimal, 'str' to use a quoted string, or 'none'
|
|
217
|
+
to drop the "Tag ID" column entirely. Any setting other than
|
|
218
|
+
'hex' prevents hex-looking strings from being converted when
|
|
219
|
+
importing an XML file for language translations in
|
|
220
|
+
BuildLangModules().
|
|
220
221
|
|
|
221
222
|
NO_LOOKUP Do not add tags to TagLookup.pm lookup tables.
|
|
222
223
|
|
|
@@ -30,7 +30,7 @@ use strict;
|
|
|
30
30
|
use vars qw($VERSION $AUTOLOAD);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
|
|
33
|
-
$VERSION = '1.
|
|
33
|
+
$VERSION = '1.72';
|
|
34
34
|
|
|
35
35
|
sub ConvertTimecode($);
|
|
36
36
|
sub ProcessSGLT($$$);
|
|
@@ -2031,6 +2031,7 @@ sub ProcessRIFF($$)
|
|
|
2031
2031
|
my $validate = $et->Options('Validate');
|
|
2032
2032
|
my $ee = $et->Options('ExtractEmbedded');
|
|
2033
2033
|
my $hash = $$et{ImageDataHash};
|
|
2034
|
+
my $base = 0;
|
|
2034
2035
|
|
|
2035
2036
|
# verify this is a valid RIFF file
|
|
2036
2037
|
return 0 unless $raf->Read($buff, 12) == 12;
|
|
@@ -2042,7 +2043,8 @@ sub ProcessRIFF($$)
|
|
|
2042
2043
|
return 0 unless $buff =~ /^(LA0[234]|OFR |LPAC|wvpk)/ and $raf->Read($buf2, 1024);
|
|
2043
2044
|
$type = $riffType{$1};
|
|
2044
2045
|
$buff .= $buf2;
|
|
2045
|
-
return 0 unless $buff =~ /WAVE(.{4})?fmt /sg and $raf->Seek(pos($buff) - 4, 0);
|
|
2046
|
+
return 0 unless $buff =~ /WAVE(.{4})?(junk|fmt )/sg and $raf->Seek(pos($buff) - 4, 0);
|
|
2047
|
+
$base = pos($buff) - 16;
|
|
2046
2048
|
}
|
|
2047
2049
|
$$raf{NoBuffer} = 1 if $et->Options('FastScan'); # disable buffering in FastScan mode
|
|
2048
2050
|
$mime = $riffMimeType{$type} if $type;
|
|
@@ -2159,7 +2161,7 @@ sub ProcessRIFF($$)
|
|
|
2159
2161
|
DataPos => 0, # (relative to Base)
|
|
2160
2162
|
Start => 0,
|
|
2161
2163
|
Size => $len,
|
|
2162
|
-
Base => $pos,
|
|
2164
|
+
Base => $pos + $base,
|
|
2163
2165
|
);
|
|
2164
2166
|
if ($setGroups) {
|
|
2165
2167
|
delete $$et{SET_GROUP0};
|
|
@@ -22,7 +22,7 @@ my $implementedRawzorVersion = 199; # (up to version 1.99)
|
|
|
22
22
|
# Rawzor-specific tags
|
|
23
23
|
%Image::ExifTool::Rawzor::Main = (
|
|
24
24
|
GROUPS => { 2 => 'Other' },
|
|
25
|
-
VARS => {
|
|
25
|
+
VARS => { ID_FMT => 'none' },
|
|
26
26
|
NOTES => q{
|
|
27
27
|
Rawzor files store compressed images of other formats. As well as the
|
|
28
28
|
information listed below, exiftool uncompresses and extracts the meta
|
|
@@ -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)
|