exiftool-vendored.exe 12.67.0 → 12.69.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 (31) hide show
  1. package/bin/exiftool_files/Changes +40 -2
  2. package/bin/exiftool_files/README +7 -7
  3. package/bin/exiftool_files/exiftool.pl +26 -20
  4. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +25 -1
  5. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
  6. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +95 -13
  7. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +17 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +16 -11
  9. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +38 -11
  10. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +14 -7
  11. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +13 -9
  12. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +6 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +62 -52
  15. package/bin/exiftool_files/lib/Image/ExifTool/README +7 -3
  16. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +8 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +66 -21
  18. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6881 -6710
  19. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +445 -32
  20. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +18 -16
  21. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  22. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
  23. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
  24. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +22 -3
  25. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +52 -11
  26. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
  27. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
  28. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +35 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool.pm +36 -15
  30. package/bin/exiftool_files/lib/Image/ExifTool.pod +5 -5
  31. package/package.json +1 -1
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.25';
68
+ $VERSION = '4.27';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -676,6 +676,7 @@ sub GetAFPointGrid($$;$);
676
676
  '07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
677
677
  '71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
678
678
  'FD 00 50 50 18 18 DF 00' => 'Voigtlander APO-Lanthar 50mm F2 Aspherical', #35
679
+ 'FD 00 44 44 18 18 DF 00' => 'Voigtlander APO-Lanthar 35mm F2', #30
679
680
  #
680
681
  '00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
681
682
  '00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
@@ -1188,6 +1189,7 @@ my %subjectDetectionZ9 = (
1188
1189
  2 => 'People',
1189
1190
  3 => 'Animals',
1190
1191
  4 => 'Vehicles',
1192
+ 5 => 'Birds',
1191
1193
  6 => 'Airplanes',
1192
1194
  );
1193
1195
 
@@ -2421,8 +2423,8 @@ my %base64coord = (
2421
2423
  },
2422
2424
  },
