exiftool_vendored 12.17.1 → 12.32.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +225 -1
  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 +142 -87
  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 +30 -12
  19. data/bin/lib/Image/ExifTool/CBOR.pm +277 -0
  20. data/bin/lib/Image/ExifTool/Canon.pm +49 -18
  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 +28 -11
  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 +27 -4
  35. data/bin/lib/Image/ExifTool/Jpeg2000.pm +393 -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 +1 -1
  44. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  45. data/bin/lib/Image/ExifTool/Nikon.pm +19 -8
  46. data/bin/lib/Image/ExifTool/NikonSettings.pm +28 -11
  47. data/bin/lib/Image/ExifTool/Olympus.pm +6 -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 +247 -88
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
  57. data/bin/lib/Image/ExifTool/README +3 -0
  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 +237 -78
  62. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  63. data/bin/lib/Image/ExifTool/TagLookup.pm +4125 -4028
  64. data/bin/lib/Image/ExifTool/TagNames.pod +644 -286
  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 +39 -14
  75. data/bin/lib/Image/ExifTool/XMP2.pl +2 -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 +223 -72
  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
@@ -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.04';
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,7 +83,9 @@ 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) {
86
+ # support hashes with ordered keys
87
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
88
+ foreach (@keys) {
85
89
  ProcessTag($et, $tagTablePtr, $tag . ucfirst, $$val{$_}, %flags, Flat => 1);
86
90
  }
87
91
  } elsif (ref $val eq 'ARRAY') {
@@ -103,7 +107,26 @@ sub ProcessJSON($$)
103
107
  my ($et, $dirInfo) = @_;
104
108
  my $raf = $$dirInfo{RAF};
105
109
  my $structOpt = $et->Options('Struct');
106
- my (%database, $key, $tag);
110
+ my (%database, $key, $tag, $dataPt);
111
+
112
+ unless ($raf) {
113
+ $dataPt = $$dirInfo{DataPt};
114
+ if ($$dirInfo{DirStart} or ($$dirInfo{DirLen} and $$dirInfo{DirLen} ne length($$dataPt))) {
115
+ my $buff = substr(${$$dirInfo{DataPt}}, $$dirInfo{DirStart}, $$dirInfo{DirLen});
116
+ $dataPt = \$buff;
117
+ }
118
+ $raf = new File::RandomAccess($dataPt);
119
+ # extract as a block if requested
120
+ my $blockName = $$dirInfo{BlockInfo} ? $$dirInfo{BlockInfo}{Name} : '';
121
+ my $blockExtract = $et->Options('BlockExtract');
122
+ if ($blockName and ($blockExtract or $$et{REQ_TAG_LOOKUP}{lc $blockName} or
123
+ ($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{lc $blockName})))
124
+ {
125
+ $et->FoundTag($$dirInfo{BlockInfo}, $$dataPt);
126
+ return 1 if $blockExtract and $blockExtract > 1;
127
+ }
128
+ $et->VerboseDir('JSON');
129
+ }
107
130
 
108
131
  # read information from JSON file into database structure
109
132
  my $err = Image::ExifTool::Import::ReadJSON($raf, \%database,
@@ -111,7 +134,7 @@ sub ProcessJSON($$)
111
134
 
112
135
  return 0 if $err or not %database;
113
136
 
114
- $et->SetFileType();
137
+ $et->SetFileType() unless $dataPt;
115
138
 
116
139
  my $tagTablePtr = GetTagTable('Image::ExifTool::JSON::Main');
117
140