exiftool_vendored 11.86.0 → 11.88.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +38 -16
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +34 -33
  7. data/bin/config_files/acdsee.config +1 -3
  8. data/bin/config_files/depthmap.config +56 -0
  9. data/bin/config_files/example.config +2 -0
  10. data/bin/config_files/gps2utm.config +1 -1
  11. data/bin/config_files/tiff_version.config +1 -1
  12. data/bin/exiftool +56 -39
  13. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  14. data/bin/lib/Image/ExifTool.pm +32 -7
  15. data/bin/lib/Image/ExifTool.pod +53 -52
  16. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
  19. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  20. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  21. data/bin/lib/Image/ExifTool/Exif.pm +3 -3
  22. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  23. data/bin/lib/Image/ExifTool/FLIR.pm +5 -5
  24. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  25. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Font.pm +2 -2
  27. data/bin/lib/Image/ExifTool/FujiFilm.pm +23 -7
  28. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  29. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  30. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  31. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  32. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  33. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  34. data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
  35. data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
  36. data/bin/lib/Image/ExifTool/Olympus.pm +4 -2
  37. data/bin/lib/Image/ExifTool/PDF.pm +2 -2
  38. data/bin/lib/Image/ExifTool/PNG.pm +10 -5
  39. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  40. data/bin/lib/Image/ExifTool/Pentax.pm +3 -3
  41. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  42. data/bin/lib/Image/ExifTool/QuickTime.pm +9 -4
  43. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  44. data/bin/lib/Image/ExifTool/README +51 -51
  45. data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
  46. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  47. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  49. data/bin/lib/Image/ExifTool/TagLookup.pm +1725 -1617
  50. data/bin/lib/Image/ExifTool/TagNames.pod +307 -9
  51. data/bin/lib/Image/ExifTool/Text.pm +59 -10
  52. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  53. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  54. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +27 -12
  55. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  56. data/bin/lib/Image/ExifTool/Writer.pl +25 -7
  57. data/bin/lib/Image/ExifTool/XMP.pm +6 -1
  58. data/bin/lib/Image/ExifTool/XMP2.pl +213 -1
  59. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  60. data/bin/perl-Image-ExifTool.spec +30 -30
  61. data/lib/exiftool_vendored/version.rb +1 -1
  62. metadata +3 -2
@@ -8,7 +8,7 @@
8
8
  #
9
9
  # Requires: ExifTool version 10.49 or later
10
10
  #
11
- # Revisons: 2010/03/13 - Peter Grimm created
11
+ # Revisions: 2010/03/13 - Peter Grimm created
12
12
  # 2018/01/04 - PH Added IF to be sure position exists
13
13
  # 2018/01/06 - PH Use DateFmt function instead of -d option
14
14
  # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
28
28
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen);
30
30
 
31
- $VERSION = '11.86';
31
+ $VERSION = '11.88';
32
32
  $RELEASE = '';
33
33
  @ISA = qw(Exporter);
