exiftool_vendored 12.57.0 → 12.58.0

Sign up to get free protection for your applications and to get access to all the features.
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)