exiftool_vendored 12.18.0 → 12.33.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +236 -4
  3. data/bin/MANIFEST +23 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -43
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/acdsee.config +193 -6
  9. data/bin/config_files/convert_regions.config +25 -14
  10. data/bin/config_files/cuepointlist.config +70 -0
  11. data/bin/config_files/example.config +2 -9
  12. data/bin/exiftool +152 -97
  13. data/bin/fmt_files/gpx.fmt +2 -2
  14. data/bin/fmt_files/gpx_wpt.fmt +2 -2
  15. data/bin/fmt_files/kml.fmt +1 -1
  16. data/bin/fmt_files/kml_track.fmt +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
  19. data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
  20. data/bin/lib/Image/ExifTool/Canon.pm +44 -19
  21. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  22. data/bin/lib/Image/ExifTool/DPX.pm +13 -2
  23. data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
  24. data/bin/lib/Image/ExifTool/Exif.pm +124 -13
  25. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  26. data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
  27. data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
  28. data/bin/lib/Image/ExifTool/GPS.pm +22 -11
  29. data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
  30. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  31. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  32. data/bin/lib/Image/ExifTool/ID3.pm +15 -3
  33. data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
  34. data/bin/lib/Image/ExifTool/JSON.pm +30 -5
  35. data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
  36. data/bin/lib/Image/ExifTool/LIF.pm +153 -0
  37. data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
  38. data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
  39. data/bin/lib/Image/ExifTool/MIE.pm +4 -3
  40. data/bin/lib/Image/ExifTool/MRC.pm +341 -0
  41. data/bin/lib/Image/ExifTool/MWG.pm +3 -3
  42. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/MacOS.pm +3 -3
  44. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  45. data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
  46. data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
  47. data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
  48. data/bin/lib/Image/ExifTool/Other.pm +93 -0
  49. data/bin/lib/Image/ExifTool/PDF.pm +9 -12
  50. data/bin/lib/Image/ExifTool/PNG.pm +8 -7
  51. data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
  52. data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
  53. data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
  57. data/bin/lib/Image/ExifTool/README +5 -2
  58. data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
  59. data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
  60. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  61. data/bin/lib/Image/ExifTool/Sony.pm +230 -69
  62. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  63. data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
  64. data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
  65. data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
  66. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  67. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  68. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  69. data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
  70. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
  71. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
  72. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
  73. data/bin/lib/Image/ExifTool/Writer.pl +47 -10
  74. data/bin/lib/Image/ExifTool/XMP.pm +45 -15
  75. data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
  76. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  77. data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
  78. data/bin/lib/Image/ExifTool.pm +233 -81
  79. data/bin/lib/Image/ExifTool.pod +114 -93
  80. data/bin/perl-Image-ExifTool.spec +43 -42
  81. data/lib/exiftool_vendored/version.rb +1 -1
  82. metadata +28 -13
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::QuickTime;
18
18
 
19
- $VERSION = '1.06';
19
+ $VERSION = '1.07';
20
20
 
21
21
  sub ProcessGoPro($$$);
22
22
  sub ProcessString($$$);
@@ -386,6 +386,21 @@ my %addUnits = (
386
386
  Binary => 1,
387
387
  },
388
388
  # ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
389
+ # the following ref forum12825
390
+ MUID => {
391
+ Name => 'MediaUniqueID',
392
+ PrintConv => q{
393
+ my @a = split ' ', $val;
394
+ $_ = sprintf('%.8x',$_) foreach @a;
395
+ return join('', @a);
396
+ },
397
+ },
398
+ EXPT => 'MaximumShutterAngle',
399
+ MTRX => 'AccelerometerMatrix',
400
+ ORIN => 'InputOrientation',
401
+ ORIO => 'OutputOrientation',
402
+ UNIF => 'InputUniformity',
403
+ SROT => 'SensorReadoutTime',
389
404
  );
390
405
 
391
406
  # GoPro GPS5 tags (ref 2) (Hero5,Hero6)
@@ -24,7 +24,7 @@ use strict;
24
24
  use vars qw($VERSION);