34
34
  %EXPORT_TAGS = (
@@ -251,6 +251,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
251
251
  CRM => ['MOV', 'Canon RAW Movie'],
252
252
  CRW => ['CRW', 'Canon RAW format'],
253
253
  CS1 => ['PSD', 'Sinar CaptureShop 1-Shot RAW'],
254
+ CSV => ['TXT', 'Comma-Separated Values'],
254
255
  DC3 => 'DICM',
255
256
  DCM => 'DICM',
256
257
  DCP => ['TIFF', 'DNG Camera Profile'],
@@ -577,6 +578,7 @@ my %fileDescription = (
577
578
  CR3 => 'image/x-canon-cr3',
578
579
  CRM => 'video/x-canon-crm',
579
580
  CRW => 'image/x-canon-crw',
581
+ CSV => 'text/csv',
580
582
  DCP => 'application/octet-stream', #PH (NC)
581
583
  DCR => 'image/x-kodak-dcr',
582
584
  DCX => 'image/dcx',
@@ -1043,7 +1045,7 @@ my %systemTagsNotes = (
1043
1045
  # accept either scalar or scalar reference
1044
1046
  RawConv => '$self->ValidateImage(ref $val ? $val : \$val, $tag)',
1045
1047
  # we allow preview image to be set to '', but we don't want a zero-length value
1046
- # in the IFD, so set it temorarily to 'none'. Note that the length is <= 4,
1048
+ # in the IFD, so set it temporarily to 'none'. Note that the length is <= 4,
1047
1049
  # so this value will fit in the IFD so the preview fixup won't be generated.
1048
1050
  ValueConvInv => '$val eq "" and $val="none"; $val',
1049
1051
  );
@@ -1711,7 +1713,13 @@ my %systemTagsNotes = (
1711
1713
  multiple values may be separated with commas, eg. C<-ForceWrite=exif,xmp>
1712
1714
  },
1713
1715
  },
1714
- EmbeddedVideo => { Groups => { 2 => 'Video' } },
1716
+ EmbeddedVideo => { Groups => { 0 => 'Trailer', 2 => 'Video' } },
1717
+ Trailer => {
1718
+ Groups => { 0 => 'Trailer' },
1719
+ Notes => 'the full JPEG trailer data block. Extracted only if specifically requested',
1720
+ Writable => 1,
1721
+ Protected => 1,
1722
+ },
1715
1723
  );
1716
1724
 
1717
1725
  # YCbCrSubSampling values (used by JPEG SOF, EXIF and XMP)
@@ -3250,7 +3258,7 @@ sub GetDescription($$)
3250
3258
  # Returns: Scalar context: group name (for family 0 if not otherwise specified)
3251
3259
  # List context: group name if family specified, otherwise list of
3252
3260
  # group names for each family. Returns '' for undefined tag.
3253
- # Notes: Mutiple families may be specified with ':' in family argument (eg. '1:2')
3261
+ # Notes: Multiple families may be specified with ':' in family argument (eg. '1:2')
3254
3262
  sub GetGroup($$;$)
3255
3263
  {
3256
3264
  local $_;
@@ -5604,7 +5612,10 @@ sub GetUnixTime($;$)
5604
5612
  }
5605
5613
  $tm[1] -= 1; # convert month
5606
5614
  @tm = reverse @tm; # change to order required by timelocal()
5607
- return $isLocal ? TimeLocal(@tm) : Time::Local::timegm(@tm) - $tzSec;
5615
+ my $val = $isLocal ? TimeLocal(@tm) : Time::Local::timegm(@tm) - $tzSec;
5616
+ # handle fractional seconds
5617
+ $val += $1 if $tzStr and $tzStr =~ /^(\.\d+)/;
5618
+ return $val;
5608
5619
  }
5609
5620
 
5610
5621
  #------------------------------------------------------------------------------
@@ -6093,6 +6104,20 @@ sub ProcessJPEG($$)
6093
6104
  } else {
6094
6105
  $self->Warn('Missing JPEG SOS');
6095
6106
  }
6107
+ if ($$self{REQ_TAG_LOOKUP}{trailer}) {
6108
+ # read entire trailer into memory
6109
+ if ($raf->Seek(0,2)) {
6110
+ my $len = $raf->Tell() - $pos;
6111
+ if ($len) {
6112
+ my $buff;
6113
+ $raf->Seek($pos, 0);
6114
+ $self->FoundTag(Trailer => \$buff) if $raf->Read($buff,$len) == $len;
6115
+ $raf->Seek($pos, 0);
6116
+ }
6117
+ } else {
6118
+ $self->Warn('Error seeking in file');
6119
+ }
6120
+ }
6096
6121
  # we are here because we are looking for trailer information
6097
6122
  if ($wantTrailer) {
6098
6123
  my $start = $$self{PreviewImageStart};
@@ -6213,7 +6238,7 @@ sub ProcessJPEG($$)
6213
6238
  next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
6214
6239
  }