2423
2425
  { # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
2424
- # 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30
2425
- Condition => '$$valPt =~ /^080[012347]/',
2426
+ # 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
2427
+ Condition => '$$valPt =~ /^080[0123478]/',
2426
2428
  Name => 'ShotInfoZ7II',
2427
2429
  SubDirectory => {
2428
2430
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
@@ -2481,7 +2483,7 @@ my %base64coord = (
2481
2483
  },
2482
2484
  0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
2483
2485
  0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
2484
- 0x0096 => {
2486
+ 0x0096 => { # (not found in NRW files, but also not in all NEF's)
2485
2487
  Name => 'NEFLinearizationTable', # same table as DNG LinearizationTable (ref JD)
2486
2488
  Writable => 'undef',
2487
2489
  Flags => [ 'Binary', 'Protected' ],
@@ -4586,7 +4588,7 @@ my %base64coord = (
4586
4588
  RawConv => '$$self{AFInfo2Version} = $val',
4587
4589
  },
4588
4590
  5 => { #28
4589
- Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
4591
+ Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
4590
4592
  PrintConv => {
4591
4593
  192 => 'Pinpoint',
4592
4594
  193 => 'Single',
@@ -4602,7 +4604,7 @@ my %base64coord = (
4602
4604
  },
4603
4605
  10 => {
4604
4606
  Name => 'AFPointsUsed',
4605
- Condition => '$$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4607
+ Condition => 'defined $$self{AFAreaMode} and $$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4606
4608
  Format => 'undef[51]',
4607
4609
  ValueConv => 'join(" ", unpack("H2"x51, $val))',
4608
4610
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
@@ -5440,6 +5442,13 @@ my %nikonFocalConversions = (
5440
5442
  37 => 'Nikkor Z 600mm f/4 TC VR S', #28
5441
5443
  38 => 'Nikkor Z 85mm f/1.2 S', #28
5442
5444
  39 => 'Nikkor Z 17-28mm f/2.8', #IB
5445
+ 40 => 'NIKKOR Z 26mm f/2.8', #28
5446
+ 41 => 'NIKKOR Z DX 12-28mm f/3.5-5.6 PZ VR', #28
5447
+ 42 => 'Nikkor Z 180-600mm f/5.6-6.3 VR', #30
5448
+ 43 => 'NIKKOR Z DX 24mm f/1.7', #28
5449
+ 44 => 'NIKKOR Z 70-180mm f/2.8', #28
5450
+ 45 => 'NIKKOR Z 600mm f/6.3 VR S', #28
5451
+ 48 => 'Nikkor Z 135mm f/1.8 S Plena', #28
5443
5452
  32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
5444
5453
  32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
5445
5454
  },
@@ -6056,6 +6065,24 @@ my %nikonFocalConversions = (
6056
6065
  Format => 'int32u',
6057
6066
  Priority => 0,
6058
6067
  },
6068
+ 671.1 => { # 0x29f
6069
+ Name => 'JPGCompression',
6070
+ Mask => 0x40,
6071
+ PrintConv => {
6072
+ 0 => 'Size Priority',
6073
+ 1 => 'Optimal Quality',
6074
+ },
6075
+ },
6076
+ # this works for one set of D3S samples, but is 0 in some others
6077
+ #671.2 => { # 0x29f
6078
+ # Name => 'Quality',
6079
+ # Mask => 0x03,
6080
+ # PrintConv => {
6081
+ # 1 => 'Fine',
6082
+ # 2 => 'Normal',
6083
+ # 3 => 'Basic',
6084
+ # },
6085
+ #},
6059
6086
  0x2ce => { #(NC)
6060
6087
  Name => 'CustomSettingsD3S',
6061
6088
  Format => 'undef[27]',
@@ -8500,7 +8527,7 @@ my %nikonFocalConversions = (
8500
8527
  DATAMEMBER => [ 0x0bea, 0x0beb ],
8501
8528
  0x0be8 => {
8502
8529
  Name => 'AFAreaInitialXPosition', #stored as a representation of the horizontal position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8503
- Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8530
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8504
8531
  Format => 'int8s',
8505
8532
  PrintConv => q{
8506
8533
  #in FX mode and Single-point, the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754. Spacing is the same for Wide(L/C1/C2) with different start points.
@@ -8562,7 +8589,7 @@ my %nikonFocalConversions = (
8562
8589
  },
8563
8590
  0x0be9 => {
8564
8591
  Name =>'AFAreaInitialYPosition', #stored as a representation of the vertical position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8565
- Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8592
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8566
8593
  Format => 'int8s',
8567
8594
  PrintConv => q{
8568
8595
  #in FX mode and Single-point, the 17 vertical focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080. Spacing is the same for Wide(L/C1/C2)
@@ -8626,13 +8653,13 @@ my %nikonFocalConversions = (
8626
8653
  },
8627
8654
  0x0bea => {
8628
8655
  Name => 'AFAreaInitialWidth',
8629
- Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8656
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8630
8657
  ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8631
8658
  RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
8632
8659
  },
8633
8660
  0x0beb => {
8634
8661
  Name => 'AFAreaInitialHeight',
8635
- Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8662
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8636
8663
  ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8637
8664
  RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
8638
8665
  },
@@ -8848,7 +8875,7 @@ my %nikonFocalConversions = (
8848
8875
  %binaryDataAttrs,
8849
8876
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8850
8877
  DATAMEMBER => [ 90, 176, 180, 328, 352, 858 ],
8851
- NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and Zfc.',
8878
+ NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50, Zfc and Zf.',
8852
8879
  #48 SelfTimer' #0=> no 1=> yes works for Z7II firmware 1.40, but not 1.30. Follow-up required.
8853
8880
  90 => {
8854
8881
  Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
@@ -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.64';
39
+ $VERSION = '1.65';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -973,13 +973,20 @@ sub FoundPNG($$$$;$$$$)
973
973
  undef $processProc if $wasCompressed and $processProc and $processProc eq \&ProcessPNG_Compressed;
974
974
  # rewrite this directory if necessary (but always process TextualData normally)
975
975
  if ($outBuff and not $processProc and $subTable ne \%Image::ExifTool::PNG::TextualData) {
976
- return 1 unless $$et{EDIT_DIRS}{$dirName};
977
- $$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
978
- if ($tagName eq 'XMP' and $$outBuff) {
979
- # make sure the XMP is marked as read-only
980
- Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
976
+ # allow JUMBF to be deleted (may want to expand this for other types too?)
977
+ if ($dirName eq 'JUMBF' and $$et{DEL_GROUP}{$dirName}) {
978
+ $$outBuff = '';
979
+ ++$$et{CHANGED};
980
+ $et->VPrint(0, " Deleting $dirName");
981
+ } else {
982
+ return 1 unless $$et{EDIT_DIRS}{$dirName};
983
+ $$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
984
+ if ($tagName eq 'XMP' and $$outBuff) {
985
+ # make sure the XMP is marked as read-only
986
+ Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
987
+ }
988
+ DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
981
989
  }
982
- DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
983
990
  } else {
984
991
  $processed = $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc);
985
992
  }
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.18';
40
+ $VERSION = '2.20';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -1070,18 +1070,18 @@ my %shootingMode = (
1070
1070
  },
1071
1071
  },
1072
1072
  # 0x71 - undef[128] (maybe text stamp text?)
1073
+ # 0x72,0x73,0x74,0x75,0x77,0x78: 0
1074
+ # 0x76: 0, (3 for G6 with HDR on, ref 18)
1075
+ 0x76 => { #18/21/forum15298
1076
+ Name => 'MergedImages',
1077
+ Writable => 'int16u',
1078
+ Notes => 'number of images in HDR or Live View Composite picture',
1079
+ },
1073
1080
  0x77 => { #18
1074
1081
  Name => 'BurstSpeed',
1075
1082
  Writable => 'int16u',
1076
1083
  Notes => 'images per second',
1077
1084
  },
1078
- # 0x72,0x73,0x74,0x75,0x77,0x78: 0
1079
- # 0x76: 0, (3 for G6 with HDR on, ref 18)
1080
- 0x76 => { #18/21
1081
- Name => 'HDRShot',
1082
- Writable => 'int16u',
1083
- PrintConv => { 0 => 'Off', 3 => 'On' },
1084
- },
1085
1085
  0x79 => { #PH (GH2)
1086
1086
  Name => 'IntelligentD-Range',
1087
1087
  Writable => 'int16u',
@@ -2834,10 +2834,14 @@ sub ProcessLeicaTrailer($;$)
2834
2834
  my $val = Image::ExifTool::Exif::RebuildMakerNotes($et, \%dirInfo, $tagTablePtr);
2835
2835
  unless (defined $val) {
2836
2836
  $et->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4;
2837
- $val = $buff,
2837
+ $val = $buff;
2838
2838
  }
2839
2839
  my $key = $et->FoundTag($tagInfo, $val);
2840
2840
  $et->SetGroup($key, 'ExifIFD');
2841
+ if ($$et{MAKER_NOTE_FIXUP}) {
2842
+ $$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
2843
+ delete $$et{MAKER_NOTE_FIXUP};
2844
+ }
2841
2845
  }
2842
2846
  }
2843
2847
  SetByteOrder($oldOrder);
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.43';
61
+ $VERSION = '3.44';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -556,6 +556,8 @@ my %pentaxModelID = (
556
556
  0x13240 => 'K-1 Mark II', # (Ricoh)
557
557
  0x13254 => 'K-3 Mark III', #IB (Ricoh)
558
558
  0x13290 => 'WG-70', # (Ricoh)
559
+ 0x1329a => 'GR IIIx', # (Ricoh)
560
+ 0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
559
561
  );
560
562
 
561
563
  # Pentax city codes - (PH, Optio WP)
@@ -971,6 +973,7 @@ my %binaryDataAttrs = (
971
973
  5 => 'Premium', #PH (K20D)
972
974
  7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
973
975
  8 => 'Dynamic Pixel Shift', #IB
976
+ 9 => 'Monochrome', #github226
974
977
  65535 => 'n/a', #PH (Q MOV video)
975
978
  },
976
979
  },
@@ -2144,6 +2147,7 @@ my %binaryDataAttrs = (
2144
2147
  11 => 'Flat', #31 (K-70)
2145
2148
  # 256 - seen for GR III
2146
2149
  # 262 - seen for GR III
2150
+ 32768 => 'n/a',
2147
2151
  },
2148
2152
  },
2149
2153
  0x0050 => { #PH
@@ -2230,6 +2234,7 @@ my %binaryDataAttrs = (
2230
2234
  18 => '18 (KP)', #PH
2231
2235
  19 => '19 (GR III)', #PH
2232
2236
  20 => '20 (K-3III)', #PH
2237
+ 21 => '21 (K-3IIIMonochrome)', #github226
2233
2238
  },
2234
2239
  },
2235
2240
  0x0067 => { #PH (K-5)
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
15
15
  use Image::ExifTool::IPTC;
16
16
  use Image::ExifTool::XMP;
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.08';
19
19
 
20
20
  sub ProcessPhotoMechanic($$);
21
21
 
@@ -138,6 +138,7 @@ my %rawCropConv = (
138
138
  ValueConv => 'Image::ExifTool::Exif::ExifTime($val)',
139
139
  ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)',
140
140
  },
141
+ CreatorIdentity => { List => 'Seq' },
141
142
  );
142
143
 
143
144
  #------------------------------------------------------------------------------
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
48
48
  use Image::ExifTool::Exif;
49
49
  use Image::ExifTool::GPS;
50
50
 
51
- $VERSION = '2.87';
51
+ $VERSION = '2.88';
52
52
 
53
53
  sub ProcessMOV($$;$);
54
54
  sub ProcessKeys($$$);
@@ -2393,6 +2393,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2393
2393
  Name => 'Audible_tags',
2394
2394
  SubDirectory => { TagTable => 'Image::ExifTool::Audible::tags' },
2395
2395
  },
2396
+ # ludt - directory containing 'tlou' tag
2396
2397
  );
2397
2398
 
2398
2399
  # Unknown information stored in HTC One (M8) videos - PH
@@ -2903,65 +2904,69 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2903
2904
  Name => 'ColorPrimaries',
2904
2905
  Format => 'int16u',
2905
2906
  PrintConv => {
2906
- 1 => 'BT.709',
2907
- 2 => 'Unspecified',
2908
- 4 => 'BT.470 System M (historical)',
2909
- 5 => 'BT.470 System B, G (historical)',
2910
- 6 => 'BT.601',
2911
- 7 => 'SMPTE 240',
2912
- 8 => 'Generic film (color filters using illuminant C)',
2913
- 9 => 'BT.2020, BT.2100',
2914
- 10 => 'SMPTE 428 (CIE 1931 XYZ)', #forum14766
2915
- 11 => 'SMPTE RP 431-2',
2916
- 12 => 'SMPTE EG 432-1',
2917
- 22 => 'EBU Tech. 3213-E',
2918
- },
2907
+ 1 => 'BT.709',
2908
+ 2 => 'Unspecified',
2909
+ 4 => 'BT.470 System M (historical)',
2910
+ 5 => 'BT.470 System B, G (historical)',
2911
+ 6 => 'BT.601',
2912
+ 7 => 'SMPTE 240',
2913
+ 8 => 'Generic film (color filters using illuminant C)',
2914
+ 9 => 'BT.2020, BT.2100',
2915
+ 10 => 'SMPTE 428 (CIE 1931 XYZ)', #forum14766
2916
+ 11 => 'SMPTE RP 431-2',
2917
+ 12 => 'SMPTE EG 432-1',
2918
+ 22 => 'EBU Tech. 3213-E',
2919
+ },
2919
2920
  },
2920
2921
  6 => {
2921
2922
  Name => 'TransferCharacteristics',
2922
2923
  Format => 'int16u',
2923
2924
  PrintConv => {
2924
- 0 => 'For future use (0)',
2925
- 1 => 'BT.709',
2926
- 2 => 'Unspecified',
2927
- 3 => 'For future use (3)',
2928
- 4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
2929
- 5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
2930
- 6 => 'BT.601',
2931
- 7 => 'SMPTE 240 M',
2932
- 8 => 'Linear',
2933
- 9 => 'Logarithmic (100 : 1 range)',
2934
- 10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
2935
- 11 => 'IEC 61966-2-4',
2936
- 12 => 'BT.1361',
2937
- 13 => 'sRGB or sYCC',
2938
- 14 => 'BT.2020 10-bit systems',
2939
- 15 => 'BT.2020 12-bit systems',
2940
- 16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
2941
- 17 => 'SMPTE ST 428',
2942
- 18 => 'BT.2100 HLG, ARIB STD-B67',
2943
- },
2925
+ 0 => 'For future use (0)',
2926
+ 1 => 'BT.709',
2927
+ 2 => 'Unspecified',
2928
+ 3 => 'For future use (3)',
2929
+ 4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
2930
+ 5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
2931
+ 6 => 'BT.601',
2932
+ 7 => 'SMPTE 240 M',
2933
+ 8 => 'Linear',
2934
+ 9 => 'Logarithmic (100 : 1 range)',
2935
+ 10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
2936
+ 11 => 'IEC 61966-2-4',
2937
+ 12 => 'BT.1361',
2938
+ 13 => 'sRGB or sYCC',
2939
+ 14 => 'BT.2020 10-bit systems',
2940
+ 15 => 'BT.2020 12-bit systems',
2941
+ 16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
2942
+ 17 => 'SMPTE ST 428',
2943
+ 18 => 'BT.2100 HLG, ARIB STD-B67',
2944
+ },
2944
2945
  },
2945
2946
  8 => {
2946
2947
  Name => 'MatrixCoefficients',
2947
2948
  Format => 'int16u',
2948
2949
  PrintConv => {
2949
- 0 => 'Identity matrix',
2950
- 1 => 'BT.709',
2951
- 2 => 'Unspecified',
2952
- 3 => 'For future use (3)',
2953
- 4 => 'US FCC 73.628',
2954
- 5 => 'BT.470 System B, G (historical)',
2955
- 6 => 'BT.601',
2956
- 7 => 'SMPTE 240 M',
2957
- 8 => 'YCgCo',
2958
- 9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
2959
- 10 => 'BT.2020 constant luminance',
2960
- 11 => 'SMPTE ST 2085 YDzDx',
2961
- 12 => 'Chromaticity-derived non-constant luminance',
2962
- 13 => 'Chromaticity-derived constant luminance',
2963
- 14 => 'BT.2100 ICtCp',
2964
- },
2950
+ 0 => 'Identity matrix',
2951
+ 1 => 'BT.709',
2952
+ 2 => 'Unspecified',
2953
+ 3 => 'For future use (3)',
2954
+ 4 => 'US FCC 73.628',
2955
+ 5 => 'BT.470 System B, G (historical)',
2956
+ 6 => 'BT.601',
2957
+ 7 => 'SMPTE 240 M',
2958
+ 8 => 'YCgCo',
2959
+ 9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
2960
+ 10 => 'BT.2020 constant luminance',
2961
+ 11 => 'SMPTE ST 2085 YDzDx',
2962
+ 12 => 'Chromaticity-derived non-constant luminance',
2963
+ 13 => 'Chromaticity-derived constant luminance',
2964
+ 14 => 'BT.2100 ICtCp',
2965
+ },
2966
+ },
2967
+ 10 => {
2968
+ Name => 'VideoFullRangeFlag',
2969
+ Mask => 0x80,
2965
2970
  },
2966
2971
  );
2967
2972
 
@@ -6399,6 +6404,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6399
6404
  Writable => 'int8s', #27
6400
6405
  PrintConv => { 0 => 'No', 1 => 'Yes' },
6401
6406
  },
6407
+ ownr => 'Owner', #PH (obscure) (ref ChrisAdan private communication)
6408
+ 'xid ' => 'ISRC', #PH
6402
6409
  );
6403
6410
 
6404
6411
  # tag decoded from timed face records
@@ -7663,7 +7670,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7663
7670
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Rights' },
7664
7671
  },
