exiftool_vendored 12.57.0 → 12.59.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +39 -0
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -0
  8. data/bin/config_files/rotate_regions.config +1 -1
  9. data/bin/exiftool +76 -57
  10. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  11. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
  13. data/bin/lib/Image/ExifTool/Canon.pm +26 -6
  14. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  15. data/bin/lib/Image/ExifTool/Exif.pm +24 -5
  16. data/bin/lib/Image/ExifTool/FlashPix.pm +28 -10
  17. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  18. data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
  19. data/bin/lib/Image/ExifTool/LIF.pm +10 -2
  20. data/bin/lib/Image/ExifTool/LNK.pm +5 -4
  21. data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
  22. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  23. data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
  24. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +9 -1
  25. data/bin/lib/Image/ExifTool/Nikon.pm +390 -114
  26. data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
  27. data/bin/lib/Image/ExifTool/PNG.pm +15 -2
  28. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
  29. data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
  30. data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
  31. data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
  32. data/bin/lib/Image/ExifTool/QuickTime.pm +16 -11
  33. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +38 -6
  34. data/bin/lib/Image/ExifTool/README +8 -0
  35. data/bin/lib/Image/ExifTool/RIFF.pm +41 -13
  36. data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
  37. data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
  38. data/bin/lib/Image/ExifTool/Sony.pm +23 -1
  39. data/bin/lib/Image/ExifTool/TagLookup.pm +4464 -4441
  40. data/bin/lib/Image/ExifTool/TagNames.pod +117 -36
  41. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +49 -0
  43. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  44. data/bin/lib/Image/ExifTool/Writer.pl +74 -14
  45. data/bin/lib/Image/ExifTool/XMP.pm +19 -4
  46. data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
  47. data/bin/lib/Image/ExifTool.pm +131 -17
  48. data/bin/lib/Image/ExifTool.pod +40 -5
  49. data/bin/perl-Image-ExifTool.spec +1 -1
  50. data/lib/exiftool_vendored/version.rb +1 -1
  51. metadata +2 -2
@@ -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.61';
33
+ $VERSION = '1.63';
34
34
 
35
35
  sub ConvertTimecode($);
36
36
  sub ProcessSGLT($$$);
@@ -38,6 +38,13 @@ sub ProcessSLLT($$$);
38
38
  sub ProcessLucas($$$);
39
39
  sub WriteRIFF($$);
40
40
 
41
+ # RIFF chunks containing image data (to include in ImageDataMD5 digest)
42
+ my %isImageData = (
43
+ LIST_movi => 1, # (AVI: contains ##db, ##dc, ##wb)
44
+ data => 1, # (WAV)
45
+ 'VP8 '=>1, VP8L=>1, ANIM=>1, ANMF=>1, ALPH=>1, # (WebP)
46
+ );
47
+
41
48
  # recognized RIFF variants
42
49
  my %riffType = (
43
50
  'WAVE' => 'WAV', 'AVI ' => 'AVI', 'WEBP' => 'WEBP',
@@ -1522,7 +1529,7 @@ my %code2charset = (
1522
1529
  },
1523
1530
  # (can't calculate duration like this for compressed audio types)
1524
1531
  RawConv => q{
1525
- return undef if $$self{VALUE}{FileType} =~ /^(LA|OFR|PAC|WV)$/;
1532
+ return undef if $$self{FileType} =~ /^(LA|OFR|PAC|WV)$/;
1526
1533
  return(($val[0] and not ($val[2] or $val[3])) ? $val[1] / $val[0] : undef);
1527
1534
  },
1528
1535
  PrintConv => 'ConvertDuration($val)',
@@ -1980,6 +1987,7 @@ sub ProcessRIFF($$)
1980
1987
  my $unknown = $et->Options('Unknown');
1981
1988
  my $validate = $et->Options('Validate');
1982
1989
  my $ee = $et->Options('ExtractEmbedded');
1990
+ my $md5 = $$et{ImageDataMD5};
1983
1991
 
1984
1992
  # verify this is a valid RIFF file
1985
1993
  return 0 unless $raf->Read($buff, 12) == 12;
@@ -1996,7 +2004,7 @@ sub ProcessRIFF($$)
1996
2004
  $$raf{NoBuffer} = 1 if $et->Options('FastScan'); # disable buffering in FastScan mode
1997
2005
  $mime = $riffMimeType{$type} if $type;
1998
2006
  $et->SetFileType($type, $mime);
1999
- $$et{VALUE}{FileType} .= ' (RF64)' if $rf64;
2007
+ $$et{VALUE}{FileType} .= ' (RF64)' if $rf64 and $$et{VALUE}{FileType};
2000
2008
  $$et{RIFFStreamType} = ''; # initialize stream type
2001
2009
  $$et{RIFFStreamCodec} = []; # initialize codec array
2002
2010
  SetByteOrder('II');
@@ -2059,6 +2067,10 @@ sub ProcessRIFF($$)
2059
2067
  # (in LIST_movi chunk: ##db = uncompressed DIB, ##dc = compressed DIB, ##wb = audio data)
2060
2068
  if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF|\d{2}(db|dc|wb))$/)) {
2061
2069
  $raf->Read($buff, $len2) == $len2 or $err=1, last;
2070
+ if ($md5 and $isImageData{$tag}) {
2071
+ $md5->add($buff);
2072
+ $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: '${tag}' chunk, $len2 bytes)\n");
2073
+ }
2062
2074
  my $setGroups;
