exiftool_vendored 13.40.0 → 13.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.
- checksums.yaml +4 -4
- data/bin/Changes +35 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +134 -102
- data/bin/lib/Image/ExifTool/Canon.pm +19 -13
- data/bin/lib/Image/ExifTool/Exif.pm +11 -6
- data/bin/lib/Image/ExifTool/Font.pm +3 -4
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -1
- data/bin/lib/Image/ExifTool/JSON.pm +7 -6
- data/bin/lib/Image/ExifTool/LNK.pm +15 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +22 -2
- data/bin/lib/Image/ExifTool/Red.pm +19 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +127 -4
- data/bin/lib/Image/ExifTool/Sony.pm +4 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +70 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +127 -5
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -1
- data/bin/lib/Image/ExifTool.pm +18 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +1 -1
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.61';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -6191,10 +6191,15 @@ sub ProcessExif($$$)
|
|
|
6191
6191
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
|
6192
6192
|
|
|
6193
6193
|
# warn for incorrect maker notes in CR3 files
|
|
6194
|
-
if (
|
|
6195
|
-
$$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
|
|
6196
|
-
|
|
6197
|
-
|
|
6194
|
+
if ($dirName eq 'MakerNotes') {
|
|
6195
|
+
if ($$et{FileType} eq 'CR3' and $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD') {
|
|
6196
|
+
$et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
|
|
6197
|
+
}
|
|
6198
|
+
if ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{MakerNotes} and
|
|
6199
|
+
$$et{ExifByteOrder} and $$et{ExifByteOrder} ne GetByteOrder())
|
|
6200
|
+
{
|
|
6201
|
+
$et->FoundTag(MakerNoteByteOrder => GetByteOrder());
|
|
6202
|
+
}
|
|
6198
6203
|
}
|
|
6199
6204
|
# set flag to calculate image data hash if requested
|
|
6200
6205
|
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
|
@@ -6281,7 +6286,7 @@ sub ProcessExif($$$)
|
|
|
6281
6286
|
$dirSize = 2 + 12 * $numEntries;
|
|
6282
6287
|
$dirEnd = $dirStart + $dirSize;
|
|
6283
6288
|
}
|
|
6284
|
-
$verbose > 0 and $et->VerboseDir($dirName, $numEntries);
|
|
6289
|
+
$verbose > 0 and $et->VerboseDir($dirName, $numEntries, undef, GetByteOrder());
|
|
6285
6290
|
my $bytesFromEnd = $dataLen - $dirEnd;
|
|
6286
6291
|
if ($bytesFromEnd < 4) {
|
|
6287
6292
|
unless ($bytesFromEnd==2 or $bytesFromEnd==0) {
|
|
@@ -184,7 +184,7 @@ my %ttCharset = (
|
|
|
184
184
|
Custom => { },
|
|
185
185
|
);
|
|
186
186
|
|
|
187
|
-
#
|
|
187
|
+
# the 63 known WOFF2 tags
|
|
188
188
|
my @knownTags = (
|
|
189
189
|
'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt',
|
|
190
190
|
'fpgm', 'glyf', 'loca', 'prep', 'CFF', 'VORG', 'EBDT', 'EBLC', 'gasp',
|
|
@@ -891,9 +891,8 @@ This module is used by Image::ExifTool
|
|
|
891
891
|
|
|
892
892
|
This module contains the routines required by Image::ExifTool to read meta
|
|
893
893
|
information from various format font files. Currently recognized font file
|
|
894
|
-
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM
|
|
895
|
-
|
|
896
|
-
extracted from these formats.
|
|
894
|
+
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM, AMFM, WOFF and
|
|
895
|
+
WOFF2.
|
|
897
896
|
|
|
898
897
|
=head1 AUTHOR
|
|
899
898
|
|
|
@@ -26,7 +26,7 @@ use strict;
|
|
|
26
26
|
use vars qw($VERSION);
|
|
27
27
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
28
28
|
|
|
29
|
-
$VERSION = '1.
|
|
29
|
+
$VERSION = '1.42';
|
|
30
30
|
|
|
31
31
|
sub ProcessICC($$);
|
|
32
32
|
sub ProcessICC_Profile($$$);
|
|
@@ -330,6 +330,7 @@ my %manuSig = ( #6
|
|
|
330
330
|
'WTG2' => 'Ware To Go',
|
|
331
331
|
'WYSE' => 'WYSE Technology',
|
|
332
332
|
'XERX' => 'Xerox Corporation',
|
|
333
|
+
'XM ' => 'Xiaomi',
|
|
333
334
|
'XRIT' => 'X-Rite',
|
|
334
335
|
'yxym' => 'YxyMaster GmbH',
|
|
335
336
|
'Z123' => "Lavanya's test Company",
|
|
@@ -14,9 +14,9 @@ use vars qw($VERSION);
|
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
15
15
|
use Image::ExifTool::Import;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.11';
|
|
18
18
|
|
|
19
|
-
sub ProcessJSON(
|
|
19
|
+
sub ProcessJSON($$;$);
|
|
20
20
|
sub ProcessTag($$$$%);
|
|
21
21
|
|
|
22
22
|
%Image::ExifTool::JSON::Main = (
|
|
@@ -71,6 +71,7 @@ sub FoundTag($$$$%)
|
|
|
71
71
|
$name = Image::ExifTool::MakeTagName($name);
|
|
72
72
|
my $desc = Image::ExifTool::MakeDescription($name);
|
|
73
73
|
$desc =~ s/^C2 PA/C2PA/; # hack to get "C2PA" correct
|
|
74
|
+
$et->VPrint(0, $$et{INDENT}, "[adding $tag]\n");
|
|
74
75
|
AddTagToTable($tagTablePtr, $tag, {
|
|
75
76
|
Name => $name,
|
|
76
77
|
Description => $desc,
|
|
@@ -112,12 +113,12 @@ sub ProcessTag($$$$%)
|
|
|
112
113
|
|
|
113
114
|
#------------------------------------------------------------------------------
|
|
114
115
|
# Extract meta information from a JSON file
|
|
115
|
-
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
116
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref
|
|
116
117
|
# Returns: 1 on success, 0 if this wasn't a recognized JSON file
|
|
117
|
-
sub ProcessJSON(
|
|
118
|
+
sub ProcessJSON($$;$)
|
|
118
119
|
{
|
|
119
120
|
local $_;
|
|
120
|
-
my ($et, $dirInfo) = @_;
|
|
121
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
121
122
|
my $raf = $$dirInfo{RAF};
|
|
122
123
|
my $structOpt = $et->Options('Struct');
|
|
123
124
|
my (%database, $key, $tag, $dataPt);
|
|
@@ -149,7 +150,7 @@ sub ProcessJSON($$)
|
|
|
149
150
|
|
|
150
151
|
$et->SetFileType() unless $dataPt;
|
|
151
152
|
|
|
152
|
-
|
|
153
|
+
$tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::JSON::Main');
|
|
153
154
|
|
|
154
155
|
# remove any old tag definitions in case they change flags
|
|
155
156
|
foreach $key (TagTableKeys($tagTablePtr)) {
|
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
use Image::ExifTool::Microsoft;
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.13';
|
|
22
22
|
|
|
23
23
|
sub ProcessItemID($$$);
|
|
24
24
|
sub ProcessLinkInfo($$$);
|
|
@@ -191,7 +191,7 @@ sub ProcessLinkInfo($$$);
|
|
|
191
191
|
},
|
|
192
192
|
0xa0000001 => {
|
|
193
193
|
Name => 'EnvVarData',
|
|
194
|
-
SubDirectory => { TagTable => 'Image::ExifTool::LNK::
|
|
194
|
+
SubDirectory => { TagTable => 'Image::ExifTool::LNK::EnvVarData' },
|
|
195
195
|
},
|
|
196
196
|
0xa0000002 => {
|
|
197
197
|
Name => 'ConsoleData',
|
|
@@ -448,6 +448,19 @@ sub ProcessLinkInfo($$$);
|
|
|
448
448
|
},
|
|
449
449
|
);
|
|
450
450
|
|
|
451
|
+
%Image::ExifTool::LNK::EnvVarData = (
|
|
452
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
453
|
+
GROUPS => { 2 => 'Other' },
|
|
454
|
+
8 => {
|
|
455
|
+
Name => 'EnvironmentTarget',
|
|
456
|
+
Format => 'string[260]',
|
|
457
|
+
},
|
|
458
|
+
268 => {
|
|
459
|
+
Name => 'EnvironmentTargetUnicode',
|
|
460
|
+
Format => 'unicode[260]',
|
|
461
|
+
},
|
|
462
|
+
);
|
|
463
|
+
|
|
451
464
|
%Image::ExifTool::LNK::INI = (
|
|
452
465
|
GROUPS => { 2 => 'Document' },
|
|
453
466
|
VARS => { ID_FMT => 'none' },
|
|
@@ -42,7 +42,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
42
42
|
use Image::ExifTool::Exif;
|
|
43
43
|
use Image::ExifTool::APP12;
|
|
44
44
|
|
|
45
|
-
$VERSION = '2.
|
|
45
|
+
$VERSION = '2.93';
|
|
46
46
|
|
|
47
47
|
sub PrintLensInfo($$$);
|
|
48
48
|
|
|
@@ -201,8 +201,9 @@ my %olympusLensTypes = (
|
|
|
201
201
|
# '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
|
|
202
202
|
# Other makes
|
|
203
203
|
'24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
|
|
204
|
-
'
|
|
205
|
-
'
|
|
204
|
+
'247 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
|
|
205
|
+
'247 10 10' => 'LAOWA C&D-Dreamer MFT 6.0mm F2.0', #KG
|
|
206
|
+
'65522 02 10' => 'Xiaoyi 42.5mm F1.8', #github363
|
|
206
207
|
);
|
|
207
208
|
|
|
208
209
|
# lookup for Olympus camera types (ref PH)
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.23';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -578,11 +578,29 @@ my %userDefined = (
|
|
|
578
578
|
return substr($val, 8, $len-8);
|
|
579
579
|
},
|
|
580
580
|
Binary => 1,
|
|
581
|
+
},{
|
|
582
|
+
Name => 'HighlightMarkers',
|
|
583
|
+
# (DJI Action 4, forum17700)
|
|
584
|
+
Notes => 'written by some DJI models',
|
|
585
|
+
Condition => '$$valPt =~ /^data.{4}hglg.{5}/s',
|
|
586
|
+
RawConv => q{
|
|
587
|
+
my $len = unpack 'x4N', $val;
|
|
588
|
+
return undef if $len < 13 or $len + 4 > length($val);
|
|
589
|
+
my $n = int(($len - 13) / 5);
|
|
590
|
+
my @a = map $_/1000, unpack "x17(xV)$n", $val;
|
|
591
|
+
return \@a;
|
|
592
|
+
},
|
|
581
593
|
},{
|
|
582
594
|
Unknown => 1,
|
|
583
595
|
Binary => 1,
|
|
584
596
|
},
|
|
585
|
-
#
|
|
597
|
+
# DJI videos also have block of offset/size of various atoms, eg)
|
|
598
|
+
# Atom name ???? Offset Size
|
|
599
|
+
# 0000: 63 6f 76 72 00 00 00 00 00 ed 6f da 00 0a 46 e0 [covr......o...F.]
|
|
600
|
+
# 0010: 73 6e 61 6c 00 00 00 00 00 f7 b6 d2 00 0a 46 e0 [snal..........F.]
|
|
601
|
+
# 0020: 68 67 6c 67 00 00 00 00 01 02 0a a2 00 00 00 21 [hglg...........!]
|
|
602
|
+
# 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
603
|
+
# (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
|
|
586
604
|
],
|
|
587
605
|
# fre1 - 4 bytes: "june" (Kodak PixPro SP360)
|
|
588
606
|
frea => {
|
|
@@ -2815,6 +2833,7 @@ my %userDefined = (
|
|
|
2815
2833
|
'xml ' => {
|
|
2816
2834
|
Name => 'XML',
|
|
2817
2835
|
Flags => [ 'Binary', 'Protected' ],
|
|
2836
|
+
BlockExtract => 1,
|
|
2818
2837
|
SubDirectory => {
|
|
2819
2838
|
TagTable => 'Image::ExifTool::XMP::XML',
|
|
2820
2839
|
IgnoreProp => { NonRealTimeMeta => 1 }, # ignore container for Sony 'nrtm'
|
|
@@ -2865,6 +2884,7 @@ my %userDefined = (
|
|
|
2865
2884
|
},
|
|
2866
2885
|
idat => {
|
|
2867
2886
|
Name => 'MetaImageSize', #PH (NC)
|
|
2887
|
+
Condition => '$$self{FileType} eq "HEIC"',
|
|
2868
2888
|
Format => 'int16u',
|
|
2869
2889
|
# (don't know what the first two numbers are for)
|
|
2870
2890
|
PrintConv => '$val =~ s/^(\d+) (\d+) (\d+) (\d+)/${3}x$4/; $val',
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.02';
|
|
18
18
|
|
|
19
19
|
sub ProcessR3D($$);
|
|
20
20
|
|
|
@@ -45,7 +45,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
45
45
|
RED2 => { Name => 'Red2Header', SubDirectory => { TagTable => 'Image::ExifTool::Red::RED2' } },
|
|
46
46
|
|
|
47
47
|
# (upper 4 bits of tag ID are the format code)
|
|
48
|
-
# ---- format
|
|
48
|
+
# ---- format 0 (int8u) ----
|
|
49
|
+
# ---- format 1 (string) ----
|
|
49
50
|
0x1000 => 'StartEdgeCode', #1
|
|
50
51
|
0x1001 => { Name => 'StartTimecode', Groups => { 2 => 'Time' } }, #1
|
|
51
52
|
0x1002 => { #1
|
|
@@ -104,6 +105,7 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
104
105
|
# 0x1041 - seen 'NA'
|
|
105
106
|
0x1042 => 'Revision', # ? (seen "TODO, rev EPIC-1.0" and "MYSTERIUM X, rev EPIC-1.0")
|
|
106
107
|
# 0x1051 - seen 'C', 'L'
|
|
108
|
+
# 0x1052 - seen 'E9'
|
|
107
109
|
0x1056 => 'OriginalFileName',
|
|
108
110
|
0x106e => 'LensMake',
|
|
109
111
|
0x106f => 'LensNumber', # (last 2 hex digits are LensType)
|
|
@@ -120,7 +122,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
120
122
|
0x1096 => 'Filter', # optical low-pass filter
|
|
121
123
|
0x10a0 => 'Brain',
|
|
122
124
|
0x10a1 => 'Sensor',
|
|
123
|
-
|
|
125
|
+
0x10be => 'Quality',
|
|
126
|
+
# ---- format 2 (float) ----
|
|
124
127
|
0x200d => 'ColorTemperature',
|
|
125
128
|
# 0x200e - (sometimes this is frame rate)
|
|
126
129
|
# 0x2015 - seen '1 1 1' (RGBGain or RGBGamma?)
|
|
@@ -130,7 +133,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
130
133
|
Groups => { 2 => 'Video' },
|
|
131
134
|
PrintConv => 'int($val * 1000 + 0.5) / 1000',
|
|
132
135
|
},
|
|
133
|
-
# ---- format
|
|
136
|
+
# ---- format 3 (int8u?) ----
|
|
137
|
+
# ---- format 4 (int16u) ----
|
|
134
138
|
0x4037 => { Name => 'CropArea' }, # (NC)
|
|
135
139
|
0x403b => 'ISO',
|
|
136
140
|
# 0x404e - related to CropArea (or "0 0 0 0")
|
|
@@ -138,8 +142,12 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
138
142
|
0x406b => 'FocalLength',
|
|
139
143
|
# 0x4084 - related to ISO?
|
|
140
144
|
# 0x4087 - related to ISO?
|
|
141
|
-
# ---- format
|
|
145
|
+
# ---- format 5 (int8s?) ----
|
|
146
|
+
# ---- format 6 (int32s) ----
|
|
142
147
|
0x606c => { Name => 'FocusDistance', ValueConv => '$val/1000', PrintConv => '"$val m"' },
|
|
148
|
+
# ---- format 7 (undef? structure?) ----
|
|
149
|
+
# ---- format 8 (int32u?) ----
|
|
150
|
+
# ---- format 9 (undef?) ----
|
|
143
151
|
);
|
|
144
152
|
|
|
145
153
|
# RED1 file header (ref PH)
|
|
@@ -240,9 +248,11 @@ sub ProcessR3D($$)
|
|
|
240
248
|
$pos = 0x22; # directory starts at offset 0x22
|
|
241
249
|
} else {
|
|
242
250
|
# calculate position of Red directory start
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
$pos
|
|
251
|
+
$pos = 0x44;
|
|
252
|
+
length($buff) < $pos and return $et->Warn($errTrunc);
|
|
253
|
+
$pos += Get8u(\$buff, 0x40) * 0x18; # skip "rdi" records
|
|
254
|
+
$pos += Get8u(\$buff, 0x41) * 0x14; # skip "rda" records
|
|
255
|
+
$pos += Get8u(\$buff, 0x42) * 0x10; # skip "rdx" records
|
|
246
256
|
}
|
|
247
257
|
if ($pos + 8 > length $buff) {
|
|
248
258
|
$dirLen = 0; # find directory the hard way
|
|
@@ -253,7 +263,7 @@ sub ProcessR3D($$)
|
|
|
253
263
|
# do sanity check on the directory size (in case our assumptions were wrong)
|
|
254
264
|
if ($dirLen < 300 or $dirLen >= 2048 or $pos + $dirLen > length $buff) {
|
|
255
265
|
# tag 0x1000 with length 0x000f should be near the directory start
|
|
256
|
-
$buff =~ /\0\x0f\x10\0/g or return $et->Warn("Can't find Red directory");
|
|
266
|
+
$buff =~ /\0\x0f\x10[\0\x06]/g or return $et->Warn("Can't find Red directory. Please submit sample for testing");
|
|
257
267
|
$pos = pos($buff) - 4;
|
|
258
268
|
$dirEnd = length $buff;
|
|
259
269
|
undef $dirLen;
|
|
@@ -21,8 +21,9 @@ use strict;
|
|
|
21
21
|
use vars qw($VERSION %samsungLensTypes);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
use Image::ExifTool::Exif;
|
|
24
|
+
use Image::ExifTool::JSON;
|
|
24
25
|
|
|
25
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.59';
|
|
26
27
|
|
|
27
28
|
sub WriteSTMN($$$);
|
|
28
29
|
sub ProcessINFO($$$);
|
|
@@ -1277,7 +1278,15 @@ my %formatMinMax = (
|
|
|
1277
1278
|
# 0x0b51-name - seen 'Intelligent_PhotoEditor_Data' #forum16086
|
|
1278
1279
|
# 0x0b60-name - seen 'UltraWide_PhotoEditor_Data' #forum16086
|
|
1279
1280
|
# 0x0b90-name - seen 'Document_Scan_Info' #forum16086
|
|
1280
|
-
# 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data', 'deco_doodle_bitmap', 'deco_sticker_bitmap', 'deco_text_bitmap'
|
|
1281
|
+
# 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data', 'deco_doodle_bitmap', 'deco_sticker_bitmap', 'deco_text_bitmap','PhotoEditor_Re_Edit_Data'
|
|
1282
|
+
'0x0ba1' => [{
|
|
1283
|
+
Name => 'ReEditData',
|
|
1284
|
+
Condition => '$$self{SamsungTagName} eq "PhotoEditor_Re_Edit_Data"',
|
|
1285
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ReEditData' },
|
|
1286
|
+
},{
|
|
1287
|
+
Name => 'OriginalPathHashKey',
|
|
1288
|
+
Condition => '$$self{SamsungTagName} eq "Original_Path_Hash_Key"',
|
|
1289
|
+
}],
|
|
1281
1290
|
# 0x0ba2-name - seen 'Copy_Available_Edit_Info' #forum16086
|
|
1282
1291
|
# 0x0bc0-name - seen 'Single_Relighting_Bokeh_Info' #forum16086
|
|
1283
1292
|
# 0x0bd0-name - seen 'Dual_Relighting_Bokeh_Info' #forum16086
|
|
@@ -1300,7 +1309,7 @@ my %formatMinMax = (
|
|
|
1300
1309
|
'0x0d91' => { #forum16086/16242
|
|
1301
1310
|
Name => 'PEg_Info',
|
|
1302
1311
|
Description => 'PEg Info',
|
|
1303
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
|
1312
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PEgInfo' },
|
|
1304
1313
|
},
|
|
1305
1314
|
# 0x0da1-name - seen 'Captured_App_Info' #forum16086
|
|
1306
1315
|
# 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
|
|
@@ -1380,6 +1389,113 @@ my %formatMinMax = (
|
|
|
1380
1389
|
perfMode => { },
|
|
1381
1390
|
);
|
|
1382
1391
|
|
|
1392
|
+
%Image::ExifTool::Samsung::ReEditData = (
|
|
1393
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1394
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1395
|
+
VARS => { LONG_TAGS => 2 },
|
|
1396
|
+
originalPath => { },
|
|
1397
|
+
representativeFrameLoc => { },
|
|
1398
|
+
startMotionVideo => { },
|
|
1399
|
+
endMotionVideo => { },
|
|
1400
|
+
isMotionVideoMute => { },
|
|
1401
|
+
isTrimMotionVideo => { },
|
|
1402
|
+
clipInfoValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ClipInfo' } },
|
|
1403
|
+
toneValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ToneInfo' } },
|
|
1404
|
+
effectValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::EffectInfo' } },
|
|
1405
|
+
portraitEffectValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PortraitEffect' } },
|
|
1406
|
+
isBlending => { },
|
|
1407
|
+
isNotReEdit => { },
|
|
1408
|
+
sepVersion => { Name => 'SEPVersion' },
|
|
1409
|
+
ndeVersion => { Name => 'NDEVersion' },
|
|
1410
|
+
reSize => { },
|
|
1411
|
+
isScaleAI => { },
|
|
1412
|
+
rotation => { },
|
|
1413
|
+
adjustmentValue => { },
|
|
1414
|
+
isApplyShapeCorrection => { },
|
|
1415
|
+
isNewReEditOnly => { },
|
|
1416
|
+
isDecoReEditOnly => { },
|
|
1417
|
+
isAIFilterReEditOnly=> { },
|
|
1418
|
+
);
|
|
1419
|
+
|
|
1420
|
+
%Image::ExifTool::Samsung::ClipInfo = (
|
|
1421
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1422
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1423
|
+
mCenterX => { Name => 'ClipCenterX' },
|
|
1424
|
+
mCenterY => { Name => 'ClipCenterY' },
|
|
1425
|
+
mWidth => { Name => 'ClipWidth' },
|
|
1426
|
+
mHeight => { Name => 'ClipHeight' },
|
|
1427
|
+
mRotation => { Name => 'ClipRotation' },
|
|
1428
|
+
mRotate => { Name => 'ClipRotate' },
|
|
1429
|
+
mHFlip => { Name => 'ClipHFlip' },
|
|
1430
|
+
mVFlip => { Name => 'ClipVFlip' },
|
|
1431
|
+
mRotationEffect => { Name => 'ClipRotationEffect' },
|
|
1432
|
+
mRotateEffect => { Name => 'ClipRotateEffect' },
|
|
1433
|
+
mHFlipEffect => { Name => 'ClipHFlipEffect' },
|
|
1434
|
+
mVFlipEffect => { Name => 'ClipVFlipEffect' },
|
|
1435
|
+
mHozPerspective => { Name => 'ClipHozPerspective' },
|
|
1436
|
+
mVerPerspective => { Name => 'ClipVerPerspective' },
|
|
1437
|
+
);
|
|
1438
|
+
|
|
1439
|
+
%Image::ExifTool::Samsung::ToneInfo = (
|
|
1440
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1441
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1442
|
+
brightness => { },
|
|
1443
|
+
exposure => { },
|
|
1444
|
+
contrast => { },
|
|
1445
|
+
saturation => { },
|
|
1446
|
+
hue => { },
|
|
1447
|
+
wbMode => { Name => 'WBMode' },
|
|
1448
|
+
wbTemperature => { Name => 'WBTemperature' },
|
|
1449
|
+
tint => { },
|
|
1450
|
+
shadow => { },
|
|
1451
|
+
highlight => { },
|
|
1452
|
+
lightbalance => { },
|
|
1453
|
+
sharpness => { },
|
|
1454
|
+
definition => { },
|
|
1455
|
+
isBrightnessIPE => { },
|
|
1456
|
+
isExposureIPE => { },
|
|
1457
|
+
isContrastIPE => { },
|
|
1458
|
+
isSaturationIPE => { },
|
|
1459
|
+
);
|
|
1460
|
+
|
|
1461
|
+
%Image::ExifTool::Samsung::EffectInfo = (
|
|
1462
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1463
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1464
|
+
filterIndication=> { },
|
|
1465
|
+
alphaValue => { },
|
|
1466
|
+
filterType => { },
|
|
1467
|
+
);
|
|
1468
|
+
|
|
1469
|
+
%Image::ExifTool::Samsung::PortraitEffect = (
|
|
1470
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1471
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1472
|
+
VARS => { LONG_TAGS => 1 },
|
|
1473
|
+
effectId => { Name => 'PortraitEffectID' },
|
|
1474
|
+
effectLevel => { Name => 'PortraitEffectLevel' },
|
|
1475
|
+
exifRotation => { Name => 'PortraitExifRotation' },
|
|
1476
|
+
lightLevel => { Name => 'PortraitLightLevel' },
|
|
1477
|
+
touchX => { Name => 'PortraitTouchX' },
|
|
1478
|
+
touchY => { Name => 'PortraitTouchY' },
|
|
1479
|
+
refocusX => { Name => 'PortraitRefocusX' },
|
|
1480
|
+
refocusY => { Name => 'PortraitRefocusY' },
|
|
1481
|
+
effectIdOriginal => { Name => 'PortraitEffectIDOriginal' },
|
|
1482
|
+
effectLevelOriginal => { Name => 'EffectLevelOriginal' },
|
|
1483
|
+
lightLevelOriginal => { Name => 'LightLevelOriginal' },
|
|
1484
|
+
touchXOriginal => { },
|
|
1485
|
+
touchYOriginal => { },
|
|
1486
|
+
refocusXOriginal=> { },
|
|
1487
|
+
refocusYOriginal=> { },
|
|
1488
|
+
waterMarkRemoved=> { Name => 'WaterMarkRemoved' },
|
|
1489
|
+
waterMarkRemovedOriginal => { Name => 'WaterMarkRemovedOriginal' },
|
|
1490
|
+
);
|
|
1491
|
+
|
|
1492
|
+
%Image::ExifTool::Samsung::PEgInfo = (
|
|
1493
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1494
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1495
|
+
genImageVersion => { },
|
|
1496
|
+
connectorType => { },
|
|
1497
|
+
);
|
|
1498
|
+
|
|
1383
1499
|
# Samsung composite tags
|
|
1384
1500
|
%Image::ExifTool::Samsung::Composite = (
|
|
1385
1501
|
GROUPS => { 2 => 'Image' },
|
|
@@ -1625,7 +1741,14 @@ SamBlock:
|
|
|
1625
1741
|
}
|
|
1626
1742
|
next;
|
|
1627
1743
|
}
|
|
1628
|
-
|
|
1744
|
+
# validate SEFH header
|
|
1745
|
+
unless ($buff =~ /^SEFH/ and $len >= 12) {
|
|
1746
|
+
# tolerate extra junk written by Samsung Gallery
|
|
1747
|
+
last unless $buff =~ /\0\0SEFT/g;
|
|
1748
|
+
$et->Warn('Trailer likely corrupted by Samsung Gallery');
|
|
1749
|
+
$blockEnd += pos($buff);
|
|
1750
|
+
next;
|
|
1751
|
+
}
|
|
1629
1752
|
my $dirPos = $raf->Tell() - $len;
|
|
1630
1753
|
# my $ver = Get32u(\$buff, 0x04); # version (=101)
|
|
1631
1754
|
my $count = Get32u(\$buff, 0x08);
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.80';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -10656,7 +10656,7 @@ my %isoSetting2010 = (
|
|
|
10656
10656
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1,2
|
|
10657
10657
|
0x8104 => { Name => 'Sony_rtmd_0x8104', Format => 'int16u', %hidUnk }, # seen: 35616
|
|
10658
10658
|
0x8105 => { Name => 'Sony_rtmd_0x8105', Format => 'int16u', %hidUnk }, # seen: 20092
|
|
10659
|
-
0x8106 => { Name => '
|
|
10659
|
+
0x8106 => { Name => 'FrameRate', Format => 'rational64u', PrintConv => 'sprintf("%.2f",$val)' },
|
|
10660
10660
|
0x8109 => { #forum12218
|
|
10661
10661
|
Name => 'ExposureTime',
|
|
10662
10662
|
Format => 'rational64u',
|
|
@@ -10674,7 +10674,9 @@ my %isoSetting2010 = (
|
|
|
10674
10674
|
Format => 'int16u',
|
|
10675
10675
|
},
|
|
10676
10676
|
0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 0,1
|
|
10677
|
+
0x8114 => { Name => 'SerialNumber', Format => 'string' }, # (and model, eg. "ILCE-7SM3 5072108")
|
|
10677
10678
|
0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100 - ISO
|
|
10679
|
+
# 0x8119 - seen "P" (same as 0x811e?)
|
|
10678
10680
|
# 0x8300 - container for other tags in this format
|
|
10679
10681
|
0x8500 => {
|
|
10680
10682
|
Name => 'GPSVersionID',
|