exiftool_vendored 13.19.0 → 13.22.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 +37 -2
- data/bin/MANIFEST +8 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +150 -64
- data/bin/lib/Image/ExifTool/DJI.pm +97 -24
- data/bin/lib/Image/ExifTool/EXE.pm +2 -9
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +28 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +5 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +808 -524
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +57 -32
- data/bin/lib/Image/ExifTool/PNG.pm +7 -1
- data/bin/lib/Image/ExifTool/Plot.pm +712 -0
- data/bin/lib/Image/ExifTool/Protobuf.pm +21 -10
- data/bin/lib/Image/ExifTool/QuickTime.pm +41 -31
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +56 -22
- data/bin/lib/Image/ExifTool/TagLookup.pm +4988 -4965
- data/bin/lib/Image/ExifTool/TagNames.pod +163 -65
- data/bin/lib/Image/ExifTool/Trailer.pm +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +0 -1
- data/bin/lib/Image/ExifTool/XMP.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +16 -2
- data/bin/lib/Image/ExifTool.pod +31 -0
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -18,14 +18,15 @@ use Image::ExifTool::XMP;
|
|
18
18
|
use Image::ExifTool::GPS;
|
19
19
|
use Image::ExifTool::Protobuf;
|
20
20
|
|
21
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.14';
|
22
22
|
|
23
23
|
sub ProcessDJIInfo($$$);
|
24
|
+
sub ProcessSettings($$$);
|
24
25
|
|
25
26
|
%knownProtocol = (
|
26
27
|
'dvtm_ac203.proto' => 1, # Osmo Action 4
|
27
28
|
'dvtm_ac204.proto' => 1, # Osmo Action 5
|
28
|
-
'dvtm_AVATA2.proto' => 1, #
|
29
|
+
'dvtm_AVATA2.proto' => 1, # Avata 2
|
29
30
|
'dvtm_wm265e.proto' => 1, # Mavic 3
|
30
31
|
'dvtm_pm320.proto' => 1, # Matrice 30
|
31
32
|
'dvtm_Mini4_Pro.proto' => 1, # Matrice 30
|
@@ -197,6 +198,27 @@ my %convFloat2 = (
|
|
197
198
|
},
|
198
199
|
);
|
199
200
|
|
201
|
+
%Image::ExifTool::DJI::Glamour = (
|
202
|
+
GROUPS => { 0 => 'QuickTime', 1 => 'DJI', 2 => 'Image' },
|
203
|
+
PROCESS_PROC => \&Image::ExifTool::DJI::ProcessSettings,
|
204
|
+
NOTES => 'Glamour settings used by some DJI models.',
|
205
|
+
beauty_enable => 'BeautyEnable',
|
206
|
+
smoother => 'Smoother',
|
207
|
+
whitening => 'Whitening',
|
208
|
+
face_slimming => 'FaceSlimming',
|
209
|
+
eye_enlarge => 'EyeEnlarge',
|
210
|
+
nose_slimming => 'NoseSlimming',
|
211
|
+
mouth_beautify => 'MouthModify',
|
212
|
+
teeth_whitening => 'TeethWhitening',
|
213
|
+
leg_longer => 'LegLonger',
|
214
|
+
head_shrinking => 'HeadShrinking',
|
215
|
+
lipstick => 'Lipstick',
|
216
|
+
blush => 'Blush',
|
217
|
+
dark_circle => 'DarkCircle',
|
218
|
+
acne_spot_removal=>'AcneSpotRemoval',
|
219
|
+
eyebrows => 'Eyebrows',
|
220
|
+
);
|
221
|
+
|
200
222
|
# metadata in protobuf format (djmd and dbgi meta types, ref PH)
|
201
223
|
%Image::ExifTool::DJI::Protobuf = (
|
202
224
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
@@ -210,7 +232,7 @@ my %convFloat2 = (
|
|
210
232
|
file name combined with the hierarchical protobuf field numbers.
|
211
233
|
|
212
234
|
ExifTool currently extracts timed GPS plus a few other tags from DJI devices
|
213
|
-
which use the following protocols: dvtm_AVATA2.proto (
|
235
|
+
which use the following protocols: dvtm_AVATA2.proto (Avata 2),
|
214
236
|
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5),
|
215
237
|
dvtm_wm265e.proto (Mavic 3), dvtm_pm320.proto (Matrice 30) and
|
216
238
|
dvtm_pm320.proto (Mini 4 Pro).
|
@@ -229,13 +251,24 @@ my %convFloat2 = (
|
|
229
251
|
#
|
230
252
|
# Osmo Action 4
|
231
253
|
#
|
232
|
-
'dvtm_ac203_1-1-5' => 'SerialNumber', # (NC)
|
254
|
+
'dvtm_ac203_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo Action 4' }, # (NC)
|
233
255
|
# dvtm_ac203_1-1-6 - some version number
|
234
256
|
'dvtm_ac203_1-1-10' => 'Model',
|
235
257
|
'dvtm_ac203_2-3' => {
|
236
258
|
Name => 'FrameInfo',
|
237
259
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
238
260
|
},
|
261
|
+
'dvtm_ac203_3-2-2-1' => { Name => 'ISO', Format => 'float' },
|
262
|
+
'dvtm_ac203_3-2-4-1' => { # (NC)
|
263
|
+
Name => 'ShutterSpeed',
|
264
|
+
Format => 'rational',
|
265
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
266
|
+
},
|
267
|
+
'dvtm_ac203_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
268
|
+
# dvtm_ac203_3-2-9-1 - looks like Z accerometer measurement, but 2 and 3 don't look like other components
|
269
|
+
'dvtm_ac203_3-2-10-2' => { Name => 'AccelerometerX', Format => 'float' } , # (NC) left/right
|
270
|
+
'dvtm_ac203_3-2-10-3' => { Name => 'AccelerometerY', Format => 'float' } , # (NC) front/back
|
271
|
+
'dvtm_ac203_3-2-10-4' => { Name => 'AccelerometerZ', Format => 'float' } , # (NC) up/down
|
239
272
|
# dvtm_ac203_3-4-1-4 - model code?
|
240
273
|
'dvtm_ac203_3-4-2-1' => {
|
241
274
|
Name => 'GPSInfo',
|
@@ -258,19 +291,27 @@ my %convFloat2 = (
|
|
258
291
|
#
|
259
292
|
# Osmo Action 5
|
260
293
|
#
|
261
|
-
'dvtm_ac204_1-1-5' => 'SerialNumber', # (NC)
|
294
|
+
'dvtm_ac204_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo Action 5' }, # (NC)
|
262
295
|
# dvtm_ac204_1-1-6 - some version number
|
263
296
|
'dvtm_ac204_1-1-10' => 'Model',
|
264
297
|
'dvtm_ac204_2-3' => {
|
265
298
|
Name => 'FrameInfo',
|
266
299
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
267
300
|
},
|
301
|
+
'dvtm_ac204_3-2-4-1' => { # (NC)
|
302
|
+
Name => 'ShutterSpeed',
|
303
|
+
Format => 'rational',
|
304
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
305
|
+
},
|
306
|
+
'dvtm_ac204_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
307
|
+
'dvtm_ac204_3-2-10-2' => { Name => 'AccelerometerX', Format => 'float' } , # (NC) left/right
|
308
|
+
'dvtm_ac204_3-2-10-3' => { Name => 'AccelerometerY', Format => 'float' } , # (NC) front/back
|
309
|
+
'dvtm_ac204_3-2-10-4' => { Name => 'AccelerometerZ', Format => 'float' } , # (NC) up/down
|
268
310
|
# dvtm_ac204_3-4-1-4 - model code?
|
269
311
|
'dvtm_ac204_3-4-2-1' => {
|
270
312
|
Name => 'GPSInfo',
|
271
313
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
272
314
|
},
|
273
|
-
# dvtm_ac204_3-2-4-1 - shutter speed? (rational)
|
274
315
|
'dvtm_ac204_3-4-2-2' => {
|
275
316
|
Name => 'GPSAltitude',
|
276
317
|
Groups => { 2 => 'Location' },
|
@@ -286,11 +327,11 @@ my %convFloat2 = (
|
|
286
327
|
PrintConv => '$self->ConvertDateTime($val)',
|
287
328
|
},
|
288
329
|
#
|
289
|
-
#
|
330
|
+
# Avata 2
|
290
331
|
#
|
291
332
|
# dvtm_AVATA2_1-1-2 - some version number
|
292
333
|
# dvtm_AVATA2_1-1-3 - some version number
|
293
|
-
'dvtm_AVATA2_1-1-5' => 'SerialNumber', # (NC)
|
334
|
+
'dvtm_AVATA2_1-1-5' => { Name => 'SerialNumber', Notes => 'Avata 2' }, # (NC)
|
294
335
|
'dvtm_AVATA2_1-1-10' => 'Model',
|
295
336
|
# dvtm_AVATA2_2-2-1-4 - model code?
|
296
337
|
'dvtm_AVATA2_2-2-3-1' => 'SerialNumber2', # (NC)
|
@@ -308,17 +349,33 @@ my %convFloat2 = (
|
|
308
349
|
},
|
309
350
|
# dvtm_AVATA2_3-2-1-4 - model code?
|
310
351
|
# dvtm_AVATA2_3-2-1-5 - frame rate?
|
311
|
-
|
352
|
+
'dvtm_AVATA2_3-2-2-1' => { Name => 'ISO', Format => 'float' }, # (NC)
|
353
|
+
'dvtm_AVATA2_3-2-4-1' => {
|
354
|
+
Name => 'ShutterSpeed',
|
355
|
+
Format => 'rational',
|
356
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
357
|
+
},
|
358
|
+
'dvtm_AVATA2_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
359
|
+
'dvtm_AVATA2_3-2-10-1' => { # (NC)
|
360
|
+
Name => 'FNumber',
|
361
|
+
Format => 'rational',
|
362
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
363
|
+
},
|
312
364
|
# dvtm_AVATA2_3-4-1-4 - model code?
|
313
|
-
|
365
|
+
'dvtm_AVATA2_3-4-3' => { # (NC)
|
366
|
+
Name => 'DroneInfo',
|
367
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
|
368
|
+
},
|
314
369
|
'dvtm_AVATA2_3-4-4-1' => {
|
315
370
|
Name => 'GPSInfo',
|
316
371
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
317
372
|
},
|
373
|
+
'dvtm_AVATA2_3-4-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' }, # (NC)
|
374
|
+
'dvtm_AVATA2_3-4-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' }, # (NC)
|
318
375
|
#
|
319
376
|
# Mavic 3
|
320
377
|
#
|
321
|
-
'dvtm_wm265e_1-1-5' => 'SerialNumber', # (confirmed)
|
378
|
+
'dvtm_wm265e_1-1-5' => { Name => 'SerialNumber', Notes => 'Mavic 3' }, # (confirmed)
|
322
379
|
'dvtm_wm265e_1-1-10' => 'Model',
|
323
380
|
'dvtm_wm265e_2-2' => {
|
324
381
|
Name => 'FrameInfo',
|
@@ -350,7 +407,7 @@ my %convFloat2 = (
|
|
350
407
|
#
|
351
408
|
# Matrice 30
|
352
409
|
#
|
353
|
-
'dvtm_pm320_1-1-5' => 'SerialNumber',
|
410
|
+
'dvtm_pm320_1-1-5' => { Name => 'SerialNumber', Notes => 'Matrice 30' },
|
354
411
|
'dvtm_pm320_1-1-10' => 'Model',
|
355
412
|
'dvtm_pm320_2-2' => {
|
356
413
|
Name => 'FrameInfo',
|
@@ -362,6 +419,11 @@ my %convFloat2 = (
|
|
362
419
|
Format => 'rational',
|
363
420
|
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
364
421
|
},
|
422
|
+
'dvtm_pm320_3-2-4-1' => { # (NC)
|
423
|
+
Name => 'FNumber',
|
424
|
+
Format => 'rational',
|
425
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
426
|
+
},
|
365
427
|
'dvtm_pm320_3-2-6-1' => { Name => 'DigitalZoom', Format => 'float' },
|
366
428
|
'dvtm_pm320_3-3-4-1' => {
|
367
429
|
Name => 'GPSInfo',
|
@@ -380,7 +442,7 @@ my %convFloat2 = (
|
|
380
442
|
#
|
381
443
|
# Mini 4 Pro
|
382
444
|
#
|
383
|
-
'dvtm_Mini4_Pro_1-1-5' => 'SerialNumber',
|
445
|
+
'dvtm_Mini4_Pro_1-1-5' => { Name => 'SerialNumber', Notes => 'Mini 4 Pro' },
|
384
446
|
'dvtm_Mini4_Pro_1-1-10' => 'Model',
|
385
447
|
'dvtm_Mini4_Pro_2-3' => {
|
386
448
|
Name => 'FrameInfo',
|
@@ -418,7 +480,7 @@ my %convFloat2 = (
|
|
418
480
|
%Image::ExifTool::DJI::DroneInfo = (
|
419
481
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
420
482
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
421
|
-
VARS => { HEX_ID => 0 },
|
483
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
422
484
|
1 => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val / 10' },
|
423
485
|
2 => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val / 10' },
|
424
486
|
3 => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val / 10' },
|
@@ -427,16 +489,16 @@ my %convFloat2 = (
|
|
427
489
|
%Image::ExifTool::DJI::GimbalInfo = (
|
428
490
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
429
491
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
430
|
-
VARS => { HEX_ID => 0 },
|
492
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
431
493
|
1 => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
|
432
|
-
2 => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' },
|
494
|
+
2 => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' }, # usually 0, so missing
|
433
495
|
3 => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
|
434
496
|
);
|
435
497
|
|
436
498
|
%Image::ExifTool::DJI::FrameInfo = (
|
437
499
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Video' },
|
438
500
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
439
|
-
VARS => { HEX_ID => 0 },
|
501
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
440
502
|
1 => { Name => 'FrameWidth', Format => 'unsigned' },
|
441
503
|
2 => { Name => 'FrameHeight', Format => 'unsigned' },
|
442
504
|
3 => { Name => 'FrameRate', Format => 'float' },
|
@@ -445,7 +507,7 @@ my %convFloat2 = (
|
|
445
507
|
%Image::ExifTool::DJI::GPSInfo = (
|
446
508
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Location' },
|
447
509
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
448
|
-
VARS => { HEX_ID => 0 },
|
510
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
449
511
|
1 => {
|
450
512
|
Name => 'CoordinateUnits',
|
451
513
|
Format => 'unsigned',
|
@@ -469,6 +531,22 @@ my %convFloat2 = (
|
|
469
531
|
},
|
470
532
|
);
|
471
533
|
|
534
|
+
#------------------------------------------------------------------------------
|
535
|
+
# Process DJI beauty settings (ref PH)
|
536
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
537
|
+
# Returns: 1 on success
|
538
|
+
sub ProcessSettings($$$)
|
539
|
+
{
|
540
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
541
|
+
$et->VerboseDir($$dirInfo{DirName}, undef, length(${$$dirInfo{DataPt}}));
|
542
|
+
foreach (split /;/, ${$$dirInfo{DataPt}}) {
|
543
|
+
my ($tag, $val) = split /=/;
|
544
|
+
next unless defined $tag and defined $val;
|
545
|
+
$et->HandleTag($tagTbl, $tag, $val, MakeTagInfo => 1);
|
546
|
+
}
|
547
|
+
return 1;
|
548
|
+
}
|
549
|
+
|
472
550
|
#------------------------------------------------------------------------------
|
473
551
|
# Process DJI info (ref PH)
|
474
552
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
@@ -493,12 +571,7 @@ sub ProcessDJIInfo($$$)
|
|
493
571
|
my $buff = $val;
|
494
572
|
$val = \$buff;
|
495
573
|
}
|
496
|
-
|
497
|
-
my $name = $tag;
|
498
|
-
$name =~ s/_([a-z])/_\U$1/g;
|
499
|
-
AddTagToTable($tagTbl, $tag, { Name => Image::ExifTool::MakeTagName($name) });
|
500
|
-
}
|
501
|
-
$et->HandleTag($tagTbl, $tag, $val);
|
574
|
+
$et->HandleTag($tagTbl, $tag, $val, MakeTagInfo => 1);
|
502
575
|
}
|
503
576
|
return 1;
|
504
577
|
}
|
@@ -22,7 +22,7 @@ use strict;
|
|
22
22
|
use vars qw($VERSION);
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
24
24
|
|
25
|
-
$VERSION = '1.
|
25
|
+
$VERSION = '1.23';
|
26
26
|
|
27
27
|
sub ProcessPEResources($$);
|
28
28
|
sub ProcessPEVersion($$);
|
@@ -1005,20 +1005,13 @@ sub ProcessPEVersion($$)
|
|
1005
1005
|
next;
|
1006
1006
|
}
|
1007
1007
|
my $tag = $string;
|
1008
|
-
# create entry in tag table if it doesn't already exist
|
1009
|
-
unless ($$tagTablePtr{$tag}) {
|
1010
|
-
my $name = $tag;
|
1011
|
-
$name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
|
1012
|
-
next unless length $name;
|
1013
|
-
AddTagToTable($tagTablePtr, $tag, { Name => $name });
|
1014
|
-
}
|
1015
1008
|
# get tag value (converted to current Charset)
|
1016
1009
|
if ($valLen) {
|
1017
1010
|
($string, $pt) = ReadUnicodeStr($dataPt, $pt, $entryEnd, $et);
|
1018
1011
|
} else {
|
1019
1012
|
$string = '';
|
1020
1013
|
}
|
1021
|
-
$et->HandleTag($tagTablePtr, $tag, $string);
|
1014
|
+
$et->HandleTag($tagTablePtr, $tag, $string, MakeTagInfo => 1);
|
1022
1015
|
# step to next entry (padded to an even word)
|
1023
1016
|
$pt = ($entryEnd + 3) & 0xfffffffc;
|
1024
1017
|
}
|
@@ -437,7 +437,7 @@ sub Process_marl($$$)
|
|
437
437
|
{
|
438
438
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
439
439
|
my $dataPt = $$dirInfo{DataPt};
|
440
|
-
my $dataPos = $$dirInfo{DataPos} + $$dirInfo{Base};
|
440
|
+
my $dataPos = ($$dirInfo{DataPos} || 0) + ($$dirInfo{Base} || 0);
|
441
441
|
my $dataLen = length $$dataPt;
|
442
442
|
my $vals = $$et{GMVals}; # running values for each channel (0=TimeStamp)
|
443
443
|
my $chan = $$et{GMChan}; # running channel number
|
@@ -761,6 +761,32 @@ sub ProcessString($$$)
|
|
761
761
|
return 1;
|
762
762
|
}
|
763
763
|
|
764
|
+
#------------------------------------------------------------------------------
|
765
|
+
# Process "GP\x06\0" records in MP4 'mdat'atom
|
766
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref (RAF and DirLen)
|
767
|
+
# Returns: size of GoPro record, or 0 on error
|
768
|
+
sub ProcessGP6($$)
|
769
|
+
{
|
770
|
+
my ($et, $dirInfo) = @_;
|
771
|
+
my $raf = $$dirInfo{RAF};
|
772
|
+
my $len = $$dirInfo{DirLen};
|
773
|
+
my $buff;
|
774
|
+
while ($len > 16) {
|
775
|
+
$raf->Read($buff, 16) == 16 or last;
|
776
|
+
my ($tag, $size) = unpack('a4N', $buff);
|
777
|
+
last if $size + 16 > $len or $buff !~ /^GP..\0/s;
|
778
|
+
$raf->Read($buff, $size) == $size or last;
|
779
|
+
if ($buff =~ /^DEVC/) {
|
780
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
781
|
+
my $tagTbl = GetTagTable('Image::ExifTool::GoPro::GPMF');
|
782
|
+
ProcessGoPro($et, { DataPt => \$buff, DataPos => $raf->Tell()-$size }, $tagTbl);
|
783
|
+
}
|
784
|
+
$len -= $size + 16;
|
785
|
+
}
|
786
|
+
delete $$et{DOC_NUM};
|
787
|
+
return $$dirInfo{DirLen} - $len;
|
788
|
+
}
|
789
|
+
|
764
790
|
#------------------------------------------------------------------------------
|
765
791
|
# Process GoPro metadata (gpmd samples, GPMF box, or APP6) (ref PH/1/2)
|
766
792
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
@@ -778,6 +804,7 @@ sub ProcessGoPro($$$)
|
|
778
804
|
my ($size, $type, $unit, $scal, $setGroup0);
|
779
805
|
|
780
806
|
$et->VerboseDir($$dirInfo{DirName} || 'GPMF', undef, $dirEnd-$pos) if $verbose;
|
807
|
+
$$et{FoundEmbedded} = 1;
|
781
808
|
if ($pos) {
|
782
809
|
my $parent = $$dirInfo{Parent};
|
783
810
|
$setGroup0 = $$et{SET_GROUP0} = 'APP6' if $parent and $parent eq 'APP6';
|
@@ -835,6 +862,7 @@ sub ProcessGoPro($$$)
|
|
835
862
|
ScaleValues($val, $scal) if $scal and $tag ne 'SCAL' and $pos+$size+3>=$dirEnd;
|
836
863
|
my $key = $et->HandleTag($tagTablePtr, $tag, $val,
|
837
864
|
DataPt => $dataPt,
|
865
|
+
DataPos => $$dirInfo{DataPos},
|
838
866
|
Base => $base,
|
839
867
|
Start => $pos,
|
840
868
|
Size => $size,
|
@@ -202,7 +202,7 @@ sub ProcessJPEG_HDR($$$);
|
|
202
202
|
Groups => { 0 => 'APP6', 1 => 'DJI' },
|
203
203
|
Notes => 'DJI Thermal Analysis Tool record',
|
204
204
|
ValueConv => 'substr($val,7)',
|
205
|
-
# also seen Motorola APP6 "MMIMETA\0", with sub-types: AL3A,ALED,MMI0,MOTD,QC3A
|
205
|
+
# also seen Motorola APP6 "MMIMETA\0", with sub-types: AL3A,ALED,MMI0,MOTD,QC3A,LMB1
|
206
206
|
}],
|
207
207
|
APP7 => [{
|
208
208
|
Name => 'Pentax',
|
@@ -14,7 +14,7 @@ use vars qw($VERSION);
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
15
15
|
use Image::ExifTool::Import;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.10';
|
18
18
|
|
19
19
|
sub ProcessJSON($$);
|
20
20
|
sub ProcessTag($$$$%);
|
@@ -43,6 +43,10 @@ sub ProcessTag($$$$%);
|
|
43
43
|
ON1_SettingsMetadataTimestamp => { Groups => { 2 => 'Time' } },
|
44
44
|
ON1_SettingsMetadataUsage => { },
|
45
45
|
ON1_SettingsMetadataVisibleToUser=>{ },
|
46
|
+
adjustmentsSettingsStatisticsLightMap => { # (in JSON of AAE files)
|
47
|
+
Name => 'AdjustmentsSettingsStatisticsLightMap',
|
48
|
+
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
49
|
+
},
|
46
50
|
);
|
47
51
|
|
48
52
|
#------------------------------------------------------------------------------
|