exiftool-vendored.pl 12.84.0 → 12.85.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.
package/bin/Changes CHANGED
@@ -7,12 +7,34 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ May 21, 2024 - Version 12.85
11
+
12
+ - Added GeolocationFeatureType tag
13
+ - Added read support for Nikon NKA and NXD adjustment files
14
+ - Added a new Apple:ImageCaptureType value, and changed another one
15
+ - Decode a few new Pentax tags
16
+ - Decode a few new Canon tags
17
+ - Decode some Ricoh Exif metadata from MOV videos
18
+ - Extract ID3 UserDefinedText and UserDefinedURL tags by name
19
+ - Make $advFmtSelf available for user-defined helper functions
20
+ - Documented API GeoDir pseudo option feature
21
+ - Tolerate pad byte at end of HIF file when writing
22
+ - Raised priority of FileName, BaseName, Directory and FileType tags so they
23
+ don't get hidden by other tags in the file which may have these names
24
+ - Changed decoding of QuickTime Rotation (irot) to correspond with
25
+ EXIF:Orientation (previously this was oddly reported as degrees of
26
+ counterclockwise rotation)
27
+ - Fixed a typo in the print conversion value for a couple of DPX tags
28
+ - Fixed problem writing some QuickTime tags with very large (> 16 MB) values
29
+ - Fixed bug in build_geolocation utility that resulted in incorrect population
30
+ numbers when run under ActivePerl
31
+
10
32
  Apr. 23, 2024 - Version 12.84
11
33
 
12
34
  - Added ability to read speed and accuracy_horizontal when geotagging from
13
35
  OpenTracks GPX files
14
36
  - Decode a few more Apple tags and a new CanonVRD tag
15
- - Enhanced Geolocation option with the ability to return any number of nearby
37
+ - Enhanced Geolocation feature with the ability to return any number of nearby
16
38
  cities
17
39
  - Fixed long-standing bug in Windows version that didn't properly handle dates
18
40
  older than 50 years when writing FileModifyDate or FileCreateDate
@@ -21,8 +43,8 @@ Apr. 23, 2024 - Version 12.84
21
43
  which have print conversions
22
44
  - Fixed problem where a new subregion couldn't be added through a user-defined
23
45
  Geolocation database entry
24
- - Fixed problem where GeolocFeature option didn't work for some features if a
25
- user-generated custom database was used
46
+ - Fixed problem where the API GeolocFeature option didn't work for some
47
+ features if a user-generated custom database was used
26
48
 
27
49
  Apr. 18, 2024 - Version 12.83
28
50
 
package/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.84"
53
+ "version" : "12.85"
54
54
  }
package/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: 0
32
32
  requires:
33
33
  perl: 5.004