2063
2075
  if ($tagInfo and ref $tagInfo eq 'HASH' and $$tagInfo{SetGroups}) {
2064
2076
  $setGroups = $$et{SET_GROUP0} = $$et{SET_GROUP1} = $$tagInfo{SetGroups};
@@ -2085,18 +2097,34 @@ sub ProcessRIFF($$)
2085
2097
  # extract information from remaining file as an embedded file
2086
2098
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2087
2099
  next; # (must not increment $pos)
2088
- } elsif ($tag eq 'LIST_movi' and $ee) {
2089
- next; # parse into movi chunk
2090
2100
  } else {
2091
- if ($len > 0x7fffffff and not $et->Options('LargeFileSupport')) {
2092
- $et->Warn("Stopped parsing at large $tag chunk (LargeFileSupport not set)");
2093
- last;
2101
+ my $rewind;
2102
+ # do MD5 if required
2103
+ if ($md5 and $isImageData{$tag}) {
2104
+ $rewind = $raf->Tell();
2105
+ my $more = $len2;
2106
+ while ($more) {
2107
+ my $n = $more > 65536 ? 65536 : $more;
2108
+ $raf->Read($buff, $n) == $n or $err = 1, last;
2109
+ $md5->add($buff);
2110
+ $more -= $n;
2111
+ }
2112
+ $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: '${tag}' chunk, $len2 bytes)\n");
2094
2113
  }
2095
- if ($validate and $len2) {
2096
- # (must actually try to read something after seeking to detect error)
2097
- $raf->Seek($len2-1, 1) and $raf->Read($buff, 1) == 1 or $err = 1, last;
2098
- } else {
2099
- $raf->Seek($len2, 1) or $err=1, last;
2114
+ if ($tag eq 'LIST_movi' and $ee) {
2115
+ $raf->Seek($rewind, 0) or $err = 1, last if $rewind;
2116
+ next; # parse into movi chunk
2117
+ } elsif (not $rewind) {
2118
+ if ($len > 0x7fffffff and not $et->Options('LargeFileSupport')) {
2119
+ $et->Warn("Stopped parsing at large $tag chunk (LargeFileSupport not set)");
2120
+ last;
2121
+ }
2122
+ if ($validate and $len2) {
2123
+ # (must actually try to read something after seeking to detect error)
2124
+ $raf->Seek($len2-1, 1) and $raf->Read($buff, 1) == 1 or $err = 1, last;
2125
+ } else {
2126
+ $raf->Seek($len2, 1) or $err=1, last;
2127
+ }
2100
2128
  }
2101
2129
  }
2102
2130
  $pos += $len2;
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.05';
17
+ $VERSION = '1.06';
18
18
 
19
19
  # currently support this version Rawzor images
20
20
  my $implementedRawzorVersion = 199; # (up to version 1.99)
@@ -138,7 +138,7 @@ sub ProcessRWZ($$)
138
138
  }
139
139
  # set OriginalFileType from FileType of original file
140
140
  # then change FileType and MIMEType to indicate a Rawzor image
141
- my $origFileType = $$et{VALUE}{FileType};
141
+ my $origFileType = $$et{FileType};
142
142
  if ($origFileType) {
143
143
  $et->HandleTag($tagTablePtr, OriginalFileType => $origFileType);
144
144
  $et->OverrideFileType('RWZ');
@@ -19,15 +19,13 @@ use strict;
19
19
  use vars qw($VERSION %sigmaLensTypes);
20
20
  use Image::ExifTool::Exif;
21
21
 
22
- $VERSION = '1.33';
22
+ $VERSION = '1.34';
23
23
 
24
24
  # sigma LensType lookup (ref IB)
25
25
  %sigmaLensTypes = (
26
26
  Notes => q{
27
27
  Sigma LensType values are hexadecimal numbers stored as a string (without
28
- the leading "0x"). Decimal values have been added to differentiate lenses
29
- which would otherwise have the same LensType, and are used by the Composite
30
- LensID tag when attempting to identify the specific lens model.
28
+ the leading "0x").
31
29
  },
32
30
  # 0x0 => 'Sigma 50mm F2.8 EX Macro', (0x0 used for other lenses too)
33
31
  # 0x8 - 18-125mm LENSARANGE@18mm=22-4
@@ -557,6 +555,7 @@ $VERSION = '1.33';
557
555
  SeparateTable => 'LensType',
558
556
  PrintHex => 1,
559
557
  PrintConv => \%sigmaLensTypes,
558
+ PrintInt => 1,
560
559
  },{ #PH
561
560
  Name => 'LensType',
562
561
  Condition => '$$self{MakerNoteSigmaVer} >= 3',
@@ -565,6 +564,7 @@ $VERSION = '1.33';
565
564
  SeparateTable => 'LensType',
566
565
  PrintHex => 1,
567
566
  PrintConv => \%sigmaLensTypes,
567
+ PrintInt => 1,
568
568
  }],