7665
7672
  name => { Name => 'UserName', Groups => { 2 => 'Author' } },
7666
- # chtb
7673
+ # chtb - seen 632 bytes of random data
7667
7674
  # priv - private data
7668
7675
  # sign
7669
7676
  # adkm - Adobe DRM key management system (ref http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf)
@@ -7686,6 +7693,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7686
7693
  },
7687
7694
  medi => 'MediaFlags', #PH (?)
7688
7695
  mode => 'ModeFlags', #PH (?) 0x04 is HD flag (https://compilr.com/heksesang/requiem-mac/UnDrm.java)
7696
+ # sing - seen 4 zeros
7697
+ # hi32 - seen "00 00 00 04"
7698
+
7689
7699
  );
7690
7700
 
7691
7701
  # MP4 hint sample description box (ref 5)
@@ -9492,7 +9502,7 @@ sub ProcessMOV($$;$)
9492
9502
  $et->HandleTag($tagTablePtr, "$tag-offset", $raf->Tell()) if $$tagTablePtr{"$tag-offset"};
9493
9503
  }
9494
9504
  # stop processing at mdat/idat if -fast2 is used
9495
- last if $fast > 1 and ($tag eq 'mdat' or $tag eq 'idat');
9505
+ last if $fast > 1 and ($tag eq 'mdat' or ($tag eq 'idat' and $$et{FileType} ne 'HEIC'));
9496
9506
  # load values only if associated with a tag (or verbose) and not too big
