exiftool_vendored 12.76.1 → 12.81.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +105 -4
- data/bin/MANIFEST +29 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +4 -3
- data/bin/config_files/acdsee.config +37 -57
- data/bin/config_files/example.config +16 -2
- data/bin/exiftool +102 -31
- data/bin/lib/Image/ExifTool/Canon.pm +12 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +52 -4
- data/bin/lib/Image/ExifTool/FujiFilm.pm +14 -5
- data/bin/lib/Image/ExifTool/GPS.pm +5 -3
- data/bin/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
- data/bin/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
- data/bin/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
- data/bin/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
- data/bin/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
- data/bin/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
- data/bin/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
- data/bin/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
- data/bin/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
- data/bin/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
- data/bin/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
- data/bin/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
- data/bin/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
- data/bin/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +935 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +14 -2
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
- data/bin/lib/Image/ExifTool/Import.pm +5 -2
- data/bin/lib/Image/ExifTool/JSON.pm +15 -10
- data/bin/lib/Image/ExifTool/M2TS.pm +32 -4
- data/bin/lib/Image/ExifTool/MWG.pm +1 -0
- data/bin/lib/Image/ExifTool/MacOS.pm +19 -4
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +331 -23
- data/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +3 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +37 -19
- data/bin/lib/Image/ExifTool/PDF.pm +5 -5
- data/bin/lib/Image/ExifTool/PNG.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +195 -12
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- data/bin/lib/Image/ExifTool/README +6 -5
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4871 -4752
- data/bin/lib/Image/ExifTool/TagNames.pod +722 -383
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +43 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +65 -8
- data/bin/lib/Image/ExifTool/XMP.pm +18 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +64 -0
- data/bin/lib/Image/ExifTool.pm +265 -49
- data/bin/lib/Image/ExifTool.pod +63 -25
- data/bin/perl-Image-ExifTool.spec +2 -2
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +22 -2
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
40
40
|
use Image::ExifTool::Exif;
|
41
41
|
use Image::ExifTool::APP12;
|
42
42
|
|
43
|
-
$VERSION = '2.
|
43
|
+
$VERSION = '2.83';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -117,6 +117,7 @@ my %olympusLensTypes = (
|
|
117
117
|
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
118
118
|
'0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
|
119
119
|
'0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
|
120
|
+
'0 40 10' => 'Olympus M.Zuiko Digital ED 150-600mm F5.0-6.3', #forum15652
|
120
121
|
# Sigma lenses
|
121
122
|
'1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
|
122
123
|
'1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
|
@@ -196,6 +197,7 @@ my %olympusLensTypes = (
|
|
196
197
|
# '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
|
197
198
|
# Other makes
|
198
199
|
'24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
|
200
|
+
'f7 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
|
199
201
|
);
|
200
202
|
|
201
203
|
# lookup for Olympus camera types (ref PH)
|
@@ -442,6 +444,7 @@ my %olympusCameraTypes = (
|
|
442
444
|
S0093 => 'E-P7', #IB
|
443
445
|
S0095 => 'OM-1', #IB
|
444
446
|
S0101 => 'OM-5', #IB
|
447
|
+
S0121 => 'OM-1MarkII', #forum15652
|
445
448
|
SR45 => 'D220',
|
446
449
|
SR55 => 'D320L',
|
447
450
|
SR83 => 'D340L',
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
use Image::ExifTool::GPS;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.06';
|
20
20
|
|
21
21
|
# supported EXR value format types (other types are extracted as undef binary data)
|
22
22
|
my %formatType = (
|
@@ -134,7 +134,7 @@ my %formatType = (
|
|
134
134
|
multiView => { },
|
135
135
|
owner => { Groups => { 2 => 'Author' } },
|
136
136
|
pixelAspectRatio => { },
|
137
|
-
preview => { },
|
137
|
+
preview => { Groups => { 2 => 'Preview' } },
|
138
138
|
renderingTransform => { },
|
139
139
|
screenWindowCenter => { },
|
140
140
|
screenWindowWidth => { },
|
@@ -154,6 +154,19 @@ my %formatType = (
|
|
154
154
|
type => { },
|
155
155
|
version => { },
|
156
156
|
chunkCount => { },
|
157
|
+
# exif and xmp written by PanoramaStudio4.0.2Pro
|
158
|
+
exif => {
|
159
|
+
Name => 'EXIF',
|
160
|
+
SubDirectory => {
|
161
|
+
TagTable => 'Image::ExifTool::Exif::Main',
|
162
|
+
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
163
|
+
Start => 4, # (skip leading 4 bytes with data length)
|
164
|
+
},
|
165
|
+
},
|
166
|
+
xmp => {
|
167
|
+
Name => 'XMP',
|
168
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
|
169
|
+
},
|
157
170
|
# also observed:
|
158
171
|
# ilut
|
159
172
|
);
|
@@ -219,25 +232,30 @@ sub ProcessEXR($$)
|
|
219
232
|
AddTagToTable($tagTablePtr, $tag, $tagInfo);
|
220
233
|
$et->VPrint(0, $$et{INDENT}, "[adding $tag]\n");
|
221
234
|
}
|
222
|
-
my ($val, $success);
|
235
|
+
my ($val, $success, $buf2);
|
223
236
|
my $format = $formatType{$type};
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
237
|
+
my $subdir = $$tagInfo{SubDirectory};
|
238
|
+
if ($format or $binary or $subdir) {
|
239
|
+
$raf->Read($buf2, $size) == $size and $success = 1;
|
240
|
+
if ($subdir) {
|
241
|
+
$et->HandleTag($tagTablePtr, $tag, undef,
|
242
|
+
DataPt => \$buf2, DataPos => $raf->Tell() - length($buf2));
|
243
|
+
next if $success;
|
244
|
+
} elsif (not $format) {
|
245
|
+
$val = \$buf2; # treat as undef binary data
|
228
246
|
} elsif ($format ne '1') {
|
229
247
|
# handle formats which map nicely into ExifTool format codes
|
230
248
|
if ($format =~ /^(\w+)\[?(\d*)/) {
|
231
249
|
my ($fmt, $cnt) = ($1, $2);
|
232
250
|
$cnt = $fmt eq 'string' ? $size : 1 unless $cnt;
|
233
|
-
$val = ReadValue(\$
|
251
|
+
$val = ReadValue(\$buf2, 0, $fmt, $cnt, $size);
|
234
252
|
}
|
235
253
|
# handle other format types
|
236
254
|
} elsif ($type eq 'tiledesc') {
|
237
255
|
if ($size >= 9) {
|
238
|
-
my $x = Get32u(\$
|
239
|
-
my $y = Get32u(\$
|
240
|
-
my $mode = Get8u(\$
|
256
|
+
my $x = Get32u(\$buf2, 0);
|
257
|
+
my $y = Get32u(\$buf2, 4);
|
258
|
+
my $mode = Get8u(\$buf2, 8);
|
241
259
|
my $lvl = { 0 => 'One Level', 1 => 'MIMAP Levels', 2 => 'RIPMAP Levels' }->{$mode & 0x0f};
|
242
260
|
$lvl or $lvl = 'Unknown Levels (' . ($mode & 0xf) . ')';
|
243
261
|
my $rnd = { 0 => 'Round Down', 1 => 'Round Up' }->{$mode >> 4};
|
@@ -246,7 +264,7 @@ sub ProcessEXR($$)
|
|
246
264
|
}
|
247
265
|
} elsif ($type eq 'chlist') {
|
248
266
|
$val = [ ];
|
249
|
-
while ($
|
267
|
+
while ($buf2 =~ /\G([^\0]{1,31})\0(.{16})/sg) {
|
250
268
|
my ($str, $dat) = ($1, $2);
|
251
269
|
my ($pix,$lin,$x,$y) = unpack('VCx3VV', $dat);
|
252
270
|
$pix = { 0 => 'int8u', 1 => 'half', 2 => 'float' }->{$pix} || "unknown($pix)";
|
@@ -255,14 +273,14 @@ sub ProcessEXR($$)
|
|
255
273
|
} elsif ($type eq 'stringvector') {
|
256
274
|
$val = [ ];
|
257
275
|
my $pos = 0;
|
258
|
-
while ($pos + 4 <= length($
|
259
|
-
my $len = Get32u(\$
|
260
|
-
last if $pos + 4 + $len > length($
|
261
|
-
push @$val, substr($
|
276
|
+
while ($pos + 4 <= length($buf2)) {
|
277
|
+
my $len = Get32u(\$buf2, $pos);
|
278
|
+
last if $pos + 4 + $len > length($buf2);
|
279
|
+
push @$val, substr($buf2, $pos + 4, $len);
|
262
280
|
$pos += 4 + $len;
|
263
281
|
}
|
264
282
|
} else {
|
265
|
-
$val = \$
|
283
|
+
$val = \$buf2; # (shouldn't happen)
|
266
284
|
}
|
267
285
|
} else {
|
268
286
|
# avoid loading binary data
|
@@ -282,13 +300,13 @@ sub ProcessEXR($$)
|
|
282
300
|
$dim = [$3 - $1 + 1, $4 - $2 + 1];
|
283
301
|
}
|
284
302
|
if ($verbose) {
|
285
|
-
my $dataPt = ref $val ? $val : \$
|
303
|
+
my $dataPt = ref $val eq 'SCALAR' ? $val : \$buf2;
|
286
304
|
$et->VerboseInfo($tag, $tagInfo,
|
287
305
|
Table => $tagTablePtr,
|
288
306
|
Value => $val,
|
289
307
|
Size => $size,
|
290
308
|
Format => $type,
|
291
|
-
DataPt =>
|
309
|
+
DataPt => $dataPt,
|
292
310
|
Addr => $raf->Tell() - $size,
|
293
311
|
);
|
294
312
|
}
|
@@ -114,11 +114,11 @@ my %supportedFilter = (
|
|
114
114
|
Notes => q{
|
115
115
|
stored as a string but treated as a comma- or semicolon-separated list of
|
116
116
|
items when reading if the string contains commas or semicolons, whichever is
|
117
|
-
more numerous, otherwise it is treated a space-separated list of items.
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
117
|
+
more numerous, otherwise it is treated a space-separated list of items. The
|
118
|
+
list behaviour may be defeated by setting the API NoPDFList option. Written
|
119
|
+
as a comma-separated string. Note that the corresponding XMP-pdf:Keywords
|
120
|
+
tag is not treated as a list, so the NoPDFList option should be used when
|
121
|
+
copying between these two.
|
122
122
|
},
|
123
123
|
},
|
124
124
|
Creator => { },
|
@@ -36,7 +36,7 @@ use strict;
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
|
39
|
-
$VERSION = '1.
|
39
|
+
$VERSION = '1.67';
|
40
40
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
@@ -642,8 +642,8 @@ my %unreg = ( Notes => 'unregistered' );
|
|
642
642
|
Label => { %unreg },
|
643
643
|
Make => { %unreg, Groups => { 2 => 'Camera' } },
|
644
644
|
Model => { %unreg, Groups => { 2 => 'Camera' } },
|
645
|
-
#
|
646
|
-
#
|
645
|
+
parameters => { %unreg }, # (written by Stable Diffusion)
|
646
|
+
aesthetic_score => { Name => 'AestheticScore', %unreg }, # (written by Stable Diffusion)
|
647
647
|
'create-date'=> {
|
648
648
|
Name => 'CreateDate',
|
649
649
|
Groups => { 2 => 'Time' },
|
@@ -177,7 +177,7 @@ sub DecodeAFPoints($$$$;$);
|
|
177
177
|
'4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
|
178
178
|
'4 7' => 'Irix 45mm F1.4', #27
|
179
179
|
'4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
|
180
|
-
'4 9' => 'Irix 11mm F4 Firefly', #27
|
180
|
+
'4 9' => 'Irix 11mm F4 Firefly', #27 (guessing the Blackstone version may be the same ID - PH)
|
181
181
|
'4 10' => 'Irix 15mm F2.4', #27
|
182
182
|
'4 12' => 'smc PENTAX-FA 50mm F1.4', #17
|
183
183
|
'4 15' => 'smc PENTAX-FA 28-105mm F4-5.6 [IF]',
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
48
48
|
use Image::ExifTool::Exif;
|
49
49
|
use Image::ExifTool::GPS;
|
50
50
|
|
51
|
-
$VERSION = '2.
|
51
|
+
$VERSION = '2.94';
|
52
52
|
|
53
53
|
sub ProcessMOV($$;$);
|
54
54
|
sub ProcessKeys($$$);
|
@@ -58,11 +58,14 @@ sub ProcessEncodingParams($$$);
|
|
58
58
|
sub ProcessSampleDesc($$$);
|
59
59
|
sub ProcessHybrid($$$);
|
60
60
|
sub ProcessRights($$$);
|
61
|
+
sub ProcessNextbase($$$);
|
61
62
|
# ++vvvvvvvvvvvv++ (in QuickTimeStream.pl)
|
62
63
|
sub Process_mebx($$$);
|
63
64
|
sub Process_3gf($$$);
|
64
65
|
sub Process_gps0($$$);
|
65
66
|
sub Process_gsen($$$);
|
67
|
+
sub Process_gdat($$$);
|
68
|
+
sub Process_nbmt($$$);
|
66
69
|
sub ProcessKenwood($$$);
|
67
70
|
sub ProcessLIGO_JSON($$$);
|
68
71
|
sub ProcessRIFFTrailer($$$);
|
@@ -88,6 +91,7 @@ sub UnpackLang($;$);
|
|
88
91
|
sub WriteKeys($$$);
|
89
92
|
sub WriteQuickTime($$$);
|
90
93
|
sub WriteMOV($$);
|
94
|
+
sub WriteNextbase($$$);
|
91
95
|
sub GetLangInfo($$);
|
92
96
|
sub CheckQTValue($$$);
|
93
97
|
|
@@ -656,6 +660,14 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
656
660
|
Name => 'SensorData', # sensor data for the 360Fly
|
657
661
|
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/ and $$self{OPTIONS}{ExtractEmbedded}',
|
658
662
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Tags360Fly' },
|
663
|
+
},{
|
664
|
+
Name => 'SensorData',
|
665
|
+
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/',
|
666
|
+
Notes => 'raw 360Fly sensor data without ExtractEmbedded option',
|
667
|
+
RawConv => q{
|
668
|
+
$self->WarnOnce('Use the ExtractEmbedded option to decode timed SensorData',3);
|
669
|
+
return \$val;
|
670
|
+
},
|
659
671
|
},
|
660
672
|
{ #https://c2pa.org/specifications/
|
661
673
|
Name => 'JUMBF',
|
@@ -685,18 +697,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
685
697
|
Start => 27,
|
686
698
|
},
|
687
699
|
},
|
688
|
-
{
|
689
|
-
Name => 'SensorData',
|
690
|
-
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/',
|
691
|
-
Notes => 'raw 360Fly sensor data without ExtractEmbedded option',
|
692
|
-
RawConv => q{
|
693
|
-
$self->WarnOnce('Use the ExtractEmbedded option to decode timed SensorData',3);
|
694
|
-
return \$val;
|
695
|
-
},
|
696
|
-
},
|
697
700
|
{ #PH (Canon CR3)
|
698
701
|
Name => 'PreviewImage',
|
699
|
-
Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
|
702
|
+
Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16.{32}/s',
|
700
703
|
Groups => { 2 => 'Preview' },
|
701
704
|
PreservePadding => 1,
|
702
705
|
# 0x00 - undef[16]: UUID
|
@@ -711,6 +714,25 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
711
714
|
# 0x3c - int32u: preview length
|
712
715
|
RawConv => '$val = substr($val, 0x30); $self->ValidateImage(\$val, $tag)',
|
713
716
|
},
|
717
|
+
{ #PH (Garmin MP4)
|
718
|
+
Name => 'ThumbnailImage',
|
719
|
+
Condition => '$$valPt=~/^\x11\x6e\x40\xdc\xb1\x86\x46\xe4\x84\x7c\xd9\xc0\xc3\x49\x10\x81.{8}\xff\xd8\xff/s',
|
720
|
+
Groups => { 2 => 'Preview' },
|
721
|
+
Binary => 1,
|
722
|
+
# 0x00 - undef[16]: UUID
|
723
|
+
# 0x10 - int32u[2]: ThumbnailLength
|
724
|
+
# 0x14 - int16u[2]: width/height of image (160/120)
|
725
|
+
RawConv => q{
|
726
|
+
my $len = Get32u(\$val, 0x10);
|
727
|
+
return undef unless length($val) >= $len + 0x18;
|
728
|
+
return substr($val, 0x18, $len);
|
729
|
+
},
|
730
|
+
},
|
731
|
+
# also seen 120-byte record in Garmin MP4's, starting like this (model name at byte 9):
|
732
|
+
# 0000: 47 52 4d 4e 00 00 00 01 00 44 43 35 37 00 00 00 [GRMN.....DC57...]
|
733
|
+
# 0000: 47 52 4d 4e 00 00 00 01 00 44 43 36 36 57 00 00 [GRMN.....DC66W..]
|
734
|
+
# and this in Garmin, followed by 8 bytes of 0's:
|
735
|
+
# 0000: db 11 98 3d 8f 65 43 8c bb b8 e1 ac 56 fe 6b 04
|
714
736
|
{ #8
|
715
737
|
Name => 'UUID-Unknown',
|
716
738
|
%unknownInfo,
|
@@ -835,6 +857,20 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
835
857
|
},
|
836
858
|
# gpsa - seen hex "01 20 00 00" (DuDuBell M1, VSYS M6L)
|
837
859
|
# gsea - 20 bytes hex "05 00's..." (DuDuBell M1) "05 08 02 01 ..." (VSYS M6L)
|
860
|
+
gdat => { # Base64-encoded JSON-format timed GPS (Nextbase software)
|
861
|
+
Name => 'GPSData',
|
862
|
+
SubDirectory => {
|
863
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
864
|
+
ProcessProc => \&Process_gdat,
|
865
|
+
},
|
866
|
+
},
|
867
|
+
nbmt => { # (Nextbase)
|
868
|
+
Name => 'NextbaseMeta',
|
869
|
+
SubDirectory => {
|
870
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
871
|
+
ProcessProc => \&Process_nbmt,
|
872
|
+
},
|
873
|
+
},
|
838
874
|
'GPS ' => { # GPS data written by 70mai dashcam (parsed in QuickTimeStream.pl)
|
839
875
|
Name => 'GPSDataList2',
|
840
876
|
Unknown => 1,
|
@@ -2090,8 +2126,21 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
2090
2126
|
Condition => '$$valPt =~ /^VIRBactioncamera/',
|
2091
2127
|
RawConv => 'substr($val, 16)',
|
2092
2128
|
RawConvInv => '"VIRBactioncamera$val"',
|
2129
|
+
},{
|
2130
|
+
Name => 'GarminModel', # (NC)
|
2131
|
+
Condition => '$$valPt =~ /^\xf7\x6c\xd7\x6a\x07\x5b\x4a\x1e\xb3\x1c\x0e\x7f\xab\x7e\x09\xd4/',
|
2132
|
+
Writable => 0,
|
2133
|
+
RawConv => q{
|
2134
|
+
return undef unless length($val) > 25;
|
2135
|
+
my $len = unpack('x24C', $val);
|
2136
|
+
return undef unless length($val) >= 25 + $len;
|
2137
|
+
return substr($val, 25, $len);
|
2138
|
+
},
|
2093
2139
|
},{
|
2094
2140
|
# have seen "28 f3 11 e2 b7 91 4f 6f 94 e2 4f 5d ea cb 3c 01" for RicohThetaZ1 accelerometer RADT data (not yet decoded)
|
2141
|
+
# also seen in Garmin MP4:
|
2142
|
+
# 51 0b 63 46 6c fd 4a 17 87 42 ea c9 ea ae b3 bd - seems to contain a duplicate of the trak atom
|
2143
|
+
# b3 e8 21 f4 fe 33 4e 10 8f 92 f5 e1 d4 36 c9 8a - 8 bytes of zeros
|
2095
2144
|
Name => 'UUID-Unknown',
|
2096
2145
|
Writable => 0,
|
2097
2146
|
%unknownInfo,
|
@@ -2399,6 +2448,30 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
2399
2448
|
Groups => { 2 => 'Preview' },
|
2400
2449
|
Binary => 1,
|
2401
2450
|
},
|
2451
|
+
# ---- Nextbase ----
|
2452
|
+
info => 'FirmwareVersion',
|
2453
|
+
'time' => {
|
2454
|
+
Name => 'TimeStamp',
|
2455
|
+
Format => 'int32u', # (followed by 4 unknown bytes 00 0d 00 00)
|
2456
|
+
Writable => 0,
|
2457
|
+
Groups => { 2 => 'Time' },
|
2458
|
+
ValueConv => '$val =~ s/ .*//; ConvertUnixTime($val)',
|
2459
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
2460
|
+
},
|
2461
|
+
infi => {
|
2462
|
+
Name => 'CameraInfo',
|
2463
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Nextbase' },
|
2464
|
+
},
|
2465
|
+
finm => {
|
2466
|
+
Name => 'OriginalFileName',
|
2467
|
+
Writable => 0,
|
2468
|
+
},
|
2469
|
+
# AMBA ? - (133 bytes)
|
2470
|
+
# nbpl ? - "FP-433-KC"
|
2471
|
+
nbpl => { Name => 'Unknown_nbpl', Unknown => 1, Hidden => 1 },
|
2472
|
+
# maca ? - b8 2d 28 15 f1 48
|
2473
|
+
# sern ? - 0d 69 42 74
|
2474
|
+
# nbid ? - 0d 69 42 74 65 df 72 65 03 de c0 fb 01 01 00 00
|
2402
2475
|
# ---- Unknown ----
|
2403
2476
|
# CDET - 128 bytes (unknown origin)
|
2404
2477
|
# mtyp - 4 bytes all zero (some drone video)
|
@@ -6655,7 +6728,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6655
6728
|
%Image::ExifTool::QuickTime::iTunesInfo = (
|
6656
6729
|
PROCESS_PROC => \&ProcessMOV,
|
6657
6730
|
GROUPS => { 1 => 'iTunes', 2 => 'Audio' },
|
6658
|
-
VARS => { LONG_TAGS =>
|
6731
|
+
VARS => { LONG_TAGS => 1 }, # (hack for discrepancy in the way long tags are counted in BuildTagLookup)
|
6659
6732
|
NOTES => q{
|
6660
6733
|
ExifTool will extract any iTunesInfo tags that exist, even if they are not
|
6661
6734
|
defined in this table. These tags belong to the family 1 "iTunes" group,
|
@@ -6731,6 +6804,17 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6731
6804
|
BARCODE => 'Barcode',
|
6732
6805
|
LABEL => 'Label',
|
6733
6806
|
MOOD => 'Mood',
|
6807
|
+
DIRECTOR => 'Director',
|
6808
|
+
DIRECTOR_OF_PHOTOGRAPHY => 'DirectorOfPhotography',
|
6809
|
+
PRODUCTION_DESIGNER => 'ProductionDesigner',
|
6810
|
+
COSTUME_DESIGNER => 'CostumeDesigner',
|
6811
|
+
SCREENPLAY_BY => 'ScreenplayBy',
|
6812
|
+
EDITED_BY => 'EditedBy',
|
6813
|
+
PRODUCER => 'Producer',
|
6814
|
+
IMDB_ID => { },
|
6815
|
+
TMDB_ID => { },
|
6816
|
+
Actors => { },
|
6817
|
+
TIPL => { },
|
6734
6818
|
popularimeter => 'Popularimeter',
|
6735
6819
|
'Dynamic Range (DR)'=> 'DynamicRange',
|
6736
6820
|
initialkey => 'InitialKey',
|
@@ -8087,6 +8171,88 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
8087
8171
|
},
|
8088
8172
|
);
|
8089
8173
|
|
8174
|
+
# Nextbase tags (ref PH)
|
8175
|
+
%Image::ExifTool::QuickTime::Nextbase = (
|
8176
|
+
GROUPS => { 1 => 'Nextbase', 2 => 'Camera' },
|
8177
|
+
PROCESS_PROC => \&ProcessNextbase,
|
8178
|
+
WRITE_PROC => \&WriteNextbase,
|
8179
|
+
VARS => { LONG_TAGS => 3 },
|
8180
|
+
NOTES => q{
|
8181
|
+
Tags found in 'infi' atom from some Nextbase videos. As well as these tags,
|
8182
|
+
other existing tags are also extracted. These tags are not currently
|
8183
|
+
writable but they may all be removed by deleting the Nextbase group.
|
8184
|
+
},
|
8185
|
+
'Wi-Fi SSID' => { },
|
8186
|
+
'Wi-Fi Password' => { },
|
8187
|
+
'Wi-Fi MAC Address' => { },
|
8188
|
+
'Model' => { },
|
8189
|
+
'Firmware' => { },
|
8190
|
+
'Serial No' => { Name => 'SerialNumber' },
|
8191
|
+
'FCC-ID' => { },
|
8192
|
+
'Battery Status' => { },
|
8193
|
+
'SD Card Manf ID' => { },
|
8194
|
+
'SD Card OEM ID' => { },
|
8195
|
+
'SD Card Model No' => { },
|
8196
|
+
'SD Card Serial No' => { },
|
8197
|
+
'SD Card Manf Date' => { },
|
8198
|
+
'SD Card Type' => { },
|
8199
|
+
'SD Card Used Space' => { },
|
8200
|
+
'SD Card Class' => { },
|
8201
|
+
'SD Card Size' => { },
|
8202
|
+
'SD Card Format' => { },
|
8203
|
+
'Wi-Fi SSID' => { },
|
8204
|
+
'Wi-Fi Password' => { },
|
8205
|
+
'Wi-Fi MAC Address' => { },
|
8206
|
+
'Bluetooth Name' => { },
|
8207
|
+
'Bluetooth MAC Address' => { },
|
8208
|
+
'Resolution' => { },
|
8209
|
+
'Exposure' => { },
|
8210
|
+
'Video Length' => { },
|
8211
|
+
'Audio' => { },
|
8212
|
+
'Time Stamp' => { Name => 'VideoTimeStamp' },
|
8213
|
+
'Speed Stamp' => { },
|
8214
|
+
'GPS Stamp' => { },
|
8215
|
+
'Model Stamp' => { },
|
8216
|
+
'Dual Files' => { },
|
8217
|
+
'Time Lapse' => { },
|
8218
|
+
'Number / License Plate' => { },
|
8219
|
+
'G Sensor' => { },
|
8220
|
+
'Image Stabilisation' => { },
|
8221
|
+
'Extreme Weather Mode' => { },
|
8222
|
+
'Screen Saver' => { },
|
8223
|
+
'Alerts' => { },
|
8224
|
+
'Recording History' => { },
|
8225
|
+
'Parking Mode' => { },
|
8226
|
+
'Language' => { },
|
8227
|
+
'Country' => { },
|
8228
|
+
'Time Zone / DST' => { Groups => { 2 => 'Time' } },
|
8229
|
+
'Time & Date' => { Name => 'TimeAndDate', Groups => { 2 => 'Time' } },
|
8230
|
+
'Speed Units' => { },
|
8231
|
+
'Device Sounds' => { },
|
8232
|
+
'Screen Dimming' => { },
|
8233
|
+
'Auto Power Off' => { },
|
8234
|
+
'Keep User Settings' => { },
|
8235
|
+
'System Info' => { },
|
8236
|
+
'Format SD Card' => { },
|
8237
|
+
'Default Settings' => { },
|
8238
|
+
'Emergency SOS' => { },
|
8239
|
+
'Reversing Camera' => { },
|
8240
|
+
'what3words' => { Name => 'What3Words' },
|
8241
|
+
'MyNextbase - Pairing' => { },
|
8242
|
+
'MyNextbase - Paired Device Name' => { },
|
8243
|
+
'Alexa' => { },
|
8244
|
+
'Alexa - Pairing' => { },
|
8245
|
+
'Alexa - Paired Device Name' => { },
|
8246
|
+
'Alexa - Privacy Mode' => { },
|
8247
|
+
'Alexa - Wake Word Language' => { },
|
8248
|
+
'Firmware Version' => { },
|
8249
|
+
'RTOS' => { },
|
8250
|
+
'Linux' => { },
|
8251
|
+
'NBCD' => { },
|
8252
|
+
'Alexa' => { },
|
8253
|
+
'2nd Cam' => { Name => 'SecondCam' },
|
8254
|
+
);
|
8255
|
+
|
8090
8256
|
# QuickTime composite tags
|
8091
8257
|
%Image::ExifTool::QuickTime::Composite = (
|
8092
8258
|
GROUPS => { 2 => 'Video' },
|
@@ -9149,6 +9315,23 @@ sub ProcessRights($$$)
|
|
9149
9315
|
return 1;
|
9150
9316
|
}
|
9151
9317
|
|
9318
|
+
#------------------------------------------------------------------------------
|
9319
|
+
# Process Nextbase 'infi' atom (ref PH)
|
9320
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
9321
|
+
# Returns: 1 on success
|
9322
|
+
sub ProcessNextbase($$$)
|
9323
|
+
{
|
9324
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
9325
|
+
my $dataPt = $$dirInfo{DataPt};
|
9326
|
+
$et->VerboseDir('Nextbase', undef, length($$dataPt));
|
9327
|
+
while ($$dataPt =~ /(.*?): +(.*)\x0d/g) {
|
9328
|
+
my ($id, $val) = ($1, $2);
|
9329
|
+
$$tagTbl{$id} or AddTagToTable($tagTbl, $id, { Name => Image::ExifTool::MakeTagName($id) });
|
9330
|
+
$et->HandleTag($tagTbl, $id, $val, Size => length($val));
|
9331
|
+
}
|
9332
|
+
return 1;
|
9333
|
+
}
|
9334
|
+
|
9152
9335
|
#------------------------------------------------------------------------------
|
9153
9336
|
# Process iTunes Encoding Params (ref PH)
|
9154
9337
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|