exiftool_vendored 12.41.0 → 12.50.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 +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',
|