569
569
  0x002a => { #PH
570
570
  Name => 'LensFocalRange',
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.57';
37
+ $VERSION = '3.58';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -2045,6 +2045,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
2045
2045
  369 => 'DSC-RX100M5A', #JR
2046
2046
  371 => 'ILCE-6400', #IB
2047
2047
  372 => 'DSC-RX0M2', #JR
2048
+ 373 => 'DSC-HX95', #github191
2048
2049
  374 => 'DSC-RX100M7', #IB
2049
2050
  375 => 'ILCE-7RM4', #IB
2050
2051
  376 => 'ILCE-9M2', #JR
@@ -2161,6 +2162,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
2161
2162
  # set to 65535 for E-mount lenses (values 0x80xx)
2162
2163
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 65535 : int($val)',
2163
2164
  PrintConv => \%sonyLensTypes,
2165
+ PrintInt => 1,
2164
2166
  },
2165
2167
  0xb028 => { #2
2166
2168
  # (used by the DSLR-A100)
@@ -5570,6 +5572,7 @@ my %faceInfo = (
5570
5572
  Format => 'int16u',
5571
5573
  SeparateTable => 'LensType2',
5572
5574
  PrintConv => \%sonyLensTypes2,
5575
+ PrintInt => 1,
5573
5576
  },
5574
5577
  0x400 => { #JR
5575
5578
  Name => 'ImageNumber',
@@ -6603,6 +6606,7 @@ my %isoSetting2010 = (
6603
6606
  Format => 'int16u',
6604
6607
  SeparateTable => 'LensType2',
6605
6608
  PrintConv => \%sonyLensTypes2,
6609
+ PrintInt => 1,
6606
6610
  },
6607
6611
  0x1896 => {
6608
6612
  Name => 'LensType',
@@ -6612,6 +6616,7 @@ my %isoSetting2010 = (
6612
6616
  SeparateTable => 1,
6613
6617
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
6614
6618
  PrintConv => \%sonyLensTypes,
6619
+ PrintInt => 1,
6615
6620
  },
6616
6621
  0x1898 => {
6617
6622
  Name => 'DistortionCorrParamsPresent',
@@ -6809,6 +6814,7 @@ my %isoSetting2010 = (
6809
6814
  Format => 'int16u',
6810
6815
  SeparateTable => 'LensType2',
6811
6816
  PrintConv => \%sonyLensTypes2,
6817
+ PrintInt => 1,
6812
6818
  },
6813
6819
  0x18c2 => {
6814
6820
  Name => 'LensType',
@@ -6818,6 +6824,7 @@ my %isoSetting2010 = (
6818
6824
  SeparateTable => 1,
6819
6825
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
6820
6826
  PrintConv => \%sonyLensTypes,
6827
+ PrintInt => 1,
6821
6828
  },
6822
6829
  0x18c4 => {
6823
6830
  Name => 'DistortionCorrParamsPresent',
@@ -6946,6 +6953,7 @@ my %isoSetting2010 = (
6946
6953
  Format => 'int16u',
6947
6954
  SeparateTable => 'LensType2',
6948
6955
  PrintConv => \%sonyLensTypes2,
6956
+ PrintInt => 1,
6949
6957
  },
6950
6958
  0x18f2 => {
6951
6959
  Name => 'LensType',
@@ -6955,6 +6963,7 @@ my %isoSetting2010 = (
6955
6963
  SeparateTable => 1,
6956
6964
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
6957
6965
  PrintConv => \%sonyLensTypes,
6966
+ PrintInt => 1,
6958
6967
  },
6959
6968
  0x18f4 => {
6960
6969
  Name => 'DistortionCorrParamsPresent',
@@ -7075,6 +7084,7 @@ my %isoSetting2010 = (
7075
7084
  Format => 'int16u',
7076
7085
  SeparateTable => 'LensType2',
7077
7086
  PrintConv => \%sonyLensTypes2,
7087
+ PrintInt => 1,
7078
7088
  },
7079
7089
  0x17f6 => {
7080
7090
  Name => 'LensType',
@@ -7084,6 +7094,7 @@ my %isoSetting2010 = (
7084
7094
  SeparateTable => 1,
7085
7095
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
7086
7096
  PrintConv => \%sonyLensTypes,
7097
+ PrintInt => 1,
7087
7098
  },
7088
7099
  0x17f8 => {
7089
7100
  Name => 'DistortionCorrParamsPresent',
@@ -7439,6 +7450,7 @@ my %isoSetting2010 = (
7439
7450
  Format => 'int16u',
7440
7451
  SeparateTable => 'LensType2',
7441
7452
  PrintConv => \%sonyLensTypes2,
7453
+ PrintInt => 1,
7442
7454
  },
7443
7455
  0x0109 => {
7444
7456
  Name => 'LensType',
@@ -7450,6 +7462,7 @@ my %isoSetting2010 = (
7450
7462
  # has a value of 0 for E-mount lenses (values 0x80xx)
7451
7463
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
7452
7464
  PrintConv => \%sonyLensTypes,
7465
+ PrintInt => 1,
7453
7466
  },
7454
7467
  0x010b => {
7455
7468
  Name => 'DistortionCorrParamsPresent',
@@ -7726,6 +7739,7 @@ my %isoSetting2010 = (
7726
7739
  Format => 'int16u',
7727
7740
  SeparateTable => 'LensType2',
7728
7741
  PrintConv => \%sonyLensTypes2,
7742
+ PrintInt => 1,
7729
7743
  },
7730
7744
  0x0109 => {
7731
7745
  Name => 'LensType',
@@ -7737,6 +7751,7 @@ my %isoSetting2010 = (
7737
7751
  # has a value of 0 for E-mount lenses (values 0x80xx)
7738
7752
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
7739
7753
  PrintConv => \%sonyLensTypes,
7754
+ PrintInt => 1,
7740
7755
  },
7741
7756
  0x010b => {
7742
7757
  Name => 'DistortionCorrParamsPresent',
@@ -8535,6 +8550,7 @@ my %isoSetting2010 = (
8535
8550
  Notes => 'E-mount lenses',
8536
8551
  SeparateTable => 'LensType2',
8537
8552
  PrintConv => \%sonyLensTypes2,
8553
+ PrintInt => 1,
8538
8554
  },
8539
8555
  0x0608 => {
8540
8556
  Name => 'LensType',
@@ -8543,6 +8559,7 @@ my %isoSetting2010 = (
8543
8559
  Notes => 'A-mount lenses on SLT and NEX',
8544
8560
  SeparateTable => 1,
8545
8561
  PrintConv => \%sonyLensTypes,
8562
+ PrintInt => 1,
8546
8563
  },
8547
8564
  0x064a => {
8548
8565
  Name => 'VignettingCorrParams',
@@ -8713,6 +8730,7 @@ my %isoSetting2010 = (
8713
8730
  Notes => 'E-mount lenses',
8714
8731
  SeparateTable => 'LensType2',
8715
8732
  PrintConv => \%sonyLensTypes2,
8733
+ PrintInt => 1,
8716
8734
  },
8717
8735
  0x0062 => {
8718
8736
  Name => 'LensType',
@@ -8721,6 +8739,7 @@ my %isoSetting2010 = (
8721
8739
  Notes => 'A-mount lenses on SLT and NEX',
8722
8740
  SeparateTable => 1,
8723
8741
  PrintConv => \%sonyLensTypes,
8742
+ PrintInt => 1,
8724
8743
  },
8725
8744
  0x0064 => {
8726
8745
  Name => 'DistortionCorrParams',
@@ -8937,6 +8956,7 @@ my %isoSetting2010 = (
8937
8956
  Format => 'int16u',
8938
8957
  SeparateTable => 'LensType2',
8939
8958
  PrintConv => \%sonyLensTypes2,
8959
+ PrintInt => 1,
8940
8960
  },
8941
8961
  0x000b => {
8942
8962
  Name => 'CameraE-mountVersion',
@@ -9622,6 +9642,7 @@ my %isoSetting2010 = (
9622
9642
  Format => 'int16u',
9623
9643
  SeparateTable => 'LensType2',
9624
9644
  PrintConv => \%sonyLensTypes2,
9645
+ PrintInt => 1,
9625
9646
  },
9626
9647
  0x004d => {
9627
9648
  Name => 'LensType',
@@ -9631,6 +9652,7 @@ my %isoSetting2010 = (
9631
9652
  SeparateTable => 1,
9632
9653
  ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
9633
9654
  PrintConv => \%sonyLensTypes,
9655
+ PrintInt => 1,
9634
9656
  },
9635
9657
  0x004f => {
9636
9658
  Name => 'DistortionCorrParams',