exiftool_vendored 11.71.0 → 11.75.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +39 -0
  3. data/bin/MANIFEST +17 -4
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +23 -26
  7. data/bin/config_files/convert_regions.config +139 -5
  8. data/bin/exiftool +21 -21
  9. data/bin/fmt_files/gpx.fmt +2 -1
  10. data/bin/fmt_files/gpx_wpt.fmt +2 -1
  11. data/bin/fmt_files/kml.fmt +2 -2
  12. data/bin/fmt_files/kml_track.fmt +46 -0
  13. data/bin/lib/Image/ExifTool.pm +42 -33
  14. data/bin/lib/Image/ExifTool.pod +21 -21
  15. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  16. data/bin/lib/Image/ExifTool/Canon.pm +2 -1
  17. data/bin/lib/Image/ExifTool/CanonCustom.pm +30 -4
  18. data/bin/lib/Image/ExifTool/Exif.pm +36 -63
  19. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  20. data/bin/lib/Image/ExifTool/Lang/ru.pm +4233 -503
  21. data/bin/lib/Image/ExifTool/MakerNotes.pm +6 -12
  22. data/bin/lib/Image/ExifTool/Nikon.pm +2 -1
  23. data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
  24. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Parrot.pm +751 -0
  26. data/bin/lib/Image/ExifTool/Photoshop.pm +12 -11
  27. data/bin/lib/Image/ExifTool/QuickTime.pm +18 -5
  28. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +316 -44
  29. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -2
  30. data/bin/lib/Image/ExifTool/Sigma.pm +72 -55
  31. data/bin/lib/Image/ExifTool/TagLookup.pm +73 -7
  32. data/bin/lib/Image/ExifTool/TagNames.pod +249 -18
  33. data/bin/lib/Image/ExifTool/Text.pm +160 -0
  34. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -2
  35. data/bin/lib/Image/ExifTool/Writer.pl +1 -1
  36. data/bin/lib/Image/ExifTool/XMP.pm +19 -26
  37. data/bin/lib/Image/ExifTool/XMP2.pl +46 -9
  38. data/bin/lib/Image/ExifTool/XMPStruct.pl +14 -4
  39. data/bin/perl-Image-ExifTool.spec +19 -19
  40. data/lib/exiftool_vendored/version.rb +1 -1
  41. metadata +6 -7
  42. data/bin/config_files/blueskysea.config +0 -101
  43. data/bin/config_files/dji.config +0 -131
  44. data/bin/config_files/mini0806.config +0 -99
  45. data/bin/config_files/thinkware.config +0 -144
@@ -10,6 +10,7 @@
10
10
  # Revisions: 2010/02/05 - P. Harvey created
11
11
  # 2018/01/04 - PH Added IF to be sure position exists
12
12
  # 2018/01/06 - PH Use DateFmt function instead of -d option
13
+ # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
13
14
  #
14
15
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
15
16
  # 2) The -ee option is to extract the full track from video files.
@@ -28,7 +29,7 @@
28
29
  #[IF] $gpslatitude $gpslongitude
29
30
  #[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
30
31
  #[BODY] <ele>$gpsaltitude#</ele>
31
- #[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%SZ")}</time>
32
+ #[BODY] <time>${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}</time>
32
33
  #[BODY]</trkpt>
33
34
  #[TAIL]</trkseg>
34
35
  #[TAIL]</trk>
@@ -11,6 +11,7 @@
11
11
  # Revisons: 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
+ # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
14
15
  #
15
16
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
16
17
  # 2) The -ee option is to extract the full track from video files.
@@ -26,7 +27,7 @@
26
27
  #[IF] $gpslatitude $gpslongitude
27
28
  #[BODY]<wpt lat="$gpslatitude#" lon="$gpslongitude#">
28
29
  #[BODY] <ele>$gpsaltitude#</ele>
29
- #[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%SZ")}</time>
30
+ #[BODY] <time>${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}</time>
30
31
  #[BODY] <name>$filename</name>