34
- version: 12.84
34
+ version: 12.85
package/bin/README CHANGED
@@ -14,50 +14,50 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 360 r/w | DOCX r | ITC r | O r | RSRC r
18
- 3FR r | DPX r | J2C r | ODP r | RTF r
19
- 3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
20
- 3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
21
- 7Z r | DV r | JPEG r/w | OFR r | RWZ r
22
- A r | DVB r/w | JSON r | OGG r | RM r
23
- AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
24
- AAC r | DYLIB r | K25 r | ONP r | SKETCH r
25
- AAE r | EIP r | KDC r | OPUS r | SO r
26
- AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
27
- ACR r | EPUB r | LA r | ORI r/w | SRF r
28
- AFM r | ERF r/w | LFP r | OTF r | SRW r/w
29
- AI r/w | EXE r | LIF r | PAC r | SVG r
30
- AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
31
- APE r | EXR r | LRV r/w | PBM r/w | THM r/w
32
- ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
33
- ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
34
- ASF r | FFF r/w | MACOS r | PDB r | TTC r
35
- AVI r | FITS r | MAX r | PDF r/w | TTF r
36
- AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
37
- AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
38
- BMP r | FLIF r/w | MIFF r | PFB r | VNT r
39
- BPG r | FLV r | MKA r | PFM r | VRD r/w/c
40
- BTF r | FPF r | MKS r | PGF r | VSD r
41
- C2PA r | FPX r | MKV r | PGM r/w | WAV r
42
- CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
43
- COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
44
- CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
45
- CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
46
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
47
- CRW r/w | HDR r | MOV r/w | PPT r | WPG r
48
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
49
- CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
50
- CUR r | HTML r | MPC r | PSB r/w | X3F r/w
51
- CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
52
- DCM r | ICO r | MPO r/w | PSP r | XISF r
53
- DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
54
- DCR r | IDML r | MRC r | R3D r | XLSX r
55
- DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
56
- DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
57
- DJVU r | INSP r/w | NEF r/w | RAM r |
58
- DLL r | INSV r | NKSC r/w | RAR r |
59
- DNG r/w | INX r | NRW r/w | RAW r/w |
60
- DOC r | ISO r | NUMBERS r | RIFF r |
17
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
18
+ 3FR r | DPX r | J2C r | NXD r | RIFF r
19
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
20
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
21
+ 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
22
+ A r | DVB r/w | JSON r | ODT r | RWL r/w
23
+ AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
24
+ AAC r | DYLIB r | K25 r | OGG r | RM r
25
+ AAE r | EIP r | KDC r | OGV r | SEQ r
26
+ AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
27
+ ACR r | EPUB r | LA r | OPUS r | SO r
28
+ AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
29
+ AI r/w | EXE r | LIF r | ORI r/w | SRF r
30
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
31
+ APE r | EXR r | LRV r/w | PAC r | SVG r
32
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
33
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
34
+ ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
35
+ AVI r | FITS r | MAX r | PCX r | TORRENT r
36
+ AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
37
+ AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
38
+ BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
39
+ BPG r | FLV r | MKA r | PFA r | VCF r
40
+ BTF r | FPF r | MKS r | PFB r | VNT r
41
+ C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
42
+ CHM r | GIF r/w | MNG r/w | PGF r | VSD r
43
+ COS r | GLV r/w | MOBI r | PGM r/w | WAV r
44
+ CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
45
+ CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
46
+ CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
47
+ CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
48
+ CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
49
+ CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
50
+ CUR r | HTML r | MPC r | PPTX r | WTV r
51
+ CZI r | ICC r/w/c | MPG r | PS r/w | WV r
52
+ DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
53
+ DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
54
+ DCR r | IDML r | MRC r | PSP r | XISF r
55
+ DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
56
+ DIVX r | IND r/w | MXF r | R3D r | XLSX r
57
+ DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
58
+ DLL r | INSV r | NKA r | RAF r/w | ZIP r
59
+ DNG r/w | INX r | NKSC r/w | RAM r |
60
+ DOC r | ISO r | NRW r/w | RAR r |
61
61
 
62
62
  Meta Information
63
63
  ----------------------+----------------------+---------------------
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-12.84.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.84
112
+ gzip -dc Image-ExifTool-12.85.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.85
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -12,6 +12,9 @@
12
12
  # 2024-04-15 - PH Clean up and add options for public release
13
13
  # 2024-04-22 - PH Increased number of possible feature codes from
14
14
  # 32 to 64. Convert backslashes in directory names
15
+ # 2024-04-24 - PH Fixed problem with population exponent when run
16
+ # under ActivePerl
17
+ # 2024-04-29 - PH Added feature types and default to db v1.03
15
18
  #
16
19
  # Notes: Requires these files from https://download.geonames.org/export/
17
20
  #
@@ -19,6 +22,7 @@
19
22
  # countryInfo.txt
20
23
  # admin1CodesASCII.txt
21
24
  # admin2Codes.txt
25
+ # featureCodes_XX.txt (optional)
22
26
  # alternateNamesV2.txt (optional)
23
27
  #
24
28
  # Output datbase format (Geolocation.dat):
@@ -54,7 +58,7 @@
54
58
  # 1. Time zone name, terminated by newline
55
59
  # "\0\0\0\0\x05" (feature codes added in v1.03)
56
60
  # Feature codes:
57
- # 1. Feature code, terminated by newline
61
+ # 1. Feature code, optional space-followed-by-feature-name, then newline
58
62
  # "\0\0\0\0\0"
59
63
  #
60
64
  # Feature Codes v1.02: (see http://www.geonames.org/export/codes.html#P for descriptions)
@@ -68,12 +72,12 @@
68
72
 
69
73
  use strict;
70
74
 
71
- my $dbVer = '1.02'; # database version
72
-
75
+ my $dbVer = '1.03'; # default output database version
73
76
  my $dbFile = 'allCountries.txt'; # default database file
74
77
  my $countryFile = 'countryInfo.txt'; # mandatory country names file