9497
9507
  if ($size > 0x2000000) { # start to get worried above 32 MB
9498
9508
  # check for RIFF trailer (written by Auto-Vox dashcam)
@@ -343,9 +343,10 @@ numerical, and generated automatically otherwise.
343
343
  but applied automatically to individual tags. Value specifies
344
344
  pattern for split, or 1 for default pattern ',?\\s+'.
345
345
 
346
- 'Avoid' - avoid creating this tag if possible. This is only
347
- effective if another tag exists with the same name. Setting
348
- this flag also sets the default Priority to 0 for this tag.
346
+ 'Avoid' - avoid creating this tag when writing if possible.
347
+ This is only effective if another tag exists with the same
348
+ name. Setting this flag also sets the default Priority to 0
349
+ for this tag.
349
350
 
350
351
  'Binary' - set to 1 for binary data. This has the same effect
351
352
  as setting ValueConv to '\$val', but it it a bit cleaner and
@@ -917,6 +918,9 @@ numerical, and generated automatically otherwise.
917
918
  FixedSize : [EXIF only] Hack to ignore value size and use this instead.
918
919
  Only valid if Format is also defined.
919
920
 
921
+ TruncateOK : [EXIF only] Hack to demote a truncated value in an IFD to a
922
+ minor error.
923
+
920
924
  Struct : [XMP tags only] Reference to structure hash for structured XMP
921
925
  tags. See "STRUCTURES" section below for more details. (For
922
926
  backward compatibility, this may be a name to an entry in
@@ -30,7 +30,7 @@ use strict;
30
30
  use vars qw($VERSION $AUTOLOAD);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
 
33
- $VERSION = '1.65';
33
+ $VERSION = '1.66';
34
34
 
35
35
  sub ConvertTimecode($);
36
36
  sub ProcessSGLT($$$);
@@ -555,7 +555,7 @@ my %code2charset = (
555
555
  },
556
556
  },{ # (WebP) - have also seen with "Exif\0\0" header - PH
557
557
  Name => 'EXIF',
558
- Condition => '$$valPt =~ /^Exif\0\0(II\x2a\0|MM\0\x2a)/ and $self->Warn("Improper EXIF header",1)',
558
+ Condition => '$$valPt =~ /^Exif\0\0(II\x2a\0|MM\0\x2a)/ and ($self->Warn("Improper EXIF header",1) or 1)',
559
559
  SubDirectory => {
560
560
  TagTable => 'Image::ExifTool::Exif::Main',
561
561
  ProcessProc => \&Image::ExifTool::ProcessTIFF,
@@ -570,6 +570,12 @@ my %code2charset = (
570
570
  Notes => 'WebP files',
571
571
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
572
572
  },
573
+ "XMP\0" => {
574
+ Name => 'XMP',
575
+ Notes => 'incorrectly written WebP files',
576
+ Condition => '$self->Warn("Incorrect XMP tag ID", 1) or 1',
577
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
578
+ },
573
579
  ICCP => { #14 (WebP)
574
580
  Name => 'ICC_Profile',
575
581
  Notes => 'WebP files',