exiftool_vendored 12.54.0 → 12.56.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@
4
4
  # Description: Read OpenEXR meta information
5
5
  #
6
6
  # Revisions: 2011/12/10 - P. Harvey Created
7
+ # 2023/01/31 - PH Added support for multipart images
7
8
  #
8
9
  # References: 1) http://www.openexr.com/
9
10
  #------------------------------------------------------------------------------
@@ -15,7 +16,7 @@ use vars qw($VERSION);
15
16
  use Image::ExifTool qw(:DataAccess :Utils);
16
17
  use Image::ExifTool::GPS;
17
18
 
18
- $VERSION = '1.03';
19
+ $VERSION = '1.04';
19
20
 
20
21
  # supported EXR value format types (other types are extracted as undef binary data)
21
22
  my %formatType = (
@@ -47,14 +48,18 @@ my %formatType = (
47
48
  %Image::ExifTool::OpenEXR::Main = (
48
49
  GROUPS => { 2 => 'Image' },
49
50
  NOTES => q{
50
- Information extracted from EXR images. See L<http://www.openexr.com/> for
51
- the official specification.
51
+ Information extracted from EXR images. Use the ExtractEmbedded option to
52
+ extract information from all frames of a multipart image. See
53
+ L<http://www.openexr.com/> for the official specification.
52
54
  },
53
- _ver => { Name => 'EXRVersion' },
54
- _lay => {
55
- Name => 'Layout',
56
- PrintHex => 1,
57
- PrintConv => { 0 => 'Scan Lines', 0x200 => 'Tiles' },
55
+ _ver => { Name => 'EXRVersion', Notes => 'low byte of Flags word' },
56
+ _flags => { Name => 'Flags',
57
+ PrintConv => { BITMASK => {
58
+ 9 => 'Tiled',
59
+ 10 => 'Long names',
60
+ 11 => 'Deep data',
61
+ 12 => 'Multipart',
62
+ }},
58
63
  },
59
64
  adoptedNeutral => { },
60
65
  altitude => {
@@ -145,6 +150,10 @@ my %formatType = (
145
150
  worldToNDC => { },
146
151
  wrapmodes => { Name => 'WrapModes' },
147
152
  xDensity => { Name => 'XResolution' },
153
+ name => { },
154
+ type => { },
155
+ version => { },
156
+ chunkCount => { },
148
157
  # also observed:
149
158
  # ilut
150
159
  );
@@ -169,15 +178,22 @@ sub ProcessEXR($$)
169
178
  my $tagTablePtr = GetTagTable('Image::ExifTool::OpenEXR::Main');
170
179
 
171
180
  # extract information from header
172
- my $ver = unpack('x4V', $buff);
173
- $et->HandleTag($tagTablePtr, '_ver', $ver & 0xff);
174
- $et->HandleTag($tagTablePtr, '_lay', $ver & 0x200);
175
- my $maxLen = ($ver & 0x400) ? 255 : 31;
181
+ my $flags = unpack('x4V', $buff);
182
+ $et->HandleTag($tagTablePtr, '_ver', $flags & 0xff);
183
+ $et->HandleTag($tagTablePtr, '_flags', $flags & 0xffffff00);
184
+ my $maxLen = ($flags & 0x400) ? 255 : 31;
185
+ my $multi = $flags & 0x1000;
176
186
 
177
187
  # extract attributes
178
188
  for (;;) {
179
- $raf->Read($buff, 68) or last;
180
- last if $buff =~ /^\0/;
189
+ $raf->Read($buff, ($maxLen + 1) * 2 + 5) or last;
190
+ if ($buff =~ /^\0/) {
191
+ last unless $multi and $et->Options('ExtractEmbedded');
192
+ # remove null and process the next frame header as a sub-document
193
+ # (second null is end of all headers)
194
+ last if $buff =~ s/^(\0+)// and length($1) > 1;
195
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
196
+ }
181
197
  unless ($buff =~ /^([^\0]{1,$maxLen})\0([^\0]{1,$maxLen})\0(.{4})/sg) {
182
198
  $et->Warn('EXR format error');
183
199
  last;
@@ -261,7 +277,7 @@ sub ProcessEXR($$)
261
277
 
262
278
  # take image dimensions from dataWindow (with displayWindow as backup)
263
279
  if (($tag eq 'dataWindow' or (not $dim and $tag eq 'displayWindow')) and
264
- $val =~ /^(-?\d+) (-?\d+) (-?\d+) (-?\d+)$/)
280
+ $val =~ /^(-?\d+) (-?\d+) (-?\d+) (-?\d+)$/ and not $$et{DOC_NUM})
265
281
  {
266
282
  $dim = [$3 - $1 + 1, $4 - $2 + 1];
267
283
  }
@@ -278,6 +294,7 @@ sub ProcessEXR($$)
278
294
  }
279
295
  $et->FoundTag($tagInfo, $val);
280
296
  }
297
+ delete $$et{DOC_NUM};
281
298
  if ($dim) {
282
299
  $et->FoundTag('ImageWidth', $$dim[0]);
283
300
  $et->FoundTag('ImageHeight', $$dim[1]);
@@ -36,7 +36,7 @@ use strict;
36
36
  use vars qw($VERSION $AUTOLOAD %stdCase);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
 
39
- $VERSION = '1.61';
39
+ $VERSION = '1.62';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -343,7 +343,12 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
343
343
  Name => 'JUMBF',
344
344
  SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
345
345
  },
346
- # cICP - Coding-independent code points (added in 2022 specification)
346
+ cICP => {
347
+ Name => 'CICodePoints',
348
+ SubDirectory => {
349
+ TagTable => 'Image::ExifTool::PNG::CICodePoints',
350
+ },
351
+ },
347
352
  );
348
353
 
349
354
  # PNG IHDR chunk
@@ -428,6 +433,79 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
428
433
  },
429
434
  );
430
435
 
436
+ # PNG cICP chunk
437
+ %Image::ExifTool::PNG::CICodePoints = (
438
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
439
+ GROUPS => { 1 => 'PNG-cICP', 2 => 'Image' },
440
+ NOTES => q{
441
+ These tags are found in the PNG cICP chunk and belong to the PNG-cICP family
442
+ 1 group.
443
+ },
444
+ # (same as tags in QuickTime::ColorRep)
445
+ 0 => {
446
+ Name => 'ColorPrimaries',
447
+ PrintConv => {
448
+ 1 => 'BT.709',
449
+ 2 => 'Unspecified',
450
+ 4 => 'BT.470 System M (historical)',
451
+ 5 => 'BT.470 System B, G (historical)',
452
+ 6 => 'BT.601',
453
+ 7 => 'SMPTE 240',
454
+ 8 => 'Generic film (color filters using illuminant C)',
455
+ 9 => 'BT.2020, BT.2100',
456
+ 10 => 'SMPTE 428 (CIE 1921 XYZ)',
457
+ 11 => 'SMPTE RP 431-2',
458
+ 12 => 'SMPTE EG 432-1',
459
+ 22 => 'EBU Tech. 3213-E',
460
+ },
461
+ },
462
+ 1 => {
463
+ Name => 'TransferCharacteristics',
464
+ PrintConv => {
465
+ 0 => 'For future use (0)',
466
+ 1 => 'BT.709',
467
+ 2 => 'Unspecified',
468
+ 3 => 'For future use (3)',
469
+ 4 => 'BT.470 System M (historical)',
470
+ 5 => 'BT.470 System B, G (historical)',
471
+ 6 => 'BT.601',
472
+ 7 => 'SMPTE 240 M',
473
+ 8 => 'Linear',
474
+ 9 => 'Logarithmic (100 : 1 range)',
475
+ 10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
476
+ 11 => 'IEC 61966-2-4',
477
+ 12 => 'BT.1361',
478
+ 13 => 'sRGB or sYCC',
479
+ 14 => 'BT.2020 10-bit systems',
480
+ 15 => 'BT.2020 12-bit systems',
481
+ 16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
482
+ 17 => 'SMPTE ST 428',
483
+ 18 => 'BT.2100 HLG, ARIB STD-B67',
484
+ },
485
+ },
486
+ 2 => {
487
+ Name => 'MatrixCoefficients',
488
+ PrintConv => {
489
+ 0 => 'Identity matrix',
490
+ 1 => 'BT.709',
491
+ 2 => 'Unspecified',
492
+ 3 => 'For future use (3)',
493
+ 4 => 'US FCC 73.628',
494
+ 5 => 'BT.470 System B, G (historical)',
495
+ 6 => 'BT.601',
496
+ 7 => 'SMPTE 240 M',
497
+ 8 => 'YCgCo',
498
+ 9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
499
+ 10 => 'BT.2020 constant luminance',
500
+ 11 => 'SMPTE ST 2085 YDzDx',
501
+ 12 => 'Chromaticity-derived non-constant luminance',
502
+ 13 => 'Chromaticity-derived constant luminance',
503
+ 14 => 'BT.2100 ICtCp',
504
+ },
505
+ },
506
+ 3 => 'VideoFullRangeFlag',
507
+ );
508
+
431
509
  # PNG sCAL chunk
432
510
  %Image::ExifTool::PNG::SubjectScale = (
433
511
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.82';
50
+ $VERSION = '2.83';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -62,6 +62,7 @@ sub Process_mebx($$$);
62
62
  sub Process_3gf($$$);
63
63
  sub Process_gps0($$$);
64
64
  sub Process_gsen($$$);
65
+ sub ProcessKenwood($$$);
65
66
  sub ProcessRIFFTrailer($$$);
66
67
  sub ProcessTTAD($$$);
67
68
  sub ProcessNMEA($$$);
@@ -652,10 +653,17 @@ my %eeBox2 = (
652
653
  Name => 'HTCInfo',
653
654
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HTCInfo' },
654
655
  },
655
- udta => {
656
- Name => 'UserData',
656
+ udta => [{
657
+ Name => 'KenwoodData',
658
+ Condition => '$$valPt =~ /^VIDEOUUUUUUUUUUUUUUUUUUUUUU/',
659
+ SubDirectory => {
660
+ TagTable => 'Image::ExifTool::QuickTime::Stream',
661
+ ProcessProc => \&ProcessKenwood,
662
+ },
663
+ },{
664
+ Name => 'FLIRData',
657
665
  SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' },
658
- },
666
+ }],
659
667
  thum => { #PH
660
668
  Name => 'ThumbnailImage',
661
669
  Groups => { 2 => 'Preview' },
@@ -763,6 +771,13 @@ my %eeBox2 = (
763
771
  SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Trailer' },
764
772
  },
765
773
  # 'samn'? - seen in Vantrue N2S sample video
774
+ mpvd => {
775
+ Name => 'MotionPhotoVideo',
776
+ Notes => 'MP4-format video saved in Samsung motion-photo HEIC images.',
777
+ Binary => 1,
778
+ # note that this may be written and/or deleted, but can't currently be added back again
779
+ Writable => 1,
780
+ },
766
781
  );
767
782
 
768
783
  # stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)