exiftool-vendored.pl 12.85.0 → 12.91.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.
- package/bin/Changes +87 -0
- package/bin/MANIFEST +1 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +16 -16
- package/bin/README +3 -2
- package/bin/build_geolocation +7 -4
- package/bin/build_tag_lookup +29 -11
- package/bin/config_files/example.config +5 -0
- package/bin/config_files/onone.config +28 -0
- package/bin/exiftool +23 -15
- package/bin/lib/Image/ExifTool/AIFF.pm +8 -4
- package/bin/lib/Image/ExifTool/ASF.pm +4 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
- package/bin/lib/Image/ExifTool/Canon.pm +102 -12
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +5 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +6 -0
- package/bin/lib/Image/ExifTool/ID3.pm +39 -33
- package/bin/lib/Image/ExifTool/InDesign.pm +8 -4
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
- package/bin/lib/Image/ExifTool/Matroska.pm +66 -10
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +36 -2
- package/bin/lib/Image/ExifTool/Olympus.pm +27 -17
- package/bin/lib/Image/ExifTool/PNG.pm +10 -2
- package/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- package/bin/lib/Image/ExifTool/Pentax.pm +80 -14
- package/bin/lib/Image/ExifTool/QuickTime.pm +58 -13
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +111 -8
- package/bin/lib/Image/ExifTool/RIFF.pm +20 -10
- package/bin/lib/Image/ExifTool/Samsung.pm +56 -19
- package/bin/lib/Image/ExifTool/Sony.pm +21 -11
- package/bin/lib/Image/ExifTool/TagLookup.pm +6808 -6788
- package/bin/lib/Image/ExifTool/TagNames.pod +120 -55
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +84 -15
- package/bin/lib/Image/ExifTool/Writer.pl +7 -4
- package/bin/lib/Image/ExifTool/XMP.pm +8 -8
- package/bin/lib/Image/ExifTool/XMP2.pl +51 -30
- package/bin/lib/Image/ExifTool/ZIP.pm +8 -4
- package/bin/lib/Image/ExifTool.pm +65 -42
- package/bin/lib/Image/ExifTool.pod +28 -20
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +3 -3
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.79';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -630,6 +630,7 @@ $VERSION = '4.75';
|
|
|
630
630
|
'61182.53' => 'Canon RF 28mm F2.8 STM', #42
|
|
631
631
|
'61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
|
632
632
|
'61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
|
633
|
+
'61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
|
|
633
634
|
65535 => 'n/a',
|
|
634
635
|
);
|
|
635
636
|
|
|
@@ -2128,6 +2129,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2128
2129
|
TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
|
|
2129
2130
|
}
|
|
2130
2131
|
},
|
|
2132
|
+
0x4059 => { #forum16111
|
|
2133
|
+
Name => 'LevelInfo',
|
|
2134
|
+
SubDirectory => {
|
|
2135
|
+
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
|
|
2136
|
+
TagTable => 'Image::ExifTool::Canon::LevelInfo',
|
|
2137
|
+
}
|
|
2138
|
+
},
|
|
2131
2139
|
);
|
|
2132
2140
|
|
|
2133
2141
|
#..............................................................................
|
|
@@ -2590,6 +2598,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2590
2598
|
},
|
|
2591
2599
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
|
2592
2600
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
|
2601
|
+
# 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
|
|
2593
2602
|
51 => { #forum16036 (EOS R models)
|
|
2594
2603
|
Name => 'Clarity',
|
|
2595
2604
|
PrintConv => {
|
|
@@ -4722,12 +4731,15 @@ my %ciMaxFocal = (
|
|
|
4722
4731
|
FIRST_ENTRY => 0,
|
|
4723
4732
|
PRIORITY => 0,
|
|
4724
4733
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4725
|
-
NOTES => 'CameraInfo tags for the EOS R6.',
|
|
4734
|
+
NOTES => 'CameraInfo tags for the EOS R5 and R6.',
|
|
4735
|
+
# (see forum16111 for more notes on these tags)
|
|
4736
|
+
# 0x0a5d - some sort of sequence number starting from 1 (ref forum16111)
|
|
4726
4737
|
0x0af1 => { #forum15210/15579
|
|
4727
4738
|
Name => 'ShutterCount',
|
|
4728
4739
|
Format => 'int32u',
|
|
4729
4740
|
Notes => 'includes electronic + mechanical shutter',
|
|
4730
4741
|
},
|
|
4742
|
+
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
|
4731
4743
|
);
|
|
4732
4744
|
|
|
4733
4745
|
# ref https://exiftool.org/forum/index.php?topic=15356.0
|
|
@@ -6389,8 +6401,14 @@ my %ciMaxFocal = (
|
|
|
6389
6401
|
10 => 'AF Point Expansion (8 point)', #forum6237
|
|
6390
6402
|
11 => 'Flexizone Multi (49 point)', #PH (NC, EOS M, live view; 750D 49 points)
|
|
6391
6403
|
12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
|
|
6392
|
-
13 => 'Flexizone Single', #PH (EOS M default, live view)
|
|
6404
|
+
13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
|
|
6393
6405
|
14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
|
|
6406
|
+
16 => 'Large Zone AF (vertical)', #forum16223
|
|
6407
|
+
17 => 'Large Zone AF (horizontal)', #forum16223
|
|
6408
|
+
19 => 'Flexible Zone AF 1', #github268 (R7)
|
|
6409
|
+
20 => 'Flexible Zone AF 2', #github268 (R7)
|
|
6410
|
+
21 => 'Flexible Zone AF 3', #github268 (R7)
|
|
6411
|
+
22 => 'Whole Area AF', #github268 (R7)
|
|
6394
6412
|
},
|
|
6395
6413
|
},
|
|
6396
6414
|
2 => {
|
|
@@ -6905,6 +6923,10 @@ my %ciMaxFocal = (
|
|
|
6905
6923
|
Name => 'FlashExposureLock',
|
|
6906
6924
|
PrintConv => \%offOn,
|
|
6907
6925
|
},
|
|
6926
|
+
32 => { #forum16257
|
|
6927
|
+
Name => 'AntiFlicker',
|
|
6928
|
+
PrintConv => \%offOn,
|
|
6929
|
+
},
|
|
6908
6930
|
0x3d => { #IB
|
|
6909
6931
|
Name => 'RFLensType',
|
|
6910
6932
|
Format => 'int16u',
|
|
@@ -6969,6 +6991,7 @@ my %ciMaxFocal = (
|
|
|
6969
6991
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
|
6970
6992
|
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
|
6971
6993
|
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
|
6994
|
+
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
|
6972
6995
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6973
6996
|
},
|
|
6974
6997
|
},
|
|
@@ -8768,7 +8791,7 @@ my %ciMaxFocal = (
|
|
|
8768
8791
|
Name => 'DigitalLensOptimizer',
|
|
8769
8792
|
PrintConv => {
|
|
8770
8793
|
0 => 'Off',
|
|
8771
|
-
1 => '
|
|
8794
|
+
1 => 'Standard',
|
|
8772
8795
|
2 => 'High',
|
|
8773
8796
|
},
|
|
8774
8797
|
},
|
|
@@ -9001,20 +9024,32 @@ my %filterConv = (
|
|
|
9001
9024
|
4 => 'Focus High Priority',
|
|
9002
9025
|
},
|
|
9003
9026
|
},
|
|
9004
|
-
7 => { #
|
|
9027
|
+
7 => [{ #forum16068
|
|
9005
9028
|
Name => 'USMLensElectronicMF',
|
|
9029
|
+
Condition => '$$self{Model} =~ /EOS R\d/',
|
|
9030
|
+
Notes => 'EOS R models',
|
|
9031
|
+
PrintConv => {
|
|
9032
|
+
0 => 'Disable After One-Shot',
|
|
9033
|
+
1 => 'One-Shot -> Enabled',
|
|
9034
|
+
2 => 'One-Shot -> Enabled (magnify)',
|
|
9035
|
+
3 => 'Disable in AF Mode',
|
|
9036
|
+
},
|
|
9037
|
+
},{ #52
|
|
9038
|
+
Name => 'USMLensElectronicMF',
|
|
9039
|
+
Notes => 'Other models',
|
|
9006
9040
|
PrintConv => {
|
|
9007
9041
|
0 => 'Enable After AF',
|
|
9008
9042
|
1 => 'Disable After AF',
|
|
9009
9043
|
2 => 'Disable in AF Mode',
|
|
9010
9044
|
},
|
|
9011
|
-
},
|
|
9045
|
+
}],
|
|
9012
9046
|
8 => { #52
|
|
9013
9047
|
Name => 'AFAssistBeam',
|
|
9014
9048
|
PrintConv => {
|
|
9015
9049
|
0 => 'Enable',
|
|
9016
9050
|
1 => 'Disable',
|
|
9017
9051
|
2 => 'IR AF Assist Beam Only',
|
|
9052
|
+
3 => 'LED AF Assist Beam Only', #forum16068
|
|
9018
9053
|
},
|
|
9019
9054
|
},
|
|
9020
9055
|
9 => { #52
|
|
@@ -9094,25 +9129,38 @@ my %filterConv = (
|
|
|
9094
9129
|
2 => 'Disable',
|
|
9095
9130
|
},
|
|
9096
9131
|
},
|
|
9097
|
-
18 => { #52
|
|
9132
|
+
18 => { #52/forum16223
|
|
9098
9133
|
Name => 'AFStatusViewfinder',
|
|
9099
|
-
Condition => '$$self{Model} =~ /1D X/',
|
|
9100
|
-
Notes => '1D X
|
|
9134
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
|
9135
|
+
Notes => '1D X and R models',
|
|
9101
9136
|
PrintConv => {
|
|
9102
9137
|
0 => 'Show in Field of View',
|
|
9103
9138
|
1 => 'Show Outside View',
|
|
9104
9139
|
},
|
|
9105
9140
|
},
|
|
9106
|
-
19 => { #52
|
|
9141
|
+
19 => { #52/forum16223
|
|
9107
9142
|
Name => 'InitialAFPointInServo',
|
|
9108
|
-
Condition => '$$self{Model} =~ /1D X/',
|
|
9109
|
-
Notes => '1D X
|
|
9143
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
|
9144
|
+
Notes => '1D X and R models',
|
|
9110
9145
|
PrintConv => {
|
|
9111
9146
|
0 => 'Initial AF Point Selected',
|
|
9112
9147
|
1 => 'Manual AF Point',
|
|
9113
9148
|
2 => 'Auto', #PH (1DXmkII)
|
|
9114
9149
|
},
|
|
9115
9150
|
},
|
|
9151
|
+
20 => { #forum16068
|
|
9152
|
+
Name => 'SubjectToDetect',
|
|
9153
|
+
PrintConv => {
|
|
9154
|
+
0 => 'None',
|
|
9155
|
+
1 => 'People',
|
|
9156
|
+
2 => 'Animals',
|
|
9157
|
+
3 => 'Vehicles',
|
|
9158
|
+
},
|
|
9159
|
+
},
|
|
9160
|
+
24 => { #forum16068
|
|
9161
|
+
Name => 'EyeDetection',
|
|
9162
|
+
PrintConv => \%offOn,
|
|
9163
|
+
},
|
|
9116
9164
|
);
|
|
9117
9165
|
|
|
9118
9166
|
# RAW burst mode info (MakerNotes tag 0x403f) (ref 25)
|
|
@@ -9125,6 +9173,48 @@ my %filterConv = (
|
|
|
9125
9173
|
2 => 'RawBurstImageCount',
|
|
9126
9174
|
);
|
|
9127
9175
|
|
|
9176
|
+
# level information (ref forum16111, EOS R5)
|
|
9177
|
+
%Image::ExifTool::Canon::LevelInfo = (
|
|
9178
|
+
%binaryDataAttrs,
|
|
9179
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9180
|
+
FORMAT => 'int32s',
|
|
9181
|
+
FIRST_ENTRY => 1,
|
|
9182
|
+
4 => {
|
|
9183
|
+
Name => 'RollAngle',
|
|
9184
|
+
Notes => 'converted to degrees of clockwise camera rotation',
|
|
9185
|
+
ValueConv => '$val > 1800 and $val -= 3600; -$val / 10',
|
|
9186
|
+
ValueConvInv => '$val > 0 and $val -= 360; int(-$val * 10 + 0.5)',
|
|
9187
|
+
},
|
|
9188
|
+
5 => {
|
|
9189
|
+
Name => 'PitchAngle',
|
|
9190
|
+
Notes => 'converted to degrees of upward camera tilt',
|
|
9191
|
+
ValueConv => '$val > 1800 and $val -= 3600; $val / 10',
|
|
9192
|
+
ValueConvInv => '$val < 0 and $val += 360; int($val * 10 + 0.5)',
|
|
9193
|
+
},
|
|
9194
|
+
7 => {
|
|
9195
|
+
Name => 'FocalLength',
|
|
9196
|
+
ValueConv => '$val / 10',
|
|
9197
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9198
|
+
PrintConv => '"$val mm"',
|
|
9199
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9200
|
+
},
|
|
9201
|
+
8 => {
|
|
9202
|
+
Name => 'MinFocalLength',
|
|
9203
|
+
ValueConv => '$val / 10',
|
|
9204
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9205
|
+
PrintConv => '"$val mm"',
|
|
9206
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9207
|
+
},
|
|
9208
|
+
9 => {
|
|
9209
|
+
Name => 'MaxFocalLength',
|
|
9210
|
+
ValueConv => '$val / 10',
|
|
9211
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9212
|
+
PrintConv => '"$val mm"',
|
|
9213
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9214
|
+
},
|
|
9215
|
+
|
|
9216
|
+
);
|
|
9217
|
+
|
|
9128
9218
|
# Canon UUID atoms (ref PH, SX280)
|
|
9129
9219
|
%Image::ExifTool::Canon::uuid = (
|
|
9130
9220
|
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
|
|
@@ -1212,9 +1212,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1212
1212
|
4 => 'Emphasize Center',
|
|
1213
1213
|
},
|
|
1214
1214
|
},
|
|
1215
|
+
0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
|
|
1215
1216
|
# 0x20800 - fmt=1: 0
|
|
1216
1217
|
# 0x20801 - fmt=1: 0
|
|
1217
|
-
0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
|
|
1218
1218
|
0x20900 => 'ColorHue',
|
|
1219
1219
|
0x20901 => 'SaturationAdj',
|
|
1220
1220
|
0x20910 => 'RedHSL',
|
|
@@ -1282,6 +1282,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1282
1282
|
# 0xf0521 - DLO data
|
|
1283
1283
|
# 0xf0520 - DLO data
|
|
1284
1284
|
# 0xf0530 - created when dust delete data applied (4 bytes, all zero)
|
|
1285
|
+
# 0xf0561 - 1932 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1286
|
+
# 0xf0562 - 1596 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1287
|
+
# 0xf0566 - 1520 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1285
1288
|
# 0xf0600 - fmt=253 (2308 bytes, JPG images)
|
|
1286
1289
|
# 0xf0601 - fmt=253 (2308 bytes, JPG images)
|
|
1287
1290
|
# 0x1ff52c - values: 129,130,132 (related to custom picture style somehow)
|
|
@@ -1303,7 +1306,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1303
1306
|
# 2 - value: 6
|
|
1304
1307
|
3 => {
|
|
1305
1308
|
Name => 'DR4CameraModel',
|
|
1306
|
-
|
|
1309
|
+
Format => 'int32u',
|
|
1307
1310
|
PrintHex => 1,
|
|
1308
1311
|
SeparateTable => 'Canon CanonModelID',
|
|
1309
1312
|
PrintConv => \%Image::ExifTool::Canon::canonModelID,
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.95';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -1169,6 +1169,46 @@ my %faceCategories = (
|
|
|
1169
1169
|
Face8Birthday => { },
|
|
1170
1170
|
);
|
|
1171
1171
|
|
|
1172
|
+
# tags extracted from RAF header
|
|
1173
|
+
%Image::ExifTool::FujiFilm::RAFHeader = (
|
|
1174
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
1175
|
+
GROUPS => { 0 => 'RAF', 1 => 'RAF', 2 => 'Image' },
|
|
1176
|
+
NOTES => 'Tags extracted from the header of RAF images.',
|
|
1177
|
+
# 0x00 - eg. "FUJIFILMCCD-RAW 0201FA392001FinePix S3Pro"
|
|
1178
|
+
0x3c => { #PH
|
|
1179
|
+
Name => 'RAFVersion',
|
|
1180
|
+
Format => 'undef[4]',
|
|
1181
|
+
},
|
|
1182
|
+
# (all int32u values)
|
|
1183
|
+
# 0x40 - 1 for M-RAW, 0 otherwise?
|
|
1184
|
+
# 0x44 - high word of M-RAW offset? (only seen zero)
|
|
1185
|
+
# 0x48 - M-RAW header offset
|
|
1186
|
+
# 0x4c - M-RAW header length
|
|
1187
|
+
# 0x50 - ? (only seen zero)
|
|
1188
|
+
# 0x54 - JPEG offset
|
|
1189
|
+
# 0x58 - JPEG length
|
|
1190
|
+
# 0x5c - RAF directory offset
|
|
1191
|
+
# 0x60 - RAF directory length
|
|
1192
|
+
# 0x64 - FujiIFD dir offset
|
|
1193
|
+
# 0x68 - FujiIFD dir length
|
|
1194
|
+
# 0x6c - RAFCompression or JPEG start
|
|
1195
|
+
0x6c => { #10
|
|
1196
|
+
Name => 'RAFCompression',
|
|
1197
|
+
Condition => '$$valPt =~ /^\0\0\0/', # (JPEG header is in this location for some RAF versions)
|
|
1198
|
+
Format => 'int32u',
|
|
1199
|
+
PrintConv => { 0 => 'Uncompressed', 2 => 'Lossless', 3 => 'Lossy' },
|
|
1200
|
+
},
|
|
1201
|
+
# 0x70 - ? same as 0x68?
|
|
1202
|
+
# 0x74 - ? usually 0, but have seen 0x1700
|
|
1203
|
+
# 0x78 - RAF1 dir offset
|
|
1204
|
+
# 0x7c - RAF1 dir length
|
|
1205
|
+
# 0x80 - FujiIFD1 dir offset
|
|
1206
|
+
# 0x84 - FujiIFD1 dir length
|
|
1207
|
+
# 0x88-0x8c - always zero?
|
|
1208
|
+
# 0x90 - ? same as 0x74?
|
|
1209
|
+
# 0x94 - JPEG or M-RAW start
|
|
1210
|
+
);
|
|
1211
|
+
|
|
1172
1212
|
# tags in RAF images (ref 5)
|
|
1173
1213
|
%Image::ExifTool::FujiFilm::RAF = (
|
|
1174
1214
|
PROCESS_PROC => \&ProcessFujiDir,
|
|
@@ -1797,7 +1837,7 @@ sub ProcessRAF($$)
|
|
|
1797
1837
|
my ($buff, $jpeg, $warn, $offset);
|
|
1798
1838
|
|
|
1799
1839
|
my $raf = $$dirInfo{RAF};
|
|
1800
|
-
$raf->Read($buff,
|
|
1840
|
+
$raf->Read($buff,0x70) == 0x70 or return 0;
|
|
1801
1841
|
$buff =~ /^FUJIFILM/ or return 0;
|
|
1802
1842
|
# get position and size of M-RAW header and jpeg preview
|
|
1803
1843
|
my ($mpos, $mlen) = unpack('x72NN', $buff);
|
|
@@ -1807,9 +1847,11 @@ sub ProcessRAF($$)
|
|
|
1807
1847
|
$raf->Seek($jpos, 0) or return 0;
|
|
1808
1848
|
$raf->Read($jpeg, $jlen) == $jlen or return 0;
|
|
1809
1849
|
}
|
|
1850
|
+
SetByteOrder('MM');
|
|
1810
1851
|
$et->SetFileType();
|
|
1811
|
-
$
|
|
1812
|
-
|
|
1852
|
+
my $tbl = GetTagTable('Image::ExifTool::FujiFilm::RAFHeader');
|
|
1853
|
+
$et->ProcessDirectory({ DataPt => \$buff, DirName => 'RAFHeader' }, $tbl);
|
|
1854
|
+
|
|
1813
1855
|
# extract information from embedded JPEG
|
|
1814
1856
|
my %dirInfo = (
|
|
1815
1857
|
Parent => 'RAF',
|
|
Binary file
|
|
@@ -509,6 +509,12 @@ sub Geolocate($;$)
|
|
|
509
509
|
$city = '' unless defined $city;
|
|
510
510
|
} elsif (/^[-+]?\d+(\.\d+)?$/) { # coordinate format
|
|
511
511
|
push @coords, $_ if @coords < 2;
|
|
512
|
+
} elsif (/^([-+]?\d+(?:\.\d+)?) *(([NS])[A-Z]*)? +([-+]?\d+(?:\.\d+)?) *(([EW])[A-Z]*)?/i) { # "lat lon" format
|
|
513
|
+
next if @coords;
|
|
514
|
+
my ($lat, $lon) = ($1, $4);
|
|
515
|
+
$lat = -abs($lat) if $3 and uc($3) eq 'S';
|
|
516
|
+
$lon = -abs($lon) if $6 and uc($6) eq 'W';
|
|
517
|
+
push @coords, $lat, $lon;
|
|
512
518
|
} elsif (lc $_ eq 'both') {
|
|
513
519
|
$both = 1;
|
|
514
520
|
} elsif ($_ =~ /^num=(\d+)$/i) {
|
|
@@ -18,7 +18,7 @@ use strict;
|
|
|
18
18
|
use vars qw($VERSION);
|
|
19
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.62';
|
|
22
22
|
|
|
23
23
|
sub ProcessID3v2($$$);
|
|
24
24
|
sub ProcessPrivate($$$);
|
|
@@ -68,6 +68,12 @@ my %dateTimeConv = (
|
|
|
68
68
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
69
69
|
);
|
|
70
70
|
|
|
71
|
+
# patch for names of user-defined tags which don't automatically generate very well
|
|
72
|
+
my %userTagName = (
|
|
73
|
+
ALBUMARTISTSORT => 'AlbumArtistSort',
|
|
74
|
+
ASIN => 'ASIN',
|
|
75
|
+
);
|
|
76
|
+
|
|
71
77
|
# This table is just for documentation purposes
|
|
72
78
|
%Image::ExifTool::ID3::Main = (
|
|
73
79
|
VARS => { NO_ID => 1 },
|
|
@@ -103,14 +109,6 @@ my %dateTimeConv = (
|
|
|
103
109
|
},
|
|
104
110
|
);
|
|
105
111
|
|
|
106
|
-
%Image::ExifTool::ID3::UserDefined = (
|
|
107
|
-
GROUPS => { 1 => 'UserDefined', 2 => 'Other' },
|
|
108
|
-
NOTES => q{
|
|
109
|
-
ID3 user-defined text and URL tags will be dynamically added to this table
|
|
110
|
-
by name when found.
|
|
111
|
-
},
|
|
112
|
-
);
|
|
113
|
-
|
|
114
112
|
# Lyrics3 tags (ref 4)
|
|
115
113
|
%Image::ExifTool::ID3::Lyrics3 = (
|
|
116
114
|
GROUPS => { 1 => 'Lyrics3', 2 => 'Audio' },
|
|
@@ -501,7 +499,7 @@ my %genre = (
|
|
|
501
499
|
TT2 => 'Title',
|
|
502
500
|
TT3 => 'Subtitle',
|
|
503
501
|
TXT => 'Lyricist',
|
|
504
|
-
TXX =>
|
|
502
|
+
TXX => 'UserDefinedText',
|
|
505
503
|
TYE => { Name => 'Year', Groups => { 2 => 'Time' } },
|
|
506
504
|
ULT => 'Lyrics',
|
|
507
505
|
WAF => 'FileURL',
|
|
@@ -510,7 +508,7 @@ my %genre = (
|
|
|
510
508
|
WCM => 'CommercialURL',
|
|
511
509
|
WCP => { Name => 'CopyrightURL', Groups => { 2 => 'Author' } },
|
|
512
510
|
WPB => 'PublisherURL',
|
|
513
|
-
WXX =>
|
|
511
|
+
WXX => 'UserDefinedURL',
|
|
514
512
|
# the following written by iTunes 10.5 (ref PH)
|
|
515
513
|
RVA => 'RelativeVolumeAdjustment',
|
|
516
514
|
TST => 'TitleSortOrder',
|
|
@@ -613,7 +611,7 @@ my %id3v2_common = (
|
|
|
613
611
|
TRSO => 'InternetRadioStationOwner',
|
|
614
612
|
TSRC => 'ISRC', # (international standard recording code)
|
|
615
613
|
TSSE => 'EncoderSettings',
|
|
616
|
-
TXXX =>
|
|
614
|
+
TXXX => 'UserDefinedText',
|
|
617
615
|
# UFID => 'UniqueFileID', (not extracted because it is long and nasty and not very useful)
|
|
618
616
|
USER => 'TermsOfUse',
|
|
619
617
|
USLT => 'Lyrics',
|
|
@@ -625,7 +623,7 @@ my %id3v2_common = (
|
|
|
625
623
|
WORS => 'InternetRadioStationURL',
|
|
626
624
|
WPAY => 'PaymentURL',
|
|
627
625
|
WPUB => 'PublisherURL',
|
|
628
|
-
WXXX =>
|
|
626
|
+
WXXX => 'UserDefinedURL',
|
|
629
627
|
#
|
|
630
628
|
# non-standard frames
|
|
631
629
|
#
|
|
@@ -879,6 +877,19 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::ID3');
|
|
|
879
877
|
}
|
|
880
878
|
}
|
|
881
879
|
|
|
880
|
+
#------------------------------------------------------------------------------
|
|
881
|
+
# Make tag name for user-defined tag
|
|
882
|
+
# Inputs: 0) User defined tag description
|
|
883
|
+
# Returns: Tag name
|
|
884
|
+
sub MakeTagName($)
|
|
885
|
+
{
|
|
886
|
+
my $name = shift;
|
|
887
|
+
return $userTagName{$name} if $userTagName{$name};
|
|
888
|
+
$name = ucfirst(lc $name) unless $name =~ /[a-z]/; # convert all uppercase to mixed case
|
|
889
|
+
$name =~ s/([a-z])[_ ]([a-z])/$1\U$2/g;
|
|
890
|
+
return Image::ExifTool::MakeTagName($name);
|
|
891
|
+
}
|
|
892
|
+
|
|
882
893
|
#------------------------------------------------------------------------------
|
|
883
894
|
# Convert ID3v1 text to exiftool character set
|
|
884
895
|
# Inputs: 0) ExifTool object ref, 1) text string
|
|
@@ -1255,39 +1266,34 @@ sub ProcessID3v2($$$)
|
|
|
1255
1266
|
# two encoded strings separated by a null
|
|
1256
1267
|
my @vals = DecodeString($et, $val);
|
|
1257
1268
|
foreach (0..1) { $vals[$_] = '' unless defined $vals[$_]; }
|
|
1258
|
-
$vals[0]
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
my $name = Image::ExifTool::MakeTagName($vals[0]);
|
|
1262
|
-
AddTagToTable($tbl, $vals[0], $name, 1);
|
|
1269
|
+
if (length $vals[0]) {
|
|
1270
|
+
$id .= "_$vals[0]";
|
|
1271
|
+
$tagInfo = $$tagTablePtr{$id} || AddTagToTable($tagTablePtr, $id, MakeTagName($vals[0]));
|
|
1263
1272
|
}
|
|
1264
|
-
$
|
|
1265
|
-
next;
|
|
1273
|
+
$val = $vals[1];
|
|
1266
1274
|
} elsif ($id =~ /^T/ or $id =~ /^(IPL|IPLS|GP1|MVI|MVN)$/) {
|
|
1267
1275
|
$val = DecodeString($et, $val);
|
|
1268
1276
|
} elsif ($id =~ /^(WXX|WXXX)$/) {
|
|
1269
1277
|
# one encoded string and one Latin string separated by a null
|
|
1270
1278
|
my $enc = unpack('C', $val);
|
|
1271
|
-
my $url;
|
|
1279
|
+
my ($tag, $url);
|
|
1272
1280
|
if ($enc == 1 or $enc == 2) {
|
|
1273
|
-
($
|
|
1281
|
+
($tag, $url) = ($tag =~ /^(.(?:..)*?)\0\0(.*)/s);
|
|
1274
1282
|
} else {
|
|
1275
|
-
($
|
|
1283
|
+
($tag, $url) = ($tag =~ /^(..*?)\0(.*)/s);
|
|
1276
1284
|
}
|
|
1277
|
-
unless (defined $
|
|
1285
|
+
unless (defined $tag and defined $url) {
|
|
1278
1286
|
$et->Warn("Invalid $id frame value");
|
|
1279
1287
|
next;
|
|
1280
1288
|
}
|
|
1281
|
-
$
|
|
1282
|
-
$
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
my $name = Image::ExifTool::MakeTagName($val);
|
|
1287
|
-
AddTagToTable($tbl, $val, $name, 1);
|
|
1289
|
+
$tag = DecodeString($et, $tag);
|
|
1290
|
+
if (length $tag) {
|
|
1291
|
+
$id .= "_$tag";
|
|
1292
|
+
$tag .= '_URL' unless $tag =~ /url/i;
|
|
1293
|
+
$tagInfo = $$tagTablePtr{$id} || AddTagToTable($tagTablePtr, $id, MakeTagName($tag));
|
|
1288
1294
|
}
|
|
1289
|
-
$
|
|
1290
|
-
|
|
1295
|
+
$url =~ s/\0.*//s;
|
|
1296
|
+
$val = $url;
|
|
1291
1297
|
} elsif ($id =~ /^W/) {
|
|
1292
1298
|
$val =~ s/\0.*//s; # truncate at null
|
|
1293
1299
|
} elsif ($id =~ /^(COM|COMM|ULT|USLT)$/) {
|
|
@@ -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.07';
|
|
18
18
|
|
|
19
19
|
# map for writing metadata to InDesign files (currently only write XMP)
|
|
20
20
|
my %indMap = (
|
|
@@ -73,9 +73,13 @@ sub ProcessIND($$)
|
|
|
73
73
|
my $pages = Get32u($curPage, 280);
|
|
74
74
|
$pages < 2 and $err = 'Invalid page count', goto DONE;
|
|
75
75
|
my $pos = $pages * 4096;
|
|
76
|
-
if ($pos > 0x7fffffff
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
if ($pos > 0x7fffffff) {
|
|
77
|
+
if (not $et->Options('LargeFileSupport')) {
|
|
78
|
+
$err = 'InDesign files larger than 2 GB not supported (LargeFileSupport not set)';
|
|
79
|
+
goto DONE;
|
|
80
|
+
} elsif ($et->Options('LargeFileSupport') eq '2') {
|
|
81
|
+
$et->WarnOnce('Processing large file (LargeFileSupport is 2)');
|
|
82
|
+
}
|
|
79
83
|
}
|
|
80
84
|
if ($outfile) {
|
|
81
85
|
# make XMP the preferred group for writing
|
|
@@ -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.37';
|
|
15
15
|
|
|
16
16
|
%Image::ExifTool::Lang::de::Translate = (
|
|
17
17
|
'AEAperture' => 'AE-Blende',
|
|
@@ -5118,7 +5118,7 @@ $VERSION = '1.36';
|
|
|
5118
5118
|
'LensMake' => 'Objektivhersteller',
|
|
5119
5119
|
'LensManufacturer' => 'Objektivhersteller',
|
|
5120
5120
|
'LensMaxApertureRange' => 'Objektiv Blendenbereich',
|
|
5121
|
-
'LensModel' => '
|
|
5121
|
+
'LensModel' => 'Objektivmodell',
|
|
5122
5122
|
'LensProfileDigest' => 'Kennwert des Objektivprofils',
|
|
5123
5123
|
'LensProperties' => 'Objektivfunktionen?',
|
|
5124
5124
|
'LensSerialNumber' => 'Objektiv-Seriennummer',
|