exiftool-vendored.pl 12.89.0 → 12.91.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 +21 -3
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/build_geolocation +1 -1
- package/bin/build_tag_lookup +29 -11
- package/bin/exiftool +5 -5
- package/bin/lib/Image/ExifTool/Canon.pm +13 -7
- package/bin/lib/Image/ExifTool/Nikon.pm +34 -1
- package/bin/lib/Image/ExifTool/PNG.pm +10 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +7 -2
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +87 -6
- package/bin/lib/Image/ExifTool/Samsung.pm +28 -19
- package/bin/lib/Image/ExifTool/TagLookup.pm +4 -0
- package/bin/lib/Image/ExifTool/TagNames.pod +10 -6
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- package/bin/lib/Image/ExifTool.pm +1 -1
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/package.json +1 -1
package/bin/Changes
CHANGED
|
@@ -7,6 +7,24 @@ 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
|
+
July 24, 2024 - Version 12.91
|
|
11
|
+
|
|
12
|
+
- Fixed 2 test files that were causing failed tests (ExifTool itself is
|
|
13
|
+
unchanged)
|
|
14
|
+
|
|
15
|
+
July 24, 2024 - Version 12.90
|
|
16
|
+
|
|
17
|
+
- Added support for reading Samsung trailer from PNG images
|
|
18
|
+
- Decode two more formats of timed GPS from MP4 videos
|
|
19
|
+
- Decode a few more Samung trailer tags (thanks Neal Krawetz)
|
|
20
|
+
- Decode Canon AntiFlicker tag
|
|
21
|
+
- Drop Nikon ShotInfo record when copying MakerNotes from NEF to JPG if it is
|
|
22
|
+
larger than 50000 bytes (then MakerNotes would be too large for a single
|
|
23
|
+
JPEG segment)
|
|
24
|
+
- Changed exiftool shebang from "#!/usr/bin/perl" to "#!/usr/bin/env perl"
|
|
25
|
+
- Revert change of 12.84 to iterate through sub-documents with the -p option
|
|
26
|
+
only if -ee is used
|
|
27
|
+
|
|
10
28
|
July 12, 2024 - Version 12.89
|
|
11
29
|
|
|
12
30
|
- Added new Sony lenses and updated decoding of some tags (thanks Jos Roost)
|
|
@@ -15,9 +33,7 @@ July 12, 2024 - Version 12.89
|
|
|
15
33
|
|
|
16
34
|
July 11, 2024 - Version 12.88 - "New Windows/MacOS packages"
|
|
17
35
|
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
NOTE: The install procedure for the Windows executable has changed!
|
|
36
|
+
- NOTE: The install procedure for the Windows executable has changed!
|
|
21
37
|
- Windows EXE version now uses Oliver Betz's bundle with Strawberry Perl and
|
|
22
38
|
comes in 32- and 64-bit versions
|
|
23
39
|
- MacOS distribution now uses a flattened package
|
|
@@ -105,6 +121,8 @@ Apr. 23, 2024 - Version 12.84
|
|
|
105
121
|
cities
|
|
106
122
|
- Allow coordinates to be entered without comma separator for the Geolocation
|
|
107
123
|
feature as long as both coordinates have a decimal point
|
|
124
|
+
- Changed -p option to iterate through sub-documents if they exist even if -ee
|
|
125
|
+
isn't used
|
|
108
126
|
- Fixed long-standing bug in Windows version that didn't properly handle dates
|
|
109
127
|
older than 50 years when writing FileModifyDate or FileCreateDate
|
|
110
128
|
- Fixed API TimeZone option to work in Windows
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/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.91.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.91
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
package/bin/build_geolocation
CHANGED
package/bin/build_tag_lookup
CHANGED
|
@@ -4,19 +4,18 @@
|
|
|
4
4
|
#
|
|
5
5
|
# Syntax: build_tag_lookup [-p] [-v]
|
|
6
6
|
#
|
|
7
|
-
# Options: -
|
|
7
|
+
# Options: -c - check dates and only build if necessary
|
|
8
|
+
# -p - preserve existing revision date in html files
|
|
8
9
|
# -v - verbose mode
|
|
9
10
|
#
|
|
10
11
|
# Created: 12/31/04 - P. Harvey
|
|
11
12
|
#
|
|
12
13
|
use strict;
|
|
13
14
|
|
|
14
|
-
print "Building tag lookup...\n";
|
|
15
|
-
|
|
16
15
|
my $file = 'lib/Image/ExifTool/TagLookup.pm';
|
|
17
16
|
my $podFile = 'lib/Image/ExifTool/TagNames.pod';
|
|
18
17
|
my $htmldir = 'html';
|
|
19
|
-
my $verbose;
|
|
18
|
+
my ($verbose, $check, $preserve);
|
|
20
19
|
|
|
21
20
|
BEGIN {
|
|
22
21
|
# get exe directory (and change to forward slashes)
|
|
@@ -25,22 +24,39 @@ BEGIN {
|
|
|
25
24
|
unshift @INC, "$exeDir/lib";
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
require Image::ExifTool::BuildTagLookup;
|
|
29
|
-
|
|
30
|
-
my $builder = new Image::ExifTool::BuildTagLookup;
|
|
31
|
-
|
|
32
27
|
foreach (@ARGV) {
|
|
33
28
|
if ($_ eq '-p') {
|
|
34
|
-
|
|
35
|
-
print("(preserving revision dates)\n");
|
|
36
|
-
next;
|
|
29
|
+
$preserve = 1;
|
|
37
30
|
} elsif ($_ eq '-v') {
|
|
38
31
|
$verbose = 1;
|
|
32
|
+
} elsif ($_ eq '-c') {
|
|
33
|
+
$check = 1;
|
|
39
34
|
} else {
|
|
40
35
|
die "Unknown option '$_'\n";
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
38
|
|
|
39
|
+
if ($check and -e '.built_tag_lookup') {
|
|
40
|
+
# find most recent .p? file
|
|
41
|
+
my $latest = 1e6;
|
|
42
|
+
$latest > -M and $latest = -M foreach <lib/Image/ExifTool/*.p?>;
|
|
43
|
+
if ($latest > -M '.built_tag_lookup') {
|
|
44
|
+
print "Tag Lookup is up-to-date\n";
|
|
45
|
+
exit 0;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
print "Building tag lookup...\n";
|
|
50
|
+
|
|
51
|
+
require Image::ExifTool::BuildTagLookup;
|
|
52
|
+
|
|
53
|
+
my $builder = new Image::ExifTool::BuildTagLookup;
|
|
54
|
+
|
|
55
|
+
if ($preserve) {
|
|
56
|
+
$$builder{PRESERVE_DATE} = 1;
|
|
57
|
+
print("(preserving revision dates)\n");
|
|
58
|
+
}
|
|
59
|
+
|
|
44
60
|
my $count = $builder->{COUNT};
|
|
45
61
|
foreach (sort keys %$count) {
|
|
46
62
|
printf "%5d %s\n", $$count{$_}, $_;
|
|
@@ -78,6 +94,8 @@ if ($diff > $same) {
|
|
|
78
94
|
printf "%5d HTML files changed\n", $diff;
|
|
79
95
|
}
|
|
80
96
|
|
|
97
|
+
system 'echo `date` > .built_tag_lookup';
|
|
98
|
+
|
|
81
99
|
exit(0);
|
|
82
100
|
|
|
83
101
|
# end
|
package/bin/exiftool
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/perl
|
|
1
|
+
#!/usr/bin/env perl
|
|
2
2
|
#------------------------------------------------------------------------------
|
|
3
3
|
# File: exiftool
|
|
4
4
|
#
|
|
@@ -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.91';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -2310,8 +2310,8 @@ sub GetImageInfo($$)
|
|
|
2310
2310
|
# output using print format file (-p) option
|
|
2311
2311
|
my ($type, $doc, $grp, $lastDoc, $cache);
|
|
2312
2312
|
$fileTrailer = '';
|
|
2313
|
-
# repeat for each
|
|
2314
|
-
if (
|
|
2313
|
+
# repeat for each embedded document if necessary (only if -ee used)
|
|
2314
|
+
if ($et->Options('ExtractEmbedded')) {
|
|
2315
2315
|
# (cache tag keys if there are sub-documents)
|
|
2316
2316
|
$lastDoc = $$et{DOC_COUNT} and $cache = { };
|
|
2317
2317
|
} else {
|
|
@@ -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.91 --
|
|
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.79';
|
|
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)
|
|
@@ -6403,6 +6403,8 @@ my %ciMaxFocal = (
|
|
|
6403
6403
|
12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
|
|
6404
6404
|
13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
|
|
6405
6405
|
14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
|
|
6406
|
+
16 => 'Large Zone AF (vertical)', #forum16223
|
|
6407
|
+
17 => 'Large Zone AF (horizontal)', #forum16223
|
|
6406
6408
|
19 => 'Flexible Zone AF 1', #github268 (R7)
|
|
6407
6409
|
20 => 'Flexible Zone AF 2', #github268 (R7)
|
|
6408
6410
|
21 => 'Flexible Zone AF 3', #github268 (R7)
|
|
@@ -6921,6 +6923,10 @@ my %ciMaxFocal = (
|
|
|
6921
6923
|
Name => 'FlashExposureLock',
|
|
6922
6924
|
PrintConv => \%offOn,
|
|
6923
6925
|
},
|
|
6926
|
+
32 => { #forum16257
|
|
6927
|
+
Name => 'AntiFlicker',
|
|
6928
|
+
PrintConv => \%offOn,
|
|
6929
|
+
},
|
|
6924
6930
|
0x3d => { #IB
|
|
6925
6931
|
Name => 'RFLensType',
|
|
6926
6932
|
Format => 'int16u',
|
|
@@ -9123,19 +9129,19 @@ my %filterConv = (
|
|
|
9123
9129
|
2 => 'Disable',
|
|
9124
9130
|
},
|
|
9125
9131
|
},
|
|
9126
|
-
18 => { #52
|
|
9132
|
+
18 => { #52/forum16223
|
|
9127
9133
|
Name => 'AFStatusViewfinder',
|
|
9128
|
-
Condition => '$$self{Model} =~ /1D X/',
|
|
9129
|
-
Notes => '1D X
|
|
9134
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
|
9135
|
+
Notes => '1D X and R models',
|
|
9130
9136
|
PrintConv => {
|
|
9131
9137
|
0 => 'Show in Field of View',
|
|
9132
9138
|
1 => 'Show Outside View',
|
|
9133
9139
|
},
|
|
9134
9140
|
},
|
|
9135
|
-
19 => { #52
|
|
9141
|
+
19 => { #52/forum16223
|
|
9136
9142
|
Name => 'InitialAFPointInServo',
|
|
9137
|
-
Condition => '$$self{Model} =~ /1D X/',
|
|
9138
|
-
Notes => '1D X
|
|
9143
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
|
9144
|
+
Notes => '1D X and R models',
|
|
9139
9145
|
PrintConv => {
|
|
9140
9146
|
0 => 'Initial AF Point Selected',
|
|
9141
9147
|
1 => 'Manual AF Point',
|
|
@@ -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.36';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -2495,6 +2495,7 @@ my %base64coord = (
|
|
|
2495
2495
|
{ # D7100=0227
|
|
2496
2496
|
Condition => '$$valPt =~ /^0[28]/',
|
|
2497
2497
|
Name => 'ShotInfo02xx',
|
|
2498
|
+
Drop => 50000, # drop if too large (>64k for Z6iii)
|
|
2498
2499
|
SubDirectory => {
|
|
2499
2500
|
TagTable => 'Image::ExifTool::Nikon::ShotInfo',
|
|
2500
2501
|
ProcessProc => \&ProcessNikonEncrypted,
|
|
@@ -5635,6 +5636,38 @@ my %nikonFocalConversions = (
|
|
|
5635
5636
|
Notes => 'P6000',
|
|
5636
5637
|
PrintConv => \%offOn,
|
|
5637
5638
|
},
|
|
5639
|
+
# for Nikon Z6iii JPG and RAW images (version 0809),
|
|
5640
|
+
# the offset table starts at 0x24 and is as follows
|
|
5641
|
+
# JPG Offset Size NEF Offset Size
|
|
5642
|
+
# 0) 0x0000 0 0) 0x009c 21604
|
|
5643
|
+
# 1) 0x0000 0 1) 0x5500 6008
|
|
5644
|
+
# 2) 0x009c 2528 2) 0x6c78 2528
|
|
5645
|
+
# 3) 0x0a7c 200 3) 0x7658 200
|
|
5646
|
+
# 4) 0x0b44 2488 4) 0x7720 2488
|
|
5647
|
+
# 5) 0x14fc 1468 5) 0x80d8 1468
|
|
5648
|
+
# 6) 0x1ab8 1032 6) 0x8694 1032
|
|
5649
|
+
# 7) 0x1ec0 256 7) 0x8a9c 256
|
|
5650
|
+
# 8) 0x1fc0 800 8) 0x8b9c 800
|
|
5651
|
+
# 9) 0x22e0 144 9) 0x8ebc 144
|
|
5652
|
+
# 10) 0x2370 64 10) 0x8f4c 64
|
|
5653
|
+
# 11) 0x0000 0 11) 0x0000 0
|
|
5654
|
+
# 12) 0x23b0 5009 12) 0x8f8c 5009
|
|
5655
|
+
# 13) 0x3741 1536 13) 0xa31d 1536
|
|
5656
|
+
# 14) 0x3d41 11928 14) 0xa91d 11928
|
|
5657
|
+
# 15) 0x6bd9 5937 15) 0xd7b5 5937
|
|
5658
|
+
# 16) 0x830a 500 16) 0xeee6 500
|
|
5659
|
+
# 17) 0x84fe 160 17) 0xf0da 160
|
|
5660
|
+
# 18) 0x859e 464 18) 0xf17a 464
|
|
5661
|
+
# 19) 0x876e 8 19) 0xf34a 8
|
|
5662
|
+
# 20) 0x8776 64 20) 0xf352 64
|
|
5663
|
+
# 21) 0x87b6 6 21) 0xf392 6
|
|
5664
|
+
# 22) 0x87bc 48 22) 0xf398 48
|
|
5665
|
+
# 23) 0x87ec 20 23) 0xf3c8 20
|
|
5666
|
+
# 24) 0x8800 108 24) 0xf3dc 108
|
|
5667
|
+
# 25) 0x886c 8 25) 0xf448 8
|
|
5668
|
+
# 26) 0x8874 2420 26) 0xf450 2420
|
|
5669
|
+
# 27) 0x0000 0 27) 0x0000 0
|
|
5670
|
+
# 28) 0x0000 0 28) 0x0000 0
|
|
5638
5671
|
0x66 => {
|
|
5639
5672
|
Name => 'VR_0x66',
|
|
5640
5673
|
Condition => '$$self{ShotInfoVersion} eq "0204"',
|
|
@@ -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.68';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -1400,7 +1400,7 @@ sub ProcessPNG($$)
|
|
|
1400
1400
|
my $fastScan = $et->Options('FastScan');
|
|
1401
1401
|
my $hash = $$et{ImageDataHash};
|
|
1402
1402
|
my ($n, $sig, $err, $hbuf, $dbuf, $cbuf);
|
|
1403
|
-
my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset);
|
|
1403
|
+
my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset, $wasTrailer);
|
|
1404
1404
|
|
|
1405
1405
|
# check to be sure this is a valid PNG/MNG/JNG image
|
|
1406
1406
|
return 0 unless $raf->Read($sig,8) == 8 and $pngLookup{$sig};
|
|
@@ -1461,6 +1461,7 @@ sub ProcessPNG($$)
|
|
|
1461
1461
|
if ($wasEnd) {
|
|
1462
1462
|
last unless $n; # stop now if normal end of PNG
|
|
1463
1463
|
$et->WarnOnce("Trailer data after $fileType $endChunk chunk", 1);
|
|
1464
|
+
$wasTrailer = 1;
|
|
1464
1465
|
last if $n < 8;
|
|
1465
1466
|
$$et{SET_GROUP1} = 'Trailer';
|
|
1466
1467
|
} elsif ($n != 8) {
|
|
@@ -1654,6 +1655,13 @@ sub ProcessPNG($$)
|
|
|
1654
1655
|
}
|
|
1655
1656
|
}
|
|
1656
1657
|
delete $$et{SET_GROUP1};
|
|
1658
|
+
# read Samsung trailer if it exists
|
|
1659
|
+
if ($wasTrailer and not $outfile and $raf->Seek(-8, 2) and
|
|
1660
|
+
$raf->Read($dbuf,8) and $dbuf =~ /\0\0(QDIOBS|SEFT)$/) # (have only seen SEFT type)
|
|
1661
|
+
{
|
|
1662
|
+
require Image::ExifTool::Samsung;
|
|
1663
|
+
Image::ExifTool::Samsung::ProcessSamsung($et, { DirName => 'Samsung', RAF => $raf });
|
|
1664
|
+
}
|
|
1657
1665
|
return -1 if $outfile and ($err or not $wasEnd);
|
|
1658
1666
|
return 1; # this was a valid PNG/MNG/JNG image
|
|
1659
1667
|
}
|
|
@@ -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.99';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -9737,7 +9737,7 @@ sub ProcessMOV($$;$)
|
|
|
9737
9737
|
if ($size > 0x2000000) { # start to get worried above 32 MiB
|
|
9738
9738
|
# check for RIFF trailer (written by Auto-Vox dashcam)
|
|
9739
9739
|
if ($buff =~ /^(gpsa|gps0|gsen|gsea)...\0/s) { # (yet seen only gpsa as first record)
|
|
9740
|
-
$et->VPrint(0, "Found RIFF trailer");
|
|
9740
|
+
$et->VPrint(0, sprintf("Found RIFF trailer at offset 0x%x",$lastPos));
|
|
9741
9741
|
if ($et->Options('ExtractEmbedded')) {
|
|
9742
9742
|
$raf->Seek(-8, 1) or last; # seek back to start of trailer
|
|
9743
9743
|
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
@@ -9746,6 +9746,11 @@ sub ProcessMOV($$;$)
|
|
|
9746
9746
|
EEWarn($et);
|
|
9747
9747
|
}
|
|
9748
9748
|
last;
|
|
9749
|
+
} elsif ($buff eq 'CCCCCCCC') {
|
|
9750
|
+
$et->VPrint(0, sprintf("Found Kenwood trailer at offset 0x%x",$lastPos));
|
|
9751
|
+
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
9752
|
+
ProcessKenwoodTrailer($et, { RAF => $raf }, $tbl);
|
|
9753
|
+
last;
|
|
9749
9754
|
}
|
|
9750
9755
|
$ignore = 1;
|
|
9751
9756
|
if ($tagInfo and not $$tagInfo{Unknown} and not $eeTag) {
|
|
@@ -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 76 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' },
|
|
@@ -1420,9 +1420,10 @@ Sample: for ($i=0; ; ) {
|
|
|
1420
1420
|
} elsif ($type eq 'gps ') { # (ie. GPSDataList tag)
|
|
1421
1421
|
|
|
1422
1422
|
if ($buff =~ /^....freeGPS /s) {
|
|
1423
|
-
#
|
|
1424
|
-
# (some videos don't reference all freeGPS info from 'gps ' table, eg. INNOV
|
|
1425
|
-
|
|
1423
|
+
# parse freeGPS data unless done already in brute-force scan
|
|
1424
|
+
# (some videos don't reference all freeGPS info from 'gps ' table, eg. INNOV,
|
|
1425
|
+
# and some videos don't put 'gps ' data in mdat, eg XGODY 12" 4K Dashcam)
|
|
1426
|
+
last if $$et{FoundGPSByScan};
|
|
1426
1427
|
# decode "freeGPS " data (Novatek and others)
|
|
1427
1428
|
ProcessFreeGPS($et, {
|
|
1428
1429
|
DataPt => \$buff,
|
|
@@ -2049,9 +2050,41 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
2049
2050
|
}
|
|
2050
2051
|
}
|
|
2051
2052
|
|
|
2052
|
-
}
|
|
2053
|
+
} elsif ($$dataPt =~ m<^.{23}(\d{4})/(\d{2})/(\d{2}) (\d{2}):(\d{2}):(\d{2}) [N|S]>s) {
|
|
2053
2054
|
|
|
2054
2055
|
$debug and $et->FoundTag(GPSType => 16);
|
|
2056
|
+
# XGODY 12" 4K Dashcam
|
|
2057
|
+
# 0000: 00 00 00 a8 66 72 65 65 47 50 53 20 98 00 00 00 [....freeGPS ....]
|
|
2058
|
+
# 0010: 6e 6f 72 6d 61 6c 3a 32 30 32 34 2f 30 35 2f 32 [normal:2024/05/2]
|
|
2059
|
+
# 0020: 32 20 30 32 3a 35 34 3a 32 39 20 4e 3a 34 32 2e [2 02:54:29 N:42.]
|
|
2060
|
+
# 0030: 33 38 32 34 37 30 20 57 3a 38 33 2e 33 38 39 35 [382470 W:83.3895]
|
|
2061
|
+
# 0040: 37 30 20 35 33 2e 36 20 6b 6d 2f 68 20 78 3a 2d [70 53.6 km/h x:-]
|
|
2062
|
+
# 0050: 30 2e 30 32 20 79 3a 30 2e 39 39 20 7a 3a 30 2e [0.02 y:0.99 z:0.]
|
|
2063
|
+
# 0060: 31 30 20 41 3a 32 36 39 2e 32 20 48 3a 32 34 35 [10 A:269.2 H:245]
|
|
2064
|
+
# 0070: 2e 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [.5..............]
|
|
2065
|
+
($yr,$mon,$day,$hr,$min,$sec) = ($1,$2,$3,$4,$5,$6);
|
|
2066
|
+
$$dataPt =~ s/\0+$//; # remove trailing nulls
|
|
2067
|
+
my @a = split ' ', substr($$dataPt,43);
|
|
2068
|
+
$ddd = 1;
|
|
2069
|
+
foreach (@a) {
|
|
2070
|
+
unless (/^([A-Z]):([-+]?\d+(\.\d+)?)$/i) {
|
|
2071
|
+
# (the "km/h" after spd is display units? because the value is stored in knots)
|
|
2072
|
+
defined $lon and not defined $spd and /^\d+\.\d+$/ and $spd = $_ * $knotsToKph;
|
|
2073
|
+
next;
|
|
2074
|
+
}
|
|
2075
|
+
($1 eq 'N' or $1 eq 'S') and $lat = $2, $latRef = $1, next;
|
|
2076
|
+
($1 eq 'E' or $1 eq 'W') and $lon = $2, $lonRef = $1, next;
|
|
2077
|
+
($1 eq 'x' or $1 eq 'y' or $1 eq 'z') and push(@acc,$2), next;
|
|
2078
|
+
$1 eq 'A' and $trk = $2, next; # (verified, but why 'A'?)
|
|
2079
|
+
# seen 'H' - one might expect altitude ('H'eight), but it doesn't fit
|
|
2080
|
+
# the sample data, so save all other information as an "Unknown_X" tag
|
|
2081
|
+
$$tagTbl{$1} or AddTagToTable($tagTbl, $1, { Name => "Unknown_$1", Unknown => 1 });
|
|
2082
|
+
push(@xtra, $1 => $2), next;
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2085
|
+
} else {
|
|
2086
|
+
|
|
2087
|
+
$debug and $et->FoundTag(GPSType => 17);
|
|
2055
2088
|
# (look for binary GPS as stored by Nextbase 512G, ref PH)
|
|
2056
2089
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 01 00 00 [....freeGPS x...]
|
|
2057
2090
|
# 0010: 78 2e 78 78 00 00 00 00 00 00 00 00 00 00 00 00 [x.xx............]
|
|
@@ -2115,7 +2148,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
2115
2148
|
my $time = sprintf('%.2d:%.2d:%sZ',$hr,$min,$sec);
|
|
2116
2149
|
$et->HandleTag($tagTbl, GPSTimeStamp => $time);
|
|
2117
2150
|
}
|
|
2118
|
-
if (defined $lat) {
|
|
2151
|
+
if (defined $lat and defined $lon) {
|
|
2119
2152
|
# lat/long are in DDDMM.MMMM format unless $ddd is set
|
|
2120
2153
|
ConvertLatLon($lat, $lon) unless $ddd;
|
|
2121
2154
|
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
|
|
@@ -2680,6 +2713,53 @@ sub ProcessRIFFTrailer($$$)
|
|
|
2680
2713
|
return 1;
|
|
2681
2714
|
}
|
|
2682
2715
|
|
|
2716
|
+
#------------------------------------------------------------------------------
|
|
2717
|
+
# Process Kenwood Dashcam trailer (forum16229)
|
|
2718
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
2719
|
+
# Returns: 1 on success
|
|
2720
|
+
# Sample data (chained 512-byte records starting like this):
|
|
2721
|
+
# 0000: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 47 50 [CCCCCCCCCCCCCCGP]
|
|
2722
|
+
# 0010: 53 44 41 54 41 2d 2d 32 30 32 34 30 37 31 31 31 [SDATA--202407111]
|
|
2723
|
+
# 0020: 32 30 34 31 32 4e 35 30 2e 36 31 32 33 38 36 30 [20412N50.6123860]
|
|
2724
|
+
# 0030: 36 37 37 45 38 2e 37 30 32 37 31 38 30 39 38 39 [677E8.7027180989]
|
|
2725
|
+
# 0040: 35 33 33 2e 30 30 30 30 30 30 30 30 30 30 30 30 [533.000000000000]
|
|
2726
|
+
# 0050: 2e 30 30 30 30 30 30 30 30 30 30 30 30 30 2e 30 [.0000000000000.0]
|
|
2727
|
+
# 0060: 31 39 39 39 39 39 39 39 35 35 33 2d 30 2e 30 39 [19999999553-0.09]
|
|
2728
|
+
# 0070: 30 30 30 30 30 30 33 35 37 2d 30 2e 31 34 30 30 [000000357-0.1400]
|
|
2729
|
+
# 0080: 30 30 30 30 30 35 39 47 50 53 44 41 54 41 2d 2d [0000059GPSDATA--]
|
|
2730
|
+
sub ProcessKenwoodTrailer($$$)
|
|
2731
|
+
{
|
|
2732
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
2733
|
+
my $raf = $$dirInfo{RAF};
|
|
2734
|
+
my $buff;
|
|
2735
|
+
# current file position is 8 bytes into the 14 C's, so test the next 6:
|
|
2736
|
+
$raf->Read($buff, 14) and $buff eq 'CCCCCCCCCCCCCC' or return 0;
|
|
2737
|
+
$et->VerboseDir('Kenwood trailer', undef, undef);
|
|
2738
|
+
unless ($$et{OPTIONS}{ExtractEmbedded}) {
|
|
2739
|
+
$et->WarnOnce('Use the ExtractEmbedded option to extract timed GPSData from Kenwood trailer',3);
|
|
2740
|
+
return 1;
|
|
2741
|
+
}
|
|
2742
|
+
while ($raf->Read($buff, 121) and $buff =~ /^GPSDATA--(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/) {
|
|
2743
|
+
FoundSomething($et, $tagTbl);
|
|
2744
|
+
$et->HandleTag($tagTbl, GPSDateTime => "$1:$2:$3 $4:$5:$6");
|
|
2745
|
+
my $i = 9 + 14;
|
|
2746
|
+
my ($val, @acc, $tag);
|
|
2747
|
+
foreach $tag (qw(GPSLatitude GPSLongitude GPSSpeed unk acc acc acc)) {
|
|
2748
|
+
$val = substr($buff, $i, 14); $i += 14;
|
|
2749
|
+
next if $tag eq 'unk';
|
|
2750
|
+
my $hemi;
|
|
2751
|
+
$hemi = $1 if $val =~ s/^([NSEW])//;
|
|
2752
|
+
$val =~ /^[-+]?\d+\.\d+$/ or next;
|
|
2753
|
+
$tag eq 'acc' and push(@acc,$val), next;
|
|
2754
|
+
$val = -$val if $hemi and ($hemi eq 'S' or $hemi eq 'W');
|
|
2755
|
+
$et->HandleTag($tagTbl, $tag => $val);
|
|
2756
|
+
}
|
|
2757
|
+
$et->HandleTag($tagTbl, Accelerometer => "@acc") if @acc == 3;
|
|
2758
|
+
}
|
|
2759
|
+
delete $$et{DOC_NUM};
|
|
2760
|
+
return 1;
|
|
2761
|
+
}
|
|
2762
|
+
|
|
2683
2763
|
#------------------------------------------------------------------------------
|
|
2684
2764
|
# Process 'gps ' atom containing NMEA from Pittasoft Blackvue dashcam (ref PH)
|
|
2685
2765
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -3353,6 +3433,7 @@ sub ScanMediaData($)
|
|
|
3353
3433
|
}
|
|
3354
3434
|
my $dirInfo = { DataPt => \$buff, DataPos => $pos + $dataPos, DirLen => $len };
|
|
3355
3435
|
ProcessFreeGPS($et, $dirInfo, $tagTbl);
|
|
3436
|
+
$$et{FoundGPSByScan} = 1;
|
|
3356
3437
|
}
|
|
3357
3438
|
$pos += $len;
|
|
3358
3439
|
$buf2 = substr($buff, $len);
|
|
@@ -22,13 +22,13 @@ 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.57';
|
|
26
26
|
|
|
27
27
|
sub WriteSTMN($$$);
|
|
28
28
|
sub ProcessINFO($$$);
|
|
29
29
|
sub ProcessSamsungMeta($$$);
|
|
30
30
|
sub ProcessSamsungIFD($$$);
|
|
31
|
-
sub ProcessSamsung(
|
|
31
|
+
sub ProcessSamsung($$;$);
|
|
32
32
|
|
|
33
33
|
# Samsung LensType lookup
|
|
34
34
|
%samsungLensTypes = (
|
|
@@ -943,25 +943,25 @@ my %formatMinMax = (
|
|
|
943
943
|
);
|
|
944
944
|
|
|
945
945
|
# information extracted from Samsung trailer (ie. Samsung SM-T805 "Sound & Shot" JPEG) (ref PH)
|
|
946
|
+
# NOTE: These tags may use $$self{SamsungTagName} in a Condition statement
|
|
947
|
+
# if necessary to differentiate tags with the same ID but different names
|
|
946
948
|
%Image::ExifTool::Samsung::Trailer = (
|
|
947
949
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Other' },
|
|
948
950
|
VARS => { NO_ID => 1, HEX_ID => 0 },
|
|
949
951
|
PROCESS_PROC => \&ProcessSamsung,
|
|
952
|
+
TAG_PREFIX => 'SamsungTrailer',
|
|
950
953
|
PRIORITY => 0, # (first one takes priority so DepthMapWidth/Height match first DepthMapData)
|
|
951
954
|
NOTES => q{
|
|
952
|
-
Tags extracted from the trailer of JPEG images written when
|
|
953
|
-
features (such as "Sound & Shot" or "Shot & More") from
|
|
954
|
-
as the Galaxy S4 and Tab S, and from the 'sefd' atom in
|
|
955
|
-
|
|
956
|
-
},
|
|
957
|
-
'0x0001-name' => {
|
|
958
|
-
Name => 'EmbeddedImageName', # ("DualShot_1","DualShot_2")
|
|
959
|
-
RawConv => '$$self{EmbeddedImageName} = $val',
|
|
955
|
+
Tags extracted from the SEFT trailer of JPEG and PNG images written when
|
|
956
|
+
using certain features (such as "Sound & Shot" or "Shot & More") from
|
|
957
|
+
Samsung models such as the Galaxy S4 and Tab S, and from the 'sefd' atom in
|
|
958
|
+
HEIC images from models such as the S10+.
|
|
960
959
|
},
|
|
960
|
+
'0x0001-name' => 'EmbeddedImageName', # ("DualShot_1","DualShot_2")
|
|
961
961
|
'0x0001' => [
|
|
962
962
|
{
|
|
963
963
|
Name => 'EmbeddedImage',
|
|
964
|
-
Condition => '$$self{
|
|
964
|
+
Condition => '$$self{SamsungTagName} ne "DualShot_2"',
|
|
965
965
|
Groups => { 2 => 'Preview' },
|
|
966
966
|
Binary => 1,
|
|
967
967
|
},
|
|
@@ -1277,8 +1277,10 @@ my %formatMinMax = (
|
|
|
1277
1277
|
# 0x0bd0-name - seen 'Dual_Relighting_Bokeh_Info' #forum16086
|
|
1278
1278
|
# 0x0be0-name - seen 'Livefocus_JDM_Info' #forum16086
|
|
1279
1279
|
# 0x0bf0-name - seen 'Remaster_Info' #forum16086
|
|
1280
|
+
'0x0bf0' => 'RemasterInfo', #forum16086/16242
|
|
1280
1281
|
# 0x0c21-name - seen 'Portrait_Effect_Info' #forum16086
|
|
1281
1282
|
# 0x0c51-name - seen 'Samsung_Capture_Info' #forum16086
|
|
1283
|
+
'0x0c51' => 'SamsungCaptureInfo', #forum16086/16242
|
|
1282
1284
|
# 0x0c61-name - seen 'Camera_Capture_Mode_Info' #forum16086
|
|
1283
1285
|
# 0x0c71-name - seen 'Pro_White_Balance_Info' #forum16086
|
|
1284
1286
|
# 0x0c81-name - seen 'Watermark_Info' #forum16086
|
|
@@ -1289,7 +1291,11 @@ my %formatMinMax = (
|
|
|
1289
1291
|
# 0x0d11-name - seen 'Video_Snapshot_Info' #forum16086
|
|
1290
1292
|
# 0x0d21-name - seen 'Camera_Scene_Info' #forum16086
|
|
1291
1293
|
# 0x0d31-name - seen 'Food_Blur_Effect_Info' #forum16086
|
|
1292
|
-
|
|
1294
|
+
'0x0d91' => { #forum16086/16242
|
|
1295
|
+
Name => 'PEg_Info',
|
|
1296
|
+
Description => 'PEg Info',
|
|
1297
|
+
SubDirectory => { TagTable => 'Image::ExifTool::JSON::Main' },
|
|
1298
|
+
},
|
|
1293
1299
|
# 0x0da1-name - seen 'Captured_App_Info' #forum16086
|
|
1294
1300
|
# 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
|
|
1295
1301
|
# 0xa050 - seen 'Jpeg3602D' (Samsung Gear 360)
|
|
@@ -1563,7 +1569,7 @@ sub ProcessSamsungIFD($$$)
|
|
|
1563
1569
|
# Returns: 1 on success, 0 not valid Samsung trailer, or -1 error writing
|
|
1564
1570
|
# - updates DataPos to point to start of Samsung trailer
|
|
1565
1571
|
# - updates DirLen to existing trailer length
|
|
1566
|
-
sub ProcessSamsung(
|
|
1572
|
+
sub ProcessSamsung($$;$)
|
|
1567
1573
|
{
|
|
1568
1574
|
my ($et, $dirInfo) = @_;
|
|
1569
1575
|
my $raf = $$dirInfo{RAF};
|
|
@@ -1653,8 +1659,13 @@ SamBlock:
|
|
|
1653
1659
|
$audioSize = $size - 8 - $len;
|
|
1654
1660
|
next;
|
|
1655
1661
|
}
|
|
1656
|
-
|
|
1662
|
+
last unless $raf->Seek($dirPos-$noff, 0) and $raf->Read($buf2, $size) == $size;
|
|
1663
|
+
# (could validate the first 4 bytes of the block because they
|
|
1664
|
+
# are the same as the first 4 bytes of the directory entry)
|
|
1665
|
+
$len = Get32u(\$buf2, 4);
|
|
1666
|
+
last if $len + 8 > $size;
|
|
1657
1667
|
my $tag = sprintf("0x%.4x", $type);
|
|
1668
|
+
# add unknown tags if necessary
|
|
1658
1669
|
unless ($$tagTablePtr{$tag}) {
|
|
1659
1670
|
next unless $unknown or $verbose;
|
|
1660
1671
|
my %tagInfo = (
|
|
@@ -1673,11 +1684,8 @@ SamBlock:
|
|
|
1673
1684
|
);
|
|
1674
1685
|
AddTagToTable($tagTablePtr, "$tag-name", \%tagInfo2);
|
|
1675
1686
|
}
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
# are the same as the first 4 bytes of the directory entry)
|
|
1679
|
-
$len = Get32u(\$buf2, 4);
|
|
1680
|
-
last if $len + 8 > $size;
|
|
1687
|
+
# set SamsungTagName ExifTool member for use in tag Condition
|
|
1688
|
+
$$et{SamsungTagName} = substr($buf2, 8, $len);
|
|
1681
1689
|
# extract tag name and value
|
|
1682
1690
|
$et->HandleTag($tagTablePtr, "$tag-name", undef,
|
|
1683
1691
|
DataPt => \$buf2,
|
|
@@ -1691,6 +1699,7 @@ SamBlock:
|
|
|
1691
1699
|
Start => 8 + $len,
|
|
1692
1700
|
Size => $size - (8 + $len),
|
|
1693
1701
|
);
|
|
1702
|
+
delete $$et{SamsungTagName};
|
|
1694
1703
|
}
|
|
1695
1704
|
if ($outfile) {
|
|
1696
1705
|
last unless $raf->Seek($dataPos, 0) and $raf->Read($buff, $dirLen) == $dirLen;
|
|
@@ -997,6 +997,7 @@ my %tagLookup = (
|
|
|
997
997
|
'angleinfoyaw' => { 510 => 'AngleInfoYaw' },
|
|
998
998
|
'anti-blur' => { 451 => 0xb04b },
|
|
999
999
|
'antialiasstrength' => { 123 => 0xc632 },
|
|
1000
|
+
'antiflicker' => { 59 => 0x20 },
|
|
1000
1001
|
'aperturelock' => { 306 => '38.2', 308 => '38.2', 309 => '38.2', 318 => '38.2', 319 => '38.2', 321 => 0xb8, 322 => 0xb8, 323 => 0xb8 },
|
|
1001
1002
|
'aperturemode' => { 410 => 'apmd' },
|
|
1002
1003
|
'aperturerange' => { 88 => 0x10d },
|
|
@@ -11290,6 +11291,7 @@ my %tagExists = (
|
|
|
11290
11291
|
'peakspectralsensitivity' => 1,
|
|
11291
11292
|
'peakvalue' => 1,
|
|
11292
11293
|
'pefversion' => 1,
|
|
11294
|
+
'peg_info' => 1,
|
|
11293
11295
|
'pentax' => 1,
|
|
11294
11296
|
'pentaxdata' => 1,
|
|
11295
11297
|
'pentaxdata2' => 1,
|
|
@@ -11750,6 +11752,7 @@ my %tagExists = (
|
|
|
11750
11752
|
'releasedateyearmonth' => 1,
|
|
11751
11753
|
'releasedateyearmonthday' => 1,
|
|
11752
11754
|
'releasinginstructions' => 1,
|
|
11755
|
+
'remasterinfo' => 1,
|
|
11753
11756
|
'rembrandtconsumertonescale' => 1,
|
|
11754
11757
|
'rembrandtportraittonescale' => 1,
|
|
11755
11758
|
'rembrandttonescale' => 1,
|
|
@@ -11915,6 +11918,7 @@ my %tagExists = (
|
|
|
11915
11918
|
'sampletochunk' => 1,
|
|
11916
11919
|
'sampletogroup' => 1,
|
|
11917
11920
|
'samsung' => 1,
|
|
11921
|
+
'samsungcaptureinfo' => 1,
|
|
11918
11922
|
'samsungifd' => 1,
|
|
11919
11923
|
'samsunginfo' => 1,
|
|
11920
11924
|
'samsungmodel' => 1,
|
|
@@ -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 27895 tags, with 17462 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
|
|
@@ -10476,6 +10476,7 @@ WB tags for the Canon G9.
|
|
|
10476
10476
|
21 FocusDistanceLower int16u
|
|
10477
10477
|
23 ShutterMode int16s
|
|
10478
10478
|
25 FlashExposureLock int16s
|
|
10479
|
+
32 AntiFlicker int16s
|
|
10479
10480
|
61 RFLensType int16u
|
|
10480
10481
|
|
|
10481
10482
|
=head3 Canon SerialInfo Tags
|
|
@@ -20869,10 +20870,10 @@ Camera orientation information written by the Gear 360 (SM-C200).
|
|
|
20869
20870
|
|
|
20870
20871
|
=head3 Samsung Trailer Tags
|
|
20871
20872
|
|
|
20872
|
-
Tags extracted from the trailer of JPEG images written when
|
|
20873
|
-
features (such as "Sound & Shot" or "Shot & More") from
|
|
20874
|
-
as the Galaxy S4 and Tab S, and from the 'sefd' atom in
|
|
20875
|
-
|
|
20873
|
+
Tags extracted from the SEFT trailer of JPEG and PNG images written when
|
|
20874
|
+
using certain features (such as "Sound & Shot" or "Shot & More") from
|
|
20875
|
+
Samsung models such as the Galaxy S4 and Tab S, and from the 'sefd' atom in
|
|
20876
|
+
HEIC images from models such as the S10+.
|
|
20876
20877
|
|
|
20877
20878
|
Tag Name Writable
|
|
20878
20879
|
-------- --------
|
|
@@ -20890,6 +20891,9 @@ Samsung S10+.
|
|
|
20890
20891
|
EmbeddedVideoFile no
|
|
20891
20892
|
EmbeddedVideoType no
|
|
20892
20893
|
MCCData no
|
|
20894
|
+
PEg_Info JSON
|
|
20895
|
+
RemasterInfo no
|
|
20896
|
+
SamsungCaptureInfo no
|
|
20893
20897
|
SingleShotDepthMap no
|
|
20894
20898
|
SingleShotMeta Samsung SingleShotMeta
|
|
20895
20899
|
SurroundShotVideo no
|
|
@@ -29614,7 +29618,7 @@ for the official QuickTime specification.
|
|
|
29614
29618
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
29615
29619
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
29616
29620
|
most of these tags are combined into the single table below, ExifTool
|
|
29617
|
-
currently reads
|
|
29621
|
+
currently reads 76 different formats of timed GPS metadata from video files.
|
|
29618
29622
|
|
|
29619
29623
|
Tag Name Writable
|
|
29620
29624
|
-------- --------
|
|
@@ -536,7 +536,7 @@ sub WriteItemInfo($$$)
|
|
|
536
536
|
my $comp = $et->Options('Compress');
|
|
537
537
|
if (defined $comp and ($comp xor $$item{ContentEncoding})) {
|
|
538
538
|
#TODO: add ability to edit infe entry in iinf to change encoding according to Compress option if set
|
|
539
|
-
$et->Warn("Can't currently change compression when rewriting $name in HEIC");
|
|
539
|
+
$et->Warn("Can't currently change compression when rewriting $name in HEIC",1);
|
|
540
540
|
}
|
|
541
541
|
my $wasDeflated;
|
|
542
542
|
if ($$item{ContentEncoding}) {
|
|
@@ -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.91';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|