exiftool_vendored 12.18.0 → 12.33.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +236 -4
  3. data/bin/MANIFEST +23 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -43
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/acdsee.config +193 -6
  9. data/bin/config_files/convert_regions.config +25 -14
  10. data/bin/config_files/cuepointlist.config +70 -0
  11. data/bin/config_files/example.config +2 -9
  12. data/bin/exiftool +152 -97
  13. data/bin/fmt_files/gpx.fmt +2 -2
  14. data/bin/fmt_files/gpx_wpt.fmt +2 -2
  15. data/bin/fmt_files/kml.fmt +1 -1
  16. data/bin/fmt_files/kml_track.fmt +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
  19. data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
  20. data/bin/lib/Image/ExifTool/Canon.pm +44 -19
  21. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  22. data/bin/lib/Image/ExifTool/DPX.pm +13 -2
  23. data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
  24. data/bin/lib/Image/ExifTool/Exif.pm +124 -13
  25. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  26. data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
  27. data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
  28. data/bin/lib/Image/ExifTool/GPS.pm +22 -11
  29. data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
  30. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  31. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  32. data/bin/lib/Image/ExifTool/ID3.pm +15 -3
  33. data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
  34. data/bin/lib/Image/ExifTool/JSON.pm +30 -5
  35. data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
  36. data/bin/lib/Image/ExifTool/LIF.pm +153 -0
  37. data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
  38. data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
  39. data/bin/lib/Image/ExifTool/MIE.pm +4 -3
  40. data/bin/lib/Image/ExifTool/MRC.pm +341 -0
  41. data/bin/lib/Image/ExifTool/MWG.pm +3 -3
  42. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/MacOS.pm +3 -3
  44. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  45. data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
  46. data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
  47. data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
  48. data/bin/lib/Image/ExifTool/Other.pm +93 -0
  49. data/bin/lib/Image/ExifTool/PDF.pm +9 -12
  50. data/bin/lib/Image/ExifTool/PNG.pm +8 -7
  51. data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
  52. data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
  53. data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
  57. data/bin/lib/Image/ExifTool/README +5 -2
  58. data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
  59. data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
  60. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  61. data/bin/lib/Image/ExifTool/Sony.pm +230 -69
  62. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  63. data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
  64. data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
  65. data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
  66. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  67. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  68. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  69. data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
  70. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
  71. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
  72. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
  73. data/bin/lib/Image/ExifTool/Writer.pl +47 -10
  74. data/bin/lib/Image/ExifTool/XMP.pm +45 -15
  75. data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
  76. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  77. data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
  78. data/bin/lib/Image/ExifTool.pm +233 -81
  79. data/bin/lib/Image/ExifTool.pod +114 -93
  80. data/bin/perl-Image-ExifTool.spec +43 -42
  81. data/lib/exiftool_vendored/version.rb +1 -1
  82. metadata +28 -13
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.70';
43
+ $VERSION = '2.75';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -113,6 +113,8 @@ my %olympusLensTypes = (
113
113
  '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
114
114
  '0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
115
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
116
+ '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
117
+ '0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
116
118
  # Sigma lenses
117
119
  '1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
118
120
  '1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
@@ -138,7 +140,6 @@ my %olympusLensTypes = (
138
140
  '1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
139
141
  '1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
140
142
  '1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
141
- '1 18 60' => 'Test',
142
143
  # Panasonic/Leica lenses
143
144
  '2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
144
145
  '2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
@@ -183,6 +184,7 @@ my %olympusLensTypes = (
183
184
  '2 36 10' => 'Leica DG Elmarit 200mm F2.8 Power OIS', #IB
184
185
  '2 37 10' => 'Leica DG Vario-Elmarit 50-200mm F2.8-4 Asph. Power OIS', #IB
185
186
  '2 38 10' => 'Leica DG Vario-Summilux 10-25mm F1.7 Asph.', #IB
187
+ '2 40 10' => 'Leica DG Vario-Summilux 25-50mm F1.7 Asph.', #IB (H-X2550)
186
188
  '3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
187
189
  '3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11
188
190
  # Tamron lenses
@@ -429,6 +431,7 @@ my %olympusCameraTypes = (
429
431
  S0085 => 'E-PL10', #IB
430
432
  S0089 => 'E-M5MarkIII',
431
433
  S0092 => 'E-M1MarkIII', #IB
434
+ S0093 => 'E-P7', #IB
432
435
  SR45 => 'D220',
433
436
  SR55 => 'D320L',
434
437
  SR83 => 'D340L',
@@ -3606,6 +3609,10 @@ my %indexInfo = (
3606
3609
  Format => 'string[24]',
3607
3610
  Groups => { 2 => 'Time' },
3608
3611
  },
3612
+ 0x17f => {
3613
+ Name => 'LensModel',
3614
+ Format => 'string[32]'
3615
+ },
3609
3616
  );
3610
3617
 
3611
3618
  # yet a different "thmb" atom format (PH, E-M5)
@@ -3952,7 +3959,7 @@ my %indexInfo = (
3952
3959
  1 => 'LensTypeModel',
3953
3960
  },
3954
3961
  Notes => 'based on tags found in some Panasonic RW2 images',
3955
- SeparateTable => 'LensType',
3962
+ SeparateTable => 'Olympus LensType',
3956
3963
  ValueConv => '"$val[0] $val[1]"',
3957
3964
  PrintConv => \%olympusLensTypes,
3958
3965
  },
@@ -0,0 +1,93 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Other.pm
3
+ #
4
+ # Description: Read meta information from other uncommon formats
5
+ #
6
+ # Revisions: 2021/07/16 - P. Harvey Created
7
+ #
8
+ # References: 1) PFM - http://www.pauldebevec.com/Research/HDR/PFM/
9
+ #------------------------------------------------------------------------------
10
+
11
+ package Image::ExifTool::Other;
12
+
13
+ use strict;
14
+ use vars qw($VERSION);
15
+ use Image::ExifTool qw(:DataAccess :Utils);
16
+ use Image::ExifTool::Exif;
17
+
18
+ $VERSION = '1.00';
19
+
20
+ # Other info
21
+ %Image::ExifTool::Other::PFM = (
22
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
23
+ VARS => { NO_ID => 1 },
24
+ NOTES => q{
25
+ Tags extracted from Portable FloatMap images. See
26
+ L<http://www.pauldebevec.com/Research/HDR/PFM/> for the specification.
27
+ },
28
+ ColorSpace => { PrintConv => { PF => 'RGB', 'Pf' => 'Monochrome'} },
29
+ ImageWidth => { },
30
+ ImageHeight => { },
31
+ ByteOrder => { PrintConv => '$val > 0 ? "Big-endian" : "Little-endian"' },
32
+ );
33
+
34
+ #------------------------------------------------------------------------------
35
+ # Extract information from a Portable FloatMap image
36
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference
37
+ # Returns: 1 on success, 0 if this wasn't a valid PFM file
38
+ sub ProcessPFM2($$)
39
+ {
40
+ my ($et, $dirInfo) = @_;
41
+ my $raf = $$dirInfo{RAF};
42
+ my $buff;
43
+ return 0 unless $raf->Read($buff, 256) and $buff =~ /^(P[Ff])\x0a(\d+) (\d+)\x0a([-+0-9.]+)\x0a/;
44
+ $et->SetFileType('PFM', 'image/x-pfm');
45
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Other::PFM');
46
+ $et->HandleTag($tagTablePtr, ColorSpace => $1);
47
+ $et->HandleTag($tagTablePtr, ImageWidth => $2);
48
+ $et->HandleTag($tagTablePtr, ImageHeight => $3);
49
+ $et->HandleTag($tagTablePtr, ByteOrder => $4);
50
+ # hack to set proper file description (extension is the same for Printer Font Metrics files)
51
+ $Image::ExifTool::static_vars{OverrideFileDescription}{PFM} = 'Portable FloatMap',
52
+ return 1;
53
+ }
54
+
55
+ 1; # end
56
+
57
+ __END__
58
+
59
+ =head1 NAME
60
+
61
+ Image::ExifTool::Other - Read meta information from other uncommon formats
62
+
63
+ =head1 SYNOPSIS
64
+
65
+ This module is used by Image::ExifTool
66
+
67
+ =head1 DESCRIPTION
68
+
69
+ This module contains routines required by Image::ExifTool to extract
70
+ information from Portable FloatMap (PFM) images.
71
+
72
+ =head1 AUTHOR
73
+
74
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
75
+
76
+ This library is free software; you can redistribute it and/or modify it
77
+ under the same terms as Perl itself.
78
+
79
+ =head1 REFERENCES
80
+
81
+ =over 4
82
+
83
+ =item PFM L<http://www.pauldebevec.com/Research/HDR/PFM/>
84
+
85
+ =back
86
+
87
+ =head1 SEE ALSO
88
+
89
+ L<Image::ExifTool::TagNames/Other Tags>,
90
+ L<Image::ExifTool(3pm)|Image::ExifTool>
91
+
92
+ =cut
93
+
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.51';
24
+ $VERSION = '1.53';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -280,7 +280,10 @@ my %supportedFilter = (
280
280
  ConvertToDict => 1,
281
281
  },
282
282
  Cs1 => {
283
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::Cs1' },
283
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
284
+ },
285
+ CS0 => {
286
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
284
287
  },
285
288
  );
286
289
 
@@ -291,14 +294,7 @@ my %supportedFilter = (
291
294
  },
292
295
  );