25
25
  use Image::ExifTool qw(:DataAccess :Utils);
26
26
 
27
- $VERSION = '1.35';
27
+ $VERSION = '1.36';
28
28
 
29
29
  sub ProcessICC($$);
30
30
  sub ProcessICC_Profile($$$);
@@ -1225,7 +1225,7 @@ sub ProcessICC_Profile($$$)
1225
1225
  my $type = substr($$dataPt, $valuePtr, 4);
1226
1226
  #### eval Validate ($type)
1227
1227
  if (defined $$subdir{Validate} and not eval $$subdir{Validate}) {
1228
- $et->Warn("Invalid $name data");
1228
+ $et->Warn("Invalid ICC $name data");
1229
1229
  } else {
1230
1230
  $et->ProcessDirectory(\%subdirInfo, $newTagTable, $$subdir{ProcessProc});
1231
1231
  }
@@ -18,11 +18,12 @@ use strict;
18
18
  use vars qw($VERSION);
19
19
  use Image::ExifTool qw(:DataAccess :Utils);
20
20
 
21
- $VERSION = '1.55';
21
+ $VERSION = '1.57';
22
22
 
23
23
  sub ProcessID3v2($$$);
24
24
  sub ProcessPrivate($$$);
25
25
  sub ProcessSynText($$$);
26
+ sub ProcessID3Dir($$$);
26
27
  sub ConvertID3v1Text($$);
27
28
  sub ConvertTimeStamp($);
28
29
 
@@ -69,9 +70,10 @@ my %dateTimeConv = (
69
70
  # This table is just for documentation purposes
70
71
  %Image::ExifTool::ID3::Main = (
71
72
  VARS => { NO_ID => 1 },
73
+ PROCESS_PROC => \&ProcessID3Dir, # (used to process 'id3 ' chunk in WAV files)
72
74
  NOTES => q{
73
- ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG, AIFF, OGG,
74
- FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
75
+ ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG, WAV, AIFF,
76
+ OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
75
77
  languages (eg. Comment and Lyrics) are extracted by specifying the tag name,
76
78
  followed by a dash ('-'), then a 3-character ISO 639-2 language code (eg.
77
79
  "Comment-spa"). See L<http://www.id3.org/> for the official ID3
@@ -1570,6 +1572,16 @@ sub ProcessID3($$)
1570
1572
  return $rtnVal;
1571
1573
  }
1572
1574
 
1575
+ #------------------------------------------------------------------------------
1576
+ # Process ID3 directory
1577
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) dummy tag table ref
1578
+ sub ProcessID3Dir($$$)
1579
+ {
1580
+ my ($et, $dirInfo, $tagTablePtr) = @_;
1581
+ $et->VerboseDir('ID3', undef, length ${$$dirInfo{DataPt}});
1582
+ return ProcessID3($et, $dirInfo);
1583
+ }
1584
+
1573
1585
  #------------------------------------------------------------------------------
1574
1586
  # Extract ID3 information from an MP3 audio file
1575
1587
  # Inputs: 0) ExifTool object reference, 1) dirInfo reference
@@ -11,7 +11,7 @@ use strict;
11
11
  use vars qw($VERSION);
12
12
  use Image::ExifTool qw(:DataAccess :Utils);
13
13
 
14
- $VERSION = '1.30';
14
+ $VERSION = '1.32';
15
15
 
16
16
  sub ProcessOcad($$$);
17
17
  sub ProcessJPEG_HDR($$$);
@@ -96,6 +96,10 @@ sub ProcessJPEG_HDR($$$);
96
96
  Name => 'Stim',
97
97
  Condition => '$$valPt =~ /^Stim\0/',
98
98
  SubDirectory => { TagTable => 'Image::ExifTool::Stim::Main' },
99
+ }, {
100
+ Name => 'JPS',
101
+ Condition => '$$valPt =~ /^_JPSJPS_/',
102
+ SubDirectory => { TagTable => 'Image::ExifTool::JPEG::JPS' },
99
103
  }, {
100
104
  Name => 'ThermalData', # (written by DJI FLIR models)
101
105
  Condition => '$$self{Make} eq "DJI"',
@@ -193,11 +197,15 @@ sub ProcessJPEG_HDR($$$);
193
197
  Condition => '$$valPt =~ /^UNICODE\0/',
194
198
  Notes => 'PhotoStudio Unicode comment',
195
199
  },
