exiftool_vendored 12.57.0 → 12.59.0

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