75
78
  my $regionFile = 'admin1CodesASCII.txt'; # mandatory region names file
76
79
  my $admin2File = 'admin2Codes.txt'; # mandatory subregion names file
80
+ my $featureFile = 'featureCodes_en.txt'; # optional feature names file
77
81
  my $altNamesFile = 'alternateNamesV2.txt'; # optional alternate names file
78
82
  my $outFile = 'Geolocation.dat'; # output ExifTool database file
79
83
  my $outAltNames = 'AltNames.dat'; # output alternate names file
@@ -103,6 +107,7 @@ my @fc103 = qw(
103
107
  my $i = 0;
104
108
  my @featureCodes = $dbVer eq '1.02' ? @fc102 : @fc103;
105
109
  my %featureCodes = map { $_ => $i++ } @featureCodes;
110
+ my %featureNames;
106
111
 
107
112
  my ($dbfile, @dbfiles, $outDir, $verbose, $noLang, %needRgn);
108
113
  my %optArgs = ( p => 1, c => 1, cp => 1, l => 1, o => 1, ver => 1 );
@@ -240,12 +245,13 @@ Options:
240
245
  -h - Show this help.
241
246
 
242
247
  Input files (download from https://download.geonames.org/export/dump/):
243
- allCountries.txt - default database file (smaller files with names
248
+ $dbFile - default database file (smaller files with names
244
249
  like "cities###.txt" may be specified instead)
245
- countryInfo.txt - mandatory country names file
246
- admin1CodesASCII.txt - mandatory region names file
247
- admin2Codes.txt - mandatory subregion names file
248
- alternateNamesV2.txt - optional alternate names file (must exist to
250
+ $countryFile - mandatory country names file
251
+ $regionFile - mandatory region names file
252
+ $admin2File - mandatory subregion names file
253
+ $featureFile - optional feature codes file
254
+ $altNamesFile - optional alternate names file (must exist to
249
255
  to generate $outAltNames and $geoLang files)
250
256
 
251
257
  Output files:
@@ -374,7 +380,7 @@ my @supportedLangs = qw(cs de en-ca en-gb es fi fr it ja ko nl pl ru sk sv tr zh
374
380
 
375
381
  # supported country-specific languages
376
382
  my %ccLang = ( TW => 'zh', CN => 'zh', CA => 'en', GB => 'en' );
377
- my (%lang, %haveCountry, %cityFlags, %rgnFlags, %subFlags, %ccFlags, %flags);
383
+ my (%lang, %featureLang, %haveCountry, %cityFlags, %rgnFlags, %subFlags, %ccFlags, %flags);
378
384
  my (%haveRegion, %haveSubRgn, $filesize, $percent);
379
385
 
380
386
  sub GetFileSize($)
@@ -386,7 +392,8 @@ sub GetFileSize($)
386
392
  return $size;
387
393
  }
388
394
 
389
- # pre-scan database to determine which countries, regions and subregions we will be using
395
+ # pre-scan database to determine which countries, regions subregions and
396
+ # feature codes we will be using
390
397
  foreach $dbfile (@dbfiles) {
391
398
  my $database = $$dbfile{file};
392
399
  my $upgraded;
@@ -422,7 +429,7 @@ foreach $dbfile (@dbfiles) {
422
429
  }
423
430
  # keep regardless of population
424
431
  if ($needRgn{$cc} and $$dbfile{keep}{"$cc$rgn"}) {
425
- $keep = $$dbfile{keep}{"$cc$rgn"}{$code};#TEST
432
+ $keep = $$dbfile{keep}{"$cc$rgn"}{$code};
426
433
  } elsif ($$dbfile{keep}{$cc}) {
427
434
  $keep = $$dbfile{keep}{$cc}{$code};
428
435
  } else {
@@ -462,9 +469,27 @@ foreach $dbfile (@dbfiles) {
462
469
  warn "Some feature codes not supported by version 1.02, writing as 1.03 instead.\n" if $upgraded;
463
470
  }
464
471
 
472
+ # read feature names
473
+ if (open INFILE, '<', "$dbdir/$featureFile") {
474
+ print "Reading $dbdir/$featureFile\n";
475
+ while (<INFILE>) {
476
+ my @items = split /\t/;
477
+ $items[0] =~ s/^.\.//; # remove feature group and "." separator
478
+ next unless $featureCodes{$items[0]};
479
+ my $name = ucfirst $items[1];
480
+ $name =~ s/ ([a-z])/ \U$1/g;
481
+ $featureNames{$items[0]} = $name;
482
+ }
483
+ close INFILE;
484
+ } else {
485
+ print "Not found: $dbdir/$featureFile\n";
486
+ print "--> Not storing feature type names\n";
487
+ }
488
+
465
489
  # read country names
466
490
  $i = 0;
467
491
  open INFILE, '<', "$dbdir/$countryFile" or die "Error opening $dbdir/$countryFile\n";
492
+ print "Reading $dbdir/$countryFile\n";
468
493
  while (<INFILE>) {
469
494
  next if /^#/;
470
495
  my @items = split /\t/;
@@ -479,6 +504,7 @@ die "Too many countries!\n" if $i > 0x100; # (no default 0 entry)
479
504
  # read region (admin1) names
480
505
  $i = 0;
481
506
  open REGION, '<', "$dbdir/$regionFile" or die "Error opening $dbdir/$regionFile\n";
507
+ print "Reading $dbdir/$regionFile\n";
482
508
  while (<REGION>) {
483
509
  chomp;
484
510
  my @items = split /\t/;
@@ -494,6 +520,7 @@ die "Too many regions!\n" if $i > 0x0fff; # (account for default 0 entry)
494
520
  # read subregion (admin2) names
495
521
  $i = 0;
496
522
  open ADMIN2, '<', "$dbdir/$admin2File" or die "Error opening $dbdir/$admin2File\n";
523
+ print "Reading $dbdir/$admin2File\n";
497
524
  while (<ADMIN2>) {
498
525
  chomp;
499
526
  my @items = split /\t/;
@@ -544,8 +571,35 @@ if (not $noLang and open INFILE, '<', "$dbdir/$altNamesFile") {
544
571
  }
545
572
  print "\b\b\b\bDone.\n";
546
573
  close INFILE;
574
+ # read alternate feature names
575
+ if (%featureNames) {
576
+ my $lng;
577
+ foreach $lng (@languages) {
578
+ next if $lng eq 'en' or not $languages{$lng};
579
+ my $file = "$dbdir/$featureFile";
580
+ $file =~ s/_en\./_$lng./ or next;
581
+ next unless open INFILE, '<', $file;
582
+ print "Reading $file\n";
583
+ while (<INFILE>) {
584
+ my @items = split /\t/;
585
+ $items[0] =~ s/^.\.//; # remove feature group and "." separator
586
+ next unless $featureNames{$items[0]};
587
+ utf8::decode($items[1]);
588
+ my $name = ucfirst $items[1];
589
+ $name =~ s/ (.)/ \U$1/g;
590
+ # change $name back to byte string
591
+ if ($] >= 5.006 and (eval { require Encode; Encode::is_utf8($name) } or $@)) {
592
+ $name = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$name)) : Encode::encode('utf8',$name);
593
+ }
594
+ next if $name eq $featureNames{$items[0]};
595
+ $featureLang{$lng}{$items[0]} = $name;
596
+ }
597
+ close INFILE;
598
+ }
599
+ }
547
600
  } else {
548
- print "Not writing alternate languages ($dbdir/$altNamesFile not found)\n";
601
+ print "Not found: $dbdir/$altNamesFile\n--> " unless $noLang;
602
+ print "Not writing alternate languages\n";
549
603
  $noLang = 1;
550
604
  }
551
605
 
@@ -554,7 +608,7 @@ my (%coords, %langLookups);
554
608
  foreach $dbfile (@dbfiles) {
555
609
  my $database = $$dbfile{file};
556
610
 
557
- print "Processing $database... 0%";
611
+ print "Processing database entries... 0%";
558
612
  my $i = 0;
559
613
  my $num = scalar @{$$dbfile{kept}};
560
614
 
@@ -623,6 +677,7 @@ foreach (sort { $a cmp $b } keys %coords) {
623
677
  my $items = $coords{$_};
624
678
  # @$items=(0.lat,1.lon,2.city,3.cc,4.rgn,5.admin2,6.population,7.timezone,8.feature code,9.alt names)
625
679
  my $iCC = $orderCC{$$items[3]};
680
+ defined $iCC or warn("Unknown country code $$items[3]\n"), next;
626
681
  my $iRgn = $orderRgn{"$$items[3]$$items[4]"} || 0;
627
682
  my $iSub = $orderSub{"$$items[3]$$items[4].$$items[5]"} || 0;
628
683
  my $tn = $tz{$$items[7]};
@@ -631,9 +686,12 @@ foreach (sort { $a cmp $b } keys %coords) {
631
686
  $tn = $tz{$$items[7]} = $tzNum++;
632
687
  }
633
688
  # convert population to our binary format
634
- my $pop = sprintf('%.1e',$$items[6]); # format: "3.1e+04"
689
+ # Note: format in ActivePerl is "3.1e+004", but "3.1+04" in other Perls,
690
+ # but other Perls will round 34500 to "3.4e+04", so add 1 to get "3.5e+04"
691
+ $$items[6] += 1 if $$items[6] > 100 and not $$items[6] % 10;
692
+ my $pop = sprintf('%.1e',$$items[6]);
635
693
  # pack CC, population and region index into a 32-bit integer
636
- my $code = ($iCC << 24) | (substr($pop,6,1)<<20) | (substr($pop,0,1)<<16) | (substr($pop,2,1)<<12) | $iRgn;
694
+ my $code = ($iCC << 24) | (substr($pop,-1,1)<<20) | (substr($pop,0,1)<<16) | (substr($pop,2,1)<<12) | $iRgn;
637
695
  $fcodes{$$items[8]} = ($fcodes{$$items[8]} || 0) + 1;
638
696
  my $fc = $featureCodes{$$items[8]} || 0;
639
697
  # store high bit of timezone index
@@ -761,8 +819,12 @@ print OUTFILE $_,"\n" foreach @tz;
761
819
 
762
820
  print OUTFILE "\0\0\0\0\x05\n"; # section terminator
763
821
 
764
- # write feature codes
765
- print OUTFILE $_,"\n" foreach @featureCodes;
822
+ # write feature codes and optional names
823
+ foreach (@featureCodes) {
824
+ print OUTFILE $_;
825
+ print OUTFILE ' ', $featureNames{$_} if $featureNames{$_};
826
+ print OUTFILE "\n";
827
+ }
766
828
 
767
829
  # write terminator and close Geolocation.dat
768
830
  print OUTFILE "\0\0\0\0\0\n"; # file terminator
@@ -774,7 +836,9 @@ my $langSize = 0;
774
836
  my $langDir = "$outDir/$geoLang";
775
837
  # delete existing languages
776
838
  unlink <"$langDir/*.pm">;
777
- unless ($noLang) {
839
+ if ($noLang) {
840
+ rmdir $langDir;
841
+ } else {
778
842
  my $n = scalar(keys %langLookups);
779
843
  print "Writing $n language files to $outDir/$geoLang...\n";
780
844
  mkdir $langDir, 0777;
@@ -785,6 +849,7 @@ unless ($noLang) {
785
849
  my $lkup = $langLookups{$lng};
786
850
  my $file = "$myLng.pm";
787
851
  open OUT, ">$langDir/$file" or die "Error creating $file\n";
852
+ binmode OUT;
788
853
  print OUT "# Geolocation language translations for $myLng\n";
789
854
  print OUT "#\n# Based on Creative Commons database from geonames.org\n\n";
790
855
  print OUT "%Image::ExifTool::GeoLang::${myLng}::Translate = (\n";
@@ -842,6 +907,14 @@ unless ($noLang) {
842
907
  }
843
908
  }
844
909
  }
910
+ if ($featureLang{$lng}) {
911
+ print OUT "\n\t# feature types\n";
912
+ foreach (sort keys %{$featureLang{$lng}}) {
913
+ my $ftype = $featureLang{$lng}{$_};
914
+ $ftype =~ s/'/\\'/g;
915
+ print OUT "\t$_ => '$ftype',\n"
916
+ }
917
+ }
845
918
  print OUT ");\n\n1; #end\n";
846
919
  $langSize += tell OUT;
847
920
  close OUT;
package/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.84';
14
+ my $version = '12.85';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -735,6 +735,7 @@ for (;;) {
735
735
  push @isUTF8, 10 if $isAlt;
736
736
  for ($i=0; ; ++$i) {
737
737
  my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
738
+ $#entry = 9; # remove everything after latitude (eg. feature type)
738
739
  next if $minPop and $entry[7] < $minPop;
739
740
  next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
740
741
  push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
@@ -4720,50 +4721,50 @@ supported by ExifTool (r = read, w = write, c = create):
4720
4721
 
4721
4722
  File Types
4722
4723
  ------------+-------------+-------------+-------------+------------
4723
- 360 r/w | DOCX r | ITC r | O r | RSRC r
4724
- 3FR r | DPX r | J2C r | ODP r | RTF r
4725
- 3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
4726
- 3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
4727
- 7Z r | DV r | JPEG r/w | OFR r | RWZ r
4728
- A r | DVB r/w | JSON r | OGG r | RM r
4729
- AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
4730
- AAC r | DYLIB r | K25 r | ONP r | SKETCH r
4731
- AAE r | EIP r | KDC r | OPUS r | SO r
4732
- AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
4733
- ACR r | EPUB r | LA r | ORI r/w | SRF r
4734
- AFM r | ERF r/w | LFP r | OTF r | SRW r/w
4735
- AI r/w | EXE r | LIF r | PAC r | SVG r
4736
- AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
4737
- APE r | EXR r | LRV r/w | PBM r/w | THM r/w
4738
- ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
4739
- ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
4740
- ASF r | FFF r/w | MACOS r | PDB r | TTC r
4741
- AVI r | FITS r | MAX r | PDF r/w | TTF r
4742
- AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
4743
- AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
4744
- BMP r | FLIF r/w | MIFF r | PFB r | VNT r
4745
- BPG r | FLV r | MKA r | PFM r | VRD r/w/c
4746
- BTF r | FPF r | MKS r | PGF r | VSD r
4747
- C2PA r | FPX r | MKV r | PGM r/w | WAV r
4748
- CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
4749
- COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
4750
- CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
4751
- CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
4752
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
4753
- CRW r/w | HDR r | MOV r/w | PPT r | WPG r
4754
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
4755
- CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
4756
- CUR r | HTML r | MPC r | PSB r/w | X3F r/w
4757
- CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
4758
- DCM r | ICO r | MPO r/w | PSP r | XISF r
4759
- DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
4760
- DCR r | IDML r | MRC r | R3D r | XLSX r
4761
- DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
4762
- DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
4763
- DJVU r | INSP r/w | NEF r/w | RAM r |
4764
- DLL r | INSV r | NKSC r/w | RAR r |
4765
- DNG r/w | INX r | NRW r/w | RAW r/w |
4766
- DOC r | ISO r | NUMBERS r | RIFF r |
4724
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
4725
+ 3FR r | DPX r | J2C r | NXD r | RIFF r
4726
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
4727
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
4728
+ 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
4729
+ A r | DVB r/w | JSON r | ODT r | RWL r/w
4730
+ AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
4731
+ AAC r | DYLIB r | K25 r | OGG r | RM r
4732
+ AAE r | EIP r | KDC r | OGV r | SEQ r
4733
+ AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
4734
+ ACR r | EPUB r | LA r | OPUS r | SO r
4735
+ AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
4736
+ AI r/w | EXE r | LIF r | ORI r/w | SRF r
4737
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
4738
+ APE r | EXR r | LRV r/w | PAC r | SVG r
4739
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
4740
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
4741
+ ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
4742
+ AVI r | FITS r | MAX r | PCX r | TORRENT r
4743
+ AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
4744
+ AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
4745
+ BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
4746
+ BPG r | FLV r | MKA r | PFA r | VCF r
4747
+ BTF r | FPF r | MKS r | PFB r | VNT r
4748
+ C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
4749
+ CHM r | GIF r/w | MNG r/w | PGF r | VSD r
4750
+ COS r | GLV r/w | MOBI r | PGM r/w | WAV r
4751
+ CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
4752
+ CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
4753
+ CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
4754
+ CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
4755
+ CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
4756
+ CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
4757
+ CUR r | HTML r | MPC r | PPTX r | WTV r
4758
+ CZI r | ICC r/w/c | MPG r | PS r/w | WV r
4759
+ DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
4760
+ DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
4761
+ DCR r | IDML r | MRC r | PSP r | XISF r
4762
+ DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
4763
+ DIVX r | IND r/w | MXF r | R3D r | XLSX r
4764
+ DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
4765
+ DLL r | INSV r | NKA r | RAF r/w | ZIP r
4766
+ DNG r/w | INX r | NKSC r/w | RAM r |
4767
+ DOC r | ISO r | NRW r/w | RAR r |
4767
4768
 
4768
4769
  Meta Information
4769
4770
  ----------------------+----------------------+---------------------
@@ -5677,7 +5678,7 @@ with this command:
5677
5678
 
5678
5679
  produces output like this:
5679
5680
 
5680
- -- Generated by ExifTool 12.84 --
5681
+ -- Generated by ExifTool 12.85 --
5681
5682
  File: a.jpg - 2003:10:31 15:44:19
5682
5683
  (f/5.6, 1/60s, ISO 100)
5683
5684
  File: b.jpg - 2006:05:23 11:57:38
@@ -5916,7 +5917,8 @@ processed file by using %C (upper case) instead of %c. This allows a
5916
5917
  sequential number to be added to output file names, even if the names are
5917
5918
  different. For %C, a copy number of zero is not omitted as it is with %c.
5918
5919
  A leading '-' causes the number to be reset at the start of each new
5919
- directory, and '+' has no effect. The number before the decimal place gives
5920
+ directory (in the original directory structure if the files are being
5921
+ moved), and '+' has no effect. The number before the decimal place gives
5920
5922
  the starting index, the number after the decimal place gives the field
5921
5923
  width. The following examples show the output filenames when used with the
5922
5924
  command C<exiftool rose.jpg star.jpg jet.jpg ...>:
@@ -128,7 +128,8 @@ sub ConvertPLIST($$);
128
128
  1 => 'ProRAW',
129
129
  2 => 'Portrait',
130
130
  10 => 'Photo',
131
- 12 => 'Photo (12)', #PH (NC)
131
+ 11 => 'Manual Focus', #forum16044
132
+ 12 => 'Scene', #forum16044
132
133
  },
133
134
  },
134
135
  0x0015 => { # (ImageGroupIdentifier, ref 2)
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.74';
91
+ $VERSION = '4.75';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -2590,6 +2590,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2590
2590
  },
2591
2591
  # 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
2592
2592
  # (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
2593
+ 51 => { #forum16036 (EOS R models)
2594
+ Name => 'Clarity',
2595
+ PrintConv => {
2596
+ OTHER => sub { shift },
2597
+ 0x7fff => 'n/a',
2598
+ },
2599
+ },
2593
2600
  );
2594
2601
 
2595
2602
  # focal length information (MakerNotes tag 0x02)
@@ -7031,7 +7038,7 @@ my %ciMaxFocal = (
7031
7038
  },
7032
7039
  },
7033
7040
  2 => { #12
7034
- Name => 'Sharpness',
7041
+ Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
7035
7042
  Notes => 'all models except the 20D and 350D',
7036
7043
  Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
7037
7044
  Priority => 0, # (maybe not as reliable as other sharpness values)
@@ -7077,6 +7084,8 @@ my %ciMaxFocal = (
7077
7084
  Name => 'WBShiftGM',
7078
7085
  Notes => 'positive is a shift toward green',
7079
7086
  },
7087
+ 14 => 'UnsharpMaskFineness', #forum16036
7088
+ 15 => 'UnsharpMaskThreshold', #forum16036
7080
7089
  );
7081
7090
 
7082
7091
  # Color balance information (MakerNotes tag 0xa9) (ref PH)
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # DPX tags
21
21
  %Image::ExifTool::DPX::Main = (
@@ -97,7 +97,7 @@ $VERSION = '1.06';
97
97
  3 => 'Logarithmic',
98
98
  4 => 'Unspecified video',
99
99
  5 => 'SMPTE 274M',
100
- 6 => 'ITU-R 704-4',
100
+ 6 => 'ITU-R 709-4',
101
101
  7 => 'ITU-R 601-5 system B or G (625)',
102
102
  8 => 'ITU-R 601-5 system M (525)',
103
103
  9 => 'Composite video (NTSC)',
@@ -124,7 +124,7 @@ $VERSION = '1.06';
124
124
  1 => 'Printing density',
125
125
  4 => 'Unspecified video',
126
126
  5 => 'SMPTE 274M',
127
- 6 => 'ITU-R 704-4',
127
+ 6 => 'ITU-R 709-4',
128
128
  7 => 'ITU-R 601-5 system B or G (625)',
129
129
  8 => 'ITU-R 601-5 system M (525)',
130
130
  9 => 'Composite video (NTSC)',