exiftool-vendored.pl 12.39.0 → 12.42.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/Changes +66 -1
- package/bin/MANIFEST +1 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/arg_files/exif2xmp.args +5 -0
- package/bin/arg_files/xmp2exif.args +6 -0
- package/bin/config_files/acdsee.config +6 -6
- package/bin/config_files/photoshop_paths.config +30 -7
- package/bin/config_files/picasa_faces.config +1 -1
- package/bin/config_files/pix4d.config +2 -2
- package/bin/config_files/tiff_version.config +2 -2
- package/bin/exiftool +54 -22
- package/bin/lib/Image/ExifTool/Canon.pm +89 -6
- package/bin/lib/Image/ExifTool/DJI.pm +59 -1
- package/bin/lib/Image/ExifTool/DNG.pm +8 -2
- package/bin/lib/Image/ExifTool/Exif.pm +53 -20
- package/bin/lib/Image/ExifTool/Geotag.pm +3 -2
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +10 -8
- package/bin/lib/Image/ExifTool/ID3.pm +5 -5
- package/bin/lib/Image/ExifTool/MacOS.pm +9 -9
- package/bin/lib/Image/ExifTool/MakerNotes.pm +17 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +44 -12
- package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +27 -7
- package/bin/lib/Image/ExifTool/PDF.pm +2 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +6 -5
- package/bin/lib/Image/ExifTool/QuickTime.pm +9 -5
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
- package/bin/lib/Image/ExifTool/Samsung.pm +237 -2
- package/bin/lib/Image/ExifTool/Shortcuts.pm +3 -1
- package/bin/lib/Image/ExifTool/Sony.pm +10 -4
- package/bin/lib/Image/ExifTool/TagLookup.pm +6376 -6354
- package/bin/lib/Image/ExifTool/TagNames.pod +79 -28
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -3
- package/bin/lib/Image/ExifTool/WriteXMP.pl +2 -0
- package/bin/lib/Image/ExifTool/Writer.pl +1 -1
- package/bin/lib/Image/ExifTool/XMP.pm +9 -1
- package/bin/lib/Image/ExifTool/XMPStruct.pl +21 -7
- package/bin/lib/Image/ExifTool.pm +20 -12
- package/bin/lib/Image/ExifTool.pod +7 -6
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +14 -3
|
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
|
|
|
21
21
|
sub WriteUnknownOrPreview($$$);
|
|
22
22
|
sub FixLeicaBase($$;$);
|
|
23
23
|
|
|
24
|
-
$VERSION = '2.
|
|
24
|
+
$VERSION = '2.11';
|
|
25
25
|
|
|
26
26
|
my $debug; # set to 1 to enable debugging code
|
|
27
27
|
|
|
@@ -89,6 +89,11 @@ my $debug; # set to 1 to enable debugging code
|
|
|
89
89
|
FixBase => 1, # necessary for AVI and MOV videos
|
|
90
90
|
},
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
Name => 'MakerNoteDJIInfo',
|
|
94
|
+
Condition => '$$valPt =~ /^\[ae_dbg_info:/',
|
|
95
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::Info' },
|
|
96
|
+
},
|
|
92
97
|
{
|
|
93
98
|
Name => 'MakerNoteDJI',
|
|
94
99
|
Condition => '$$self{Make} eq "DJI" and $$valPt !~ /^...\@AMBA/s',
|
|
@@ -570,6 +575,17 @@ my $debug; # set to 1 to enable debugging code
|
|
|
570
575
|
ByteOrder => 'Unknown',
|
|
571
576
|
},
|
|
572
577
|
},
|
|
578
|
+
{
|
|
579
|
+
Name => 'MakerNoteOlympus3',
|
|
580
|
+
# new Olympus maker notes start with "OLYMPUS\0"
|
|
581
|
+
Condition => '$$valPt =~ /^OM SYSTEM\0/',
|
|
582
|
+
SubDirectory => {
|
|
583
|
+
TagTable => 'Image::ExifTool::Olympus::Main',
|
|
584
|
+
Start => '$valuePtr + 16',
|
|
585
|
+
Base => '$start - 16',
|
|
586
|
+
ByteOrder => 'Unknown',
|
|
587
|
+
},
|
|
588
|
+
},
|
|
573
589
|
{
|
|
574
590
|
Name => 'MakerNoteLeica',
|
|
575
591
|
# (starts with "LEICA\0\0\0")
|
|
@@ -63,7 +63,7 @@ use Image::ExifTool::Exif;
|
|
|
63
63
|
use Image::ExifTool::GPS;
|
|
64
64
|
use Image::ExifTool::XMP;
|
|
65
65
|
|
|
66
|
-
$VERSION = '4.
|
|
66
|
+
$VERSION = '4.06';
|
|
67
67
|
|
|
68
68
|
sub LensIDConv($$$);
|
|
69
69
|
sub ProcessNikonAVI($$$);
|
|
@@ -437,6 +437,7 @@ sub GetAFPointGrid($$;$);
|
|
|
437
437
|
'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
|
|
438
438
|
# LensFStops varies with FocalLength for this lens (ref 2):
|
|
439
439
|
'92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2
|
|
440
|
+
'87 2C 2D 8E 2C 40 4B 0E' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #30
|
|
440
441
|
# '92 2C 2D 88 2C 40 4B 0E' (250mm)
|
|
441
442
|
# '92 2B 2D 88 2C 40 4B 0E' (210mm)
|
|
442
443
|
# '92 2C 2D 88 2C 40 4B 0E' (185mm)
|
|
@@ -495,6 +496,7 @@ sub GetAFPointGrid($$;$);
|
|
|
495
496
|
'7A 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II',
|
|
496
497
|
'EE 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II', #JD
|
|
497
498
|
'9C 48 5C 80 24 24 4B 0E' => 'Sigma 70-200mm F2.8 EX DG OS HSM', #Rolando Ruzic
|
|
499
|
+
'BB 48 5C 80 24 24 4B 4E' => 'Sigma 70-200mm F2.8 DG OS HSM | S', #forum13207
|
|
498
500
|
'02 46 5C 82 25 25 02 00' => 'Sigma 70-210mm F2.8 APO', #JD
|
|
499
501
|
'02 40 5C 82 2C 35 02 00' => 'Sigma APO 70-210mm F3.5-4.5',
|
|
500
502
|
'26 3C 5C 82 30 3C 1C 02' => 'Sigma 70-210mm F4-5.6 UC-II',
|
|
@@ -665,6 +667,7 @@ sub GetAFPointGrid($$;$);
|
|
|
665
667
|
'00 54 55 55 0C 0C 00 00' => 'Voigtlander Nokton 58mm F1.4 SLII',
|
|
666
668
|
'00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus',
|
|
667
669
|
'07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
|
|
670
|
+
'71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
|
|
668
671
|
#
|
|
669
672
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
|
670
673
|
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
|
@@ -1220,6 +1223,16 @@ my %binaryDataAttrs = (
|
|
|
1220
1223
|
my %base64bin = ( ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)' );
|
|
1221
1224
|
my %base64int32u = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); unpack("V",$$val)' );
|
|
1222
1225
|
my %base64bytes = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); join(".",unpack("C*",$$val))' );
|
|
1226
|
+
my %base64double = (
|
|
1227
|
+
ValueConv => q{
|
|
1228
|
+
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
|
1229
|
+
my $saveOrder = GetByteOrder();
|
|
1230
|
+
SetByteOrder('II');
|
|
1231
|
+
$val = GetDouble($val,0);
|
|
1232
|
+
SetByteOrder($saveOrder);
|
|
1233
|
+
return $val;
|
|
1234
|
+
},
|
|
1235
|
+
);
|
|
1223
1236
|
my %base64coord = (
|
|
1224
1237
|
ValueConv => q{
|
|
1225
1238
|
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
|
@@ -4180,7 +4193,7 @@ my %base64coord = (
|
|
|
4180
4193
|
Format => 'int16u',
|
|
4181
4194
|
},
|
|
4182
4195
|
0x43 => {
|
|
4183
|
-
Name => '
|
|
4196
|
+
Name => 'FocusPositionHorizontal',
|
|
4184
4197
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ); }, #493 focus points for Z9 fall in a 30x18 grid (some coordinates are not accessible)
|
|
4185
4198
|
},
|
|
4186
4199
|
0x45 => {
|
|
@@ -8565,7 +8578,19 @@ my %nikonFocalConversions = (
|
|
|
8565
8578
|
444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
|
|
8566
8579
|
456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
|
|
8567
8580
|
#526 FocusMode
|
|
8568
|
-
|
|
8581
|
+
528 => {
|
|
8582
|
+
Name => 'AFAreaMode',
|
|
8583
|
+
PrintConv => {
|
|
8584
|
+
1 => 'Single',
|
|
8585
|
+
2 => 'Dynamic',
|
|
8586
|
+
3 => 'Wide (S)',
|
|
8587
|
+
4 => 'Wide (L)',
|
|
8588
|
+
5 => '3D',
|
|
8589
|
+
6 => 'Auto',
|
|
8590
|
+
12 => 'Wide (C1)',
|
|
8591
|
+
13 => 'Wide (C2)',
|
|
8592
|
+
},
|
|
8593
|
+
},
|
|
8569
8594
|
530 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
|
8570
8595
|
534 => {
|
|
8571
8596
|
Name => 'BracketSet',
|
|
@@ -8634,6 +8659,8 @@ my %nikonFocalConversions = (
|
|
|
8634
8659
|
2 => 'H.265 8-bit (MOV)',
|
|
8635
8660
|
3 => 'H.265 10-bit (MOV)',
|
|
8636
8661
|
4 => 'ProRes 422 HQ 10-bit (MOV)',
|
|
8662
|
+
5 => 'ProRes RAW HQ 12-bit (MOV)',
|
|
8663
|
+
6 => 'NRAW 12-bit (NEV)'
|
|
8637
8664
|
},
|
|
8638
8665
|
},
|
|
8639
8666
|
616 => {
|
|
@@ -11055,17 +11082,22 @@ my %nikonFocalConversions = (
|
|
|
11055
11082
|
},
|
|
11056
11083
|
GPSAltitude => {
|
|
11057
11084
|
Groups => { 2 => 'Location' },
|
|
11058
|
-
|
|
11059
|
-
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
|
11060
|
-
my $saveOrder = GetByteOrder();
|
|
11061
|
-
SetByteOrder('II');
|
|
11062
|
-
$val = GetDouble($val,0);
|
|
11063
|
-
SetByteOrder($saveOrder);
|
|
11064
|
-
return $val;
|
|
11065
|
-
},
|
|
11085
|
+
%base64double,
|
|
11066
11086
|
PrintConv => '"$val m"',
|
|
11067
11087
|
},
|
|
11068
|
-
GPSMapDatum => { },
|
|
11088
|
+
GPSMapDatum => { Groups => { 2 => 'Location' } },
|
|
11089
|
+
GPSImgDirection => {
|
|
11090
|
+
Groups => { 2 => 'Location' },
|
|
11091
|
+
%base64double,
|
|
11092
|
+
PrintConv => 'sprintf("%.2f", $val)',
|
|
11093
|
+
},
|
|
11094
|
+
GPSImgDirectionRef => {
|
|
11095
|
+
Groups => { 2 => 'Location' },
|
|
11096
|
+
PrintConv => {
|
|
11097
|
+
M => 'Magnetic North',
|
|
11098
|
+
T => 'True North',
|
|
11099
|
+
},
|
|
11100
|
+
},
|
|
11069
11101
|
);
|
|
11070
11102
|
%Image::ExifTool::Nikon::sdc = (
|
|
11071
11103
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-sdc', 2 => 'Image' },
|
|
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
|
|
|
15
15
|
use strict;
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.20';
|
|
19
19
|
|
|
20
20
|
my %buttonsZ9= (
|
|
21
21
|
0 => 'None',
|
|
@@ -74,6 +74,9 @@ my %buttonsZ9= (
|
|
|
74
74
|
82 => 'Select To Send (PC)',
|
|
75
75
|
83 => 'Select To Send (FTP)',
|
|
76
76
|
85 => 'Control Lock',
|
|
77
|
+
86 => 'Save Focus Position',
|
|
78
|
+
87 => 'Recall Focus Position',
|
|
79
|
+
88 => 'Recall Shooting Functions (Hold)',
|
|
77
80
|
);
|
|
78
81
|
my %dialsZ9 = (
|
|
79
82
|
0 => '1 Frame',
|
|
@@ -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.78';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -432,6 +432,7 @@ my %olympusCameraTypes = (
|
|
|
432
432
|
S0089 => 'E-M5MarkIII',
|
|
433
433
|
S0092 => 'E-M1MarkIII', #IB
|
|
434
434
|
S0093 => 'E-P7', #IB
|
|
435
|
+
S0095 => 'OM-1', #IB
|
|
435
436
|
SR45 => 'D220',
|
|
436
437
|
SR55 => 'D320L',
|
|
437
438
|
SR83 => 'D340L',
|
|
@@ -1910,6 +1911,23 @@ my %indexInfo = (
|
|
|
1910
1911
|
Name => 'FocusBracketStepSize',
|
|
1911
1912
|
Writable => 'int8u',
|
|
1912
1913
|
},
|
|
1914
|
+
0x309 => { #forum13341
|
|
1915
|
+
Name => 'AISubjectTrackingMode',
|
|
1916
|
+
Writable => 'int16u',
|
|
1917
|
+
ValueConv => '($val >> 8) . " " . ($val & 0xff)',
|
|
1918
|
+
ValueConvInv => 'my @a = split " ", $val; $val = $a[0]*256 + $a[1]',
|
|
1919
|
+
PrintConv => [{
|
|
1920
|
+
0 => 'Off',
|
|
1921
|
+
1 => 'Motorsports',
|
|
1922
|
+
2 => 'Airplnes',
|
|
1923
|
+
3 => 'Trains',
|
|
1924
|
+
4 => 'Birds',
|
|
1925
|
+
5 => 'Dogs & Cats',
|
|
1926
|
+
},{
|
|
1927
|
+
0 => 'Object Not Found',
|
|
1928
|
+
1 => 'Object Found',
|
|
1929
|
+
}],
|
|
1930
|
+
},
|
|
1913
1931
|
0x400 => { #6
|
|
1914
1932
|
Name => 'FlashMode',
|
|
1915
1933
|
Writable => 'int16u',
|
|
@@ -2537,11 +2555,13 @@ my %indexInfo = (
|
|
|
2537
2555
|
'3 8' => 'ND8 (3EV)', #IB
|
|
2538
2556
|
'3 16' => 'ND16 (4EV)', #IB
|
|
2539
2557
|
'3 32' => 'ND32 (5EV)', #IB
|
|
2558
|
+
'3 64' => 'ND64 (6EV)', #forum13341
|
|
2540
2559
|
'5 4' => 'HDR1', #forum8906
|
|
2541
2560
|
'6 4' => 'HDR2', #forum8906
|
|
2542
2561
|
'8 8' => 'Tripod high resolution', #IB
|
|
2543
2562
|
'9 *' => 'Focus-stacked (* images)', #IB (* = 2-15)
|
|
2544
|
-
'11
|
|
2563
|
+
'11 12' => 'Hand-held high resolution (11 12)', #forum13341 (OM-1)
|
|
2564
|
+
'11 16' => 'Hand-held high resolution (11 16)', #IB (perhaps '11 15' would be possible, ref 24)
|
|
2545
2565
|
OTHER => sub {
|
|
2546
2566
|
my ($val, $inv, $conv) = @_;
|
|
2547
2567
|
if ($inv) {
|
|
@@ -3430,7 +3450,7 @@ my %indexInfo = (
|
|
|
3430
3450
|
0x2a => {
|
|
3431
3451
|
Name => 'FNumber',
|
|
3432
3452
|
Format => 'rational64u',
|
|
3433
|
-
PrintConv => '
|
|
3453
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
3434
3454
|
},
|
|
3435
3455
|
0x32 => { #(NC)
|
|
3436
3456
|
Name => 'ExposureCompensation',
|
|
@@ -3476,7 +3496,7 @@ my %indexInfo = (
|
|
|
3476
3496
|
0x3a => {
|
|
3477
3497
|
Name => 'FNumber',
|
|
3478
3498
|
Format => 'rational64u',
|
|
3479
|
-
PrintConv => '
|
|
3499
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
3480
3500
|
},
|
|
3481
3501
|
0x42 => { #(NC)
|
|
3482
3502
|
Name => 'ExposureCompensation',
|
|
@@ -3527,7 +3547,7 @@ my %indexInfo = (
|
|
|
3527
3547
|
0x28 => {
|
|
3528
3548
|
Name => 'FNumber',
|
|
3529
3549
|
Format => 'rational64u',
|
|
3530
|
-
PrintConv => '
|
|
3550
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
3531
3551
|
},
|
|
3532
3552
|
0x30 => { #(NC)
|
|
3533
3553
|
Name => 'ExposureCompensation',
|
|
@@ -3744,7 +3764,7 @@ my %indexInfo = (
|
|
|
3744
3764
|
0x5a => {
|
|
3745
3765
|
Name => 'FNumber',
|
|
3746
3766
|
Format => 'rational64u',
|
|
3747
|
-
PrintConv => '
|
|
3767
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
3748
3768
|
},
|
|
3749
3769
|
0x7f => {
|
|
3750
3770
|
Name => 'DateTimeOriginal', #(NC)
|
|
@@ -3789,7 +3809,7 @@ my %indexInfo = (
|
|
|
3789
3809
|
0x5e => {
|
|
3790
3810
|
Name => 'FNumber',
|
|
3791
3811
|
Format => 'rational64u',
|
|
3792
|
-
PrintConv => '
|
|
3812
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
3793
3813
|
},
|
|
3794
3814
|
0x83 => {
|
|
3795
3815
|
Name => 'DateTime1',
|
|
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
require Exporter;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.55';
|
|
25
25
|
|
|
26
26
|
sub FetchObject($$$$);
|
|
27
27
|
sub ExtractObject($$;$$);
|
|
@@ -2276,6 +2276,7 @@ XRef:
|
|
|
2276
2276
|
# load XRef stream in hybrid file if it exists
|
|
2277
2277
|
push @xrefOffsets, $$mainDict{XRefStm}, 'XRefStm' if $$mainDict{XRefStm};
|
|
2278
2278
|
$encrypt = $$mainDict{Encrypt} if $$mainDict{Encrypt};
|
|
2279
|
+
undef $encrypt if $encrypt and $encrypt eq 'null'; # (have seen "null")
|
|
2279
2280
|
if ($$mainDict{ID} and ref $$mainDict{ID} eq 'ARRAY') {
|
|
2280
2281
|
$id = ReadPDFValue($mainDict->{ID}->[0]);
|
|
2281
2282
|
}
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.17';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -2472,6 +2472,15 @@ my %shootingMode = (
|
|
|
2472
2472
|
Start => 12,
|
|
2473
2473
|
},
|
|
2474
2474
|
},
|
|
2475
|
+
0x200080 => { # (GH6)
|
|
2476
|
+
Name => 'ExifData',
|
|
2477
|
+
Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s',
|
|
2478
|
+
SubDirectory => {
|
|
2479
|
+
TagTable => 'Image::ExifTool::Exif::Main',
|
|
2480
|
+
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
|
2481
|
+
Start => 12,
|
|
2482
|
+
},
|
|
2483
|
+
},
|
|
2475
2484
|
);
|
|
2476
2485
|
|
|
2477
2486
|
# Panasonic Composite tags
|
|
@@ -171,7 +171,7 @@ sub DecodeAFPoints($$$$;$);
|
|
|
171
171
|
'3 255.4' => 'Sigma DF EX Aspherical 28-70mm F2.8', #12
|
|
172
172
|
'3 255.5' => 'Sigma AF Tele 400mm F5.6 Multi-coated', #JD
|
|
173
173
|
'3 255.6' => 'Sigma 24-60mm F2.8 EX DG', #PH
|
|
174
|
-
'3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD
|
|
174
|
+
'3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD (also DG Macro, ref 27)
|
|
175
175
|
'3 255.8' => 'Sigma 55-200mm F4-5.6 DC', #JD
|
|
176
176
|
'3 255.9' => 'Sigma 18-50mm F2.8 EX DC', #JD (also Macro version - PH)
|
|
177
177
|
'4 1' => 'smc PENTAX-FA SOFT 28mm F2.8',
|
|
@@ -248,11 +248,12 @@ my %unicodeString = (
|
|
|
248
248
|
Protected => 1,
|
|
249
249
|
Notes => q{
|
|
250
250
|
this tag indicates provides a way for XMP-aware applications to indicate
|
|
251
|
-
that the XMP is synchronized with the IPTC.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
251
|
+
that the XMP is synchronized with the IPTC. The MWG recommendation is to
|
|
252
|
+
ignore the XMP if IPTCDigest exists and doesn't match the CurrentIPTCDigest.
|
|
253
|
+
When writing, special values of "new" and "old" represent the digests of the
|
|
254
|
+
IPTC from the edited and original files respectively, and are undefined if
|
|
255
|
+
the IPTC does not exist in the respective file. Set this to "new" as an
|
|
256
|
+
indication that the XMP is synchronized with the IPTC
|
|
256
257
|
},
|
|
257
258
|
# also note the 'new' feature requires that the IPTC comes before this tag is written
|
|
258
259
|
ValueConv => 'unpack("H*", $val)',
|
|
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
47
47
|
use Image::ExifTool::Exif;
|
|
48
48
|
use Image::ExifTool::GPS;
|
|
49
49
|
|
|
50
|
-
$VERSION = '2.
|
|
50
|
+
$VERSION = '2.74';
|
|
51
51
|
|
|
52
52
|
sub ProcessMOV($$;$);
|
|
53
53
|
sub ProcessKeys($$$);
|
|
@@ -2232,7 +2232,7 @@ my %eeBox2 = (
|
|
|
2232
2232
|
# 4 ? - "1e 00"
|
|
2233
2233
|
# 6 int16u - record length in bytes
|
|
2234
2234
|
# 8 ? - "23 01 00 00 00 00 00 00"
|
|
2235
|
-
# 16 - start of records (each record ends in an int64u timestamp in ns)
|
|
2235
|
+
# 16 - start of records (each record ends in an int64u timestamp "ts" in ns)
|
|
2236
2236
|
# RDTA - float[4],ts: "-0.31289672 -0.2245330 11.303817 0 775.780"
|
|
2237
2237
|
# RDTB - float[4],ts: "-0.04841613 -0.2166595 0.0724792 0 775.780"
|
|
2238
2238
|
# RDTC - float[4],ts: "27.60925 -27.10037 -13.27285 0 775.829"
|
|
@@ -8795,16 +8795,20 @@ sub ProcessSampleDesc($$$)
|
|
|
8795
8795
|
|
|
8796
8796
|
my $num = Get32u($dataPt, 4); # get number of sample entries in table
|
|
8797
8797
|
$pos += 8;
|
|
8798
|
-
my $i;
|
|
8798
|
+
my ($i, $err);
|
|
8799
8799
|
for ($i=0; $i<$num; ++$i) { # loop through sample entries
|
|
8800
|
-
|
|
8800
|
+
$pos + 8 > $dirLen and $err = 1, last;
|
|
8801
8801
|
my $size = Get32u($dataPt, $pos);
|
|
8802
|
-
|
|
8802
|
+
$pos + $size > $dirLen and $err = 1, last;
|
|
8803
8803
|
$$dirInfo{DirStart} = $pos;
|
|
8804
8804
|
$$dirInfo{DirLen} = $size;
|
|
8805
8805
|
ProcessHybrid($et, $dirInfo, $tagTablePtr);
|
|
8806
8806
|
$pos += $size;
|
|
8807
8807
|
}
|
|
8808
|
+
if ($err and $$et{HandlerType}) {
|
|
8809
|
+
my $grp = $$et{SET_GROUP1} || $$dirInfo{Parent} || 'unknown';
|
|
8810
|
+
$et->Warn("Truncated $$et{HandlerType} sample table for $grp");
|
|
8811
|
+
}
|
|
8808
8812
|
return 1;
|
|
8809
8813
|
}
|
|
8810
8814
|
|
|
@@ -1144,13 +1144,13 @@ sub ProcessSamples($)
|
|
|
1144
1144
|
}
|
|
1145
1145
|
@$size < @$start + $samplesPerChunk and $et->WarnOnce('Sample size error'), last;
|
|
1146
1146
|
my $sampleStart = $chunkStart;
|
|
1147
|
-
|
|
1147
|
+
Sample: for ($i=0; ; ) {
|
|
1148
1148
|
push @$start, $sampleStart;
|
|
1149
1149
|
if (defined $time) {
|
|
1150
1150
|
until ($timeCount) {
|
|
1151
1151
|
if (@$stts < 2) {
|
|
1152
1152
|
undef $time;
|
|
1153
|
-
last;
|
|
1153
|
+
last Sample;
|
|
1154
1154
|
}
|
|
1155
1155
|
$timeCount = shift @$stts;
|
|
1156
1156
|
$timeDelta = shift @$stts;
|
|
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
|
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
use Image::ExifTool::Exif;
|
|
24
24
|
|
|
25
|
-
$VERSION = '1.
|
|
25
|
+
$VERSION = '1.52';
|
|
26
26
|
|
|
27
27
|
sub WriteSTMN($$$);
|
|
28
28
|
sub ProcessINFO($$$);
|
|
@@ -454,6 +454,8 @@ my %formatMinMax = (
|
|
|
454
454
|
0xa018 => { #1
|
|
455
455
|
Name => 'ExposureTime',
|
|
456
456
|
Writable => 'rational64u',
|
|
457
|
+
ValueConv => '$val=~s/ .*//; $val', # some models write 2 values here
|
|
458
|
+
ValueConvInv => '$val',
|
|
457
459
|
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
458
460
|
PrintConvInv => '$val',
|
|
459
461
|
},
|
|
@@ -461,6 +463,8 @@ my %formatMinMax = (
|
|
|
461
463
|
Name => 'FNumber',
|
|
462
464
|
Priority => 0,
|
|
463
465
|
Writable => 'rational64u',
|
|
466
|
+
ValueConv => '$val=~s/ .*//; $val', # some models write 2 values here
|
|
467
|
+
ValueConvInv => '$val',
|
|
464
468
|
PrintConv => 'sprintf("%.1f",$val)',
|
|
465
469
|
PrintConvInv => '$val',
|
|
466
470
|
},
|
|
@@ -996,7 +1000,238 @@ my %formatMinMax = (
|
|
|
996
1000
|
'0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
|
|
997
1001
|
# 0x0aa1-name - seen 'MCC_Data'
|
|
998
1002
|
# 0x0aa1 - seen '204','222','234','302','429'
|
|
999
|
-
'0x0aa1' =>
|
|
1003
|
+
'0x0aa1' => {
|
|
1004
|
+
Name => 'MCCData',
|
|
1005
|
+
Groups => { 2 => 'Location' },
|
|
1006
|
+
PrintConv => {
|
|
1007
|
+
202 => 'Greece',
|
|
1008
|
+
204 => 'Netherlands',
|
|
1009
|
+
206 => 'Belgium',
|
|
1010
|
+
208 => 'France',
|
|
1011
|
+
212 => 'Monaco',
|
|
1012
|
+
213 => 'Andorra',
|
|
1013
|
+
214 => 'Spain',
|
|
1014
|
+
216 => 'Hungary',
|
|
1015
|
+
218 => 'Bosnia & Herzegov.',
|
|
1016
|
+
219 => 'Croatia',
|
|
1017
|
+
220 => 'Serbia',
|
|
1018
|
+
221 => 'Kosovo',
|
|
1019
|
+
222 => 'Italy',
|
|
1020
|
+
226 => 'Romania',
|
|
1021
|
+
228 => 'Switzerland',
|
|
1022
|
+
230 => 'Czech Rep.',
|
|
1023
|
+
231 => 'Slovakia',
|
|
1024
|
+
232 => 'Austria',
|
|
1025
|
+
234 => 'United Kingdom',
|
|
1026
|
+
235 => 'United Kingdom',
|
|
1027
|
+
238 => 'Denmark',
|
|
1028
|
+
240 => 'Sweden',
|
|
1029
|
+
242 => 'Norway',
|
|
1030
|
+
244 => 'Finland',
|
|
1031
|
+
246 => 'Lithuania',
|
|
1032
|
+
247 => 'Latvia',
|
|
1033
|
+
248 => 'Estonia',
|
|
1034
|
+
250 => 'Russian Federation',
|
|
1035
|
+
255 => 'Ukraine',
|
|
1036
|
+
257 => 'Belarus',
|
|
1037
|
+
259 => 'Moldova',
|
|
1038
|
+
260 => 'Poland',
|
|
1039
|
+
262 => 'Germany',
|
|
1040
|
+
266 => 'Gibraltar',
|
|
1041
|
+
268 => 'Portugal',
|
|
1042
|
+
270 => 'Luxembourg',
|
|
1043
|
+
272 => 'Ireland',
|
|
1044
|
+
274 => 'Iceland',
|
|
1045
|
+
276 => 'Albania',
|
|
1046
|
+
278 => 'Malta',
|
|
1047
|
+
280 => 'Cyprus',
|
|
1048
|
+
282 => 'Georgia',
|
|
1049
|
+
283 => 'Armenia',
|
|
1050
|
+
284 => 'Bulgaria',
|
|
1051
|
+
286 => 'Turkey',
|
|
1052
|
+
288 => 'Faroe Islands',
|
|
1053
|
+
289 => 'Abkhazia',
|
|
1054
|
+
290 => 'Greenland',
|
|
1055
|
+
292 => 'San Marino',
|
|
1056
|
+
293 => 'Slovenia',
|
|
1057
|
+
294 => 'Macedonia',
|
|
1058
|
+
295 => 'Liechtenstein',
|
|
1059
|
+
297 => 'Montenegro',
|
|
1060
|
+
302 => 'Canada',
|
|
1061
|
+
308 => 'St. Pierre & Miquelon',
|
|
1062
|
+
310 => 'United States / Guam',
|
|
1063
|
+
311 => 'United States / Guam',
|
|
1064
|
+
312 => 'United States',
|
|
1065
|
+
316 => 'United States',
|
|
1066
|
+
330 => 'Puerto Rico',
|
|
1067
|
+
334 => 'Mexico',
|
|
1068
|
+
338 => 'Jamaica',
|
|
1069
|
+
340 => 'French Guiana / Guadeloupe / Martinique',
|
|
1070
|
+
342 => 'Barbados',
|
|
1071
|
+
344 => 'Antigua and Barbuda',
|
|
1072
|
+
346 => 'Cayman Islands',
|
|
1073
|
+
348 => 'British Virgin Islands',
|
|
1074
|
+
350 => 'Bermuda',
|
|
1075
|
+
352 => 'Grenada',
|
|
1076
|
+
354 => 'Montserrat',
|
|
1077
|
+
356 => 'Saint Kitts and Nevis',
|
|
1078
|
+
358 => 'Saint Lucia',
|
|
1079
|
+
360 => 'St. Vincent & Gren.',
|
|
1080
|
+
362 => 'Bonaire, Sint Eustatius and Saba / Curacao / Netherlands Antilles',
|
|
1081
|
+
363 => 'Aruba',
|
|
1082
|
+
364 => 'Bahamas',
|
|
1083
|
+
365 => 'Anguilla',
|
|
1084
|
+
366 => 'Dominica',
|
|
1085
|
+
368 => 'Cuba',
|
|
1086
|
+
370 => 'Dominican Republic',
|
|
1087
|
+
372 => 'Haiti',
|
|
1088
|
+
374 => 'Trinidad and Tobago',
|
|
1089
|
+
376 => 'Turks and Caicos Islands / US Virgin Islands',
|
|
1090
|
+
400 => 'Azerbaijan',
|
|
1091
|
+
401 => 'Kazakhstan',
|
|
1092
|
+
402 => 'Bhutan',
|
|
1093
|
+
404 => 'India',
|
|
1094
|
+
405 => 'India',
|
|
1095
|
+
410 => 'Pakistan',
|
|
1096
|
+
412 => 'Afghanistan',
|
|
1097
|
+
413 => 'Sri Lanka',
|
|
1098
|
+
414 => 'Myanmar (Burma)',
|
|
1099
|
+
415 => 'Lebanon',
|
|
1100
|
+
416 => 'Jordan',
|
|
1101
|
+
417 => 'Syrian Arab Republic',
|
|
1102
|
+
418 => 'Iraq',
|
|
1103
|
+
419 => 'Kuwait',
|
|
1104
|
+
420 => 'Saudi Arabia',
|
|
1105
|
+
421 => 'Yemen',
|
|
1106
|
+
422 => 'Oman',
|
|
1107
|
+
424 => 'United Arab Emirates',
|
|
1108
|
+
425 => 'Israel / Palestinian Territory',
|
|
1109
|
+
426 => 'Bahrain',
|
|
1110
|
+
427 => 'Qatar',
|
|
1111
|
+
428 => 'Mongolia',
|
|
1112
|
+
429 => 'Nepal',
|
|
1113
|
+
430 => 'United Arab Emirates',
|
|
1114
|
+
431 => 'United Arab Emirates',
|
|
1115
|
+
432 => 'Iran',
|
|
1116
|
+
434 => 'Uzbekistan',
|
|
1117
|
+
436 => 'Tajikistan',
|
|
1118
|
+
437 => 'Kyrgyzstan',
|
|
1119
|
+
438 => 'Turkmenistan',
|
|
1120
|
+
440 => 'Japan',
|
|
1121
|
+
441 => 'Japan',
|
|
1122
|
+
450 => 'South Korea',
|
|
1123
|
+
452 => 'Viet Nam',
|
|
1124
|
+
454 => 'Hongkong, China',
|
|
1125
|
+
455 => 'Macao, China',
|
|
1126
|
+
456 => 'Cambodia',
|
|
1127
|
+
457 => 'Laos P.D.R.',
|
|
1128
|
+
460 => 'China',
|
|
1129
|
+
466 => 'Taiwan',
|
|
1130
|
+
467 => 'North Korea',
|
|
1131
|
+
470 => 'Bangladesh',
|
|
1132
|
+
472 => 'Maldives',
|
|
1133
|
+
502 => 'Malaysia',
|
|
1134
|
+
505 => 'Australia',
|
|
1135
|
+
510 => 'Indonesia',
|
|
1136
|
+
514 => 'Timor-Leste',
|
|
1137
|
+
515 => 'Philippines',
|
|
1138
|
+
520 => 'Thailand',
|
|
1139
|
+
525 => 'Singapore',
|
|
1140
|
+
528 => 'Brunei Darussalam',
|
|
1141
|
+
530 => 'New Zealand',
|
|
1142
|
+
537 => 'Papua New Guinea',
|
|
1143
|
+
539 => 'Tonga',
|
|
1144
|
+
540 => 'Solomon Islands',
|
|
1145
|
+
541 => 'Vanuatu',
|
|
1146
|
+
542 => 'Fiji',
|
|
1147
|
+
544 => 'American Samoa',
|
|
1148
|
+
545 => 'Kiribati',
|
|
1149
|
+
546 => 'New Caledonia',
|
|
1150
|
+
547 => 'French Polynesia',
|
|
1151
|
+
548 => 'Cook Islands',
|
|
1152
|
+
549 => 'Samoa',
|
|
1153
|
+
550 => 'Micronesia',
|
|
1154
|
+
552 => 'Palau',
|
|
1155
|
+
553 => 'Tuvalu',
|
|
1156
|
+
555 => 'Niue',
|
|
1157
|
+
602 => 'Egypt',
|
|
1158
|
+
603 => 'Algeria',
|
|
1159
|
+
604 => 'Morocco',
|
|
1160
|
+
605 => 'Tunisia',
|
|
1161
|
+
606 => 'Libya',
|
|
1162
|
+
607 => 'Gambia',
|
|
1163
|
+
608 => 'Senegal',
|
|
1164
|
+
609 => 'Mauritania',
|
|
1165
|
+
610 => 'Mali',
|
|
1166
|
+
611 => 'Guinea',
|
|
1167
|
+
612 => 'Ivory Coast',
|
|
1168
|
+
613 => 'Burkina Faso',
|
|
1169
|
+
614 => 'Niger',
|
|
1170
|
+
615 => 'Togo',
|
|
1171
|
+
616 => 'Benin',
|
|
1172
|
+
617 => 'Mauritius',
|
|
1173
|
+
618 => 'Liberia',
|
|
1174
|
+
619 => 'Sierra Leone',
|
|
1175
|
+
620 => 'Ghana',
|
|
1176
|
+
621 => 'Nigeria',
|
|
1177
|
+
622 => 'Chad',
|
|
1178
|
+
623 => 'Central African Rep.',
|
|
1179
|
+
624 => 'Cameroon',
|
|
1180
|
+
625 => 'Cape Verde',
|
|
1181
|
+
626 => 'Sao Tome & Principe',
|
|
1182
|
+
627 => 'Equatorial Guinea',
|
|
1183
|
+
628 => 'Gabon',
|
|
1184
|
+
629 => 'Congo, Republic',
|
|
1185
|
+
630 => 'Congo, Dem. Rep.',
|
|
1186
|
+
631 => 'Angola',
|
|
1187
|
+
632 => 'Guinea-Bissau',
|
|
1188
|
+
633 => 'Seychelles',
|
|
1189
|
+
634 => 'Sudan',
|
|
1190
|
+
635 => 'Rwanda',
|
|
1191
|
+
636 => 'Ethiopia',
|
|
1192
|
+
637 => 'Somalia',
|
|
1193
|
+
638 => 'Djibouti',
|
|
1194
|
+
639 => 'Kenya',
|
|
1195
|
+
640 => 'Tanzania',
|
|
1196
|
+
641 => 'Uganda',
|
|
1197
|
+
642 => 'Burundi',
|
|
1198
|
+
643 => 'Mozambique',
|
|
1199
|
+
645 => 'Zambia',
|
|
1200
|
+
646 => 'Madagascar',
|
|
1201
|
+
647 => 'Reunion',
|
|
1202
|
+
648 => 'Zimbabwe',
|
|
1203
|
+
649 => 'Namibia',
|
|
1204
|
+
650 => 'Malawi',
|
|
1205
|
+
651 => 'Lesotho',
|
|
1206
|
+
652 => 'Botswana',
|
|
1207
|
+
653 => 'Swaziland',
|
|
1208
|
+
654 => 'Comoros',
|
|
1209
|
+
655 => 'South Africa',
|
|
1210
|
+
657 => 'Eritrea',
|
|
1211
|
+
659 => 'South Sudan',
|
|
1212
|
+
702 => 'Belize',
|
|
1213
|
+
704 => 'Guatemala',
|
|
1214
|
+
706 => 'El Salvador',
|
|
1215
|
+
708 => 'Honduras',
|
|
1216
|
+
710 => 'Nicaragua',
|
|
1217
|
+
712 => 'Costa Rica',
|
|
1218
|
+
714 => 'Panama',
|
|
1219
|
+
716 => 'Peru',
|
|
1220
|
+
722 => 'Argentina Republic',
|
|
1221
|
+
724 => 'Brazil',
|
|
1222
|
+
730 => 'Chile',
|
|
1223
|
+
732 => 'Colombia',
|
|
1224
|
+
734 => 'Venezuela',
|
|
1225
|
+
736 => 'Bolivia',
|
|
1226
|
+
738 => 'Guyana',
|
|
1227
|
+
740 => 'Ecuador',
|
|
1228
|
+
744 => 'Paraguay',
|
|
1229
|
+
746 => 'Suriname',
|
|
1230
|
+
748 => 'Uruguay',
|
|
1231
|
+
750 => 'Falkland Islands (Malvinas)',
|
|
1232
|
+
901 => 'International Networks / Satellite Networks',
|
|
1233
|
+
},
|
|
1234
|
+
},
|
|
1000
1235
|
# 0x0ab0-name - seen 'DualShot_Meta_Info'
|
|
1001
1236
|
'0x0ab1-name' => {
|
|
1002
1237
|
Name => 'DepthMapName',
|