196
- APP11 => {
200
+ APP11 => [{
197
201
  Name => 'JPEG-HDR',
198
202
  Condition => '$$valPt =~ /^HDR_RI /',
199
203
  SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDR' },
200
- },
204
+ },{
205
+ Name => 'JUMBF',
206
+ Condition => '$$valPt =~ /^JP/',
207
+ SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
208
+ }],
201
209
  APP12 => [{
202
210
  Name => 'PictureInfo',
203
211
  Condition => '$$valPt =~ /(\[picture info\]|Type=)/',
@@ -283,6 +291,68 @@ sub ProcessJPEG_HDR($$$);
283
291
  }],
284
292
  );
285
293
 
294
+ # JPS APP3 segment (ref http://paulbourke.net/stereographics/stereoimage/)
295
+ %Image::ExifTool::JPEG::JPS = (
296
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
297
+ GROUPS => { 0 => 'APP3', 1 => 'JPS', 2 => 'Image' },
298
+ NOTES => 'Tags found in JPEG Stereo (JPS) images.',
299
+ 0x0a => {
300
+ Name => 'JPSSeparation',
301
+ Format => 'int32u', # (just so we can look ahead to MediaType);
302
+ Notes => 'stereo only',
303
+ RawConv => q{
304
+ $$self{MediaType} = $val & 0xff;
305
+ return undef unless $$self{MediaType} == 1;
306
+ return(($val >> 24) & 0xff);
307
+ },
308
+ },
309
+ 0x08 => {
310
+ Name => 'HdrLength',
311
+ Format => 'int16u',
312
+ Hidden => 1,
313
+ RawConv => '$$self{HdrLength} = $val; undef',
314
+ },
315
+ 0x0b => {
316
+ Name => 'JPSFlags',
317
+ PrintConv => { BITMASK => {
318
+ 0 => 'Half height',
319
+ 1 => 'Half width',
320
+ 2 => 'Left field first',
321
+ }},
322
+ },
323
+ 0x0c => [{
324
+ Name => 'JPSLayout',
325
+ Condition => '$$self{MediaType} == 0',
326
+ Notes => 'mono',
327
+ PrintConv => {
328
+ 0 => 'Both Eyes',
329
+ 1 => 'Left Eye',
330
+ 2 => 'Right Eye',
331
+ },
332
+ },{
333
+ Name => 'JPSLayout',
334
+ Condition => '$$self{MediaType} == 1',
335
+ Notes => 'stereo',
336
+ PrintConv => {
337
+ 1 => 'Interleaved',
338
+ 2 => 'Side By Side',
339
+ 3 => 'Over Under',
340
+ 4 => 'Anaglyph',
341
+ },
342
+ }],
343
+ 0x0d => {
344
+ Name => 'JPSType',
345
+ Hook => '$varSize += $$self{HdrLength} - 4', # comment starts after header block
346
+ PrintConv => { 0 => 'Mono', 1 => 'Stereo' },
347
+ },
348
+ # 0x0e - in16u comment length (ignored -- assume the remainder is all comment)
349
+ # (this is offset if we had a 4-byte JPS header block)
350
+ 0x10 => {
351
+ Name => 'JPSComment',
352
+ Format => 'string',
353
+ },
354
+ );
355
+
286
356
  # EPPIM APP6 (Toshiba PrintIM) segment (ref PH, from PDR-M700 samples)
287
357
  %Image::ExifTool::JPEG::EPPIM = (
288
358
  GROUPS => { 0 => 'APP6', 1 => 'EPPIM', 2 => 'Image' },
@@ -541,7 +611,7 @@ sub ProcessJPEG_HDR($$$);
541
611
  },