6215
6240
  # must scan to EOI if Validate or JpegCompressionFactor used
6216
- next if $$options{Validate} or $calcImageLen;
6241
+ next if $$options{Validate} or $calcImageLen or $$self{REQ_TAG_LOOKUP}{trailer};
6217
6242
  # nothing interesting to parse after start of scan (SOS)
6218
6243
  $success = 1;
6219
6244
  last; # all done parsing file
@@ -7081,7 +7106,7 @@ sub DoProcessTIFF($$;$)
7081
7106
  # don't process file if FastScan == 3
7082
7107
  return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} == 3;
7083
7108
  }
7084
- # (accomodate CR3 images which have a TIFF directory with ExifIFD at the top level)
7109
+ # (accommodate CR3 images which have a TIFF directory with ExifIFD at the top level)
7085
7110
  my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
7086
7111
  if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') {
7087
7112
  $self->FoundTag('ExifByteOrder', $byteOrder) unless $outfile;
@@ -65,34 +65,35 @@ supported by ExifTool (r = read, w = write, c = create):
65
65
 
66
66
  File Types
67
67
  ------------+-------------+-------------+-------------+------------
68
- 3FR r | DSS r | J2C r | ODS r | RSRC r
69
- 3G2 r/w | DV r | JNG r/w | ODT r | RTF r
70
- 3GP r/w | DVB r/w | JP2 r/w | OFR r | RW2 r/w
71
- A r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
72
- AA r | DYLIB r | JSON r | OGV r | RWZ r
73
- AAE r | EIP r | K25 r | OPUS r | RM r
74
- AAX r/w | EPS r/w | KDC r | ORF r/w | SEQ r
75
- ACR r | EPUB r | KEY r | OTF r | SKETCH r
76
- AFM r | ERF r/w | LA r | PAC r | SO r
77
- AI r/w | EXE r | LFP r | PAGES r | SR2 r/w
78
- AIFF r | EXIF r/w/c | LNK r | PBM r/w | SRF r
79
- APE r | EXR r | LRV r/w | PCD r | SRW r/w
80
- ARQ r/w | EXV r/w/c | M2TS r | PCX r | SVG r
81
- ARW r/w | F4A/V r/w | M4A/V r/w | PDB r | SWF r
82
- ASF r | FFF r/w | MAX r | PDF r/w | THM r/w
83
- AVI r | FITS r | MEF r/w | PEF r/w | TIFF r/w
84
- AVIF r/w | FLA r | MIE r/w/c | PFA r | TORRENT r
85
- AZW r | FLAC r | MIFF r | PFB r | TTC r
86
- BMP r | FLIF r/w | MKA r | PFM r | TTF r
87
- BPG r | FLV r | MKS r | PGF r | TXT r
88
- BTF r | FPF r | MKV r | PGM r/w | VCF r
89
- CHM r | FPX r | MNG r/w | PLIST r | VRD r/w/c
90
- COS r | GIF r/w | MOBI r | PICT r | VSD r
91
- CR2 r/w | GPR r/w | MODD r | PMP r | WAV r
92
- CR3 r/w | GZ r | MOI r | PNG r/w | WDP r/w
93
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
94
- CRW r/w | HDR r | MOV r/w | PPT r | WEBM r
95
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WMA r
68
+ 3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
69
+ 3G2 r/w | DSS r | J2C r | ODS r | RSRC r
70
+ 3GP r/w | DV r | JNG r/w | ODT r | RTF r
71
+ A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
72
+ AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
73
+ AAE r | DYLIB r | JSON r | OGV r | RWZ r
74
+ AAX r/w | EIP r | K25 r | OPUS r | RM r
75
+ ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
76
+ AFM r | EPUB r | KEY r | OTF r | SKETCH r
77
+ AI r/w | ERF r/w | LA r | PAC r | SO r
78
+ AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
79
+ APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
80
+ ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
81
+ ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
82
+ ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
83
+ AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
84
+ AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
85
+ AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
86
+ BMP r | FLAC r | MIFF r | PFB r | TTC r
87
+ BPG r | FLIF r/w | MKA r | PFM r | TTF r
88
+ BTF r | FLV r | MKS r | PGF r | TXT r
89
+ CHM r | FPF r | MKV r | PGM r/w | VCF r
90
+ COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
91
+ CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
92
+ CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
93
+ CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
94
+ CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
95
+ CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
96
+ CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
96
97
  DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
