exiftool_vendored 12.57.0 → 12.58.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +14 -0
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/config_files/rotate_regions.config +1 -1
  7. data/bin/exiftool +25 -21
  8. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  9. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
  11. data/bin/lib/Image/ExifTool/Canon.pm +26 -6
  12. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  13. data/bin/lib/Image/ExifTool/Exif.pm +24 -5
  14. data/bin/lib/Image/ExifTool/FlashPix.pm +2 -2
  15. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  16. data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
  17. data/bin/lib/Image/ExifTool/LNK.pm +5 -4
  18. data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
  19. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  20. data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
  21. data/bin/lib/Image/ExifTool/Nikon.pm +385 -110
  22. data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
  23. data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
  24. data/bin/lib/Image/ExifTool/QuickTime.pm +5 -5
  25. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  26. data/bin/lib/Image/ExifTool/README +8 -0
  27. data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
  28. data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
  30. data/bin/lib/Image/ExifTool/Sony.pm +23 -1
  31. data/bin/lib/Image/ExifTool/TagLookup.pm +4457 -4441
  32. data/bin/lib/Image/ExifTool/TagNames.pod +76 -12
  33. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  34. data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
  35. data/bin/lib/Image/ExifTool/Writer.pl +3 -1
  36. data/bin/lib/Image/ExifTool/XMP.pm +2 -2
  37. data/bin/lib/Image/ExifTool.pm +57 -12
  38. data/bin/perl-Image-ExifTool.spec +1 -1
  39. data/lib/exiftool_vendored/version.rb +1 -1
  40. metadata +2 -2
@@ -65,6 +65,7 @@ sub RebuildMakerNotes($$$);
65
65
  sub EncodeExifText($$);
66
66
  sub ValidateIFD($;$);
67
67
  sub ValidateImageData($$$;$);
68
+ sub AddImageDataMD5($$$);
68
69
  sub ProcessTiffIFD($$$);
69
70
  sub PrintParameter($$$);
70
71
  sub GetOffList($$$$$);
@@ -573,6 +574,7 @@ my %opcodeInfo = (
573
574
  ],
574
575
  Name => 'StripOffsets',
575
576
  IsOffset => 1,
577
+ IsImageData => 1,
576
578
  OffsetPair => 0x117, # point to associated byte counts
577
579
  # A200 stores this information in the wrong byte order!!
578
580
  ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
@@ -582,6 +584,7 @@ my %opcodeInfo = (
582
584
  Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
583
585
  Name => 'OtherImageStart',
584
586
  IsOffset => 1,
587
+ IsImageData => 1,
585
588
  OffsetPair => 0x117, # point to associated byte counts
586
589
  DataTag => 'OtherImage',
587
590
  },
@@ -594,6 +597,7 @@ my %opcodeInfo = (
594
597
  ],
595
598
  Name => 'StripOffsets',
596
599
  IsOffset => 1,
600
+ IsImageData => 1,
597
601
  OffsetPair => 0x117, # point to associated byte counts
598
602
  ValueConv => 'length($val) > 32 ? \$val : $val',
599
603
  },
