exiftool_vendored 12.41.0 → 12.50.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +209 -6
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +115 -96
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +71 -33
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/DJI.pm +60 -1
- data/bin/lib/Image/ExifTool/DNG.pm +8 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +26 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +21 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +25 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +12 -9
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +11 -11
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +8 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +293 -122
- data/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +22 -2
- data/bin/lib/Image/ExifTool/PDF.pm +2 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +30 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +35 -8
- data/bin/lib/Image/ExifTool/QuickTime.pm +163 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +119 -13
- data/bin/lib/Image/ExifTool/README +13 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +234 -3
- data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +71 -43
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4752 -4516
- data/bin/lib/Image/ExifTool/TagNames.pod +1885 -1434
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/Writer.pl +14 -6
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool.pm +120 -33
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
|
|
15
15
|
use strict;
|
16
16
|
use vars qw($VERSION);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.20';
|
19
19
|
|
20
20
|
my %buttonsZ9= (
|
21
21
|
0 => 'None',
|
@@ -74,6 +74,9 @@ my %buttonsZ9= (
|
|
74
74
|
82 => 'Select To Send (PC)',
|
75
75
|
83 => 'Select To Send (FTP)',
|
76
76
|
85 => 'Control Lock',
|
77
|
+
86 => 'Save Focus Position',
|
78
|
+
87 => 'Recall Focus Position',
|
79
|
+
88 => 'Recall Shooting Functions (Hold)',
|
77
80
|
);
|
78
81
|
my %dialsZ9 = (
|
79
82
|
0 => '1 Frame',
|
@@ -2036,11 +2036,13 @@ sub ProcessNikonSettings($$$)
|
|
2036
2036
|
for ($i=0; $i<$num; ++$i) {
|
2037
2037
|
my $entry = $start + 0x18 + $i * 8;
|
2038
2038
|
my $tag = Get16u($dataPt, $entry);
|
2039
|
-
|
2039
|
+
# this is odd, but either the format is 16-bit and always big-endian,
|
2040
|
+
# or it is 8-bit and we have an unknown byte in the entry...
|
2041
|
+
my $fmt = Get8u($dataPt, $entry + 3);
|
2040
2042
|
my $val = Get32u($dataPt, $entry + 4);
|
2041
2043
|
# abort if the tag has a format that we haven't yet seen
|
2042
|
-
# (assuming this is a size/format code. So far we have only seen
|
2043
|
-
$fmt ==
|
2044
|
+
# (assuming this is a size/format code. So far we have only seen a code of 4)
|
2045
|
+
$fmt == 4 or $et->Warn(sprintf('Unknown format $fmt for NikonSettings tag 0x%.4x',$tag)), last;
|
2044
2046
|
$et->HandleTag($tagTablePtr, $tag, $val,
|
2045
2047
|
DataPt => $dataPt,
|
2046
2048
|
DataPos => $$dirInfo{DataPos},
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
40
40
|
use Image::ExifTool::Exif;
|
41
41
|
use Image::ExifTool::APP12;
|
42
42
|
|
43
|
-
$VERSION = '2.
|
43
|
+
$VERSION = '2.79';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -433,6 +433,7 @@ my %olympusCameraTypes = (
|
|
433
433
|
S0092 => 'E-M1MarkIII', #IB
|
434
434
|
S0093 => 'E-P7', #IB
|
435
435
|
S0095 => 'OM-1', #IB
|
436
|
+
S0101 => 'OM-5', #IB
|
436
437
|
SR45 => 'D220',
|
437
438
|
SR55 => 'D320L',
|
438
439
|
SR83 => 'D340L',
|
@@ -1911,6 +1912,23 @@ my %indexInfo = (
|
|
1911
1912
|
Name => 'FocusBracketStepSize',
|
1912
1913
|
Writable => 'int8u',
|
1913
1914
|
},
|
1915
|
+
0x309 => { #forum13341
|
1916
|
+
Name => 'AISubjectTrackingMode',
|
1917
|
+
Writable => 'int16u',
|
1918
|
+
ValueConv => '($val >> 8) . " " . ($val & 0xff)',
|
1919
|
+
ValueConvInv => 'my @a = split " ", $val; $val = $a[0]*256 + $a[1]',
|
1920
|
+
PrintConv => [{
|
1921
|
+
0 => 'Off',
|
1922
|
+
1 => 'Motorsports',
|
1923
|
+
2 => 'Airplanes',
|
1924
|
+
3 => 'Trains',
|
1925
|
+
4 => 'Birds',
|
1926
|
+
5 => 'Dogs & Cats',
|
1927
|
+
},{
|
1928
|
+
0 => 'Object Not Found',
|
1929
|
+
1 => 'Object Found',
|
1930
|
+
}],
|
1931
|
+
},
|
1914
1932
|
0x400 => { #6
|
1915
1933
|
Name => 'FlashMode',
|
1916
1934
|
Writable => 'int16u',
|
@@ -2538,11 +2556,13 @@ my %indexInfo = (
|
|
2538
2556
|
'3 8' => 'ND8 (3EV)', #IB
|
2539
2557
|
'3 16' => 'ND16 (4EV)', #IB
|
2540
2558
|
'3 32' => 'ND32 (5EV)', #IB
|
2559
|
+
'3 64' => 'ND64 (6EV)', #forum13341
|
2541
2560
|
'5 4' => 'HDR1', #forum8906
|
2542
2561
|
'6 4' => 'HDR2', #forum8906
|
2543
2562
|
'8 8' => 'Tripod high resolution', #IB
|
2544
2563
|
'9 *' => 'Focus-stacked (* images)', #IB (* = 2-15)
|
2545
|
-
'11
|
2564
|
+
'11 12' => 'Hand-held high resolution (11 12)', #forum13341 (OM-1)
|
2565
|
+
'11 16' => 'Hand-held high resolution (11 16)', #IB (perhaps '11 15' would be possible, ref 24)
|
2546
2566
|
OTHER => sub {
|
2547
2567
|
my ($val, $inv, $conv) = @_;
|
2548
2568
|
if ($inv) {
|
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
require Exporter;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.55';
|
25
25
|
|
26
26
|
sub FetchObject($$$$);
|
27
27
|
sub ExtractObject($$;$$);
|
@@ -2276,6 +2276,7 @@ XRef:
|
|
2276
2276
|
# load XRef stream in hybrid file if it exists
|
2277
2277
|
push @xrefOffsets, $$mainDict{XRefStm}, 'XRefStm' if $$mainDict{XRefStm};
|
2278
2278
|
$encrypt = $$mainDict{Encrypt} if $$mainDict{Encrypt};
|
2279
|
+
undef $encrypt if $encrypt and $encrypt eq 'null'; # (have seen "null")
|
2279
2280
|
if ($$mainDict{ID} and ref $$mainDict{ID} eq 'ARRAY') {
|
2280
2281
|
$id = ReadPDFValue($mainDict->{ID}->[0]);
|
2281
2282
|
}
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
use Image::ExifTool::Exif;
|
39
39
|
|
40
|
-
$VERSION = '2.
|
40
|
+
$VERSION = '2.18';
|
41
41
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
43
43
|
sub WhiteBalanceConv($;$$);
|
@@ -543,7 +543,11 @@ my %shootingMode = (
|
|
543
543
|
0x2c => [
|
544
544
|
{
|
545
545
|
Name => 'ContrastMode',
|
546
|
-
Condition =>
|
546
|
+
Condition => q{
|
547
|
+
$$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/ and
|
548
|
+
# tested for DC-GH6, but rule out other DC- models just in case - PH
|
549
|
+
$$self{Model} !~ /^DC-/
|
550
|
+
},
|
547
551
|
Flags => 'PrintHex',
|
548
552
|
Writable => 'int16u',
|
549
553
|
Notes => q{
|
@@ -1129,7 +1133,10 @@ my %shootingMode = (
|
|
1129
1133
|
8 => 'Cinelike D', #forum11194
|
1130
1134
|
9 => 'Cinelike V', #forum11194
|
1131
1135
|
11 => 'L. Monochrome', #forum11194
|
1136
|
+
12 => 'Like709', #forum14033
|
1132
1137
|
15 => 'L. Monochrome D', #forum11194
|
1138
|
+
17 => 'V-Log', #forum14033
|
1139
|
+
18 => 'Cinelike D2', #forum14033
|
1133
1140
|
},
|
1134
1141
|
},
|
1135
1142
|
0x8a => { #18
|
@@ -1255,8 +1262,9 @@ my %shootingMode = (
|
|
1255
1262
|
Writable => 'rational64u',
|
1256
1263
|
Format => 'int32u',
|
1257
1264
|
PrintConv => {
|
1258
|
-
'0 0' => 'Expressive',
|
1259
|
-
|
1265
|
+
# '0 0' => 'Expressive', #forum11194
|
1266
|
+
'0 0' => 'Off', #forum14033 (GH6)
|
1267
|
+
'0 1' => 'Expressive', #forum14033 (GH6) (have also seen this for XS1)
|
1260
1268
|
'0 2' => 'Retro',
|
1261
1269
|
'0 4' => 'High Key',
|
1262
1270
|
'0 8' => 'Sepia',
|
@@ -1435,6 +1443,15 @@ my %shootingMode = (
|
|
1435
1443
|
ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
|
1436
1444
|
ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
|
1437
1445
|
},
|
1446
|
+
0xe8 => { #PH (DC-GH6)
|
1447
|
+
Name => 'MinimumISO',
|
1448
|
+
Writable => 'int32u',
|
1449
|
+
},
|
1450
|
+
0xee => { #PH (DC-GH6)
|
1451
|
+
Name => 'DynamicRangeBoost',
|
1452
|
+
Writable => 'int16u',
|
1453
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
1454
|
+
},
|
1438
1455
|
0x0e00 => {
|
1439
1456
|
Name => 'PrintIM',
|
1440
1457
|
Description => 'Print Image Matching',
|
@@ -2472,6 +2489,15 @@ my %shootingMode = (
|
|
2472
2489
|
Start => 12,
|
2473
2490
|
},
|
2474
2491
|
},
|
2492
|
+
0x200080 => { # (GH6)
|
2493
|
+
Name => 'ExifData',
|
2494
|
+
Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s',
|
2495
|
+
SubDirectory => {
|
2496
|
+
TagTable => 'Image::ExifTool::Exif::Main',
|
2497
|
+
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
2498
|
+
Start => 12,
|
2499
|
+
},
|
2500
|
+
},
|
2475
2501
|
);
|
2476
2502
|
|
2477
2503
|
# Panasonic Composite tags
|
@@ -21,7 +21,7 @@ use vars qw($VERSION);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
use Image::ExifTool::Exif;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.27';
|
25
25
|
|
26
26
|
sub ProcessJpgFromRaw($$$);
|
27
27
|
sub WriteJpgFromRaw($$$);
|
@@ -218,6 +218,7 @@ my %panasonicWhiteBalance = ( #forum9396
|
|
218
218
|
0x30 => { Name => 'CropLeft', Writable => 'int16u' },
|
219
219
|
0x31 => { Name => 'CropBottom', Writable => 'int16u' },
|
220
220
|
0x32 => { Name => 'CropRight', Writable => 'int16u' },
|
221
|
+
# 0x44 - may contain another pointer to the raw data starting at byte 2 in this data (DC-GH6)
|
221
222
|
0x10f => {
|
222
223
|
Name => 'Make',
|
223
224
|
Groups => { 2 => 'Camera' },
|
@@ -737,6 +738,8 @@ sub WriteDistortionInfo($$$)
|
|
737
738
|
# 2 - value count
|
738
739
|
# 3 - reference to list of original offset values
|
739
740
|
# 4 - IFD format number
|
741
|
+
# 5 - (pointer to StripOffsets value added by this PatchRawDataOffset routine)
|
742
|
+
# 6 - flag set if this is a fixed offset (Panasonic GH6 fixed-offset hack)
|
740
743
|
sub PatchRawDataOffset($$$)
|
741
744
|
{
|
742
745
|
my ($offsetInfo, $raf, $ifd) = @_;
|
@@ -745,15 +748,32 @@ sub PatchRawDataOffset($$$)
|
|
745
748
|
my $rawDataOffset = $$offsetInfo{0x118};
|
746
749
|
my $err;
|
747
750
|
$err = 1 unless $ifd == 0;
|
748
|
-
|
749
|
-
|
751
|
+
if ($stripOffsets or $stripByteCounts) {
|
752
|
+
$err = 1 unless $stripOffsets and $stripByteCounts and $$stripOffsets[2] == 1;
|
753
|
+
} else {
|
754
|
+
# the DC-GH6 and DC-GH5M2 write RawDataOffset with no Strip tags, so we need
|
755
|
+
# to create fake StripByteCounts information for copying the data
|
756
|
+
if ($$offsetInfo{0x118}) { # (just to be safe)
|
757
|
+
$stripByteCounts = $$offsetInfo{0x117} = [ $PanasonicRaw::Main{0x117}, 0, 1, [ 0 ], 4 ];
|
758
|
+
# set flag so the offset will be fixed (GH6 hack, see https://exiftool.org/forum/index.php?topic=13861.0)
|
759
|
+
# (of course, fixing up the offset is now unnecessary, but continue to do this even
|
760
|
+
# though the fixup adjustment will be 0 because this allows us to delete the following
|
761
|
+
# line to remove the fix-offset restriction if Panasonic ever sees the light, but note
|
762
|
+
# that in this case we should investigate the purpose of the seemily-duplicate raw
|
763
|
+
# data offset contained within PanasonicRaw_0x0044)
|
764
|
+
$$offsetInfo{0x118}[6] = 1;
|
765
|
+
}
|
766
|
+
}
|
767
|
+
if ($rawDataOffset and not $err) {
|
750
768
|
$err = 1 unless $$rawDataOffset[2] == 1;
|
751
|
-
$
|
769
|
+
if ($stripOffsets) {
|
770
|
+
$err = 1 unless $$stripOffsets[3][0] == 0xffffffff or $$stripByteCounts[3][0] == 0;
|
771
|
+
}
|
752
772
|
}
|
753
773
|
$err and return 'Unsupported Panasonic/Leica RAW variant';
|
754
774
|
if ($rawDataOffset) {
|
755
775
|
# update StripOffsets along with this tag if it contains a reasonable value
|
756
|
-
|
776
|
+
if ($stripOffsets and $$stripOffsets[3][0] != 0xffffffff) {
|
757
777
|
# save pointer to StripOffsets value for updating later
|
758
778
|
push @$rawDataOffset, $$stripOffsets[1];
|
759
779
|
}
|
@@ -6,14 +6,16 @@
|
|
6
6
|
# Revisions: 2019-10-23 - P. Harvey Created
|
7
7
|
#
|
8
8
|
# References: 1) https://developer.parrot.com/docs/pdraw/metadata.html
|
9
|
+
# --> changed to https://developer.parrot.com/docs/pdraw/video-metadata.html
|
9
10
|
#------------------------------------------------------------------------------
|
10
11
|
|
11
12
|
package Image::ExifTool::Parrot;
|
12
13
|
|
13
14
|
use strict;
|
14
15
|
use vars qw($VERSION);
|
16
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
15
17
|
|
16
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.02';
|
17
19
|
|
18
20
|
sub Process_mett($$$);
|
19
21
|
|
@@ -21,7 +23,10 @@ sub Process_mett($$$);
|
|
21
23
|
%Image::ExifTool::Parrot::mett = (
|
22
24
|
PROCESS_PROC => \&Process_mett,
|
23
25
|
# put the 'P' records first in the documentation
|
24
|
-
VARS => {
|
26
|
+
VARS => {
|
27
|
+
SORT_PROC => sub { my ($a,$b)=@_; $a=~s/P/A/; $b=~s/P/A/; $a cmp $b },
|
28
|
+
LONG_TAGS => 1
|
29
|
+
},
|
25
30
|
NOTES => q{
|
26
31
|
Streaming metadata found in Parrot drone videos. See
|
27
32
|
L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
|
@@ -51,6 +56,23 @@ sub Process_mett($$$);
|
|
51
56
|
Name => 'ParrotAutomation',
|
52
57
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
|
53
58
|
},
|
59
|
+
# timed metadata written by ARCore (see forum13653)
|
60
|
+
'application/arcore-accel' => {
|
61
|
+
Name => 'ARCoreAccel',
|
62
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
|
63
|
+
},
|
64
|
+
'application/arcore-gyro' => {
|
65
|
+
Name => 'ARCoreGyro',
|
66
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
|
67
|
+
},
|
68
|
+
'application/arcore-video-0' => {
|
69
|
+
Name => 'ARCoreVideo',
|
70
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
|
71
|
+
},
|
72
|
+
'application/arcore-custom-event' => {
|
73
|
+
Name => 'ARCoreCustom',
|
74
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreCustom', ByteOrder => 'II' },
|
75
|
+
},
|
54
76
|
);
|
55
77
|
|
56
78
|
# tags found in the Parrot 'mett' V1 timed metadata (ref 1) [untested]
|
@@ -629,6 +651,69 @@ sub Process_mett($$$);
|
|
629
651
|
},
|
630
652
|
);
|
631
653
|
|
654
|
+
# ARCore Accel data (ref PH)
|
655
|
+
%Image::ExifTool::Parrot::ARCoreAccel = (
|
656
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
657
|
+
GROUPS => { 2 => 'Location' },
|
658
|
+
NOTES => 'ARCore accelerometer data.',
|
659
|
+
FIRST_ENTRY => 0,
|
660
|
+
# 00-04: always 10 34 16 1 29
|
661
|
+
4 => {
|
662
|
+
Name => 'AccelerometerUnknown',
|
663
|
+
Format => 'undef[16]',
|
664
|
+
Unknown => 1,
|
665
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
666
|
+
},
|
667
|
+
5 => { # (NC)
|
668
|
+
Name => 'Accelerometer',
|
669
|
+
Format => 'undef[14]',
|
670
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
671
|
+
},
|
672
|
+
# 05-08: float Accelerometer X
|
673
|
+
# 09: 37
|
674
|
+
# 10-13: float Accelerometer Y
|
675
|
+
# 14: 45
|
676
|
+
# 15-18: float Accelerometer Z
|
677
|
+
# 19: 48
|
678
|
+
# 20-24: 128-255
|
679
|
+
# 25: 246 then 247
|
680
|
+
# 26: 188
|
681
|
+
# 27: 2
|
682
|
+
# 28: 56
|
683
|
+
# 29-32: 128-255
|
684
|
+
# 33: increments slowly (about once every 56 samples or so)
|
685
|
+
);
|
686
|
+
|
687
|
+
# ARCore Gyro data (ref PH)
|
688
|
+
%Image::ExifTool::Parrot::ARCoreGyro = (
|
689
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
690
|
+
GROUPS => { 2 => 'Location' },
|
691
|
+
NOTES => 'ARCore accelerometer data.',
|
692
|
+
FIRST_ENTRY => 0,
|
693
|
+
# 00-04: always 10 34 16 3 29
|
694
|
+
4 => {
|
695
|
+
Name => 'GyroscopeUnknown',
|
696
|
+
Format => 'undef[16]',
|
697
|
+
Unknown => 1, # always "29 37 45 48" in my sample, just like AccelerometerUnknown
|
698
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
699
|
+
},
|
700
|
+
5 => { # (NC)
|
701
|
+
Name => 'Gyroscope',
|
702
|
+
Format => 'undef[14]',
|
703
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
704
|
+
},
|
705
|
+
);
|
706
|
+
|
707
|
+
%Image::ExifTool::Parrot::ARCoreVideo = (
|
708
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
709
|
+
FIRST_ENTRY => 0,
|
710
|
+
);
|
711
|
+
|
712
|
+
%Image::ExifTool::Parrot::ARCoreCustom = (
|
713
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
714
|
+
FIRST_ENTRY => 0,
|
715
|
+
);
|
716
|
+
|
632
717
|
%Image::ExifTool::Parrot::Composite = (
|
633
718
|
GPSDateTime => {
|
634
719
|
Description => 'GPS Date/Time',
|
@@ -676,9 +761,18 @@ sub Process_mett($$$)
|
|
676
761
|
my $dataPos = $$dirInfo{DataPos};
|
677
762
|
my $dirEnd = length $$dataPt;
|
678
763
|
my $pos = $$dirInfo{DirStart} || 0;
|
764
|
+
my $metaType = $$et{MetaType} || '';
|
679
765
|
|
680
766
|
$et->VerboseDir('Parrot mett', undef, $dirEnd);
|
681
767
|
|
768
|
+
if ($$tagTbl{$metaType}) {
|
769
|
+
$et->HandleTag($tagTbl, $metaType, undef,
|
770
|
+
DataPt => $dataPt,
|
771
|
+
DataPos => $dataPos,
|
772
|
+
Base => $$dirInfo{Base},
|
773
|
+
);
|
774
|
+
return 1;
|
775
|
+
}
|
682
776
|
while ($pos + 4 < $dirEnd) {
|
683
777
|
my ($id, $nwords) = unpack("x${pos}a2n", $$dataPt);
|
684
778
|
my $size;
|
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
|
|
58
58
|
use Image::ExifTool::GPS;
|
59
59
|
use Image::ExifTool::HP;
|
60
60
|
|
61
|
-
$VERSION = '3.
|
61
|
+
$VERSION = '3.41';
|
62
62
|
|
63
63
|
sub CryptShutterCount($$);
|
64
64
|
sub PrintFilter($$$);
|
@@ -171,7 +171,7 @@ sub DecodeAFPoints($$$$;$);
|
|
171
171
|
'3 255.4' => 'Sigma DF EX Aspherical 28-70mm F2.8', #12
|
172
172
|
'3 255.5' => 'Sigma AF Tele 400mm F5.6 Multi-coated', #JD
|
173
173
|
'3 255.6' => 'Sigma 24-60mm F2.8 EX DG', #PH
|
174
|
-
'3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD
|
174
|
+
'3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD (also DG Macro, ref 27)
|
175
175
|
'3 255.8' => 'Sigma 55-200mm F4-5.6 DC', #JD
|
176
176
|
'3 255.9' => 'Sigma 18-50mm F2.8 EX DC', #JD (also Macro version - PH)
|
177
177
|
'4 1' => 'smc PENTAX-FA SOFT 28mm F2.8',
|
@@ -365,10 +365,15 @@ sub DecodeAFPoints($$$$;$);
|
|
365
365
|
'8 255.4' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH
|
366
366
|
'8 255.5' => 'Sigma 50-200mm F4-5.6 DC OS', #26
|
367
367
|
'8 255.6' => 'Sigma 24-70mm F2.8 EX DG HSM', #29
|
368
|
+
|
369
|
+
'9 0' => '645 Manual Lens', #PH (NC)
|
370
|
+
'9 3' => 'HD PENTAX-FA 43mm F1.9 Limited', #IB
|
371
|
+
'9 24' => 'HD PENTAX-FA 77mm F1.8 Limited', #IB
|
372
|
+
'9 39' => 'HD PENTAX-FA 31mm F1.8 AL Limited', #IB
|
373
|
+
'9 247' => 'HD PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED [IF]', #IB
|
368
374
|
#
|
369
375
|
# 645 lenses
|
370
376
|
#
|
371
|
-
'9 0' => '645 Manual Lens', #PH (NC)
|
372
377
|
'10 0' => '645 A Series Lens', #PH
|
373
378
|
'11 1' => 'smc PENTAX-FA 645 75mm F2.8', #PH
|
374
379
|
'11 2' => 'smc PENTAX-FA 645 45mm F2.8', #PH
|
@@ -25,15 +25,28 @@
|
|
25
25
|
package Image::ExifTool::Photoshop;
|
26
26
|
|
27
27
|
use strict;
|
28
|
-
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo);
|
28
|
+
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
|
31
|
-
$VERSION = '1.
|
31
|
+
$VERSION = '1.67';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
35
35
|
sub ProcessLayers($$$);
|
36
36
|
|
37
|
+
# PrintFlags bit definitions (ref forum13785)
|
38
|
+
%printFlags = (
|
39
|
+
0 => 'Labels',
|
40
|
+
1 => 'Corner crop marks',
|
41
|
+
2 => 'Color bars', # (deprecated)
|
42
|
+
3 => 'Registration marks',
|
43
|
+
4 => 'Negative',
|
44
|
+
5 => 'Emulsion down',
|
45
|
+
6 => 'Interpolate', # (deprecated)
|
46
|
+
7 => 'Description',
|
47
|
+
8 => 'Print flags',
|
48
|
+
);
|
49
|
+
|
37
50
|
# map of where information is stored in PSD image
|
38
51
|
my %psdMap = (
|
39
52
|
IPTC => 'Photoshop',
|
@@ -106,7 +119,17 @@ my %unicodeString = (
|
|
106
119
|
0x03f0 => { Unknown => 1, Name => 'PStringCaption' },
|
107
120
|
0x03f1 => { Unknown => 1, Name => 'BorderInformation' },
|
108
121
|
0x03f2 => { Unknown => 1, Name => 'BackgroundColor' },
|
109
|
-
0x03f3 => {
|
122
|
+
0x03f3 => {
|
123
|
+
Unknown => 1,
|
124
|
+
Name => 'PrintFlags',
|
125
|
+
Format => 'int8u',
|
126
|
+
PrintConv => q{
|
127
|
+
my $byte = 0;
|
128
|
+
my @bits = $val =~ /\d+/g;
|
129
|
+
$byte = ($byte << 1) | ($_ ? 1 : 0) foreach reverse @bits;
|
130
|
+
return DecodeBits($byte, \%Image::ExifTool::Photoshop::printFlags);
|
131
|
+
},
|
132
|
+
},
|
110
133
|
0x03f4 => { Unknown => 1, Name => 'BW_HalftoningInfo' },
|
111
134
|
0x03f5 => { Unknown => 1, Name => 'ColorHalftoningInfo' },
|
112
135
|
0x03f6 => { Unknown => 1, Name => 'DuotoneHalftoningInfo' },
|
@@ -248,11 +271,12 @@ my %unicodeString = (
|
|
248
271
|
Protected => 1,
|
249
272
|
Notes => q{
|
250
273
|
this tag indicates provides a way for XMP-aware applications to indicate
|
251
|
-
that the XMP is synchronized with the IPTC.
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
274
|
+
that the XMP is synchronized with the IPTC. The MWG recommendation is to
|
275
|
+
ignore the XMP if IPTCDigest exists and doesn't match the CurrentIPTCDigest.
|
276
|
+
When writing, special values of "new" and "old" represent the digests of the
|
277
|
+
IPTC from the edited and original files respectively, and are undefined if
|
278
|
+
the IPTC does not exist in the respective file. Set this to "new" as an
|
279
|
+
indication that the XMP is synchronized with the IPTC
|
256
280
|
},
|
257
281
|
# also note the 'new' feature requires that the IPTC comes before this tag is written
|
258
282
|
ValueConv => 'unpack("H*", $val)',
|
@@ -331,6 +355,7 @@ my %unicodeString = (
|
|
331
355
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
332
356
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
333
357
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
358
|
+
DATAMEMBER => [ 1 ],
|
334
359
|
FORMAT => 'int16s',
|
335
360
|
GROUPS => { 2 => 'Image' },
|
336
361
|
0 => {
|
@@ -341,6 +366,7 @@ my %unicodeString = (
|
|
341
366
|
},
|
342
367
|
1 => {
|
343
368
|
Name => 'PhotoshopFormat',
|
369
|
+
RawConv => '$$self{PhotoshopFormat} = $val',
|
344
370
|
PrintConv => {
|
345
371
|
0x0000 => 'Standard',
|
346
372
|
0x0001 => 'Optimized',
|
@@ -349,6 +375,7 @@ my %unicodeString = (
|
|
349
375
|
},
|
350
376
|
2 => {
|
351
377
|
Name => 'ProgressiveScans',
|
378
|
+
Condition => '$$self{PhotoshopFormat} == 0x0101',
|
352
379
|
PrintConv => {
|
353
380
|
1 => '3 Scans',
|
354
381
|
2 => '4 Scans',
|