31
32
  #[BODY] <link href="$directory/$filename"/>
32
33
  #[BODY] <sym>Scenic Area</sym>
@@ -38,12 +38,12 @@
38
38
  #[HEAD] </IconStyle>
39
39
  #[HEAD] </Style>
40
40
  #[SECT] <Folder>
41
- #[SECT] <name>$directory</name>
41
+ #[SECT] <name>$main:directory</name>
42
42
  #[SECT] <open>0</open>
43
43
  #[IF] $gpslatitude $gpslongitude
44
44
  #[BODY] <Placemark>
45
45
  #[BODY] <description><![CDATA[<br/><table><tr><td>
46
- #[BODY] <img src='$directory/$filename'
46
+ #[BODY] <img src='$main:directory/$main:filename'
47
47
  #[BODY] width='$imagewidth' height='$imageheight'>
48
48
  #[BODY] </td></tr></table>]]></description>
49
49
  #[BODY] <Snippet/>
@@ -0,0 +1,46 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: kml.fmt
3
+ #
4
+ # Description: Example ExifTool print format file for generating a
5
+ # track in Google Earth KML format from a collection of
6
+ # geotagged images or timed GPS from video files
7
+ #
8
+ # Usage: From a collection of images:
9
+ #
10
+ # exiftool -p kml.fmt -r DIR [...] > out.kml
11
+ #
12
+ # From video files:
13
+ #
14
+ # exiftool -p kml.fmt -ee FILEorDIR [...] > out.kml
15
+ #
16
+ # Requires: ExifTool version 10.41 or later
17
+ #
18
+ # Revisions: 2019/10/29 - P. Harvey created
19
+ #
20
+ # Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
21
+ # 2) The -fileOrder option may be used to control the order of the
22
+ # waypoints when processing multiple still-image files, or the
23
+ # order of the tracks when processing multiple video files.
24
+ #------------------------------------------------------------------------------
25
+ #[HEAD]<?xml version="1.0" encoding="UTF-8"?>
26
+ #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
27
+ #[HEAD] <Document>
28
+ #[HEAD] <name>My Track</name>
29
+ #[HEAD] <open>1</open>
30
+ #[SECT] <Placemark>
31
+ #[SECT] <name>${main:directory;$_=$self->GetValue('FileName') if $self->Options('ExtractEmbedded')}</name>
32
+ #[SECT] <Style>
33
+ #[SECT] <LineStyle>
34
+ #[SECT] <color>#ff4499ff</color>
35
+ #[SECT] <width>3</width>
36
+ #[SECT] </LineStyle>
37
+ #[SECT] </Style>
38
+ #[SECT] <LineString>
39
+ #[SECT] <altitudeMode>clampToGround</altitudeMode>
40
+ #[SECT] <coordinates>
41
+ #[BODY]$gpslongitude#,$gpslatitude#,0
42
+ #[ENDS] </coordinates>
43
+ #[ENDS] </LineString>
44
+ #[ENDS] </Placemark>
45
+ #[TAIL] </Document>
46
+ #[TAIL]</kml>
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
27
27
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
28
28
  %jpegMarker %specialTags %fileTypeLookup);
29
29
 
30
- $VERSION = '11.71';
30
+ $VERSION = '11.75';
31
31
  $RELEASE = '';
32
32
  @ISA = qw(Exporter);
33
33
  %EXPORT_TAGS = (
@@ -143,7 +143,7 @@ sub ReadValue($$$;$$$);
143
143
  QuickTime::Stream Matroska MOI MXF DV Flash Flash::FLV Real::Media
144
144
  Real::Audio Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS MIE JSON HTML
145
145
  XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
146
- EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard
146
+ EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard Text
147
147
  VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF OOXML iWork ISO
148
148
  FLIR::AFF FLIR::FPF MacOS::MDItem MacOS::XAttr FlashPix::DocTable
149
149
  );