293
296
 
294
- # tags in PDF Cs1 dictionary
295
- %Image::ExifTool::PDF::Cs1 = (
296
- _stream => {
297
- SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
298
- },
299
- );
300
-
301
- # tags in PDF ICCBased dictionary
297
+ # tags in PDF ICCBased, Cs1 and CS0 dictionaries
302
298
  %Image::ExifTool::PDF::ICCBased = (
303
299
  _stream => {
304
300
  SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
@@ -1989,16 +1985,17 @@ sub ProcessDict($$$$;$$)
1989
1985
  } else {
1990
1986
  $val = ReadPDFValue($val);
1991
1987
  }
1992
- # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
1993
- # unless this is binary data (hex-encoded strings would not have been converted)
1994
1988
  if (ref $val) {
1995
1989
  if (ref $val eq 'ARRAY') {
1990
+ delete $$et{LIST_TAGS}{$tagInfo} if $$tagInfo{List};
1996
1991
  my $v;
1997
1992
  foreach $v (@$val) {
1998
1993
  $et->FoundTag($tagInfo, $v);
1999
1994
  }
2000
1995
  }
2001
1996
  } elsif (defined $val) {
1997
+ # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
1998
+ # unless this is binary data (hex-encoded strings would not have been converted)
2002
1999
  my $format = $$tagInfo{Format} || $$tagInfo{Writable} || 'string';
2003
2000
  $val = ConvertPDFDate($val) if $format eq 'date';
2004
2001
  if (not $$tagInfo{Binary} and $val =~ /[\x18-\x1f\x80-\xff]/) {
@@ -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.56';
39
+ $VERSION = '1.59';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -89,7 +89,7 @@ $Image::ExifTool::PNG::colorType = -1;
89
89
 
90
90
  # data and text chunk types
91
91
  my %isDatChunk = ( IDAT => 1, JDAT => 1, JDAA => 1 );
92
- my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1 );
92
+ my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1, eXIf => 1 );
93
93
 
94
94
  # chunks that we shouldn't move other chunks across (ref 3)
95
95
  my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND => 1,
@@ -478,6 +478,8 @@ my %unreg = ( Notes => 'unregistered' );
478
478
  if the L<Compress|../ExifTool.html#Compress> option is used and Compress::Zlib is available. Raw profile
479
479
  information is always created as compressed zTXt if Compress::Zlib is
480
480
  available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
481
+ User-defined tags may set an 'iTXt' flag in the tag definition to be written
482
+ only as iTXt.
481
483
 
482
484
  Alternate languages are accessed by suffixing the tag name with a '-',
483
485
  followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or
@@ -975,7 +977,7 @@ sub FoundPNG($$$$;$$$$)
975
977
  $$tagInfo{LangCode} = $lang if $lang;
976
978
  # make unknown profiles binary data type
977
979
  $$tagInfo{Binary} = 1 if $tag =~ /^Raw profile type /;
978
- $verbose and $et->VPrint(0, " | [adding $tag]\n");
980
+ $verbose and $et->VPrint(0, " [adding $tag]\n");
979
981
  AddTagToTable($tagTablePtr, $tag, $tagInfo);
980
982
  }