97
98
  DCP r/w | HTML r | MPC r | PSB r/w | WTV r
98
99
  DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
@@ -104,7 +105,6 @@ supported by ExifTool (r = read, w = write, c = create):
104
105
  DOC r | INSV r | NRW r/w | RAM r | ZIP r
105
106
  DOCX r | INX r | NUMBERS r | RAR r |
106
107
  DPX r | ISO r | O r | RAW r/w |
107
- DR4 r/w/c | ITC r | ODP r | RIFF r |
108
108
 
109
109
  Meta Information
110
110
  ----------------------+----------------------+---------------------
@@ -636,15 +636,16 @@ after the first comment in GIF images, and at the audio/video data of
636
636
  RIFF-format files (AVI, WAV, etc), so any trailing metadata (eg. XMP written
637
637
  by some utilities) may be missed. Also disables input buffering for some
638
638
  types of files to reduce memory usage when reading from a non-seekable
639
- stream. When combined with the ScanForXMP option, prevents scanning for XMP
640
- in recognized file types. With a value of 2, ExifTool will also avoid
641
- extracting any EXIF MakerNote information, and will stop parsing at the IDAT
642
- chunk of PNG images. (By the PNG specification, metadata is allowed after
643
- IDAT, but ExifTool always writes it before because some utilities will
644
- ignore it otherwise.) When set to 3 or 4, only pseudo system tags and
645
- FileType are generated. For 3, the file header is read to provide an
646
- educated guess at FileType. For 4, the file is not read at all and FileType
647
- is determined based on the file's extension. Default is undef.
639
+ stream, and bypasses CRC validation for speed when writing PNG files. When
640
+ combined with the ScanForXMP option, prevents scanning for XMP in recognized
641
+ file types. With a value of 2, ExifTool will also avoid extracting any EXIF
642
+ MakerNote information, and will stop parsing at the IDAT chunk of PNG
643
+ images. (By the PNG specification, metadata is allowed after IDAT, but
644
+ ExifTool always writes it before because some utilities will ignore it
645
+ otherwise.) When set to 3 or 4, only pseudo system tags and FileType are
646
+ generated. For 3, the file header is read to provide an educated guess at
647
+ FileType. For 4, the file is not read at all and FileType is determined
648
+ based on the file's extension. Default is undef.
648
649
 
649
650
  =item Filter
650
651
 
@@ -2050,9 +2051,9 @@ timed metadata in videos.
2050
2051
  Family 4 provides a method for differentiating tags when multiple tags exist
2051
2052
  with the same name in the same location. The primary instance of a tag (the
2052
2053
  tag extracted when the Duplicates option is disabled and no group is
2053
- specified) has no family 4 group name, but additional instances have have
2054
- family 4 group names of 'Copy1', 'Copy2', 'Copy3', etc. For convenience,
2055
- the primary tag may also be accessed using a group name of 'Copy0'.
2054
+ specified) has no family 4 group name, but additional instances have family
2055
+ 4 group names of 'Copy1', 'Copy2', 'Copy3', etc. For convenience, the
2056
+ primary tag may also be accessed using a group name of 'Copy0'.
2056
2057
 
2057
2058
  Family 5 is experimental, and gives the complete path for the metadata in
2058
2059
  the file. Generated only if the L</SavePath> option is used when