@@ -184,9 +184,9 @@ $defaultLang = 'en'; # default language
184
184
  PSD XMP BMP BPG PPM RIFF AIFF ASF MOV MPEG Real SWF PSP FLV OGG
185
185
  FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF FPF LFP
186
186
  HTML VRD RTF FITS XCF DSS QTIF FPX PICT ZIP GZIP PLIST RAR BZ2
187
- TAR RWZ EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS
188
- PHP PCX DCX DWF DWG WTV Torrent VCard LRI R3D AA PDB MOI ISO
189
- ALIAS JSON MP3 DICOM PCD);
187
+ TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS PHP
188
+ PCX DCX DWF DWG WTV Torrent VCard LRI R3D AA PDB MOI ISO ALIAS
189
+ JSON MP3 DICOM PCD TXT);
190
190
 
191
191
  # file types that we can write (edit)
192
192
  my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -494,6 +494,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
494
494
  TTC => ['Font', 'True Type Font Collection'],
495
495
  TTF => ['Font', 'True Type Font'],
496
496
  TUB => 'PSP',
497
+ TXT => ['TXT', 'Text file'],
497
498
  VCARD=> ['VCard','Virtual Card'],
498
499
  VCF => 'VCARD',
499
500
  VOB => ['MPEG', 'Video Object'],