542
612
  2 => {
543
613
  Name => 'ImageFormat',
544
- ValueConv => 'chr($val)',
614
+ ValueConv => 'chr($val & 0xff)',
545
615
  PrintConv => { B => 'IMode B' },
546
616
  },
547
617
  3 => {
@@ -14,13 +14,15 @@ use vars qw($VERSION);
14
14
  use Image::ExifTool qw(:DataAccess :Utils);
15
15
  use Image::ExifTool::Import;
16
16
 
17
- $VERSION = '1.02';
17
+ $VERSION = '1.05';
18
18
 
19
+ sub ProcessJSON($$);
19
20
  sub ProcessTag($$$$%);
20
21
 
21
22
  %Image::ExifTool::JSON::Main = (
22
23
  GROUPS => { 0 => 'JSON', 1 => 'JSON', 2 => 'Other' },
23
24
  VARS => { NO_ID => 1 },
25
+ PROCESS_PROC => \&ProcessJSON,
24
26
  NOTES => q{
25
27
  Other than a few tags in the table below, JSON tags have not been
26
28
  pre-defined. However, ExifTool will read any existing tags from basic
@@ -81,8 +83,12 @@ sub ProcessTag($$$$%)
81
83
  FoundTag($et, $tagTablePtr, $tag, $val, %flags, Struct => 1);
82
84
  return unless $et->Options('Struct') > 1;
83
85
  }
84
- foreach (sort keys %$val) {
85
- ProcessTag($et, $tagTablePtr, $tag . ucfirst, $$val{$_}, %flags, Flat => 1);
86
+ # support hashes with ordered keys
87
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
88
+ foreach (@keys) {
89
+ my $tg = $tag . ((/^\d/ and $tag =~ /\d$/) ? '_' : '') . ucfirst;
90
+ $tg =~ s/([^a-zA-Z])([a-z])/$1\U$2/g;
91
+ ProcessTag($et, $tagTablePtr, $tg, $$val{$_}, %flags, Flat => 1);
86
92
  }
87
93
  } elsif (ref $val eq 'ARRAY') {
88
94
  foreach (@$val) {
@@ -103,7 +109,26 @@ sub ProcessJSON($$)
103
109
  my ($et, $dirInfo) = @_;
104
110
  my $raf = $$dirInfo{RAF};
105
111
  my $structOpt = $et->Options('Struct');
106
- my (%database, $key, $tag);
112
+ my (%database, $key, $tag, $dataPt);
113
+
114
+ unless ($raf) {
115
+ $dataPt = $$dirInfo{DataPt};
116
+ if ($$dirInfo{DirStart} or ($$dirInfo{DirLen} and $$dirInfo{DirLen} ne length($$dataPt))) {
117
+ my $buff = substr(${$$dirInfo{DataPt}}, $$dirInfo{DirStart}, $$dirInfo{DirLen});
118
+ $dataPt = \$buff;
119
+ }
120
+ $raf = new File::RandomAccess($dataPt);
121
+ # extract as a block if requested
122
+ my $blockName = $$dirInfo{BlockInfo} ? $$dirInfo{BlockInfo}{Name} : '';
123
+ my $blockExtract = $et->Options('BlockExtract');
124
+ if ($blockName and ($blockExtract or $$et{REQ_TAG_LOOKUP}{lc $blockName} or
125
+ ($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{lc $blockName})))
126
+ {
127
+ $et->FoundTag($$dirInfo{BlockInfo}, $$dataPt);
128
+ return 1 if $blockExtract and $blockExtract > 1;
129
+ }
130
+ $et->VerboseDir('JSON');
131
+ }
107
132
 
108
133
  # read information from JSON file into database structure
109
134
  my $err = Image::ExifTool::Import::ReadJSON($raf, \%database,
@@ -111,7 +136,7 @@ sub ProcessJSON($$)
111
136
 
112
137
  return 0 if $err or not %database;
113
138
 
114
- $et->SetFileType();
139
+ $et->SetFileType() unless $dataPt;
115
140
 
116
141
  my $tagTablePtr = GetTagTable('Image::ExifTool::JSON::Main');
117
142