981
983
  #
@@ -1382,9 +1384,8 @@ sub ProcessPNG($$)
1382
1384
  # to add it as a text profile chunk if this isn't successful
1383
1385
  # (ie. if Compress::Zlib wasn't available)
1384
1386
  Add_iCCP($et, $outfile);
1385
- AddChunks($et, $outfile) or $err = 1; # all all text chunks
1386
- # add EXIF before end chunk if not found already
1387
- AddChunks($et, $outfile, 'IFD0') if $chunk eq $endChunk;
1387
+ AddChunks($et, $outfile) or $err = 1; # add all text chunks
1388
+ AddChunks($et, $outfile, 'IFD0') or $err = 1; # and eXIf chunk
1388
1389
  } elsif ($chunk eq 'PLTE') {
1389
1390
  # iCCP chunk must come before PLTE (and IDAT, handled above)
1390
1391
  # (ignore errors -- will add later as text profile if this fails)
@@ -1444,7 +1445,7 @@ sub ProcessPNG($$)
1444
1445
  } else {
1445
1446
  $msg = 'fixed';
1446
1447
  }
1447
- $et->WarnOnce("Text chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
+ $et->WarnOnce("Text/EXIF chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
1449
  }
1449
1450
  # read chunk data and CRC
1450
1451
  unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) {
@@ -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.14';
40
+ $VERSION = '2.16';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -449,7 +449,7 @@ my %shootingMode = (
449
449
  same as the number printed on the camera body
450
450
  },
451
451
  PrintConv => q{
452
- return $val unless $val=~/^([A-Z]\d{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
452
+ return $val unless $val=~/^([A-Z][0-9A-Z]{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
453
453
  my $yr = $2 + ($2 < 70 ? 2000 : 1900);
454
454
  return "($1) $yr:$3:$4 no. $5";
455
455
  },
@@ -1423,6 +1423,18 @@ my %shootingMode = (
1423
1423
  Name => 'NoiseReductionStrength',
1424
1424
  Writable => 'rational64s',
1425
1425
  },
1426
+ 0xe4 => { #IB
1427
+ Name => 'LensTypeModel',
1428
+ Condition => '$format eq "int16u"',
1429
+ Writable => 'int16u',
1430
+ RawConv => q{
1431
+ return undef unless $val;
1432
+ require Image::ExifTool::Olympus; # (to load Composite LensID)
1433
+ return $val;
1434
+ },
1435
+ ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
1436
+ ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
1437
+ },
1426
1438
  0x0e00 => {
1427
1439
  Name => 'PrintIM',
1428
1440
  Description => 'Print Image Matching',
@@ -2118,6 +2130,7 @@ my %shootingMode = (
2118
2130
  Name => 'UserProfile',
2119
2131
  Writable => 'string',
2120
2132
  },
2133
+ # 0x357 int32u - 0=DNG, 3162=JPG (ref 23)
2121
2134
  0x359 => { #23
2122
2135
  Name => 'ISOSelected',
2123
2136
  Writable => 'int32s',
@@ -2134,7 +2147,19 @@ my %shootingMode = (
2134
2147
  PrintConv => 'sprintf("%.1f", $val)',
2135
2148
  PrintConvInv => '$val',
2136
2149
  },
2137
- # 0x357 int32u - 0=DNG, 3162=JPG (ref 23)
2150
+ 0x035b => { #IB
2151
+ Name => 'CorrelatedColorTemp', # (in Kelvin)
2152
+ Writable => 'int16u',
2153
+ },
2154
+ 0x035c => { #IB
2155
+ Name => 'ColorTint', # (same units as Adobe is using)
2156
+ Writable => 'int16s',
2157
+ },
2158
+ 0x035d => { #IB
2159
+ Name => 'WhitePoint', # (x/y)
2160
+ Writable => 'rational64u',
2161
+ Count => 2,
2162
+ },
2138
2163
  );
2139
2164
 
2140
2165
  # Type 2 tags (ref PH)
@@ -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.36';
61
+ $VERSION = '3.39';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -340,6 +340,7 @@ sub DecodeAFPoints($$$$;$);
340
340
  '8 64' => 'HD PENTAX-D FA* 50mm F1.4 SDM AW', #27
341
341
  '8 65' => 'HD PENTAX-D FA 70-210mm F4 ED SDM WR', #PH
342
342
  '8 66' => 'HD PENTAX-D FA 85mm F1.4 ED SDM AW', #James O'Neill
343
+ '8 195' => 'HD PENTAX DA* 16-50mm F2.8 ED PLM AW', #27
343
344
  '8 196' => 'HD PENTAX-DA* 11-18mm F2.8 ED DC AW', #29
344
345
  '8 197' => 'HD PENTAX-DA 55-300mm F4.5-6.3 ED PLM WR RE', #29
345
346
  '8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29
@@ -548,6 +549,7 @@ my %pentaxModelID = (
548
549
  0x13222 => 'K-70', #29 (Ricoh)
549
550
  0x1322c => 'KP', #29 (Ricoh)
550
551
  0x13240 => 'K-1 Mark II', # (Ricoh)
552
+ 0x13254 => 'K-3 Mark III', #IB (Ricoh)
551
553
  0x13290 => 'WG-70', # (Ricoh)
552
554
  );
553
555
 
@@ -2222,6 +2224,7 @@ my %binaryDataAttrs = (
2222
2224
  17 => '17 (K-70)', #29
2223
2225
  18 => '18 (KP)', #PH
2224
2226
  19 => '19 (GR III)', #PH
2227
+ 20 => '20 (K-3III)', #PH
2225
2228
  },
2226
2229
  },
2227
2230
  0x0067 => { #PH (K-5)
@@ -2454,6 +2457,7 @@ my %binaryDataAttrs = (
2454
2457
  '2 0' => 'Standard',
2455
2458
  '3 0' => 'Fast',
2456
2459
  # '1 108' - seen for GR III
2460
+ # '3 84' - seen for K-3III
2457
2461
  },
2458
2462
  },
2459
2463
  0x007b => { #PH (K-5)
@@ -2597,8 +2601,9 @@ my %binaryDataAttrs = (
2597
2601
  },
2598
2602
  },
2599
2603
  },
2600
- 0x0095 => { #31
2604
+ 0x0095 => [{ #31
2601
2605
  Name => 'SkinToneCorrection',
2606
+ Condition => '$count == 2',
2602
2607
  Writable => 'int8s',
2603
2608
  Count => 2,
2604
2609
  PrintConv => {
@@ -2606,7 +2611,15 @@ my %binaryDataAttrs = (
2606
2611
  '1 1' => 'On (type 1)',
2607
2612
  '1 2' => 'On (type 2)',
2608
2613
  },
2609
- },
2614
+ },{
2615
+ Name => 'SkinToneCorrection',
2616
+ Condition => '$count == 3',
2617
+ Writable => 'int8s',
2618
+ Count => 3,
2619
+ PrintConv => {
2620
+ '0 0 0' => 'Off',
2621
+ },
2622
+ }],
2610
2623
  0x0096 => { #31
2611
2624
  Name => 'ClarityControl',
2612
2625
  Writable => 'int8s',
@@ -2842,8 +2855,18 @@ my %binaryDataAttrs = (
2842
2855
  # High: 0000000238c0e960fde0f9203140f5a0fce0f1e031403f00e600fb00f7803760f120fc60ef403460
2843
2856
  # Very High:000000023d20e520fdc0f7203420f4c0fb60ee6036404400e120fae0f5403aa0f020fac0eb403a00
2844
2857
  },
2845
- # 0x021c - undef[18] (K-5)
2846
- # 0x021d - undef[18] (K-5)
2858
+ 0x021c => { #IB
2859
+ Name => 'ColorMatrixA2',
2860
+ Format => 'int16s',
2861
+ Writable => 'undef',
2862
+ Count => 9,
2863
+ },
2864
+ 0x021d => { #IB
2865
+ Name => 'ColorMatrixB2',
2866
+ Format => 'int16s',
2867
+ Writable => 'undef',
2868
+ Count => 9,
2869
+ },
2847
2870
  # 0x021e - undef[8] (K-5, Q)
2848
2871
  0x021f => { #JD
2849
2872
  Name => 'AFInfo',
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::Exif;
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  sub WritePhaseOne($$$);
21
21
  sub ProcessPhaseOne($$$);
@@ -73,10 +73,11 @@ my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' );
73
73
  PrintConv => { #PH
74
74
  1 => 'RAW 1', #? (encrypted)
75
75
  2 => 'RAW 2', #? (encrypted)
76
- 3 => 'IIQ L',
76
+ 3 => 'IIQ L', # (now "L14", ref IB)
77
77
  # 4?
78
78
  5 => 'IIQ S',
79
- 6 => 'IIQ Sv2',
79
+ 6 => 'IIQ Sv2', # (now "S14" for "IIQ 14 Smart" and "IIQ 14 Sensor+", ref IB)
80
+ 8 => 'IIQ L16', #IB ("IIQ 16 Extended" and "IIQ 16 Large")
80
81
  },
81
82
  },
82
83
  0x010f => {
@@ -988,6 +988,12 @@ sub ProcessPhotoshop($$$)
988
988
  $size += 1 if $size & 0x01; # size is padded to an even # bytes
989
989
  $pos += $size;
990
990
  }
991
+ # warn about incorrect IPTCDigest
992
+ if ($$et{VALUE}{IPTCDigest} and $$et{VALUE}{CurrentIPTCDigest} and
993
+ $$et{VALUE}{IPTCDigest} ne $$et{VALUE}{CurrentIPTCDigest})
994
+ {
995
+ $et->WarnOnce('IPTCDigest is not current. XMP may be out of sync');
996
+ }
991
997
  delete $$et{LOW_PRIORITY_DIR}{'*'};
992
998
  return $success;
993
999
  }