@@ -2270,17 +2271,17 @@ Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5,
2270
2271
  Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#,
2271
2272
  SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
2272
2273
  System, Theora, Torrent, Track#, UserData, VCalendar, VCard, Version0,
2273
- Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-GAudio, XMP-GDepth, XMP-GFocus,
2274
- XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
2275
- XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-aux,
2276
- XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex, XMP-digiKam,
2277
- XMP-drone-dji, XMP-dwc, XMP-exif, XMP-exifEX, XMP-expressionmedia,
2278
- XMP-extensis, XMP-fpv, XMP-getty, XMP-ics, XMP-iptcCore, XMP-iptcExt,
2279
- XMP-lr, XMP-mediapro, XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs,
2280
- XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
2281
- XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-swf, XMP-tiff, XMP-x,
2282
- XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS,
2283
- XMP-xmpRights, XMP-xmpTPg, ZIP
2274
+ Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GDepth,
2275
+ XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
2276
+ XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
2277
+ XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
2278
+ XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-exif, XMP-exifEX,
2279
+ XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-ics,
2280
+ XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
2281
+ XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech,
2282
+ XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism, XMP-prl, XMP-prm, XMP-pur,
2283
+ XMP-rdf, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM,
2284
+ XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP
2284
2285
 
2285
2286
  =item Family 2 (Category):
2286
2287
 
@@ -202,7 +202,7 @@ sub ProcessAIFF($$)
202
202
  $et->SetFileType('DJVU');
203
203
  return 1 if $fast3;
204
204
  $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main');
205
- # modifiy FileType to indicate a multi-page document
205
+ # modify FileType to indicate a multi-page document
206
206
  $$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM';
207
207
  $type = 'DjVu';
208
208
  } else {
@@ -68,7 +68,7 @@ $VERSION = '1.04';
68
68
  },
69
69
  # 0x000c - rational64s[2]: eg) "0.1640625 0.19921875"
70
70
  # 0x000d - int32s: 0,1,6,20,24,32,40
71
- # 0x000e - int32s: 0,1,4,12 (Orienation? 0=landscape? 4=portrait? ref 1)
71
+ # 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
72
72
  # 0x000f - int32s: 2,3
73
73
  # 0x0010 - int32s: 1
