exiftool-vendored.pl 12.54.0 → 12.56.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.
@@ -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)