exiftool_vendored 11.86.0 → 11.88.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +38 -16
- data/bin/MANIFEST +3 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +34 -33
- data/bin/config_files/acdsee.config +1 -3
- data/bin/config_files/depthmap.config +56 -0
- data/bin/config_files/example.config +2 -0
- data/bin/config_files/gps2utm.config +1 -1
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +56 -39
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +32 -7
- data/bin/lib/Image/ExifTool.pod +53 -52
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +3 -3
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +5 -5
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +2 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +23 -7
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -2
- data/bin/lib/Image/ExifTool/PDF.pm +2 -2
- data/bin/lib/Image/ExifTool/PNG.pm +10 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +9 -4
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +51 -51
- data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +1725 -1617
- data/bin/lib/Image/ExifTool/TagNames.pod +307 -9
- data/bin/lib/Image/ExifTool/Text.pm +59 -10
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +27 -12
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +25 -7
- data/bin/lib/Image/ExifTool/XMP.pm +6 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +213 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +30 -30
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -466,7 +466,7 @@ Block:
|
|
466
466
|
} elsif ($a == 0xf9 and $length == 4) { # graphic control extension
|
467
467
|
|
468
468
|
last unless $raf->Read($buff, $length) == $length;
|
469
|
-
# sum the
|
469
|
+
# sum the individual delay times
|
470
470
|
my $delay = Get16u(\$buff, 1);
|
471
471
|
$delayTime += $delay;
|
472
472
|
$verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100;
|
@@ -603,7 +603,7 @@ my %epsg_vertcs = (
|
|
603
603
|
20499 => 'Ain el Abd Bahrain Grid',
|
604
604
|
20538 => 'Afgooye UTM zone 38N',
|
605
605
|
20539 => 'Afgooye UTM zone 39N',
|
606
|
-
20700 => 'Lisbon
|
606
|
+
20700 => 'Lisbon Portuguese Grid',
|
607
607
|
20822 => 'Aratu UTM zone 22S',
|
608
608
|
20823 => 'Aratu UTM zone 23S',
|
609
609
|
20824 => 'Aratu UTM zone 24S',
|
@@ -61,7 +61,7 @@ my %manuSig = ( #6
|
|
61
61
|
'AAMA' => 'Aamazing Technologies, Inc.',
|
62
62
|
'ACER' => 'Acer Peripherals',
|
63
63
|
'ACLT' => 'Acolyte Color Research',
|
64
|
-
'ACTI' => 'Actix
|
64
|
+
'ACTI' => 'Actix Systems, Inc.',
|
65
65
|
'ADAR' => 'Adara Technology, Inc.',
|
66
66
|
'ADBE' => 'Adobe Systems Inc.',
|
67
67
|
'ADI ' => 'ADI Systems, Inc.',
|
@@ -283,7 +283,7 @@ my %PrintConv = ( #JD
|
|
283
283
|
'42bfe52476bf07f1ed0e6451903cc9ee:111111' => 'Adobe Lightroom, Quality 85% - 92%',
|
284
284
|
'4c3c425b4024b68c0de03904a825bc35:111111' => 'Adobe Lightroom, Quality 93% - 100%',
|
285
285
|
|
286
|
-
# Tested with Adobe Photoshop CS2 Version 9.0.2 (Win) - "Save as..." (RGB/
|
286
|
+
# Tested with Adobe Photoshop CS2 Version 9.0.2 (Win) - "Save as..." (RGB/CMYK)
|
287
287
|
'683506a889c78d9bc230a0c7ee5f62f3:221111' => 'Adobe Photoshop, Quality 0',
|
288
288
|
'bc490651af6592cd1dbbbc4fa2cfa1fb:221111' => 'Adobe Photoshop, Quality 1',
|
289
289
|
'ce4286d9f07999524c3c7472b065c5ab:221111' => 'Adobe Photoshop, Quality 2',
|
@@ -1339,7 +1339,7 @@ sub WriteMIEGroup($$$)
|
|
1339
1339
|
$extLen = Set32u($len);
|
1340
1340
|
$len = 254;
|
1341
1341
|
} else {
|
1342
|
-
$et->Warn("Can't write $newTag (DataLength > 2GB not yet
|
1342
|
+
$et->Warn("Can't write $newTag (DataLength > 2GB not yet supported)");
|
1343
1343
|
last; # don't write this tag
|
1344
1344
|
}
|
1345
1345
|
# write this element (with leading MIE group element if not done already)
|
@@ -1838,7 +1838,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1838
1838
|
},
|
1839
1839
|
);
|
1840
1840
|
|
1841
|
-
# Image stabilization
|
1841
|
+
# Image stabilization information used by the Sony DSLR-A100 (ref 20)
|
1842
1842
|
%Image::ExifTool::Minolta::ISInfoA100 = (
|
1843
1843
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
1844
1844
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
@@ -3524,7 +3524,7 @@ my %binaryDataAttrs = (
|
|
3524
3524
|
Name => 'AFPointsUsed',
|
3525
3525
|
Condition => '$$self{PhaseDetectAF} == 5',
|
3526
3526
|
Notes => q{
|
3527
|
-
newer models with 135-point AF -- 9 rows (B-J) and 15
|
3527
|
+
newer models with 135-point AF -- 9 rows (B-J) and 15 columns (1-15). Center
|
3528
3528
|
point is F8
|
3529
3529
|
},
|
3530
3530
|
Format => 'undef[21]',
|
@@ -6950,8 +6950,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
6950
6950
|
},
|
6951
6951
|
},
|
6952
6952
|
49.1 => { # CSa9
|
6953
|
-
Name => 'LimitAFAreaModeSelection', #note that 'Dynamic area (9 points)' can be selected from the camera menu but the setting is not
|
6954
|
-
Mask => 0x7e, #...This AF Mode was
|
6953
|
+
Name => 'LimitAFAreaModeSelection', #note that 'Dynamic area (9 points)' can be selected from the camera menu but the setting is not written to the EXIF data.
|
6954
|
+
Mask => 0x7e, #...This AF Mode was added to the D5 firmware several months after the camera's initial release which may help explain the inconsistency.
|
6955
6955
|
PrintConv => {
|
6956
6956
|
0 => 'No Restrictions',
|
6957
6957
|
BITMASK => {
|
@@ -21,7 +21,7 @@
|
|
21
21
|
# 13) Chris Shaw private communication (E-3)
|
22
22
|
# 14) Viktor Lushnikov private communication (E-400)
|
23
23
|
# 15) Yrjo Rauste private communication (E-30)
|
24
|
-
# 16) Godfrey DiGiorgi private
|
24
|
+
# 16) Godfrey DiGiorgi private communication (E-P1) + http://forums.dpreview.com/forums/read.asp?message=33187567
|
25
25
|
# 17) Martin Hibers private communication
|
26
26
|
# 18) Tomasz Kawecki private communication
|
27
27
|
# 19) Brad Grier private communication
|
@@ -39,7 +39,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
39
39
|
use Image::ExifTool::Exif;
|
40
40
|
use Image::ExifTool::APP12;
|
41
41
|
|
42
|
-
$VERSION = '2.
|
42
|
+
$VERSION = '2.64';
|
43
43
|
|
44
44
|
sub PrintLensInfo($$$);
|
45
45
|
|
@@ -109,6 +109,7 @@ my %olympusLensTypes = (
|
|
109
109
|
'0 32 10' => 'Olympus M.Zuiko Digital ED 12-200mm F3.5-6.3', #IB
|
110
110
|
'0 33 00' => 'Olympus Zuiko Digital 25mm F2.8', #PH
|
111
111
|
'0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
|
112
|
+
'0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
|
112
113
|
'0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
|
113
114
|
# Sigma lenses
|
114
115
|
'1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
|
@@ -418,6 +419,7 @@ my %olympusCameraTypes = (
|
|
418
419
|
S0080 => 'E-M1X', #IB
|
419
420
|
S0085 => 'E-PL10', #IB
|
420
421
|
S0089 => 'E-M5MarkIII',
|
422
|
+
S0092 => 'E-M1MarkIII', #IB
|
421
423
|
SR45 => 'D220',
|
422
424
|
SR55 => 'D320L',
|
423
425
|
SR83 => 'D340L',
|
@@ -95,7 +95,7 @@ my %supportedFilter = (
|
|
95
95
|
WRITABLE => 'string',
|
96
96
|
# set PRIORITY to 0 so most recent Info dictionary takes precedence
|
97
97
|
# (Acrobat Pro bug? doesn't use same object/generation number for
|
98
|
-
# new Info dictionary when doing
|
98
|
+
# new Info dictionary when doing incremental update)
|
99
99
|
PRIORITY => 0,
|
100
100
|
NOTES => q{
|
101
101
|
As well as the tags listed below, the PDF specification allows for
|
@@ -779,7 +779,7 @@ sub FetchObject($$$$)
|
|
779
779
|
return undef;
|
780
780
|
}
|
781
781
|
# extract the object at the specified index in the stream
|
782
|
-
# (offsets in table are in sequential order, so we can
|
782
|
+
# (offsets in table are in sequential order, so we can subtract from
|
783
783
|
# the next offset to get the object length)
|
784
784
|
$offset = $$table[$i + 1];
|
785
785
|
my $len = ($$table[$i + 3] || length($$obj{_stream})) - $offset;
|
@@ -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.54';
|
40
40
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
@@ -118,6 +118,11 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
118
118
|
other text chunks here. For this reason, when writing, ExifTool 11.63 and
|
119
119
|
later create new text chunks (including XMP) before IDAT, and move existing
|
120
120
|
text chunks to before IDAT.
|
121
|
+
|
122
|
+
The PNG format contains CRC checksums that are validated when reading with
|
123
|
+
either the L<Verbose|../ExifTool.html#Verbose> or L<Validate|../ExifTool.html#Validate> option. When writing, these checksums are
|
124
|
+
validated by default, but the L<FastScan|../ExifTool.html#FastScan> option may be used to bypass this
|
125
|
+
check if speed is more of a concern.
|
121
126
|
},
|
122
127
|
bKGD => {
|
123
128
|
Name => 'BackgroundColor',
|
@@ -614,7 +619,7 @@ my %unreg = ( Notes => 'unregistered' );
|
|
614
619
|
GROUPS => { 2 => 'Image' },
|
615
620
|
FORMAT => 'int32u',
|
616
621
|
NOTES => q{
|
617
|
-
Tags found in the Animation
|
622
|
+
Tags found in the Animation Control chunk. See
|
618
623
|
L<https://wiki.mozilla.org/APNG_Specification> for details.
|
619
624
|
},
|
620
625
|
0 => {
|
@@ -1248,7 +1253,8 @@ sub ProcessPNG($$)
|
|
1248
1253
|
my $datChunk = '';
|
1249
1254
|
my $datCount = 0;
|
1250
1255
|
my $datBytes = 0;
|
1251
|
-
my
|
1256
|
+
my $fastScan = $et->Options('FastScan');
|
1257
|
+
my ($n, $sig, $err, $hbuf, $dbuf, $cbuf);
|
1252
1258
|
my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset);
|
1253
1259
|
|
1254
1260
|
# check to be sure this is a valid PNG/MNG/JNG image
|
@@ -1264,7 +1270,6 @@ sub ProcessPNG($$)
|
|
1264
1270
|
# initialize with same directories, with PNG tags taking priority
|
1265
1271
|
$et->InitWriteDirs(\%pngMap,'PNG');
|
1266
1272
|
} else {
|
1267
|
-
$fastScan = $et->Options('FastScan');
|
1268
1273
|
# disable buffering in FastScan mode
|
1269
1274
|
$$raf{NoBuffer} = 1 if $fastScan;
|
1270
1275
|
}
|
@@ -1427,7 +1432,7 @@ sub ProcessPNG($$)
|
|
1427
1432
|
$et->Warn("Corrupted $fileType image") unless $wasEnd;
|
1428
1433
|
last;
|
1429
1434
|
}
|
1430
|
-
if ($verbose or $validate or $outfile) {
|
1435
|
+
if ($verbose or $validate or ($outfile and not $fastScan)) {
|
1431
1436
|
# check CRC when in verbose mode (since we don't care about speed)
|
1432
1437
|
my $crc = CalculateCRC(\$hbuf, undef, 4);
|
1433
1438
|
$crc = CalculateCRC(\$dbuf, $crc);
|
@@ -2449,7 +2449,7 @@ sub ProcessLeicaLEIC($$$)
|
|
2449
2449
|
#------------------------------------------------------------------------------
|
2450
2450
|
# Process MakerNote trailer written by Leica S2
|
2451
2451
|
# Inputs: 0) ExifTool object ref, 1) new absolute position of Leica trailer when writing
|
2452
|
-
# Returns: On success: 1 when reading, directory data when writing;
|
2452
|
+
# Returns: On success: 1 when reading, directory data when writing; otherwise undef
|
2453
2453
|
# Notes:
|
2454
2454
|
# - may be called twice for a file if the first call doesn't succeed
|
2455
2455
|
# - must leave RAF position unchanged
|
@@ -4309,15 +4309,15 @@ my %binaryDataAttrs = (
|
|
4309
4309
|
Name => 'LC3',
|
4310
4310
|
%lensCode,
|
4311
4311
|
},
|
4312
|
-
5 => { # LC4 =
|
4312
|
+
5 => { # LC4 = aberation correction, near distance data
|
4313
4313
|
Name => 'LC4',
|
4314
4314
|
%lensCode,
|
4315
4315
|
},
|
4316
|
-
6 => { # LC5 = light color
|
4316
|
+
6 => { # LC5 = light color aberation correction data
|
4317
4317
|
Name => 'LC5',
|
4318
4318
|
%lensCode,
|
4319
4319
|
},
|
4320
|
-
7 => { # LC6 = open
|
4320
|
+
7 => { # LC6 = open aberation data
|
4321
4321
|
Name => 'LC6',
|
4322
4322
|
%lensCode,
|
4323
4323
|
},
|
@@ -545,7 +545,7 @@ my %unicodeString = (
|
|
545
545
|
PrintConv => 'sprintf("%d%%",$val)',
|
546
546
|
},
|
547
547
|
# tags extracted from additional layer information (tag ID's are real)
|
548
|
-
# - must be able to
|
548
|
+
# - must be able to accommodate a blank entry to preserve the list ordering
|
549
549
|
luni => {
|
550
550
|
Name => 'LayerUnicodeNames',
|
551
551
|
List => 1,
|
@@ -6295,7 +6295,7 @@ my %eeBox = (
|
|
6295
6295
|
# tsas - temporal sublayer sample
|
6296
6296
|
# stsa - step-wise temporal layer access
|
6297
6297
|
# avss - AVC sample
|
6298
|
-
# tscl - temporal layer
|
6298
|
+
# tscl - temporal layer scalability
|
6299
6299
|
# sync - sync sample
|
6300
6300
|
},
|
6301
6301
|
subs => {
|
@@ -7391,7 +7391,7 @@ sub FixWrongFormat($)
|
|
7391
7391
|
#------------------------------------------------------------------------------
|
7392
7392
|
# Convert ISO 6709 string to standard lag/lon format
|
7393
7393
|
# Inputs: 0) ISO 6709 string (lat, lon, and optional alt)
|
7394
|
-
# Returns: position in decimal
|
7394
|
+
# Returns: position in decimal degrees with altitude if available
|
7395
7395
|
# Notes: Wikipedia indicates altitude may be in feet -- how is this specified?
|
7396
7396
|
sub ConvertISO6709($)
|
7397
7397
|
{
|
@@ -7610,7 +7610,12 @@ sub PrintableTagID($;$)
|
|
7610
7610
|
# ConstructionMethod - offset type: 0=file, 1=idat, 2=item
|
7611
7611
|
# DataReferenceIndex - 0 for "this file", otherwise index in dref box
|
7612
7612
|
# BaseOffset - base for file offsets
|
7613
|
-
# Extents - list of
|
7613
|
+
# Extents - list of details for data in file:
|
7614
|
+
# 0) index (extent_index)
|
7615
|
+
# 1) offset (extent_offset)
|
7616
|
+
# 2) length (extent_length)
|
7617
|
+
# 3) nlen (length_size)
|
7618
|
+
# 4) lenPt (pointer to length word)
|
7614
7619
|
# infe:
|
7615
7620
|
# ProtectionIndex - index if item is protected (0 for unprotected)
|
7616
7621
|
# Name - item name
|
@@ -8514,7 +8519,7 @@ ItemID: foreach $id (keys %$items) {
|
|
8514
8519
|
last ItemID;
|
8515
8520
|
} elsif ($$item{DocNum}) {
|
8516
8521
|
# this property is already associated with an item that has
|
8517
|
-
# an ExifTool document number, so use the lowest
|
8522
|
+
# an ExifTool document number, so use the lowest associated DocNum
|
8518
8523
|
$docNum = $$item{DocNum} if not defined $docNum or $docNum > $$item{DocNum};
|
8519
8524
|
} elsif (not defined $lowest or $lowest > $id) {
|
8520
8525
|
# keep track of the lowest associated item ID
|
@@ -560,7 +560,7 @@ sub SaveMetaKeys($$$)
|
|
560
560
|
my ($tagID, $format, $pid);
|
561
561
|
if ($verbose) {
|
562
562
|
$pid = PrintableTagID($id,1);
|
563
|
-
$et->VPrint(0, "$oldIndent+ [
|
563
|
+
$et->VPrint(0, "$oldIndent+ [Metadata Key entry, Local ID=$pid, $size bytes]\n");
|
564
564
|
$$et{INDENT} .= '| ';
|
565
565
|
}
|
566
566
|
|
@@ -174,7 +174,7 @@ key:
|
|
174
174
|
|
175
175
|
PREFERRED : Set to true if the tags in this table should always be added when
|
176
176
|
writing information. Overrides the order specified by SetNewGroups(). When
|
177
|
-
this feature is used, it may also be
|
177
|
+
this feature is used, it may also be desirable to specify a preferred group
|
178
178
|
when calling InitWriteDirs() to write these tags; this avoids creating other
|
179
179
|
directories for tags which are already being creating in the preferred group.
|
180
180
|
|
@@ -573,53 +573,53 @@ numerical, and generated automatically otherwise.
|
|
573
573
|
split at whitespace into a list of items and each item is
|
574
574
|
converted by the associated entry in the ValueConv list. A
|
575
575
|
special value of 'REPEAT' may be used to repeat the previous
|
576
|
-
conversion for all
|
577
|
-
used and the Raw value doesn't appear as one of the keys,
|
578
|
-
the converted value is set to "Unknown (X)", where X is
|
579
|
-
Raw value (unless either of the special keys exist:
|
580
|
-
a reference to a hash used to decode individual
|
581
|
-
'OTHER', a reference to a subroutine used to
|
582
|
-
values. The OTHER subroutine takes 3
|
583
|
-
flag which is set for the inverse
|
584
|
-
to the PrintConv hash, and returns
|
585
|
-
undef on error -- it may call warn() to
|
586
|
-
message.
|
587
|
-
which is used for documentation if the
|
588
|
-
set).
|
589
|
-
ExifTool object, $val is the Raw
|
590
|
-
key. The subroutine takes 2
|
591
|
-
reference to the current
|
592
|
-
formatting expression (if any)
|
593
|
-
ExifTool "FMT_EXPR" member variable.
|
594
|
-
subroutine is evaluated if and when the tag
|
595
|
-
(ie. only after all extraction is
|
596
|
-
at this time the values of all
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
avoided). When
|
601
|
-
|
602
|
-
|
603
|
-
reference for a list of
|
604
|
-
always be defined -- use
|
605
|
-
|
606
|
-
undef tag may hide a
|
607
|
-
|
608
|
-
|
609
|
-
tags are needed), set the
|
610
|
-
priority over a valid tag.
|
611
|
-
Raw value is not converted.
|
612
|
-
Desire other tags may access
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
Note: Warnings issued by
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
easily be missed.
|
576
|
+
conversion for all remaining elements). If a hash reference
|
577
|
+
is used and the Raw value doesn't appear as one of the keys,
|
578
|
+
then the converted value is set to "Unknown (X)", where X is
|
579
|
+
the Raw value (unless either of the special keys exist:
|
580
|
+
'BITMASK', a reference to a hash used to decode individual
|
581
|
+
value bits; or 'OTHER', a reference to a subroutine used to
|
582
|
+
convert unknown values. The OTHER subroutine takes 3
|
583
|
+
arguments: the value, a flag which is set for the inverse
|
584
|
+
conversion, and a reference to the PrintConv hash, and returns
|
585
|
+
the converted value or undef on error -- it may call warn() to
|
586
|
+
return an error message. The lookup hash may also contain a
|
587
|
+
'Notes' entry which is used for documentation if the
|
588
|
+
SeparateTable flag is set). In an expression, $self is a
|
589
|
+
reference to the current ExifTool object, $val is the Raw
|
590
|
+
value, and $tag is the tag key. The subroutine takes 2
|
591
|
+
arguments: the Raw value and a reference to the current
|
592
|
+
ExifTool object. The advanced formatting expression (if any)
|
593
|
+
may be accessed via the ExifTool "FMT_EXPR" member variable.
|
594
|
+
The expression or subroutine is evaluated if and when the tag
|
595
|
+
value is requested (ie. only after all extraction is
|
596
|
+
complete), so if necessary at this time the values of all
|
597
|
+
other tags are available via calls to
|
598
|
+
$self->GetValue("Tag","Raw"). (Note: In theory, types other
|
599
|
+
than "Raw" may be accessed, but they are slower and may lead
|
600
|
+
to cyclical dependencies so they should be avoided). When
|
601
|
+
evaluated, the expression or subroutine returns a scalar for
|
602
|
+
the converted value, a SCALAR reference to a binary data value
|
603
|
+
(see the 'Binary' flag), or an ARRAY reference for a list of
|
604
|
+
values. The return value should always be defined -- use
|
605
|
+
RawConv instead to return undef if it is necessary to test the
|
606
|
+
value for validity, otherwise an undef tag may hide a
|
607
|
+
previously defined value when the Duplicates option is not
|
608
|
+
enabled. If this isn't possible (as with Composite tags where
|
609
|
+
the converted values of the source tags are needed), set the
|
610
|
+
Priority to 0 to avoid taking priority over a valid tag. If
|
611
|
+
ValueConv is not specified, the Raw value is not converted.
|
612
|
+
Composite tags which Require or Desire other tags may access
|
613
|
+
the ValueConv, PrintConv and Raw values of these tags through
|
614
|
+
the elements of the @val, @prt and @raw lists respectively
|
615
|
+
(only if there was no RawConv or it returned a hash
|
616
|
+
reference). For these tags, $val may be used in an expression
|
617
|
+
to represent $val[0], and the first argument passed for a code
|
618
|
+
reference is a reference to @val. Note: Warnings issued by
|
619
|
+
these conversions are intercepted by ExifTool and saved as
|
620
|
+
Warning tags, but since ValueConv and PrintConv conversions
|
621
|
+
are done on demand, the warnings may be generated after the
|
622
|
+
list of extracted tags is returned, so may easily be missed.
|
623
623
|
|
624
624
|
PrintConv : This entry is similar to ValueConv above, except that it is
|
625
625
|
used to further convert the tag value to a human readable
|
@@ -766,7 +766,7 @@ numerical, and generated automatically otherwise.
|
|
766
766
|
is set to zero), and for EXIF-type tables gives format for
|
767
767
|
writing. Writable may be set to 1 for MakerNotes information
|
768
768
|
because the existing format is always used, however providing
|
769
|
-
a format is
|
769
|
+
a format is desirable because it is used in validating the
|
770
770
|
value. Set to 2 for tag to show "yes" in the Writable column
|
771
771
|
of the tag name documentation even when there is no WRITE_PROC
|
772
772
|
defined (eg. if it is written via an Extra tag). For EXIF
|
@@ -1016,7 +1016,7 @@ numerical, and generated automatically otherwise.
|
|
1016
1016
|
The following variables may be used in the expression: $val
|
1017
1017
|
(value of the tag), $dirData (reference to directory data),
|
1018
1018
|
$subdirStart (offset to subdirectory start) and $size (size of
|
1019
|
-
subdirectory). Returns true if
|
1019
|
+
subdirectory). Returns true if subdirectory is valid.
|
1020
1020
|
|
1021
1021
|
ProcessProc: If given, specifies processing procedure used to decode this
|
1022
1022
|
subdirectory data. This overrides the default procedure
|
@@ -1095,7 +1095,7 @@ flattened tags are allowed, and are used when it is necessary to change the Name
|
|
1095
1095
|
or Description of a flattened tag. The flattened tag information hash entries
|
1096
1096
|
are copied from the corresponding structure field definitions, even for
|
1097
1097
|
pre-defined flattened tags. The exception is that the List property is
|
1098
|
-
generated automatically unless
|
1098
|
+
generated automatically unless explicitly set to 0 in a pre-defined flattened
|
1099
1099
|
tag.
|
1100
1100
|
|
1101
1101
|
--------------------------------------------------------------------------------
|
@@ -142,7 +142,7 @@ my %code2charset = (
|
|
142
142
|
0x64 => 'APICOM G.726 ADPCM',
|
143
143
|
0x65 => 'APICOM G.722 ADPCM',
|
144
144
|
0x66 => 'Microsoft DSAT', #6
|
145
|
-
0x67 => '
|
145
|
+
0x67 => 'Microsoft DSAT DISPLAY', #6
|
146
146
|
0x69 => 'Voxware Byte Aligned', #7
|
147
147
|
0x70 => 'Voxware AC8', #7
|
148
148
|
0x71 => 'Voxware AC10', #7
|
@@ -339,7 +339,7 @@ my %code2charset = (
|
|
339
339
|
these files, information is extracted from subsequent RIFF chunks as
|
340
340
|
sub-documents, but the Duration is calculated for the full video.
|
341
341
|
},
|
342
|
-
# (not 100% sure that the
|
342
|
+
# (not 100% sure that the concatenation technique mentioned above is valid - PH)
|
343
343
|
'fmt ' => {
|
344
344
|
Name => 'AudioFormat',
|
345
345
|
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::AudioFormat' },
|
@@ -153,7 +153,7 @@ sub UnescapeRTF($$$)
|
|
153
153
|
$val =~ tr/\n\r//d; # ignore CR's and LF's
|
154
154
|
return $val;
|
155
155
|
}
|
156
|
-
# CR/LF is
|
156
|
+
# CR/LF is significant if it terminates a control sequence (so change these to a space)
|
157
157
|
# (was $val =~ s/(^|[^\\])((?:\\\\)*)(\\[a-zA-Z]+(?:-?\d+)?)[\n\r]/$1$2$3 /g;)
|
158
158
|
$val =~ s/\\(?:([a-zA-Z]+(?:-?\d+)?)[\n\r]|(.))/'\\'.($1 ? "$1 " : $2)/sge;
|
159
159
|
# protect the newline control sequence by converting to a \par command
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# 4) Jaroslav Stepanek via rt.cpan.org
|
12
12
|
# 5) Nick Livchits private communication
|
13
13
|
# 6) Sreerag Raghavan private communication (SM-C200)
|
14
|
-
# IB) Iliah Borg private
|
14
|
+
# IB) Iliah Borg private communication (LibRaw)
|
15
15
|
# NJ) Niels Kristian Bech Jensen private communication
|
16
16
|
#------------------------------------------------------------------------------
|
17
17
|
|