exiftool_vendored 12.92.0 → 12.93.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 +15 -3
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +2 -2
- data/bin/lib/Image/ExifTool/Canon.pm +8 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +2 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +56 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +3 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +7 -1
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +117 -37
- data/bin/lib/Image/ExifTool/Samsung.pm +5 -3
- data/bin/lib/Image/ExifTool/TagLookup.pm +6 -4
- data/bin/lib/Image/ExifTool/TagNames.pod +7 -4
- data/bin/lib/Image/ExifTool/Writer.pl +4 -1
- data/bin/lib/Image/ExifTool.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30869a5b033fa93062cf6f635c5cddb484e8ce9671e8b5b803329edf5d34ee7a
|
|
4
|
+
data.tar.gz: 0b886b032d88c6cf22d4052795a6bbc4bd69cc33e40c8a4e308359e5d4ae454f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c563c23c4d432f21bbf8ae3ce284fbb7c325540a92bb6c7dd1a693afbe16d3e091b015779094e2f2db5d70ef1e73bc4bc4fb34d8044cb2ae62fa992dc7a085f
|
|
7
|
+
data.tar.gz: 8a6cfea51bf26dff8cec28964277ea72446fc6ec3eb877f0c8082c8362dee69b9cb421253af1f3f8b073d067e5b29acb0364ed580ce346880c6541a945a7a706
|
data/bin/Changes
CHANGED
|
@@ -7,13 +7,25 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.76. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Aug. 20, 2024 - Version 12.93
|
|
11
|
+
|
|
12
|
+
- Added a new Nikon LensID
|
|
13
|
+
- Added a couple of new OpenEXR Compression types
|
|
14
|
+
- Added a couple of new QuickTime Keys tags
|
|
15
|
+
- Decode timed metadata from E-ACE B44 DashCam videos
|
|
16
|
+
- Make "Unrecognized" Samsung Meta warnings minor
|
|
17
|
+
- Fixed bug in -listg6 option which resulted in "uninitialized value" warnings
|
|
18
|
+
- Fixed decoding of Func1Button and Func2Button for the Nikon Z6/Z7
|
|
19
|
+
- Fixed bug reading JUMB metadata from JXL images
|
|
20
|
+
|
|
10
21
|
July 24, 2024 - Version 12.92
|
|
11
22
|
|
|
12
|
-
- Removed -w from exiftool shebang
|
|
23
|
+
- Removed -w from exiftool shebang due to compatibility issues on some systems
|
|
13
24
|
|
|
14
25
|
July 24, 2024 - Version 12.91
|
|
15
26
|
|
|
16
|
-
-
|
|
27
|
+
- Added a couple of new OpenEXR Compression values (github#276)
|
|
28
|
+
- Updated 2 test files that were causing failed tests (ExifTool itself is
|
|
17
29
|
unchanged)
|
|
18
30
|
|
|
19
31
|
July 24, 2024 - Version 12.90
|
|
@@ -25,7 +37,7 @@ July 24, 2024 - Version 12.90
|
|
|
25
37
|
- Drop Nikon ShotInfo record when copying MakerNotes from NEF to JPG if it is
|
|
26
38
|
larger than 50000 bytes (then MakerNotes would be too large for a single
|
|
27
39
|
JPEG segment)
|
|
28
|
-
- Changed exiftool shebang
|
|
40
|
+
- Changed exiftool shebang to use env: "#!/usr/bin/env perl -w"
|
|
29
41
|
- Revert change of 12.84 to iterate through sub-documents with the -p option
|
|
30
42
|
only if -ee is used
|
|
31
43
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
|
109
109
|
terminal window to extract and run ExifTool:
|
|
110
110
|
|
|
111
111
|
cd ~/Desktop
|
|
112
|
-
gzip -dc Image-ExifTool-12.
|
|
113
|
-
cd Image-ExifTool-12.
|
|
112
|
+
gzip -dc Image-ExifTool-12.93.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.93
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.93';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -5684,7 +5684,7 @@ with this command:
|
|
|
5684
5684
|
|
|
5685
5685
|
produces output like this:
|
|
5686
5686
|
|
|
5687
|
-
-- Generated by ExifTool 12.
|
|
5687
|
+
-- Generated by ExifTool 12.93 --
|
|
5688
5688
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5689
5689
|
(f/5.6, 1/60s, ISO 100)
|
|
5690
5690
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.80';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -9199,14 +9199,19 @@ my %filterConv = (
|
|
|
9199
9199
|
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9200
9200
|
},
|
|
9201
9201
|
8 => {
|
|
9202
|
-
Name => '
|
|
9202
|
+
Name => 'MinFocalLength2',
|
|
9203
|
+
Notes => q{
|
|
9204
|
+
these seem to be min/max focal length without teleconverter, as opposed to
|
|
9205
|
+
MinFocalLength and MaxFocalLength which include the effect of a
|
|
9206
|
+
teleconverter
|
|
9207
|
+
}, #forum16309
|
|
9203
9208
|
ValueConv => '$val / 10',
|
|
9204
9209
|
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9205
9210
|
PrintConv => '"$val mm"',
|
|
9206
9211
|
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9207
9212
|
},
|
|
9208
9213
|
9 => {
|
|
9209
|
-
Name => '
|
|
9214
|
+
Name => 'MaxFocalLength2',
|
|
9210
9215
|
ValueConv => '$val / 10',
|
|
9211
9216
|
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9212
9217
|
PrintConv => '"$val mm"',
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.40';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -1442,7 +1442,7 @@ sub ProcessBrotli($$$)
|
|
|
1442
1442
|
}
|
|
1443
1443
|
} elsif ($type eq 'jumb') {
|
|
1444
1444
|
return undef if $isWriting; # (can't yet write JUMBF)
|
|
1445
|
-
Image::ExifTool::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
|
|
1445
|
+
Image::ExifTool::Jpeg2000::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
|
|
1446
1446
|
}
|
|
1447
1447
|
if ($isWriting) {
|
|
1448
1448
|
return undef unless defined $dat;
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.37';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -367,6 +367,7 @@ sub GetAFPointGrid($$;$);
|
|
|
367
367
|
'02 46 37 37 25 25 02 00' => 'Sigma 24mm F2.8 Super Wide II Macro',
|
|
368
368
|
'7E 54 37 37 0C 0C 4B 06' => 'Sigma 24mm F1.4 DG HSM | A', #30
|
|
369
369
|
'26 58 3C 3C 14 14 1C 02' => 'Sigma 28mm F1.8 EX DG Aspherical Macro',
|
|
370
|
+
'BC 54 3C 3C 0C 0C 4B 46' => 'Sigma 28mm F1.4 DG HSM | A', #30
|
|
370
371
|
'48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
|
|
371
372
|
'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
|
|
372
373
|
'91 54 44 44 0C 0C 4B 06' => 'Sigma 35mm F1.4 DG HSM', #30
|
|
@@ -17,12 +17,57 @@ use strict;
|
|
|
17
17
|
use vars qw($VERSION);
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.08';
|
|
21
21
|
|
|
22
22
|
sub ProcessNikonSettings($$$);
|
|
23
23
|
|
|
24
24
|
my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
|
|
25
25
|
|
|
26
|
+
my %funcButtonZ6 = ( #forum16316
|
|
27
|
+
1 => 'AF-On or Subject Tracking', # (bug in 3.xx firmware?)
|
|
28
|
+
2 => 'AF Lock Only',
|
|
29
|
+
3 => 'AE Lock (hold)',
|
|
30
|
+
4 => 'AE Lock (reset on release)',
|
|
31
|
+
5 => 'AE Lock Only',
|
|
32
|
+
6 => 'AE/AF Lock',
|
|
33
|
+
7 => 'FV Lock',
|
|
34
|
+
8 => 'Flash Disable/Enable',
|
|
35
|
+
9 => 'Preview',
|
|
36
|
+
10 => 'Matrix Metering',
|
|
37
|
+
11 => 'Center-weighted Metering',
|
|
38
|
+
12 => 'Spot Metering',
|
|
39
|
+
13 => 'Highlight-weighted Metering',
|
|
40
|
+
14 => 'Bracketing Burst',
|
|
41
|
+
15 => 'Synchronized Release (Master)',
|
|
42
|
+
16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18
|
|
43
|
+
19 => '+NEF(RAW)',
|
|
44
|
+
20 => 'Framing Grid Display',
|
|
45
|
+
# 21 - missing
|
|
46
|
+
22 => 'Zoom On/Off',
|
|
47
|
+
# 23 - missing
|
|
48
|
+
24 => 'My Menu',
|
|
49
|
+
25 => 'My Menu Top Item',
|
|
50
|
+
26 => 'Playback',
|
|
51
|
+
27 => 'Protect',
|
|
52
|
+
28 => 'Image Area',
|
|
53
|
+
29 => 'Image Quality',
|
|
54
|
+
30 => 'White Balance',
|
|
55
|
+
31 => 'Picture Control',
|
|
56
|
+
32 => 'Active D-Lighting',
|
|
57
|
+
33 => 'Metering',
|
|
58
|
+
34 => 'Flash Mode',
|
|
59
|
+
35 => 'Focus Mode',
|
|
60
|
+
36 => 'Auto Bracketing',
|
|
61
|
+
37 => 'Multiple Exposure',
|
|
62
|
+
38 => 'HDR',
|
|
63
|
+
39 => 'Exposure Delay Mode',
|
|
64
|
+
40 => 'Shutter/Aperture Lock',
|
|
65
|
+
41 => 'Focus Peaking',
|
|
66
|
+
42 => 'Rating',
|
|
67
|
+
43 => 'Non-CPU Lens',
|
|
68
|
+
44 => 'None',
|
|
69
|
+
);
|
|
70
|
+
|
|
26
71
|
my %funcButtonZ7m2 = (
|
|
27
72
|
1 => 'AF-On',
|
|
28
73
|
2 => 'AF Lock Only',
|
|
@@ -1117,6 +1162,11 @@ my %infoZSeries = (
|
|
|
1117
1162
|
Name => 'Func1Button',
|
|
1118
1163
|
PrintConv => \%previewButtonD6,
|
|
1119
1164
|
%infoD6,
|
|
1165
|
+
},{ # CSf2-a (Z6)
|
|
1166
|
+
Name => 'Func1Button',
|
|
1167
|
+
Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
|
|
1168
|
+
Notes => 'Z6 and Z7',
|
|
1169
|
+
PrintConv => \%funcButtonZ6,
|
|
1120
1170
|
},{ # CSf2-a (Z7_2)
|
|
1121
1171
|
Name => 'Func1Button',
|
|
1122
1172
|
PrintConv => \%funcButtonZ7m2,
|
|
@@ -1126,6 +1176,11 @@ my %infoZSeries = (
|
|
|
1126
1176
|
Name => 'Func2Button',
|
|
1127
1177
|
PrintConv => \%previewButtonD6,
|
|
1128
1178
|
%infoD6,
|
|
1179
|
+
},{ # CSf2-b (Z6)
|
|
1180
|
+
Name => 'Func2Button',
|
|
1181
|
+
Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
|
|
1182
|
+
Notes => 'Z6 and Z7',
|
|
1183
|
+
PrintConv => \%funcButtonZ6,
|
|
1129
1184
|
},{ # CSf2-b (Z7_2)
|
|
1130
1185
|
Name => 'Func2Button',
|
|
1131
1186
|
PrintConv => \%funcButtonZ7m2,
|
|
@@ -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.07';
|
|
20
20
|
|
|
21
21
|
# supported EXR value format types (other types are extracted as undef binary data)
|
|
22
22
|
my %formatType = (
|
|
@@ -91,6 +91,8 @@ my %formatType = (
|
|
|
91
91
|
5 => 'PXR24',
|
|
92
92
|
6 => 'B44',
|
|
93
93
|
7 => 'B44A',
|
|
94
|
+
8 => 'DWAA', #github276
|
|
95
|
+
9 => 'DWAB', #github276
|
|
94
96
|
},
|
|
95
97
|
},
|
|
96
98
|
dataWindow => { },
|
|
@@ -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 = '
|
|
51
|
+
$VERSION = '3.00';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -6606,6 +6606,12 @@ my %userDefined = (
|
|
|
6606
6606
|
PrintConv => '$val * 1e6 . " microseconds"',
|
|
6607
6607
|
PrintConvInv => '$val =~ s/ .*//; $val * 1e-6',
|
|
6608
6608
|
},
|
|
6609
|
+
'camera.focal_length.35mm_equivalent' => {
|
|
6610
|
+
Name => 'FocalLengthIn35mmFormat',
|
|
6611
|
+
PrintConv => '"$val mm"',
|
|
6612
|
+
PrintConvInv => '$val=~s/\s*mm$//;$val',
|
|
6613
|
+
},
|
|
6614
|
+
'camera.lens_model' => { Name => 'LensModel' },
|
|
6609
6615
|
'location.ISO6709' => {
|
|
6610
6616
|
Name => 'GPSCoordinates',
|
|
6611
6617
|
Groups => { 2 => 'Location' },
|
|
@@ -109,7 +109,7 @@ my %insvLimit = (
|
|
|
109
109
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
110
110
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
111
111
|
most of these tags are combined into the single table below, ExifTool
|
|
112
|
-
currently reads
|
|
112
|
+
currently reads 77 different formats of timed GPS metadata from video files.
|
|
113
113
|
},
|
|
114
114
|
VARS => { NO_ID => 1 },
|
|
115
115
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
@@ -757,6 +757,15 @@ my %insvLimit = (
|
|
|
757
757
|
10 => { Name => 'FusionYPR', Format => 'float[3]' },
|
|
758
758
|
);
|
|
759
759
|
|
|
760
|
+
#------------------------------------------------------------------------------
|
|
761
|
+
# Convert unsigned 4-byte integer to signed
|
|
762
|
+
# Inputs: <none> (uses value in $_)
|
|
763
|
+
# Returns: signed integet
|
|
764
|
+
sub MakeSigned()
|
|
765
|
+
{
|
|
766
|
+
return $_ < 0x80000000 ? $_ : $_ - 4294967296;
|
|
767
|
+
}
|
|
768
|
+
|
|
760
769
|
#------------------------------------------------------------------------------
|
|
761
770
|
# Save information from keys in OtherSampleDesc directory for processing timed metadata
|
|
762
771
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -1474,6 +1483,31 @@ sub ConvertLatLon($$)
|
|
|
1474
1483
|
$_[1] = $deg + ($_[1] - $deg * 100) / 60;
|
|
1475
1484
|
}
|
|
1476
1485
|
|
|
1486
|
+
#------------------------------------------------------------------------------
|
|
1487
|
+
# Decrypt Lucky data
|
|
1488
|
+
# Inputs: 0) string to decrypt, 1) encryption key
|
|
1489
|
+
# Returns: decrypted string
|
|
1490
|
+
my @luckyKeys = ('luckychip gps', 'customer ## gps');
|
|
1491
|
+
sub DecryptLucky($$) {
|
|
1492
|
+
my ($str, $key) = @_;
|
|
1493
|
+
my @str = unpack('C*', $str);
|
|
1494
|
+
my @key = unpack('C*', $key);
|
|
1495
|
+
my @enc = (0..255);
|
|
1496
|
+
my ($i, $j, $k) = (0, 0, 0);
|
|
1497
|
+
do {
|
|
1498
|
+
$j = ($j + $enc[$i] + $key[$i % length($key)]) & 0xff;
|
|
1499
|
+
@enc[$i,$j] = @enc[$j,$i];
|
|
1500
|
+
} while (++$i < 256);
|
|
1501
|
+
($i, $j, $k) = (0, 0, 0);
|
|
1502
|
+
do {
|
|
1503
|
+
$j = ($j + 1) & 0xff;
|
|
1504
|
+
$k = ($k + $enc[$j]) & 0xff;
|
|
1505
|
+
@enc[$j,$k] = @enc[$k,$j];
|
|
1506
|
+
$str[$i] ^= $enc[($enc[$j] + $enc[$k]) & 0xff];
|
|
1507
|
+
} while (++$i < @str);
|
|
1508
|
+
return pack('C*', @str);
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1477
1511
|
#------------------------------------------------------------------------------
|
|
1478
1512
|
# Process "freeGPS " data blocks
|
|
1479
1513
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref {DataPt,SampleTime,SampleDuration}, 2) tagTable ref
|
|
@@ -1589,40 +1623,87 @@ sub ProcessFreeGPS($$$)
|
|
|
1589
1623
|
}
|
|
1590
1624
|
if (defined $lat) {
|
|
1591
1625
|
# extract accelerometer readings if GPS was valid
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
|
|
1626
|
+
# and change to signed integer and divide by 256
|
|
1627
|
+
@acc = map { MakeSigned / 256 } unpack('x68V3', $$dataPt);
|
|
1595
1628
|
}
|
|
1596
1629
|
|
|
1597
|
-
} elsif ($$dataPt =~ /^.{37}\0\0\0A([NS])([EW])/s) {
|
|
1630
|
+
} elsif ($$dataPt =~ /^.{37}\0\0\0A([NS])([EW])\0/s) {
|
|
1598
1631
|
|
|
1599
|
-
$debug and $et->FoundTag(GPSType => 3);
|
|
1600
|
-
# decode freeGPS from ViofoA119v3 dashcam (similar to Novatek GPS format)
|
|
1601
|
-
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
|
1602
|
-
# 0010: 05 00 00 00 2f 00 00 00 03 00 00 00 13 00 00 00 [..../...........]
|
|
1603
|
-
# 0020: 09 00 00 00 1b 00 00 00 41 4e 57 00 25 d1 99 45 [........ANW.%..E]
|
|
1604
|
-
# 0030: f1 47 40 46 66 66 d2 41 85 eb 83 41 00 00 00 00 [.G@Fff.A...A....]
|
|
1605
1632
|
($latRef, $lonRef) = ($1, $2);
|
|
1606
1633
|
($hr,$min,$sec,$yr,$mon,$day) = unpack('x16V6', $$dataPt);
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
$
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
}
|
|
1617
|
-
$
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1634
|
+
# test for base64-encoded and encrypted lucky gps strings
|
|
1635
|
+
my ($notEnc, $notStr, $lt, $ln);
|
|
1636
|
+
if (length($$dataPt) < 0x78) {
|
|
1637
|
+
$notEnc = $notStr = 1;
|
|
1638
|
+
} else {
|
|
1639
|
+
$lt = substr($$dataPt, 0x2c, 20), # latitude
|
|
1640
|
+
$ln = substr($$dataPt, 0x40, 20), # longitude
|
|
1641
|
+
/^[A-Za-z0-9+\/]{8,20}={0,2}\0*$/ or $notEnc = 1, last foreach ($lt, $ln);
|
|
1642
|
+
/^\d{1,5}\.\d+\0*$/ or $notStr = 1, last foreach ($lt, $ln);
|
|
1643
|
+
}
|
|
1644
|
+
if ($notEnc and $notStr) {
|
|
1645
|
+
|
|
1646
|
+
$debug and $et->FoundTag(GPSType => '3a');
|
|
1647
|
+
# decode freeGPS from ViofoA119v3 dashcam (similar to Novatek GPS format)
|
|
1648
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
|
1649
|
+
# 0010: 05 00 00 00 2f 00 00 00 03 00 00 00 13 00 00 00 [..../...........]
|
|
1650
|
+
# 0020: 09 00 00 00 1b 00 00 00 41 4e 57 00 25 d1 99 45 [........ANW.%..E]
|
|
1651
|
+
# 0030: f1 47 40 46 66 66 d2 41 85 eb 83 41 00 00 00 00 [.G@Fff.A...A....]
|
|
1652
|
+
if ($yr >= 2000) {
|
|
1653
|
+
# Kenwood dashcam sometimes stores absolute year and local time
|
|
1654
|
+
# (but sometimes year since 2000 and UTC time in same video!)
|
|
1655
|
+
require Time::Local;
|
|
1656
|
+
my $time = Image::ExifTool::TimeLocal($sec,$min,$hr,$day,$mon-1,$yr);
|
|
1657
|
+
($sec,$min,$hr,$day,$mon,$yr) = gmtime($time);
|
|
1658
|
+
$yr += 1900;
|
|
1659
|
+
++$mon;
|
|
1660
|
+
$et->WarnOnce('Converting GPSDateTime to UTC based on local time zone',1);
|
|
1661
|
+
}
|
|
1662
|
+
$lat = GetFloat($dataPt, 0x2c);
|
|
1663
|
+
$lon = GetFloat($dataPt, 0x30);
|
|
1664
|
+
$spd = GetFloat($dataPt, 0x34) * $knotsToKph;
|
|
1665
|
+
$trk = GetFloat($dataPt, 0x38);
|
|
1666
|
+
# (may be all zeros or int16u counting from 1 to 6 if not valid)
|
|
1667
|
+
my $tmp = substr($$dataPt, 60, 12);
|
|
1668
|
+
if ($tmp ne "\0\0\0\0\0\0\0\0\0\0\0\0" and $tmp ne "\x01\0\x02\0\x03\0\x04\0\x05\0\x06\0") {
|
|
1669
|
+
@acc = map { MakeSigned / 256 } unpack('V3', $tmp);
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
} else {
|
|
1673
|
+
|
|
1674
|
+
$debug and $et->FoundTag(GPSType => '3b');
|
|
1675
|
+
# decode freeGPS from E-ACE B44 dashcam
|
|
1676
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
|
1677
|
+
# 0010: 08 00 00 00 22 00 00 00 01 00 00 00 18 00 00 00 [...."...........]
|
|
1678
|
+
# 0020: 08 00 00 00 10 00 00 00 41 4e 45 00 67 4e 69 69 [........ANE.gNii]
|
|
1679
|
+
# 0030: 5a 38 4a 54 74 48 63 61 36 74 77 3d 00 00 00 00 [Z8JTtHca6tw=....]
|
|
1680
|
+
# 0040: 68 74 75 69 5a 4d 4a 53 73 58 55 58 37 4e 6f 3d [htuiZMJSsXUX7No=]
|
|
1681
|
+
# 0050: 00 00 00 00 64 3b ac 41 e1 3a 1d 43 2b 01 00 00 [....d;.A.:.C+...]
|
|
1682
|
+
# 0060: fd ff ff ff 43 00 00 00 32 4a 37 31 50 70 55 48 [....C...2J71PpUH]
|
|
1683
|
+
# 0070: 37 69 68 66 00 00 00 00 00 00 00 00 00 00 00 00 [7ihf............]
|
|
1684
|
+
# (16-byte string at 0x68 is base64 encoded and encrypted 'luckychip' string)
|
|
1685
|
+
$spd = GetFloat($dataPt, 0x54) * $knotsToKph;
|
|
1686
|
+
$trk = GetFloat($dataPt, 0x58);
|
|
1687
|
+
@acc = map MakeSigned, unpack('x92V3', $$dataPt);
|
|
1688
|
+
# (accelerometer scaling is roughly 300=1G, but this doesn't seem to be exact for each
|
|
1689
|
+
# axis, so leave the values as raw. The axes are positive acceleration up,left,forward)
|
|
1690
|
+
if ($notEnc) { # (not encrypted)
|
|
1691
|
+
($lat = $lt) =~ s/\0+$//;
|
|
1692
|
+
($lon = $ln) =~ s/\0+$//;
|
|
1693
|
+
} else {
|
|
1694
|
+
# decode base64 strings
|
|
1695
|
+
require Image::ExifTool::XMP;
|
|
1696
|
+
$_ = ${Image::ExifTool::XMP::DecodeBase64($_)} foreach ($lt, $ln);
|
|
1697
|
+
# try various keys to decrypt lat/lon
|
|
1698
|
+
my ($i, $ch, $key) = (0, 'a', $luckyKeys[0]);
|
|
1699
|
+
for (; $i<20; ++$i) {
|
|
1700
|
+
$i and ($key = $luckyKeys[1]) =~ s/#/$ch/g, ++$ch;
|
|
1701
|
+
($lat = DecryptLucky($lt, $key)) =~ /^\d{1,4}\.\d+$/ or undef($lat), next;
|
|
1702
|
+
($lon = DecryptLucky($ln, $key)) =~ /^\d{1,5}\.\d+$/ or undef($lon), next;
|
|
1703
|
+
last;
|
|
1704
|
+
}
|
|
1705
|
+
$lon or $et->WarnOnce('Unknown encryption for latitude/longitude');
|
|
1706
|
+
}
|
|
1626
1707
|
}
|
|
1627
1708
|
|
|
1628
1709
|
} elsif ($$dataPt =~ /^.{21}\0\0\0A([NS])([EW])/s) {
|
|
@@ -1683,7 +1764,7 @@ sub ProcessFreeGPS($$$)
|
|
|
1683
1764
|
$trk -= 360 if $trk >= 360;
|
|
1684
1765
|
undef @acc;
|
|
1685
1766
|
} else {
|
|
1686
|
-
|
|
1767
|
+
@acc = map { MakeSigned / 1000 } @acc; # (NC)
|
|
1687
1768
|
}
|
|
1688
1769
|
|
|
1689
1770
|
} elsif ($$dataPt =~ /^.{60}4W`b]S</s and length($$dataPt) >= 140) {
|
|
@@ -1787,7 +1868,7 @@ sub ProcessFreeGPS($$$)
|
|
|
1787
1868
|
return 0;
|
|
1788
1869
|
}
|
|
1789
1870
|
# (not sure about acc scaling)
|
|
1790
|
-
|
|
1871
|
+
@acc = map { MakeSigned / 1000 } @acc;
|
|
1791
1872
|
$lon = GetFloat($dataPt, 0x5c);
|
|
1792
1873
|
$lat = GetFloat($dataPt, 0x60);
|
|
1793
1874
|
$spd = GetFloat($dataPt, 0x64) * $knotsToKph;
|
|
@@ -1932,7 +2013,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1932
2013
|
# 0x7c - int32s[3] accelerometer * 1000
|
|
1933
2014
|
($latRef, $lonRef) = ($1, $2);
|
|
1934
2015
|
($hr,$min,$sec,$yr,$mon,$day,@acc) = unpack('x48V3x52V6', $$dataPt);
|
|
1935
|
-
|
|
2016
|
+
@acc = map { MakeSigned / 1000 } @acc;
|
|
1936
2017
|
$lat = GetDouble($dataPt, 0x40);
|
|
1937
2018
|
$lon = GetDouble($dataPt, 0x50);
|
|
1938
2019
|
$spd = GetDouble($dataPt, 0x60) * $knotsToKph;
|
|
@@ -1948,8 +2029,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1948
2029
|
$lon = abs(GetFloat(\$dat, 8)); # (abs just to be safe)
|
|
1949
2030
|
$spd = GetFloat(\$dat, 12) * $knotsToKph;
|
|
1950
2031
|
$trk = GetFloat(\$dat, 16);
|
|
1951
|
-
@acc = unpack('x20V3', $dat);
|
|
1952
|
-
map { $_ = $_ - 4294967296 if $_ >= 0x80000000 } @acc;
|
|
2032
|
+
@acc = map MakeSigned, unpack('x20V3', $dat);
|
|
1953
2033
|
ConvertLatLon($lat, $lon);
|
|
1954
2034
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
1955
2035
|
$et->HandleTag($tagTbl, GPSLatitude => $lat * (substr($dat,1,1) eq 'S' ? -1 : 1));
|
|
@@ -1983,7 +2063,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1983
2063
|
$lon = abs(GetDouble($dataPt, 48)); # (abs just to be safe)
|
|
1984
2064
|
$spd = GetDouble($dataPt, 64) * $knotsToKph;
|
|
1985
2065
|
$trk = GetDouble($dataPt, 72);
|
|
1986
|
-
|
|
2066
|
+
@acc = map { MakeSigned / 1000 } @acc; # (NC)
|
|
1987
2067
|
# (not necessary to read RMC sentence because we already have it all)
|
|
1988
2068
|
|
|
1989
2069
|
} elsif ($$dataPt =~ /^.{72}A[NS][EW]\0/s) {
|
|
@@ -2117,7 +2197,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
2117
2197
|
$day < 1 or $day > 31 or
|
|
2118
2198
|
$hr > 59 or $min > 59 or $sec > 600;
|
|
2119
2199
|
# change lat/lon to signed integer and divide by 1e7
|
|
2120
|
-
|
|
2200
|
+
($lat, $lon) = map { MakeSigned / 1e7 } $lat, $lon;
|
|
2121
2201
|
$trk -= 0x10000 if $trk >= 0x8000; # make it signed
|
|
2122
2202
|
$trk /= 100;
|
|
2123
2203
|
$trk += 360 if $trk < 0;
|
|
@@ -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.58';
|
|
26
26
|
|
|
27
27
|
sub WriteSTMN($$$);
|
|
28
28
|
sub ProcessINFO($$$);
|
|
@@ -957,7 +957,7 @@ my %formatMinMax = (
|
|
|
957
957
|
Samsung models such as the Galaxy S4 and Tab S, and from the 'sefd' atom in
|
|
958
958
|
HEIC images from models such as the S10+.
|
|
959
959
|
},
|
|
960
|
-
'0x0001-name' => 'EmbeddedImageName', # ("DualShot_1","DualShot_2")
|
|
960
|
+
'0x0001-name' => 'EmbeddedImageName', # ("DualShot_1","DualShot_2","SingleShot")
|
|
961
961
|
'0x0001' => [
|
|
962
962
|
{
|
|
963
963
|
Name => 'EmbeddedImage',
|
|
@@ -970,6 +970,7 @@ my %formatMinMax = (
|
|
|
970
970
|
Groups => { 2 => 'Preview' },
|
|
971
971
|
Binary => 1,
|
|
972
972
|
},
|
|
973
|
+
# (have also seen the string "BOKEH" here (SM-A226B)
|
|
973
974
|
],
|
|
974
975
|
'0x0100-name' => 'EmbeddedAudioFileName', # ("SoundShot_000")
|
|
975
976
|
'0x0100' => { Name => 'EmbeddedAudioFile', Groups => { 2 => 'Audio' }, Binary => 1 },
|
|
@@ -1265,6 +1266,7 @@ my %formatMinMax = (
|
|
|
1265
1266
|
'0x0b40' => { # (SM-N975X front camera)
|
|
1266
1267
|
Name => 'SingleShotMeta',
|
|
1267
1268
|
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::SingleShotMeta' },
|
|
1269
|
+
# (have also see the string "BOKEH_INFO" here (SM-A226B)
|
|
1268
1270
|
},
|
|
1269
1271
|
# 0x0b41-name - seen 'SingeShot_DepthMap_1' (Yes, "Singe") (SM-N975X front camera)
|
|
1270
1272
|
'0x0b41' => { Name => 'SingleShotDepthMap', Binary => 1 },
|
|
@@ -1493,7 +1495,7 @@ sub ProcessSamsungMeta($$$)
|
|
|
1493
1495
|
my $pos = $$dirInfo{DirStart};
|
|
1494
1496
|
my $end = $$dirInfo{DirLen} + $pos;
|
|
1495
1497
|
unless ($pos + 8 <= $end and substr($$dataPt, $pos, 4) eq 'DOFS') {
|
|
1496
|
-
$et->Warn("Unrecognized $dirName data");
|
|
1498
|
+
$et->Warn("Unrecognized $dirName data", 1);
|
|
1497
1499
|
return 0;
|
|
1498
1500
|
}
|
|
1499
1501
|
my $ver = Get32u($dataPt, $pos + 4);
|
|
@@ -3133,7 +3133,7 @@ my %tagLookup = (
|
|
|
3133
3133
|
'focallength' => { 7 => 0x1d, 8 => 0xa, 9 => 0x23, 10 => 0x9, 11 => 0x1d, 12 => 0x9, 13 => 0x1e, 14 => 0x1d, 15 => 0x1d, 16 => 0x1e, 17 => 0x1e, 18 => 0x1e, 19 => 0x28, 20 => 0x1e, 21 => 0x23, 22 => 0x1e, 23 => 0x1e, 24 => 0x23, 25 => 0x23, 26 => 0x23, 27 => 0x23, 28 => 0x1e, 29 => 0x23, 61 => 0x1, 64 => 0x7, 117 => 0x1d, 123 => 0x920a, 151 => 0x1d, 167 => 'FocalLength', 185 => 0x12, 233 => 0xa, 234 => 0xb, 238 => [0xc,0x3c], 343 => 0x1, 385 => 0x1d, 394 => 0x403, 417 => 0x1500, 436 => 0xe, 464 => 0x1278, 465 => 0x1134, 466 => 0x32c, 467 => 0x32c, 468 => 0x30a, 520 => 'FocalLength' },
|
|
3134
3134
|
'focallength2' => { 456 => [0x23,0x25,0x29] },
|
|
3135
3135
|
'focallength35mm' => { 339 => 'FocalLength35mm' },
|
|
3136
|
-
'focallengthin35mmformat' => { 123 => 0xa405, 424 => 0xa01a, 520 => 'FocalLengthIn35mmFilm' },
|
|
3136
|
+
'focallengthin35mmformat' => { 123 => 0xa405, 404 => 'camera.focal_length.35mm_equivalent', 424 => 0xa01a, 520 => 'FocalLengthIn35mmFilm' },
|
|
3137
3137
|
'focallengthtelezoom' => { 436 => 0x10 },
|
|
3138
3138
|
'focalplaneafpointarea' => { 469 => 0x2 },
|
|
3139
3139
|
'focalplaneafpointlocation1' => { 469 => 0x6 },
|
|
@@ -4116,7 +4116,7 @@ my %tagLookup = (
|
|
|
4116
4116
|
'lensmanualdistortionamount' => { 514 => 'LensManualDistortionAmount', 516 => 'LensManualDistortionAmount' },
|
|
4117
4117
|
'lensmanufacturer' => { 182 => 'LensManufacturer' },
|
|
4118
4118
|
'lensmaxaperturerange' => { 427 => 0x2b },
|
|
4119
|
-
'lensmodel' => { 7 => 0x937, 14 => 0x92b, 15 => 0x933, 67 => 0x95, 123 => 0xa434, 167 => 'Model', 182 => 'LensModel', 235 => 0x18a, 236 => 0x18b, 237 => 0x2ac, 326 => 0x203, 381 => 0xc, 394 => 0x412, 521 => 'LensModel' },
|
|
4119
|
+
'lensmodel' => { 7 => 0x937, 14 => 0x92b, 15 => 0x933, 67 => 0x95, 123 => 0xa434, 167 => 'Model', 182 => 'LensModel', 235 => 0x18a, 236 => 0x18b, 237 => 0x2ac, 326 => 0x203, 381 => 0xc, 394 => 0x412, 404 => 'camera.lens_model', 521 => 'LensModel' },
|
|
4120
4120
|
'lensmodulationoptimizer' => { 131 => 0x1045 },
|
|
4121
4121
|
'lensmount' => { 439 => 0x99, 464 => 0x1892, 466 => 0x18be, 467 => 0x18ee, 468 => 0x17f2, 470 => 0x105, 471 => 0x105, 482 => 0x604, 483 => 0x5e },
|
|
4122
4122
|
'lensmount2' => { 487 => 0x8 },
|
|
@@ -4727,7 +4727,8 @@ my %tagLookup = (
|
|
|
4727
4727
|
'maxavailwidth' => { 528 => 'MaxAvailWidth' },
|
|
4728
4728
|
'maxcontinuousrelease' => { 305 => 0xb, 306 => 0xc, 308 => '12.1', 309 => '12.1', 314 => 0xc, 315 => 0xb, 318 => '12.1', 319 => '12.1', 321 => 0x3d, 322 => 0x3d, 323 => 0x3d },
|
|
4729
4729
|
'maxfaces' => { 329 => 0x1202 },
|
|
4730
|
-
'maxfocallength' => { 7 => 0xe6, 8 => 0x10, 9 => 0x1ab, 10 => 0x13, 11 => 0x115, 12 => 0x13, 13 => 0x153, 14 => 0xda, 16 => 0xfa, 17 => 0xee, 18 => 0x103, 19 => 0x95, 20 => 0xea, 21 => 0x157, 22 => 0xee, 23 => 0xec, 24 => 0x12b, 25 => 0x165, 26 => 0x16a, 27 => 0x188, 28 => 0x116, 29 => 0x18d, 36 => 0x17,
|
|
4730
|
+
'maxfocallength' => { 7 => 0xe6, 8 => 0x10, 9 => 0x1ab, 10 => 0x13, 11 => 0x115, 12 => 0x13, 13 => 0x153, 14 => 0xda, 16 => 0xfa, 17 => 0xee, 18 => 0x103, 19 => 0x95, 20 => 0xea, 21 => 0x157, 22 => 0xee, 23 => 0xec, 24 => 0x12b, 25 => 0x165, 26 => 0x16a, 27 => 0x188, 28 => 0x116, 29 => 0x18d, 36 => 0x17, 131 => 0x1405, 167 => 'MaxFocalLength', 232 => 0x9, 233 => 0xe, 234 => 0xf, 238 => 0x10, 326 => 0x208, 464 => 0x127c, 465 => 0x1138, 466 => 0x330, 467 => 0x330, 468 => 0x30e },
|
|
4731
|
+
'maxfocallength2' => { 64 => 0x9 },
|
|
4731
4732
|
'maximumdensityrange' => { 137 => 0x8c },
|
|
4732
4733
|
'maxpagesize' => { 548 => 'MaxPageSize' },
|
|
4733
4734
|
'maxpagesizeh' => { 548 => [\'MaxPageSize','MaxPageSizeH'] },
|
|
@@ -4830,7 +4831,8 @@ my %tagLookup = (
|
|
|
4830
4831
|
'mime' => { 499 => 'Mime' },
|
|
4831
4832
|
'minaperture' => { 36 => 0x1b, 142 => 0x3f8, 167 => 'MinAperture', 375 => '0.2' },
|
|
4832
4833
|
'minaperturevalue' => { 394 => 0x415 },
|
|
4833
|
-
'minfocallength' => { 7 => 0xe4, 8 => 0xe, 9 => 0x1a9, 10 => 0x11, 11 => 0x113, 12 => 0x11, 13 => 0x151, 14 => 0xd8, 16 => 0xf8, 17 => 0xec, 18 => 0x101, 19 => 0x93, 20 => 0xe8, 21 => 0x155, 22 => 0xec, 23 => 0xea, 24 => 0x129, 25 => 0x163, 26 => 0x168, 27 => 0x186, 28 => 0x114, 29 => 0x18b, 36 => 0x18,
|
|
4834
|
+
'minfocallength' => { 7 => 0xe4, 8 => 0xe, 9 => 0x1a9, 10 => 0x11, 11 => 0x113, 12 => 0x11, 13 => 0x151, 14 => 0xd8, 16 => 0xf8, 17 => 0xec, 18 => 0x101, 19 => 0x93, 20 => 0xe8, 21 => 0x155, 22 => 0xec, 23 => 0xea, 24 => 0x129, 25 => 0x163, 26 => 0x168, 27 => 0x186, 28 => 0x114, 29 => 0x18b, 36 => 0x18, 131 => 0x1404, 167 => 'MinFocalLength', 232 => 0x8, 233 => 0xd, 234 => 0xe, 238 => 0xf, 326 => 0x207, 464 => 0x127a, 465 => 0x1136, 466 => 0x32e, 467 => 0x32e, 468 => 0x30c },
|
|
4835
|
+
'minfocallength2' => { 64 => 0x8 },
|
|
4834
4836
|
'minfocusdistance' => { 375 => 0x3 },
|
|
4835
4837
|
'minimumiso' => { 349 => 0xe8 },
|
|
4836
4838
|
'minintegrationrows' => { 142 => 0x1874 },
|
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
|
12
12
|
=head1 TAG TABLES
|
|
13
13
|
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
|
15
|
-
They contain a total of
|
|
15
|
+
They contain a total of 27899 tags, with 17464 unique tag names.
|
|
16
16
|
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
|
@@ -11601,8 +11601,8 @@ Information about creative filter settings.
|
|
|
11601
11601
|
4 RollAngle int32s
|
|
11602
11602
|
5 PitchAngle int32s
|
|
11603
11603
|
7 FocalLength int32s
|
|
11604
|
-
8
|
|
11605
|
-
9
|
|
11604
|
+
8 MinFocalLength2 int32s
|
|
11605
|
+
9 MaxFocalLength2 int32s
|
|
11606
11606
|
|
|
11607
11607
|
=head3 Canon CTMD Tags
|
|
11608
11608
|
|
|
@@ -29618,7 +29618,7 @@ for the official QuickTime specification.
|
|
|
29618
29618
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
29619
29619
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
29620
29620
|
most of these tags are combined into the single table below, ExifTool
|
|
29621
|
-
currently reads
|
|
29621
|
+
currently reads 77 different formats of timed GPS metadata from video files.
|
|
29622
29622
|
|
|
29623
29623
|
Tag Name Writable
|
|
29624
29624
|
-------- --------
|
|
@@ -29818,9 +29818,12 @@ changed via the config file.
|
|
|
29818
29818
|
'artist' Artist yes
|
|
29819
29819
|
'artwork' Artwork yes
|
|
29820
29820
|
'author' Author yes
|
|
29821
|
+
'camera.focal_length.35mm_equivalent'
|
|
29822
|
+
FocalLengthIn35mmFormat yes
|
|
29821
29823
|
'camera.framereadouttimeinmicroseconds'
|
|
29822
29824
|
FrameReadoutTime yes
|
|
29823
29825
|
'camera.identifier' CameraIdentifier yes
|
|
29826
|
+
'camera.lens_model' LensModel yes
|
|
29824
29827
|
'collection.user' UserCollection yes
|
|
29825
29828
|
'com.android.capture.fps' AndroidCaptureFPS yes
|
|
29826
29829
|
'com.android.version' AndroidVersion yes
|
|
@@ -2835,7 +2835,10 @@ sub GetAllGroups($;$)
|
|
|
2835
2835
|
$family == 3 and return('Doc#', 'Main');
|
|
2836
2836
|
$family == 4 and return('Copy#');
|
|
2837
2837
|
$family == 5 and return('[too many possibilities to list]');
|
|
2838
|
-
$family == 6
|
|
2838
|
+
if ($family == 6) {
|
|
2839
|
+
my $fn = \%Image::ExifTool::Exif::formatNumber;
|
|
2840
|
+
return(sort { $$fn{$a} <=> $$fn{$b} } keys %$fn);
|
|
2841
|
+
}
|
|
2839
2842
|
$family == 8 and return('File#');
|
|
2840
2843
|
|
|
2841
2844
|
LoadAllTables(); # first load all our tables
|
data/bin/lib/Image/ExifTool.pm
CHANGED
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars $advFmtSelf);
|
|
31
31
|
|
|
32
|
-
$VERSION = '12.
|
|
32
|
+
$VERSION = '12.93';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: exiftool_vendored
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 12.
|
|
4
|
+
version: 12.93.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew McEachen
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2024-
|
|
12
|
+
date: 2024-08-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: exiftool
|