@@ -725,6 +726,7 @@ my %fileDescription = (
725
726
  Torrent => 'application/x-bittorrent',
726
727
  TTC => 'application/x-font-ttf',
727
728
  TTF => 'application/x-font-ttf',
729
+ TXT => 'text/plain',
728
730
  VCard=> 'text/vcard',
729
731
  VSD => 'application/x-visio',
730
732
  WDP => 'image/vnd.ms-photo',
@@ -805,6 +807,7 @@ my %moduleName = (
805
807
  SWF => 'Flash',
806
808
  TAR => 0,
807
809
  TIFF => '',
810
+ TXT => 'Text',
808
811
  VRD => 'CanonVRD',
809
812
  WMF => 0,
810
813
  X3F => 'SigmaRaw',
@@ -906,6 +909,7 @@ my %moduleName = (
906
909
  RWZ => 'rawzor',
907
910
  SWF => '[FC]WS[^\0]',
908
911
  TAR => '.{257}ustar( )?\0', # (this doesn't catch old-style tar files)
912
+ TXT => '(\xff\xfe|(\0\0)?\xfe\xff|(\xef\xbb\xbf)?[\x07-\x0d\x20-\x7e\x80-\xfe]*$)',
909
913
  TIFF => '(II|MM)', # don't test magic number (some raw formats are different)
910
914
  VCard=> '(?i)BEGIN:(VCARD|VCALENDAR)\r\n',
911
915
  VRD => 'CANON OPTIONAL DATA\0',
@@ -922,7 +926,7 @@ my %weakMagic = ( MP3 => 1 );
922
926
 
923
927
  # file types that are determined by the process proc when FastScan == 3
924
928
  # (when done, the process proc must exit after SetFileType if FastScan is 3)
925
- my %processType = map { $_ => 1 } qw(JPEG TIFF XMP AIFF EXE Font PS Real VCard);
929
+ my %processType = map { $_ => 1 } qw(JPEG TIFF XMP AIFF EXE Font PS Real VCard TXT);
926
930
 
927
931
  # Compact/XMPShorthand option settings
928
932
  my %compactOpt = (
@@ -1063,7 +1067,7 @@ my %systemTagsNotes = (
1063
1067
  Priority => 0, # to preserve order of JPEG COM segments
1064
1068
  },
1065
1069
  Directory => {
1066
- Groups => { 1 => 'System' },
1070
+ Groups => { 1 => 'System', 2 => 'Other' },
1067
1071
  Notes => q{
1068
1072
  the directory of the file as specified in the call to ExifTool, or "." if no
1069
1073
  directory was specified. May be written to move the file to another
@@ -1078,7 +1082,7 @@ my %systemTagsNotes = (
1078
1082
  ValueConvInv => '$_ = $self->InverseFileName($val); m{[^/]$} and $_ .= "/"; $_',
1079
1083
  },
1080
1084
  FileName => {
1081
- Groups => { 1 => 'System' },
1085
+ Groups => { 1 => 'System', 2 => 'Other' },
1082
1086
  Writable => 1,
1083
1087
  WritePseudo => 1,
1084
1088
  DelCheck => q{"Can't delete"},
@@ -1094,7 +1098,7 @@ my %systemTagsNotes = (
1094
1098
  ValueConvInv => '$self->InverseFileName($val)',
1095
1099
  },
1096
1100
  FilePath => {
1097
- Groups => { 1 => 'System' },
1101
+ Groups => { 1 => 'System', 2 => 'Other' },
1098
1102
  Notes => q{
1099
1103
  absolute path of source file. Not generated unless specifically requested or
1100
1104
  the L<RequestAll|../ExifTool.html#RequestAll> API option is set. Does not support Windows Unicode file
@@ -1124,7 +1128,7 @@ my %systemTagsNotes = (
1124
1128
  },
1125
1129
  },
1126
1130
  FileSize => {
1127
- Groups => { 1 => 'System' },
1131
+ Groups => { 1 => 'System', 2 => 'Other' },
1128
1132
  Notes => q{
1129
1133
  note that the print conversion for this tag uses historic prefixes: 1 kB =
1130
1134
  1024 bytes, etc.
@@ -1132,7 +1136,7 @@ my %systemTagsNotes = (
1132
1136
  PrintConv => \&ConvertFileSize,
1133
1137
  },
1134
1138
  ResourceForkSize => {
1135
- Groups => { 1 => 'System' },
1139
+ Groups => { 1 => 'System', 2 => 'Other' },
1136
1140
  Notes => q{
1137
1141
  size of the file's resource fork if it contains data. Mac OS only. If this
1138
1142
  tag is generated the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option may be used to extract
@@ -1143,12 +1147,14 @@ my %systemTagsNotes = (
1143
1147
  PrintConv => \&ConvertFileSize,
1144
1148
  },
1145
1149
  FileType => {
1150
+ Groups => { 2 => 'Other' },
1146
1151
  Notes => q{
1147
1152
  a short description of the file type. For many file types this is the just
1148
1153
  the uppercase file extension
1149
1154
  },
1150
1155
  },
1151
1156
  FileTypeExtension => {
1157
+ Groups => { 2 => 'Other' },
1152
1158
  Notes => q{
1153
1159
  a common lowercase extension for this file type, or uppercase with the -n
1154
1160
  option
@@ -1221,7 +1227,7 @@ my %systemTagsNotes = (
1221
1227
  PrintConv => '$self->ConvertDateTime($val)',
1222
1228
  },
1223
1229
  FilePermissions => {
1224
- Groups => { 1 => 'System' },
1230
+ Groups => { 1 => 'System', 2 => 'Other' },
1225
1231
  Notes => q{
1226
1232
  r=read, w=write and x=execute permissions for the file owner, group and
1227
1233
  others. The ValueConv value is an octal number so bit test operations on
@@ -1256,7 +1262,7 @@ my %systemTagsNotes = (
1256
1262
  },
1257
1263
  },
1258
1264
  FileAttributes => {
1259
- Groups => { 1 => 'System' },
1265
+ Groups => { 1 => 'System', 2 => 'Other' },
1260
1266
  Notes => q{
1261
1267
  extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1262
1268
  option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows
@@ -1303,15 +1309,15 @@ my %systemTagsNotes = (
1303
1309
  }}],
1304
1310
  },
1305
1311
  FileDeviceID => {
1306
- Groups => { 1 => 'System' },
1312
+ Groups => { 1 => 'System', 2 => 'Other' },
1307
1313
  %systemTagsNotes,
1308
1314
  PrintConv => '(($val >> 24) & 0xff) . "." . ($val & 0xffffff)', # (major.minor)
1309
1315
  },
1310
- FileDeviceNumber => { Groups => { 1 => 'System' }, %systemTagsNotes },
1311
- FileInodeNumber => { Groups => { 1 => 'System' }, %systemTagsNotes },
1312
- FileHardLinks => { Groups => { 1 => 'System' }, %systemTagsNotes },
1316
+ FileDeviceNumber => { Groups => { 1 => 'System', 2 => 'Other' }, %systemTagsNotes },
1317
+ FileInodeNumber => { Groups => { 1 => 'System', 2 => 'Other' }, %systemTagsNotes },
1318
+ FileHardLinks => { Groups => { 1 => 'System', 2 => 'Other' }, %systemTagsNotes },
1313
1319
  FileUserID => {
1314
- Groups => { 1 => 'System' },
1320
+ Groups => { 1 => 'System', 2 => 'Other' },
1315
1321
  Notes => q{
1316
1322
  extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1317
1323
  option is set. Returns user ID number with the -n option, or name
@@ -1325,7 +1331,7 @@ my %systemTagsNotes = (
1325
1331
  PrintConvInv => 'eval { getpwnam($val) } || ($val=~/[^0-9]/ ? undef : $val)',
1326
1332
  },
1327
1333
  FileGroupID => {
1328
- Groups => { 1 => 'System' },
1334
+ Groups => { 1 => 'System', 2 => 'Other' },
1329
1335
  Notes => q{
1330
1336
  extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1331
1337
  option is set. Returns group ID number with the -n option, or name
@@ -1338,8 +1344,8 @@ my %systemTagsNotes = (
1338
1344
  PrintConv => 'eval { getgrgid($val) } || $val',
1339
1345
  PrintConvInv => 'eval { getgrnam($val) } || ($val=~/[^0-9]/ ? undef : $val)',
1340
1346
  },
1341
- FileBlockSize => { Groups => { 1 => 'System' }, %systemTagsNotes },
1342
- FileBlockCount => { Groups => { 1 => 'System' }, %systemTagsNotes },
1347
+ FileBlockSize => { Groups => { 1 => 'System', 2 => 'Other' }, %systemTagsNotes },
1348
+ FileBlockCount => { Groups => { 1 => 'System', 2 => 'Other' }, %systemTagsNotes },
1343
1349
  HardLink => {
1344
1350
  Writable => 1,
1345
1351
  DelCheck => q{"Can't delete"},
@@ -1374,7 +1380,7 @@ my %systemTagsNotes = (
1374
1380
  },
1375
1381
  ValueConvInv => '$val=~tr/\\\\/\//; $val',
1376
1382
  },
1377
- MIMEType => { Notes => 'the MIME type of the source file' },
1383
+ MIMEType => { Notes => 'the MIME type of the source file', Groups => { 2 => 'Other' } },
1378
1384
  ImageWidth => { Notes => 'the width of the image in number of pixels' },
1379
1385
  ImageHeight => { Notes => 'the height of the image in number of pixels' },
1380
1386
  XResolution => { Notes => 'the horizontal pixel resolution' },
@@ -2245,7 +2251,7 @@ sub ExtractInfo($;@)
2245
2251
  local $_;
2246
2252
  my $self = shift;
2247
2253
  my $options = $$self{OPTIONS}; # pointer to current options
2248
- my $fast = $$options{FastScan};
2254
+ my $fast = $$options{FastScan} || 0;
2249
2255
  my $req = $$self{REQ_TAG_LOOKUP};
2250
2256
  my $reqAll = $$options{RequestAll} || 0;
2251
2257
  my (%saveOptions, $reEntry, $rsize, $type, @startTime, $saveOrder);
@@ -2433,7 +2439,7 @@ sub ExtractInfo($;@)
2433
2439
  $recognizedExt = $ext if defined $ext and not defined $magicNumber{$ext} and
2434
2440
  defined $moduleName{$ext} and not $moduleName{$ext};
2435
2441
  my @fileTypeList = GetFileType($realname);
2436
- if ($fast and $fast >= 4) {
2442
+ if ($fast >= 4) {
2437
2443
  if (@fileTypeList) {
2438
2444
  $type = shift @fileTypeList;
2439
2445
  $self->SetFileType($$self{FILE_TYPE} = $type);
@@ -2447,7 +2453,7 @@ sub ExtractInfo($;@)
2447
2453
  my $pat = join '|', @fileTypeList;
2448
2454
  push @fileTypeList, grep(!/^($pat)$/, @fileTypes);
2449
2455
  $tiffType = $$self{FILE_EXT};
2450
- unless ($fast and $fast == 3) {
2456
+ unless ($fast == 3) {
2451
2457
  $noMagic{MXF} = 1; # don't do magic number test on MXF or DV files
2452
2458
  $noMagic{DV} = 1;
2453
2459
  }
@@ -2460,9 +2466,9 @@ sub ExtractInfo($;@)
2460
2466
  # initialize the input file for seeking in binary data
2461
2467
  $raf->BinMode(); # set binary mode before we start reading
2462
2468
  my $pos = $raf->Tell(); # get file position so we can rewind
2463
- my %dirInfo = ( RAF => $raf, Base => $pos );
2464
2469
  # loop through list of file types to test
2465
2470
  my ($buff, $seekErr);
2471
+ my %dirInfo = ( RAF => $raf, Base => $pos, TestBuff => \$buff );
2466
2472
  # read start of file for testing
2467
2473
  my $testLen = 1024;
2468
2474
  $raf->Read($buff, $testLen) or $buff = '';
@@ -2477,6 +2483,7 @@ sub ExtractInfo($;@)
2477
2483
  } else {
2478
2484
  # keep checking for other types if we recognize this file only by extension
2479
2485
  next if defined $moduleName{$type} and not $moduleName{$type};
2486
+ next if $fast > 2; # keep checking if we aren't processing the file
2480
2487
  }
2481
2488
  next if $weakMagic{$type} and defined $recognizedExt;
2482
2489
  } elsif (not defined $type) {
@@ -2497,7 +2504,7 @@ sub ExtractInfo($;@)
2497
2504
  $$self{FILE_TYPE} = $type;
2498
2505
  $dirInfo{Parent} = ($type eq 'TIFF') ? $tiffType : $type;
2499
2506
  # don't process the file when FastScan == 3
2500
- if ($fast and $fast == 3 and not $processType{$type}) {
2507
+ if ($fast == 3 and not $processType{$type}) {
2501
2508
  unless ($weakMagic{$type} and (not $ext or $ext ne $type)) {
2502
2509
  $self->SetFileType($dirInfo{Parent});
2503
2510
  }
@@ -5914,7 +5921,7 @@ sub ProcessJPEG($$)
5914
5921
  my $options = $$self{OPTIONS};
5915
5922
  my $verbose = $$options{Verbose};
5916
5923
  my $out = $$options{TextOut};
5917
- my $fast = $$options{FastScan};
5924
+ my $fast = $$options{FastScan} || 0;
5918
5925
  my $raf = $$dirInfo{RAF};
5919
5926
  my $htmlDump = $$self{HTML_DUMP};
5920
5927
  my %dumpParms = ( Out => $out );
@@ -5935,7 +5942,7 @@ sub ProcessJPEG($$)
5935
5942
  }
5936
5943
  if (not $$self{VALUE}{FileType} or ($$self{DOC_NUM} and $$options{ExtractEmbedded})) {
5937
5944
  $self->SetFileType(); # set FileType tag
5938
- return 1 if $fast and $fast == 3; # don't process file when FastScan == 3
5945
+ return 1 if $fast == 3; # don't process file when FastScan == 3
5939
5946
  $$self{LOW_PRIORITY_DIR}{IFD1} = 1; # lower priority of IFD1 tags
5940
5947
  }
5941
5948
  $$raf{NoBuffer} = 1 if $self->Options('FastScan'); # disable buffering in FastScan mode
@@ -6246,7 +6253,7 @@ sub ProcessJPEG($$)
6246
6253
  my $tagInfo = $self->GetTagInfo($tagTablePtr, $tag);
6247
6254
  $self->FoundTag($tagInfo, substr($$segDataPt, 6));
6248
6255
  } elsif ($$segDataPt =~ /^(II|MM).{4}HEAPJPGM/s) {
6249
- next if $fast and $fast > 1; # skip processing for very fast
6256
+ next if $fast > 1; # skip processing for very fast
6250
6257
  $dumpType = 'CIFF';
6251
6258
  my %dirInfo = ( RAF => new File::RandomAccess($segDataPt) );
6252
6259
  $$self{SET_GROUP1} = 'CIFF';
@@ -6475,7 +6482,7 @@ sub ProcessJPEG($$)
6475
6482
  $self->WarnOnce('Invalid or extraneous ICC_Profile chunk(s)');
6476
6483
  }
6477
6484
  } elsif ($$segDataPt =~ /^FPXR\0/) {
6478
- next if $fast and $fast > 1; # skip processing for very fast
6485
+ next if $fast > 1; # skip processing for very fast
6479
6486
  $dumpType = 'FPXR';
6480
6487
  my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main');
6481
6488
  # set flag if this is the last FPXR segment
@@ -6555,7 +6562,7 @@ sub ProcessJPEG($$)
6555
6562
  undef $scalado;
6556
6563
  }
6557
6564
  } elsif ($$segDataPt =~ /^FPXR\0/) {
6558
- next if $fast and $fast > 1; # skip processing for very fast
6565
+ next if $fast > 1; # skip processing for very fast
6559
6566
  $dumpType = 'FPXR';
6560
6567
  my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main');
6561
6568
  # set flag if this is the last FPXR segment
@@ -7428,7 +7435,9 @@ sub ProcessDirectory($$$;$)
7428
7435
  $$self{FOUND_DIR}{$dirName} = 1;
7429
7436
 
7430
7437
  # process the directory
7438
+ no strict 'refs';
7431
7439
  my $rtnVal = &$proc($self, $dirInfo, $tagTablePtr);
7440
+ use strict 'refs';
7432
7441
 
7433
7442
  pop @{$$self{PATH}};
7434
7443
  @$self{'INDENT','DIR_NAME','Compression','SubfileType'} = @save;
@@ -7613,7 +7622,7 @@ sub AddTagToTable($$;$$)
7613
7622
  # Handle simple extraction of new tag information
7614
7623
  # Inputs: 0) ExifTool object ref, 1) tag table reference, 2) tagID, 3) value,
7615
7624
  # 4-N) parameters hash: Index, DataPt, DataPos, Base, Start, Size, Parent,
7616
- # TagInfo, ProcessProc, RAF, Format
7625
+ # TagInfo, ProcessProc, RAF, Format, Count
7617
7626
  # Returns: tag key or undef if tag not found
7618
7627
  # Notes: if value is not defined, it is extracted from DataPt using TagInfo
7619
7628
  # Format and Count if provided
@@ -86,24 +86,24 @@ supported by ExifTool (r = read, w = write, c = create):
86
86
  BPG r | FLIF r/w | MKA r | PFB r | TORRENT r
87
87
  BTF r | FLV r | MKS r | PFM r | TTC r
88
88
  CHM r | FPF r | MKV r | PGF r | TTF r
89
- COS r | FPX r | MNG r/w | PGM r/w | VCF r
90
- CR2 r/w | GIF r/w | MOBI r | PLIST r | VRD r/w/c
91
- CR3 r/w | GPR r/w | MODD r | PICT r | VSD r
92
- CRM r/w | GZ r | MOI r | PMP r | WAV r
93
- CRW r/w | HDP r/w | MOS r/w | PNG r/w | WDP r/w
94
- CS1 r/w | HDR r | MOV r/w | PPM r/w | WEBP r
95
- DCM r | HEIC r/w | MP3 r | PPT r | WEBM r
96
- DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WMA r
97
- DCR r | HTML r | MPC r | PS r/w | WMV r
98
- DFONT r | ICC r/w/c | MPG r | PSB r/w | WTV r
99
- DIVX r | ICS r | MPO r/w | PSD r/w | WV r
100
- DJVU r | IDML r | MQV r/w | PSP r | X3F r/w
101
- DLL r | IIQ r/w | MRW r/w | QTIF r/w | XCF r
102
- DNG r/w | IND r/w | MXF r | R3D r | XLS r
103
- DOC r | INSV r | NEF r/w | RA r | XLSX r
104
- DOCX r | INX r | NRW r/w | RAF r/w | XMP r/w/c
105
- DPX r | ISO r | NUMBERS r | RAM r | ZIP r
106
- DR4 r/w/c | ITC r | O r | RAR r |
89
+ COS r | FPX r | MNG r/w | PGM r/w | TXT r
90
+ CR2 r/w | GIF r/w | MOBI r | PLIST r | VCF r
91
+ CR3 r/w | GPR r/w | MODD r | PICT r | VRD r/w/c
92
+ CRM r/w | GZ r | MOI r | PMP r | VSD r
93
+ CRW r/w | HDP r/w | MOS r/w | PNG r/w | WAV r
94
+ CS1 r/w | HDR r | MOV r/w | PPM r/w | WDP r/w
95
+ DCM r | HEIC r/w | MP3 r | PPT r | WEBP r
96
+ DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WEBM r
97
+ DCR r | HTML r | MPC r | PS r/w | WMA r
98
+ DFONT r | ICC r/w/c | MPG r | PSB r/w | WMV r
99
+ DIVX r | ICS r | MPO r/w | PSD r/w | WTV r
100
+ DJVU r | IDML r | MQV r/w | PSP r | WV r
101
+ DLL r | IIQ r/w | MRW r/w | QTIF r/w | X3F r/w
102
+ DNG r/w | IND r/w | MXF r | R3D r | XCF r
103
+ DOC r | INSV r | NEF r/w | RA r | XLS r
104
+ DOCX r | INX r | NRW r/w | RAF r/w | XLSX r
105
+ DPX r | ISO r | NUMBERS r | RAM r | XMP r/w/c
106
+ DR4 r/w/c | ITC r | O r | RAR r | ZIP r
107
107
 
108
108
  Meta Information
109
109
  ----------------------+----------------------+---------------------
@@ -2236,7 +2236,7 @@ EXE, EXIF, ExifTool, FITS, FLAC, FLIR, File, Flash, FlashPix, Font,
2236
2236
  FotoStation, GIF, GIMP, GeoTiff, GoPro, H264, HTML, ICC_Profile, ID3, IPTC,
2237
2237
  ISO, ITC, JFIF, JPEG, JSON, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF,
2238
2238
  MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR,
2239
- Opus, PDF, PICT, PLIST, PNG, PSP, Palm, PanasonicRaw, PhotoCD,
2239
+ Opus, PDF, PICT, PLIST, PNG, PSP, Palm, Parrot, PanasonicRaw, PhotoCD,
2240
2240
  PhotoMechanic, Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC,
2241
2241
  RTF, Radiance, Rawzor, Real, Red, SVG, SigmaRaw, Stim, Theora, Torrent,
2242
2242
  VCard, Vorbis, WTV, XML, XMP, ZIP
@@ -2283,8 +2283,8 @@ ZIP
2283
2283
 
2284
2284
  =item Family 2 (Category):
2285
2285
 
2286
- Audio, Author, Camera, Document, ExifTool, Image, Location, Other, Preview,
2287
- Printing, Time, Unknown, Video
2286
+ Audio, Author, Camera, Device, Document, ExifTool, Image, Location, Other,
2287
+ Preview, Printing, Time, Unknown, Video
2288
2288
 
2289
2289
  =item Family 3 (Document Number):
2290
2290