@@ -630,6 +634,7 @@ my %opcodeInfo = (
630
634
  # JpgFromRawStart in various IFD's of DNG images except SubIFD2
631
635
  Name => 'JpgFromRawStart',
632
636
  IsOffset => 1,
637
+ IsImageData => 1,
633
638
  OffsetPair => 0x117,
634
639
  DataTag => 'JpgFromRaw',
635
640
  Writable => 'int32u',
@@ -933,6 +938,7 @@ my %opcodeInfo = (
933
938
  0x144 => {
934
939
  Name => 'TileOffsets',
935
940
  IsOffset => 1,
941
+ IsImageData => 1,
936
942
  OffsetPair => 0x145,
937
943
  ValueConv => 'length($val) > 32 ? \$val : $val',
938
944
  },
@@ -1187,6 +1193,7 @@ my %opcodeInfo = (
1187
1193
  Name => 'JpgFromRawStart',
1188
1194
  Condition => '$$self{DIR_NAME} eq "SubIFD"',
1189
1195
  IsOffset => 1,
1196
+ IsImageData => 1,
1190
1197
  OffsetPair => 0x202,
1191
1198
  DataTag => 'JpgFromRaw',
1192
1199
  Writable => 'int32u',
@@ -1199,6 +1206,7 @@ my %opcodeInfo = (
1199
1206
  Name => 'JpgFromRawStart',
1200
1207
  Condition => '$$self{DIR_NAME} eq "IFD2"',
1201
1208
  IsOffset => 1,
1209
+ IsImageData => 1,
1202
1210
  OffsetPair => 0x202,
1203
1211
  DataTag => 'JpgFromRaw',
1204
1212
  Writable => 'int32u',
@@ -1210,6 +1218,7 @@ my %opcodeInfo = (
1210
1218
  {
1211
1219
  Name => 'OtherImageStart',
1212
1220
  Condition => '$$self{DIR_NAME} eq "SubIFD1"',
1221
+ IsImageData => 1,
1213
1222
  IsOffset => 1,
1214
1223
  OffsetPair => 0x202,
1215
1224
  DataTag => 'OtherImage',
@@ -1222,6 +1231,7 @@ my %opcodeInfo = (
1222
1231
  Name => 'OtherImageStart',
1223
1232
  Condition => '$$self{DIR_NAME} eq "SubIFD2"',
1224
1233
  IsOffset => 1,
1234
+ IsImageData => 1,
1225
1235
  OffsetPair => 0x202,
1226
1236
  DataTag => 'OtherImage',
1227
1237
  Writable => 'int32u',
@@ -1232,6 +1242,7 @@ my %opcodeInfo = (
1232
1242
  {
1233
1243
  Name => 'OtherImageStart',
1234
1244
  IsOffset => 1,
1245
+ IsImageData => 1,
1235
1246
  OffsetPair => 0x202,
1236
1247
  },
1237
1248
  ],
@@ -2968,6 +2979,7 @@ my %opcodeInfo = (
2968
2979
  0xbcc0 => { #13
2969
2980
  Name => 'ImageOffset',
2970
2981
  IsOffset => 1,
2982
+ IsImageData => 1,
2971
2983
  OffsetPair => 0xbcc1, # point to associated byte count
2972
2984
  },
2973
2985
  0xbcc1 => { #13
@@ -2977,6 +2989,7 @@ my %opcodeInfo = (
2977
2989
  0xbcc2 => { #13
2978
2990
  Name => 'AlphaOffset',
2979
2991
  IsOffset => 1,
2992
+ IsImageData => 1,
2980
2993
  OffsetPair => 0xbcc3, # point to associated byte count
2981
2994
  },
2982
2995
  0xbcc3 => { #13
@@ -5885,10 +5898,14 @@ sub ProcessExif($$$)
5885
5898
  my $saveFormat = $et->Options('SaveFormat');
5886
5899
  my $htmlDump = $$et{HTML_DUMP};
5887
5900
  my $success = 1;
5888
- my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName);
5901
+ my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doMD5);
5889
5902
  my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
5890
5903
  my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
5891
5904
 
5905
+ # set flag to calculate image data MD5 if requested
5906
+ $doMD5 = 1 if $$et{ImageDataMD5} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
5907
+ ($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD'));
5908
+
5892
5909
  # set encoding to assume for strings
5893
5910
  $strEnc = $et->Options('CharsetEXIF') if $$tagTablePtr{GROUPS}{0} eq 'EXIF';
5894
5911
 
@@ -6725,7 +6742,7 @@ sub ProcessExif($$$)
6725
6742
  }
6726
6743
  $val = join(' ', @vals);
6727
6744
  }
6728
- if ($validate) {
6745
+ if ($validate or $doMD5) {
6729
6746
  if ($$tagInfo{OffsetPair}) {
6730
6747
  $offsetInfo{$tagID} = [ $tagInfo, $val ];
6731
6748
  } elsif ($saveForValidate{$tagID} and $isExif) {
@@ -6743,9 +6760,11 @@ sub ProcessExif($$$)
6743
6760
  }
6744
6761
  }
6745
6762
 
6746
- # validate image data offsets for this IFD
6747
- if ($validate and %offsetInfo) {
6748
- Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $$dirInfo{DirName}, $inMakerNotes)
6763
+ if (%offsetInfo) {
6764
+ # calculate image data MD5 if requested
6765
+ AddImageDataMD5($et, $dirInfo, \%offsetInfo) if $doMD5;
6766
+ # validate image data offsets for this IFD (note: modifies %offsetInfo)
6767
+ Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $dirName, $inMakerNotes) if $validate;
6749
6768
  }
6750
6769
 
6751
6770
  # scan for subsequent IFD's if specified
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::ASF; # for GetGUID()
23
23
 
24
- $VERSION = '1.42';
24
+ $VERSION = '1.43';
25
25
 
26
26
  sub ProcessFPX($$);
27
27
  sub ProcessFPXR($$$);
@@ -2441,7 +2441,7 @@ sub ProcessFPX($$)
2441
2441
  }
2442
2442
  $$et{INDENT} = $oldIndent if $verbose;
2443
2443
  # try to better identify the file type
2444
- if ($$et{VALUE}{FileType} eq 'FPX') {
2444
+ if ($$et{FileType} eq 'FPX') {
2445
2445
  my $val = $$et{CompObjUserType} || $$et{Software};
2446
2446
  if ($val) {
2447
2447
  my %type = ( '^3ds Max' => 'MAX', Word => 'DOC', PowerPoint => 'PPT', Excel => 'XLS' );
@@ -1372,6 +1372,7 @@ my %faceCategories = (
1372
1372
  0xf007 => {
1373
1373
  Name => 'StripOffsets',
1374
1374
  IsOffset => 1,
1375
+ IsImageData => 1,
1375
1376
  OffsetPair => 0xf008, # point to associated byte counts
1376
1377
  },
1377
1378
  0xf008 => {
@@ -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.34';
14
+ $VERSION = '1.35';
15
15
 
16
16
  sub ProcessOcad($$$);
17
17
  sub ProcessJPEG_HDR($$$);
@@ -134,9 +134,17 @@ sub ProcessJPEG_HDR($$$);
134
134
  Condition => '$$self{HasIJPEG}"',
135
135
  SubDirectory => { TagTable => 'Image::ExifTool::InfiRay::Factory' },
136
136
  }, {
137
- Name => 'ThermalParams', # (written by DJI FLIR models)
137
+ Name => 'ThermalParams', # (written by some DJI FLIR models)
138
138
  Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^\xaa\x55\x12\x06/',
139
139
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams' },
140
+ }, {
141
+ Name => 'ThermalParams2', # (written by M3T)
142
+ Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^(.{32})?.{32}\x2c\x01\x20\0/s',
143
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams2' },
144
+ }, {
145
+ Name => 'ThermalParams3', # (written by M30T)
146
+ Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^.{32}\xaa\x55\x38\0/s',
147
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams3' },
140
148
  }, {
141
149
  Name => 'PreviewImage', # (eg. Samsung S1060)
142
150
  Notes => 'continued from APP3',
@@ -207,6 +215,10 @@ sub ProcessJPEG_HDR($$$);
207
215
  Name => 'InfiRayOpMode',
208
216
  Condition => '$$self{HasIJPEG}',
209
217
  SubDirectory => { TagTable => 'Image::ExifTool::InfiRay::OpMode' },
218
+ }, {
219
+ Name => 'DJI-DBG',
220
+ Condition => '$$valPt =~ /^DJI-DBG\0/',
221
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::Info' },
210
222
  }],
211
223
  APP8 => [{
212
224
  Name => 'SPIFF',
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.08';
18
+ $VERSION = '1.09';
19
19
 
20
20
  sub ProcessItemID($$$);
21
21
  sub ProcessLinkInfo($$$);
@@ -507,7 +507,7 @@ sub ProcessLinkInfo($$$)
507
507
  if ($lif & 0x01) {
508
508
  # read Volume ID
509
509
  $off = Get32u($dataPt, 0x0c);
510
- if ($off + 0x20 <= $dataLen) {
510
+ if ($off and $off + 0x20 <= $dataLen) {
511
511
  # my $len = Get32u($dataPt, $off);
512
512
  $et->HandleTag($tagTablePtr, 'DriveType', undef, %opts, Start=>$off+4);
513
513
  $et->HandleTag($tagTablePtr, 'DriveSerialNumber', undef, %opts, Start=>$off+8);
@@ -545,6 +545,7 @@ sub ProcessLinkInfo($$$)
545
545
  $off = Get32u($dataPt, 0x14);
546
546
  if ($off and $off + 0x14 <= $dataLen) {
547
547
  my $siz = Get32u($dataPt, $off);
548
+ return 0 if $off + $siz > $dataLen;
548
549
  $pos = Get32u($dataPt, $off + 0x08);
549
550
  if ($pos > 0x14 and $siz >= 0x18) {
550
551
  $pos = Get32u($dataPt, $off + 0x14);
@@ -552,7 +553,7 @@ sub ProcessLinkInfo($$$)
552
553
  } else {
553
554
  undef $unicode;
554
555
  }
555
- $val = GetString($dataPt, $pos, $unicode);
556
+ $val = GetString($dataPt, $off + $pos, $unicode);
556
557
  if (defined $val) {
557
558
  $size = length $val;
558
559
  $val = $et->Decode($val, 'UCS2') if $unicode;
@@ -567,7 +568,7 @@ sub ProcessLinkInfo($$$)
567
568
  } else {
568
569
  undef $unicode;
569
570
  }
570
- $val = GetString($dataPt, $pos, $unicode);
571
+ $val = GetString($dataPt, $off + $pos, $unicode);
571
572
  if (defined $val) {
572
573
  $size = length $val;
573
574
  $val = $et->Decode($val, 'UCS2') if $unicode;
@@ -18,7 +18,7 @@ use strict;
18
18
  use vars qw($VERSION);
19
19
  use Image::ExifTool qw(:DataAccess :Utils);
20
20
 
21
- $VERSION = '1.16';
21
+ $VERSION = '1.17';
22
22
 
23
23
  %Image::ExifTool::MPEG::Audio = (
24
24
  GROUPS => { 2 => 'Audio' },
@@ -599,7 +599,7 @@ sub ProcessMPEGVideo($$)
599
599
  return 0;
600
600
  }
601
601
  # set file type if not done already
602
- $et->SetFileType('MPEG') unless $$et{VALUE}{FileType};
602
+ $et->SetFileType('MPEG') unless $$et{FileType};
603
603
 
604
604
  my $tagTablePtr = GetTagTable('Image::ExifTool::MPEG::Video');
605
605
  ProcessFrameHeader($et, $tagTablePtr, $w1, $w2);
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
21
21
  sub WriteUnknownOrPreview($$$);
22
22
  sub FixLeicaBase($$;$);
23
23
 
24
- $VERSION = '2.12';
24
+ $VERSION = '2.13';
25
25
 
26
26
  my $debug; # set to 1 to enable debugging code
27
27
 
@@ -96,7 +96,7 @@ my $debug; # set to 1 to enable debugging code
96
96
  },
97
97
  {
98
98
  Name => 'MakerNoteDJI',
99
- Condition => '$$self{Make} eq "DJI" and $$valPt !~ /^...\@AMBA/s',
99
+ Condition => '$$self{Make} eq "DJI" and $$valPt !~ /^(...\@AMBA|DJI)/s',
100
100
  SubDirectory => {
101
101
  TagTable => 'Image::ExifTool::DJI::Main',
102
102
  Start => '$valuePtr',
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
49
49
  use Image::ExifTool qw(:DataAccess :Utils);
50
50
  use Image::ExifTool::Exif;
51
51
 
52
- $VERSION = '2.87';
52
+ $VERSION = '2.88';
53
53
 
54
54
  # Full list of product codes for Sony-compatible Minolta lenses
55
55
  # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
@@ -179,12 +179,9 @@ $VERSION = '2.87';
179
179
  # ("New" and "II" appear in brackets if original version also has this LensType)
180
180
  %minoltaLensTypes = (
181
181
  Notes => q{
182
- Decimal values have been added to differentiate lenses which would otherwise
183
- have the same LensType, and are used by the Composite LensID tag when
184
- attempting to identify the specific lens model. "New" or "II" appear in
185
- brackets if the original version of the lens has the same LensType. Special
186
- logic is employed to identify the attached lens when a Metabones Canon EF
187
- adapter is used.
182
+ "New" or "II" appear in brackets if the original version of the lens has the
183
+ same LensType. Special logic is employed to identify the attached lens when
184
+ a Metabones Canon EF adapter is used.
188
185
  },
189
186
  OTHER => sub {
190
187
  my ($val, $inv) = @_;
@@ -898,6 +895,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
898
895
  SeparateTable => 1,
899
896
  ValueConvInv => 'int($val)', # (must truncate decimal part)
900
897
  PrintConv => \%minoltaLensTypes,
898
+ PrintInt => 1,
901
899
  },
902
900
  # 0x010e - WhiteBalance according to ref #10
903
901
  0x0111 => { #20
@@ -2708,6 +2706,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2708
2706
  SeparateTable => 1,
2709
2707
  ValueConvInv => 'int($val)', # (must truncate decimal part)
2710
2708
  PrintConv => \%minoltaLensTypes,
2709
+ PrintInt => 1,
2711
2710
  },
2712
2711
  0x49c0 => {
2713
2712
  Name => 'ExposureCompensation', # (in exposure bracketing, this is the actual value used)