74
74
  0x0011 => {
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.32';
38
+ $VERSION = '3.34';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -1170,7 +1170,7 @@ TagID: foreach $tagID (@keys) {
1170
1170
  my $n = scalar @values;
1171
1171
  my ($bits, $i, $v);
1172
1172
  foreach (@pk) {
1173
- next if $_ eq '';
1173
+ next if $_ eq '' and $$printConv{$_} eq '';
1174
1174
  $_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
1175
1175
  $_ eq 'OTHER' and next;
1176
1176
  my $index;
@@ -1474,7 +1474,7 @@ TagID: foreach $tagID (@keys) {
1474
1474
  my $tag;
1475
1475
  foreach $tag (sort keys %$struct) {
1476
1476
  my $tagInfo = $$struct{$tag};
1477
- next unless ref $tagInfo eq 'HASH';
1477
+ next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE';
1478
1478
  my $writable = $$tagInfo{Writable};
1479
1479
  my @vals;
1480
1480
  unless ($writable) {
@@ -13,7 +13,7 @@
13
13
  # 2018/03/13 - PH Update to DPP 4.8.20
14
14
  #
15
15
  # References: 1) Bogdan private communication (Canon DPP v3.4.1.1)
16
- # 2) Gert Kello private communiation (DPP 3.8)
16
+ # 2) Gert Kello private communication (DPP 3.8)
17
17
  #------------------------------------------------------------------------------
18
18
 
19
19
  package Image::ExifTool::CanonVRD;
@@ -616,7 +616,7 @@ sub ProcessAdobeIFD($$$)
616
616
 
617
617
  # parse the mutilated IFD. This is similar to a TIFF IFD, except:
618
618
  # - data follows directly after Count entry in IFD
619
- # - byte order of IFD entires is always big-endian, but byte order of data changes
619
+ # - byte order of IFD entries is always big-endian, but byte order of data changes
620
620
  SetByteOrder('MM'); # IFD structure is always big-endian
621
621
  my $entries = Get16u($dataPt, $pos + 2);
622
622
  $et->VerboseDir($dirInfo, $entries);
@@ -437,7 +437,7 @@ my %opcodeInfo = (
437
437
  Writable => 'int32u',
438
438
  WriteGroup => 'IFD0',
439
439
  # Note: priority 0 tags automatically have their priority increased for the
440
- # priority direcory (the directory with a SubfileType of "Full-resolution image")
440
+ # priority directory (the directory with a SubfileType of "Full-resolution image")
441
441
  Priority => 0,
442
442
  },
443
443
  0x101 => {
@@ -3284,7 +3284,7 @@ my %opcodeInfo = (
3284
3284
  Groups => { 1 => 'SR2' },
3285
3285
  Flags => 'SubIFD',
3286
3286
  Format => 'int32u',
3287
- # some utilites have problems unless this is int8u format:
3287
+ # some utilities have problems unless this is int8u format:
3288
3288
  # - Adobe Camera Raw 5.3 gives an error
3289
3289
  # - Apple Preview 10.5.8 gets the wrong white balance
3290
3290
  FixFormat => 'int8u', # (stupid Sony)
@@ -4068,7 +4068,7 @@ my %opcodeInfo = (
4068
4068
 
4069
4069
  # tags in the range 0xfde8-0xfe58 have been observed in PS7 files
4070
4070
  # generated from RAW images. They are all strings with the
4071
- # tag name at the start of the string. To accomodate these types
4071
+ # tag name at the start of the string. To accommodate these types
4072
4072
  # of tags, all tags with values above 0xf000 are handled specially
4073
4073
  # by ProcessExif().
4074
4074
  0xfde8 => {
@@ -73,7 +73,7 @@ sub ProcessFITS($$)
73
73
  # add to tag table if necessary
74
74
  unless ($$tagTablePtr{$tag}) {
75
75
  my $name = ucfirst lc $tag; # make tag name lower case with leading capital
76
- $name =~ s/_(.)/\U$1/g; # remove all '_' and capitalize subsquent letter
76
+ $name =~ s/_(.)/\U$1/g; # remove all '_' and capitalize subsequent letter
77
77
  AddTagToTable($tagTablePtr, $tag, { Name => $name });
78
78
  }
79
79
  }
@@ -64,7 +64,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
64
64
  Name => 'ImageTemperatureMax',
65
65
  %temperatureInfo,
66
66
  Notes => q{
67
- these temperatures may be in Celcius, Kelvin or Fahrenheit, but there is no
67
+ these temperatures may be in Celsius, Kelvin or Fahrenheit, but there is no
68
68
  way to tell which
69
69
  },
70
70
  },
@@ -754,7 +754,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
754
754
  96 => {
755
755
  Name => 'Reading1Value',
756
756
  Format => 'double',
757
- # convert Kelvin -> Celcius and kg/kg -> g/kg
757
+ # convert Kelvin -> Celsius and kg/kg -> g/kg
758
758
  ValueConv => q{
759
759
  return $val - 273.15 if $$self{Reading1Units} == 0x0d and $$self{Reading1Description} != 11;
760
760
  return $val *= 1000 if $$self{Reading1Units} == 0x24;
@@ -794,7 +794,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
794
794
  196 => {
795
795
  Name => 'Reading2Value',
796
796
  Format => 'double',
797
- # convert Kelvin -> Celcius and kg/kg -> g/kg
797
+ # convert Kelvin -> Celsius and kg/kg -> g/kg
798
798
  ValueConv => q{
799
799
  return $val - 273.15 if $$self{Reading2Units} == 0x0d and $$self{Reading2Description} != 11;
800
800
  return $val *= 1000 if $$self{Reading2Units} == 0x24;
@@ -833,7 +833,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
833
833
  296 => {
834
834
  Name => 'Reading3Value',
835
835
  Format => 'double',
836
- # convert Kelvin -> Celcius and kg/kg -> g/kg
836
+ # convert Kelvin -> Celsius and kg/kg -> g/kg
837
837
  ValueConv => q{
838
838
  return $val - 273.15 if $$self{Reading3Units} == 0x0d and $$self{Reading3Description} != 11;
839
839
  return $val *= 1000 if $$self{Reading3Units} == 0x24;
@@ -873,7 +873,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
873
873
  396 => {
874
874
  Name => 'Reading4Value',
875
875
  Format => 'double',
876
- # convert Kelvin -> Celcius and kg/kg -> g/kg
876
+ # convert Kelvin -> Celsius and kg/kg -> g/kg
877
877
  ValueConv => q{
878
878
  return $val - 273.15 if $$self{Reading4Units} == 0x0d and $$self{Reading4Description} != 11;
879
879
  return $val *= 1000 if $$self{Reading4Units} == 0x24;
@@ -418,7 +418,7 @@ Record: for ($rec=0; ; ++$rec) {
418
418
  my $num = Get32u($dataPt, $pos);
419
419
  $$dirInfo{Pos} = $pos + 4;
420
420
  my ($i, @vals);
421
- # add array index to compount tag name
421
+ # add array index to compound tag name
422
422
  my $structName = $$dirInfo{StructName};
423
423
  for ($i=0; $i<$num; ++$i) {
424
424
  $$dirInfo{StructName} = $structName . $i if defined $structName;
@@ -2224,7 +2224,7 @@ sub ProcessFPX($$)
2224
2224
  my $rSib = Get32u(\$dir, $pos + 0x48); # right sibling
2225
2225
  my $chld = Get32u(\$dir, $pos + 0x4c); # child directory
2226
2226
 
2227
- # save information about object hierachy
2227
+ # save information about object hierarchy
2228
2228
  my ($obj, $sub);
2229
2229
  $obj = $hier{$index} or $obj = $hier{$index} = { };
2230
2230
  $$obj{Left} = $lSib unless $lSib == FREE_SECT;
@@ -80,7 +80,7 @@ my %ttCharset = (
80
80
  %ttLang = (
81
81
  # Macintosh language codes (also used by QuickTime.pm)
82
82
  # oddities:
83
- # 49 - Cyrllic version 83 - Roman
83
+ # 49 - Cyrillic version 83 - Roman
84
84
  # 50 - Arabic version 84 - Arabic
85
85
  # 146 - with dot above
86
86
  Macintosh => {
@@ -117,7 +117,7 @@ my %ttCharset = (
117
117
  # 0x048c - no ISO equivalent
118
118
  # 0x081a/0x83c - sr-SP
119
119
  # 0x0c0a - modern?
120
- # 0x2409 - Carribean country code not found in ISO 3166-1
120
+ # 0x2409 - Carribbean country code not found in ISO 3166-1
121
121
  Windows => {
122
122
  0x0401 => 'ar-SA', 0x0438 => 'fo', 0x0481 => 'mi', 0x1409 => 'en-NZ',
123
123
  0x0402 => 'bg', 0x0439 => 'hi', 0x0482 => 'oc', 0x140a => 'es-CR',
@@ -4,7 +4,7 @@
4
4
  # Description: Read/write FujiFilm maker notes and RAF images
5
5
  #
6
6
  # Revisions: 11/25/2003 - P. Harvey Created
7
- # 11/14/2007 - PH Added abilty to write RAF images
7
+ # 11/14/2007 - PH Added ability to write RAF images
8
8
  #
9
9
  # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
10
10
  # 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_fuji.htm (2007/09/11)
@@ -31,7 +31,7 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
 
34
- $VERSION = '1.76';
34
+ $VERSION = '1.77';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -374,6 +374,7 @@ my %faceCategories = (
374
374
  0x1a => 'Portrait 2', #PH (NC, T500, maybe "Smile & Shoot"?)
375
375
  0x1b => 'Dog Face Detection', #7
376
376
  0x1c => 'Cat Face Detection', #7
377
+ 0x30 => 'HDR', #forum10799
377
378
  0x40 => 'Advanced Filter',
378
379
  0x100 => 'Aperture-priority AE',
379
380
  0x200 => 'Shutter speed priority AE',
@@ -465,6 +466,7 @@ my %faceCategories = (
465
466
  PrintConv => '$val > 0 ? "+$val" : $val',
466
467
  PrintConvInv => '$val + 0',
467
468
  },
469
+ # 0x104b - BWAdjustment for Green->Magenta (forum10800)
468
470
  0x104d => { #forum9634
469
471
  Name => 'CropMode',
470
472
  Writable => 'int16u',
@@ -514,9 +516,9 @@ my %faceCategories = (
514
516
  SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::DriveSettings' },
515
517
  },
516
518
  # (0x1150-0x1152 exist only for Pro Low-light and Pro Focus PictureModes)
517
- # 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7)
518
- # 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7)
519
- # 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7)
519
+ # 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7); HDR - val=128 (forum10799)
520
+ # 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7); HDR - val=3 (forum10799)
521
+ # 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7); HDR - val=3 (forum10799)
520
522
  0x1153 => { #forum7668
521
523
  Name => 'PanoramaAngle',
522
524
  Writable => 'int16u',
@@ -625,7 +627,7 @@ my %faceCategories = (
625
627
  Writable => 'int16u',
626
628
  PrintHex => 1,
627
629
  PrintConv => {
628
- 0x000 => 'Auto (100-400%)',
630
+ 0x000 => 'Auto',
629
631
  0x001 => 'Manual', #(ref http://forum.photome.de/viewtopic.php?f=2&t=353)
630
632
  0x100 => 'Standard (100%)',
631
633
  0x200 => 'Wide1 (230%)',
@@ -636,6 +638,7 @@ my %faceCategories = (
636
638
  0x1403 => { #2 (only valid for manual DR, ref 6)
637
639
  Name => 'DevelopmentDynamicRange',
638
640
  Writable => 'int16u',
641
+ # (shows 200, 400 or 800 for HDR200,HDR400,HDR800, ref forum10799)
639
642
  },
640
643
  0x1404 => { #2
641
644
  Name => 'MinFocalLength',
@@ -662,6 +665,15 @@ my %faceCategories = (
662
665
  PrintConv => '"$val%"',
663
666
  PrintConvInv => '$val=~s/\s*\%$//; $val',
664
667
  },
668
+ 0x104e => { #forum10800 (X-Pro3)
669
+ Name => 'ColorChromeFXBlue',
670
+ Writable => 'int32s',
671
+ PrintConv => {
672
+ 0 => 'Off',
673
+ 32 => 'Weak', # (NC)
674
+ 64 => 'Strong',
675
+ },
676
+ },
665
677
  0x1422 => { #8
666
678
  Name => 'ImageStabilization',
667
679
  Writable => 'int16u',
@@ -721,7 +733,11 @@ my %faceCategories = (
721
733
  0x1444 => { #12 (X-T3, only exists if DRangePriority is 'Auto')
722
734
  Name => 'DRangePriorityAuto',
723
735
  Writable => 'int16u',
724
- PrintConv => { 1 => 'Weak', 2 => 'Strong' },
736
+ PrintConv => {
737
+ 1 => 'Weak',
738
+ 2 => 'Strong',
739
+ 3 => 'Plus', #forum10799
740
+ },
725
741
  },
726
742
  0x1445 => { #12 (X-T3, only exists if DRangePriority is 'Fixed')
727
743
  Name => 'DRangePriorityFixed',