exiftool_vendored 11.98.0 → 12.10.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 +198 -2
- data/bin/MANIFEST +8 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +102 -75
- data/bin/lib/Image/ExifTool.pm +163 -111
- data/bin/lib/Image/ExifTool.pod +127 -93
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +21 -10
- data/bin/lib/Image/ExifTool/Canon.pm +202 -14
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +22 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +6 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +48 -22
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +91 -12
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +19 -19
- data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +164 -20
- data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +34 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +289 -37
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
- data/bin/lib/Image/ExifTool/README +26 -22
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/RTF.pm +12 -7
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +426 -40
- data/bin/lib/Image/ExifTool/TagLookup.pm +5799 -5671
- data/bin/lib/Image/ExifTool/TagNames.pod +584 -97
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -18
- data/bin/lib/Image/ExifTool/Writer.pl +47 -24
- data/bin/lib/Image/ExifTool/XMP.pm +99 -17
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +8 -7
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::de;
|
|
11
11
|
use strict;
|
12
12
|
use vars qw($VERSION);
|
13
13
|
|
14
|
-
$VERSION = '1.
|
14
|
+
$VERSION = '1.36';
|
15
15
|
|
16
16
|
%Image::ExifTool::Lang::de::Translate = (
|
17
17
|
'AEAperture' => 'AE-Blende',
|
@@ -993,7 +993,9 @@ $VERSION = '1.35';
|
|
993
993
|
},
|
994
994
|
},
|
995
995
|
'AdvancedSceneMode' => {
|
996
|
+
Description => 'Erweiteter Szenenmodus',
|
996
997
|
PrintConv => {
|
998
|
+
'Off' => 'Aus',
|
997
999
|
'Creative Macro' => 'Makro kreativ',
|
998
1000
|
'Flower' => 'Blumen',
|
999
1001
|
'HDR B&W' => 'HDR Schwarz-Weiß',
|
@@ -1302,7 +1302,7 @@ $VERSION = '1.16';
|
|
1302
1302
|
'ExifImageHeight' => 'Alto Imagen',
|
1303
1303
|
'ExifImageWidth' => 'Ancho Imagen',
|
1304
1304
|
'ExifOffset' => 'Puntero Exif IFD',
|
1305
|
-
'ExifToolVersion' => 'Versión
|
1305
|
+
'ExifToolVersion' => 'Versión ExifTool',
|
1306
1306
|
'ExifVersion' => 'Versión Exif',
|
1307
1307
|
'ExpandFilm' => 'Película Expandida',
|
1308
1308
|
'ExpandFilterLens' => 'Filtro Objetivo Expandida',
|
@@ -31,7 +31,7 @@ use strict;
|
|
31
31
|
use vars qw($VERSION);
|
32
32
|
use Image::ExifTool qw(:DataAccess :Utils);
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.18';
|
35
35
|
|
36
36
|
# program map table "stream_type" lookup (ref 6/1)
|
37
37
|
my %streamType = (
|
@@ -262,7 +262,7 @@ sub ParseAC3Descriptor($$)
|
|
262
262
|
|
263
263
|
#------------------------------------------------------------------------------
|
264
264
|
# Parse PID stream data
|
265
|
-
# Inputs: 0)
|
265
|
+
# Inputs: 0) ExifTool ref, 1) PID number, 2) PID type, 3) PID name, 4) data ref
|
266
266
|
# Returns: 0=stream parsed OK,
|
267
267
|
# 1=stream parsed but we want to parse more of these,
|
268
268
|
# -1=can't parse yet because we don't know the type
|
@@ -359,23 +359,26 @@ sub ProcessM2TS($$)
|
|
359
359
|
last unless defined $startTime;
|
360
360
|
# reconfigure to seek backwards for last PCR
|
361
361
|
unless (defined $backScan) {
|
362
|
-
$
|
363
|
-
$verbose and print "[Starting backscan for last PCR]\n";
|
364
|
-
$fwdTime = $endTime;
|
362
|
+
my $saveTime = $endTime;
|
365
363
|
undef $endTime;
|
364
|
+
last if $et->Options('FastScan');
|
365
|
+
$verbose and print $out "[Starting backscan for last PCR]\n";
|
366
366
|
# remember how far we got when reading forward through the file
|
367
367
|
my $fwdPos = $raf->Tell() - length($buff) + $pEnd;
|
368
|
-
# determine the
|
368
|
+
# determine the position of the last packet relative to the EOF
|
369
369
|
$raf->Seek(0, 2) or last;
|
370
370
|
my $fsize = $raf->Tell();
|
371
|
-
|
372
|
-
$backScan = $nPack * $pLen - $fsize;
|
371
|
+
$backScan = int($fsize / $pLen) * $pLen - $fsize;
|
373
372
|
# set limit on how far back we will go
|
374
373
|
$maxBack = $fwdPos - $fsize;
|
375
374
|
# scan back a maximum of 512k (have seen last PCR at -276k)
|
376
|
-
my $nMax = int(512000 / $pLen); # max packets to
|
377
|
-
|
378
|
-
|
375
|
+
my $nMax = int(512000 / $pLen); # max packets to backscan
|
376
|
+
if ($nMax < int(-$maxBack / $pLen)) {
|
377
|
+
$maxBack = $backScan - $nMax * $pLen;
|
378
|
+
} else {
|
379
|
+
# use this time if none found in all remaining packets
|
380
|
+
$fwdTime = $saveTime;
|
381
|
+
}
|
379
382
|
$pEnd = 0;
|
380
383
|
}
|
381
384
|
}
|
@@ -387,15 +390,12 @@ sub ProcessM2TS($$)
|
|
387
390
|
if ($pos < 0) {
|
388
391
|
# read another buffer from end of file
|
389
392
|
last if $backScan <= $maxBack;
|
390
|
-
my $
|
391
|
-
$
|
392
|
-
|
393
|
-
$readThis = $readSize - ($maxBack - $backScan);
|
394
|
-
$backScan = $maxBack;
|
395
|
-
}
|
393
|
+
my $buffLen = $backScan - $maxBack;
|
394
|
+
$buffLen = $readSize if $buffLen > $readSize;
|
395
|
+
$backScan -= $buffLen;
|
396
396
|
$raf->Seek($backScan, 2) or last;
|
397
|
-
$raf->Read($buff, $
|
398
|
-
$pos = $pEnd = $
|
397
|
+
$raf->Read($buff, $buffLen) == $buffLen or last;
|
398
|
+
$pos = $pEnd = $buffLen - $pLen;
|
399
399
|
}
|
400
400
|
} else {
|
401
401
|
$pos = $pEnd;
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# Description: Read/write MacOS system tags
|
5
5
|
#
|
6
6
|
# Revisions: 2017/03/01 - P. Harvey Created
|
7
|
+
# 2020/10/13 - PH Added ability to read MacOS "._" files
|
7
8
|
#------------------------------------------------------------------------------
|
8
9
|
|
9
10
|
package Image::ExifTool::MacOS;
|
@@ -11,15 +12,38 @@ use strict;
|
|
11
12
|
use vars qw($VERSION);
|
12
13
|
use Image::ExifTool qw(:DataAccess :Utils);
|
13
14
|
|
14
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.11';
|
15
16
|
|
16
17
|
sub MDItemLocalTime($);
|
18
|
+
sub ProcessATTR($$$);
|
17
19
|
|
18
20
|
my %mdDateInfo = (
|
19
21
|
ValueConv => \&MDItemLocalTime,
|
20
22
|
PrintConv => '$self->ConvertDateTime($val)',
|
21
23
|
);
|
22
24
|
|
25
|
+
# Information decoded from Mac OS sidecar files
|
26
|
+
%Image::ExifTool::MacOS::Main = (
|
27
|
+
GROUPS => { 0 => 'File', 1 => 'MacOS' },
|
28
|
+
NOTES => q{
|
29
|
+
Note that on some filesystems, MacOS creates sidecar files with names that
|
30
|
+
begin with "._". ExifTool will read these files if specified, and extract
|
31
|
+
the information listed in the following table without the need for extra
|
32
|
+
options, but these files are not writable directly.
|
33
|
+
},
|
34
|
+
2 => {
|
35
|
+
Name => 'RSRC',
|
36
|
+
SubDirectory => { TagTable => 'Image::ExifTool::RSRC::Main' },
|
37
|
+
},
|
38
|
+
9 => {
|
39
|
+
Name => 'ATTR',
|
40
|
+
SubDirectory => {
|
41
|
+
TagTable => 'Image::ExifTool::MacOS::XAttr',
|
42
|
+
ProcessProc => \&ProcessATTR,
|
43
|
+
},
|
44
|
+
},
|
45
|
+
);
|
46
|
+
|
23
47
|
# "mdls" tags (ref PH)
|
24
48
|
%Image::ExifTool::MacOS::MDItem = (
|
25
49
|
WRITE_PROC => \&Image::ExifTool::DummyWriteProc,
|
@@ -221,6 +245,8 @@ my %mdDateInfo = (
|
|
221
245
|
XAttr tags are extracted using the "xattr" utility. They are extracted if
|
222
246
|
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
|
223
247
|
the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
|
248
|
+
And they extracted by default from MacOS "._" files when reading
|
249
|
+
these files directly.
|
224
250
|
},
|
225
251
|
'com.apple.FinderInfo' => {
|
226
252
|
Name => 'XAttrFinderInfo',
|
@@ -325,7 +351,7 @@ sub MDItemLocalTime($)
|
|
325
351
|
|
326
352
|
#------------------------------------------------------------------------------
|
327
353
|
# Set MacOS MDItem and XAttr tags from new tag values
|
328
|
-
# Inputs: 0)
|
354
|
+
# Inputs: 0) ExifTool ref, 1) file name, 2) list of tags to set
|
329
355
|
# Returns: 1=something was set OK, 0=didn't try, -1=error (and warning set)
|
330
356
|
# Notes: There may be errors even if 1 is returned
|
331
357
|
sub SetMacOSTags($$$)
|
@@ -486,8 +512,50 @@ sub ExtractMDItemTags($$)
|
|
486
512
|
$$et{INDENT} =~ s/\| $//;
|
487
513
|
}
|
488
514
|
|
515
|
+
|
516
|
+
#------------------------------------------------------------------------------
|
517
|
+
# Read MacOS XAttr value
|
518
|
+
# Inputs: 0) ExifTool object ref, 1) file name
|
519
|
+
sub ReadXAttrValue($$$$)
|
520
|
+
{
|
521
|
+
my ($et, $tagTablePtr, $tag, $val) = @_;
|
522
|
+
# add to our table if necessary
|
523
|
+
unless ($$tagTablePtr{$tag}) {
|
524
|
+
my $name;
|
525
|
+
# generate tag name from attribute name
|
526
|
+
if ($tag =~ /^com\.apple\.(.*)$/) {
|
527
|
+
($name = $1) =~ s/^metadata:_?k//;
|
528
|
+
$name =~ s/^metadata:(com_)?//;
|
529
|
+
} else {
|
530
|
+
$name = $tag;
|
531
|
+
}
|
532
|
+
$name =~ s/[.:_]([a-z])/\U$1/g;
|
533
|
+
$name = 'XAttr' . ucfirst $name;
|
534
|
+
my %tagInfo = ( Name => $name );
|
535
|
+
$tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
|
536
|
+
$et->VPrint(0, " [adding $tag]\n");
|
537
|
+
AddTagToTable($tagTablePtr, $tag, \%tagInfo);
|
538
|
+
}
|
539
|
+
if ($val =~ /^bplist0/) {
|
540
|
+
my %dirInfo = ( DataPt => \$val );
|
541
|
+
require Image::ExifTool::PLIST;
|
542
|
+
if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
|
543
|
+
return undef if ref $dirInfo{Value} eq 'HASH';
|
544
|
+
$val = $dirInfo{Value}
|
545
|
+
} else {
|
546
|
+
$et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
|
547
|
+
return undef;
|
548
|
+
}
|
549
|
+
}
|
550
|
+
if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
|
551
|
+
my $buff = $val;
|
552
|
+
$val = \$buff;
|
553
|
+
}
|
554
|
+
return $val;
|
555
|
+
}
|
556
|
+
|
489
557
|
#------------------------------------------------------------------------------
|
490
|
-
#
|
558
|
+
# Read MacOS extended attribute tags using 'xattr' utility
|
491
559
|
# Inputs: 0) ExifTool object ref, 1) file name
|
492
560
|
sub ExtractXAttrTags($$)
|
493
561
|
{
|
@@ -517,39 +585,8 @@ sub ExtractXAttrTags($$)
|
|
517
585
|
$val .= pack('H*', $_);
|
518
586
|
next;
|
519
587
|
} elsif ($tag and defined $val) {
|
520
|
-
|
521
|
-
|
522
|
-
my $name;
|
523
|
-
# generate tag name from attribute name
|
524
|
-
if ($tag =~ /^com\.apple\.(.*)$/) {
|
525
|
-
($name = $1) =~ s/^metadata:_?k//;
|
526
|
-
$name =~ s/^metadata:(com_)?//;
|
527
|
-
} else {
|
528
|
-
$name = $tag;
|
529
|
-
}
|
530
|
-
$name =~ s/[.:_]([a-z])/\U$1/g;
|
531
|
-
$name = 'XAttr' . ucfirst $name;
|
532
|
-
my %tagInfo = ( Name => $name );
|
533
|
-
$tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
|
534
|
-
$et->VPrint(0, " [adding $tag]\n");
|
535
|
-
AddTagToTable($tagTablePtr, $tag, \%tagInfo);
|
536
|
-
}
|
537
|
-
if ($val =~ /^bplist0/) {
|
538
|
-
my %dirInfo = ( DataPt => \$val );
|
539
|
-
require Image::ExifTool::PLIST;
|
540
|
-
if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
|
541
|
-
next if ref $dirInfo{Value} eq 'HASH';
|
542
|
-
$val = $dirInfo{Value}
|
543
|
-
} else {
|
544
|
-
$et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
|
545
|
-
next;
|
546
|
-
}
|
547
|
-
}
|
548
|
-
if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
|
549
|
-
my $buff = $val;
|
550
|
-
$val = \$buff;
|
551
|
-
}
|
552
|
-
$et->HandleTag($tagTablePtr, $tag, $val);
|
588
|
+
$val = ReadXAttrValue($et, $tagTablePtr, $tag, $val);
|
589
|
+
$et->HandleTag($tagTablePtr, $tag, $val) if defined $val;
|
553
590
|
undef $tag;
|
554
591
|
undef $val;
|
555
592
|
}
|
@@ -584,6 +621,84 @@ sub GetFileCreateDate($$)
|
|
584
621
|
delete $$et{SET_GROUP1};
|
585
622
|
}
|
586
623
|
|
624
|
+
#------------------------------------------------------------------------------
|
625
|
+
# Read ATTR metadata from "._" file
|
626
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
627
|
+
# Return: 1 on success
|
628
|
+
# (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
|
629
|
+
sub ProcessATTR($$$)
|
630
|
+
{
|
631
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
632
|
+
my $dataPt = $$dirInfo{DataPt};
|
633
|
+
my $dataPos = $$dirInfo{DataPos};
|
634
|
+
my $dataLen = length $$dataPt;
|
635
|
+
|
636
|
+
$dataLen >= 58 and $$dataPt =~ /^.{34}ATTR/s or $et->Warn('Invalid ATTR header'), return 0;
|
637
|
+
my $entries = Get32u($dataPt, 66);
|
638
|
+
$et->VerboseDir('ATTR', $entries);
|
639
|
+
# (Note: The RAF is not in $dirInfo because it would break RSRC reading --
|
640
|
+
# the RSCR block uses relative offsets, while the ATTR block uses absolute! grrr!)
|
641
|
+
my $raf = $$et{RAF};
|
642
|
+
my $pos = 70; # first entry is after ATTR header
|
643
|
+
my $i;
|
644
|
+
for ($i=0; $i<$entries; ++$i) {
|
645
|
+
$pos + 12 > $dataLen and $et->Warn('Truncated ATTR entry'), last;
|
646
|
+
my $off = Get32u($dataPt, $pos);
|
647
|
+
my $len = Get32u($dataPt, $pos + 4);
|
648
|
+
my $n = Get8u($dataPt, $pos + 10); # number of characters in tag name
|
649
|
+
$pos + 11 + $n > $dataLen and $et->Warn('Truncated ATTR name'), last;
|
650
|
+
$off -= $dataPos; # convert to relative offset (grrr!)
|
651
|
+
$off < 0 or $off > $dataLen and $et->Warn('Invalid ATTR offset'), last;
|
652
|
+
my $tag = substr($$dataPt, $pos + 11, $n);
|
653
|
+
$tag =~ s/\0+$//; # remove null terminator
|
654
|
+
# remove random ID after kMDLabel in tag ID
|
655
|
+
$tag =~ s/^com.apple.metadata:kMDLabel_.*/com.apple.metadata:kMDLabel/s;
|
656
|
+
$off + $len > $dataLen and $et->Warn('Truncated ATTR value'), last;
|
657
|
+
my $val = ReadXAttrValue($et, $tagTablePtr, $tag, substr($$dataPt, $off, $len));
|
658
|
+
$et->HandleTag($tagTablePtr, $tag, $val,
|
659
|
+
DataPt => $dataPt,
|
660
|
+
DataPos => $dataPos,
|
661
|
+
Start => $off,
|
662
|
+
Size => $len,
|
663
|
+
) if defined $val;
|
664
|
+
$pos += (11 + $n + 3) & -4; # step to next entry (on even 4-byte boundary)
|
665
|
+
}
|
666
|
+
return 1;
|
667
|
+
}
|
668
|
+
|
669
|
+
#------------------------------------------------------------------------------
|
670
|
+
# Read information from a MacOS "._" sidecar file
|
671
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref
|
672
|
+
# Returns: 1 on success, 0 if this wasn't a valid "._" file
|
673
|
+
# (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
|
674
|
+
sub ProcessMacOS($$)
|
675
|
+
{
|
676
|
+
my ($et, $dirInfo) = @_;
|
677
|
+
my $raf = $$dirInfo{RAF};
|
678
|
+
my ($hdr, $buff, $i);
|
679
|
+
|
680
|
+
return 0 unless $raf->Read($hdr, 26) == 26 and $hdr =~ /^\0\x05\x16\x07\0(.)\0\0Mac OS X /s;
|
681
|
+
my $ver = ord $1;
|
682
|
+
# (extension may be anything, so just echo back the incoming file extension if it exists)
|
683
|
+
$et->SetFileType(undef, undef, $$et{FILE_EXT});
|
684
|
+
$ver == 2 or $et->Warn("Unsupported file version $ver"), return 1;
|
685
|
+
SetByteOrder('MM');
|
686
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::MacOS::Main');
|
687
|
+
my $entries = Get16u(\$hdr, 0x18);
|
688
|
+
$et->VerboseDir('MacOS', $entries);
|
689
|
+
$raf->Read($hdr, $entries * 12) == $entries * 12 or $et->Warn('Truncated header'), return 1;
|
690
|
+
for ($i=0; $i<$entries; ++$i) {
|
691
|
+
my $pos = $i * 12;
|
692
|
+
my $tag = Get32u(\$hdr, $pos);
|
693
|
+
my $off = Get32u(\$hdr, $pos + 4);
|
694
|
+
my $len = Get32u(\$hdr, $pos + 8);
|
695
|
+
$len > 100000000 and $et->Warn('Record size too large'), last;
|
696
|
+
$raf->Seek($off,0) and $raf->Read($buff,$len) == $len or $et->Warn('Truncated record'), last;
|
697
|
+
$et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $off, Index => $i);
|
698
|
+
}
|
699
|
+
return 1;
|
700
|
+
}
|
701
|
+
|
587
702
|
1; # end
|
588
703
|
|
589
704
|
__END__
|
@@ -600,8 +715,9 @@ This module is used by Image::ExifTool
|
|
600
715
|
|
601
716
|
This module contains definitions required by Image::ExifTool to extract
|
602
717
|
MDItem* and XAttr* tags on MacOS systems using the "mdls" and "xattr"
|
603
|
-
utilities respectively.
|
604
|
-
|
718
|
+
utilities respectively. It also reads metadata directly from the MacOS "_."
|
719
|
+
sidecar files that are used on some filesystems to store file attributes.
|
720
|
+
Writable tags use "xattr", "setfile" or "osascript" for writing.
|
605
721
|
|
606
722
|
=head1 AUTHOR
|
607
723
|
|
@@ -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.10';
|
18
18
|
|
19
19
|
my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
20
20
|
|
@@ -221,6 +221,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
221
221
|
},
|
222
222
|
0x2e => {
|
223
223
|
Name => 'TrackEntry',
|
224
|
+
# reset TrackType member at the start of each track
|
225
|
+
Condition => 'delete $$self{TrackType}; 1',
|
224
226
|
SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' },
|
225
227
|
},
|
226
228
|
0x57 => { Name => 'TrackNumber', Format => 'unsigned' },
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
50
50
|
use Image::ExifTool::Exif;
|
51
51
|
|
52
|
-
$VERSION = '2.
|
52
|
+
$VERSION = '2.87';
|
53
53
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
@@ -602,13 +602,18 @@ $VERSION = '2.83';
|
|
602
602
|
15 => 'Light', #JR (NC)
|
603
603
|
16 => 'Autumn Leaves', #JR (NC)
|
604
604
|
17 => 'Sepia', #JR
|
605
|
+
18 => 'FL', #JR (7SM3)
|
606
|
+
19 => 'Vivid 2', #JR (7SM3)
|
607
|
+
20 => 'IN', #JR (7SM3)
|
608
|
+
21 => 'SH', #JR (7SM3)
|
605
609
|
100 => 'Neutral', #JD
|
606
610
|
101 => 'Clear', #JD
|
607
611
|
102 => 'Deep', #JD
|
608
612
|
103 => 'Light', #JD
|
609
613
|
104 => 'Night View', #JD
|
610
614
|
105 => 'Autumn Leaves', #JD
|
611
|
-
|
615
|
+
255 => 'Off', #JR (new for ILCE-7SM3, July 2020)
|
616
|
+
0xffffffff => 'n/a', #PH
|
612
617
|
);
|
613
618
|
|
614
619
|
%minoltaSceneMode = (
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
use Image::ExifTool::Minolta;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.16';
|
21
21
|
|
22
22
|
sub ProcessMRW($$;$);
|
23
23
|
sub WriteMRW($$;$);
|
@@ -59,10 +59,12 @@ sub WriteMRW($$;$);
|
|
59
59
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
60
60
|
WRITABLE => 1,
|
61
61
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
62
|
+
DATAMEMBER => [ 0 ],
|
62
63
|
FIRST_ENTRY => 0,
|
63
64
|
0 => {
|
64
65
|
Name => 'FirmwareID',
|
65
66
|
Format => 'string[8]',
|
67
|
+
RawConv => '$$self{MinoltaPRD} = 1 if $$self{FILE_TYPE} eq "MRW"; $val', # used in decoding RIF info
|
66
68
|
},
|
67
69
|
8 => {
|
68
70
|
Name => 'SensorHeight',
|
@@ -214,38 +216,37 @@ sub WriteMRW($$;$);
|
|
214
216
|
PrintConv => \%Image::ExifTool::Minolta::sonyColorMode,
|
215
217
|
},
|
216
218
|
],
|
217
|
-
# NOTE:
|
219
|
+
# NOTE: WB_RBLevels up to Custom also apply to Minolta models which write PRD info (ref IB)
|
218
220
|
8 => { #3
|
219
221
|
Name => 'WB_RBLevelsTungsten',
|
220
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
222
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
221
223
|
Format => 'int16u[2]',
|
222
224
|
Notes => 'these WB_RBLevels currently decoded only for the Sony A100',
|
223
225
|
},
|
224
226
|
12 => { #3
|
225
227
|
Name => 'WB_RBLevelsDaylight',
|
226
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
228
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
227
229
|
Format => 'int16u[2]',
|
228
230
|
},
|
229
231
|
16 => { #3
|
230
232
|
Name => 'WB_RBLevelsCloudy',
|
231
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
233
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
232
234
|
Format => 'int16u[2]',
|
233
235
|
},
|
234
236
|
20 => { #3
|
235
237
|
Name => 'WB_RBLevelsCoolWhiteF',
|
236
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
238
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
237
239
|
Format => 'int16u[2]',
|
238
240
|
},
|
239
241
|
24 => { #3
|
240
242
|
Name => 'WB_RBLevelsFlash',
|
241
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
243
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
242
244
|
Format => 'int16u[2]',
|
243
245
|
},
|
244
246
|
28 => { #3
|
245
|
-
Name => '
|
246
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
247
|
+
Name => 'WB_RBLevelsCustom', #IB
|
248
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
247
249
|
Format => 'int16u[2]',
|
248
|
-
Unknown => 1,
|
249
250
|
},
|
250
251
|
32 => { #3
|
251
252
|
Name => 'WB_RBLevelsShade',
|