exiftool_vendored 12.81.0 → 12.82.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ba2444c39547a29d2fc1571e6dd379717eacc8bd4ddabe6eb65fd5129b8b072
4
- data.tar.gz: 72c5c28b89791790a889835831e94c5dc27eb7b635b8a35b4e8d2c2775684b2a
3
+ metadata.gz: e72fd223e20ba074cc12f4a4b8746c48911099845c2b0bdabb3066ba3b68c930
4
+ data.tar.gz: 03c78c3768b36216b3ad2c5d83d1fbd9e3e702581d2bd2cd09ce85b895fe169e
5
5
  SHA512:
6
- metadata.gz: 38d482929aafd323864314e3dd10f08c43b3798bc345457342010cad7a032fe193a5a6d39daf82666cb7b56c0da7db1da78794811c7ad0fbde63f256e674be6d
7
- data.tar.gz: a7826bccc3d66f967e5978c4b689a846a510c66f005812283170791a3a1cb24ddaa7ed52d9cc6b86d9ac3f5eabf83cfa950c9a03a907a3974e67c90e9d38b647
6
+ metadata.gz: 1a0c7336b467061e914f44977a25fa24cb67572998306b21b1019b346ecd423a908774759c9af636f79ff3467624762cd5437d5c347e1a6475f78e6ea839fba5
7
+ data.tar.gz: b654799b378c684a8d2ec1d2638e3d16de1d9daf91b67f1c0c681fc1407872e057f94b90d630a0cc2218ec286c4d92e5c0a2df4f01ed730f9852feb527857d98
data/bin/Changes CHANGED
@@ -7,6 +7,24 @@ 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
+ Apr. 5, 2024 - Version 12.82 - "GM PDR"
11
+
12
+ - Added support for reading GM PDR data from MP4 videos written by cars such
13
+ as Corvettes and Cameros
14
+ - Added support for reading timed GPS from Wolfbox dashcam videos
15
+ - Added "Unknown trailer" to QuickTime warnings originating from an unknown
16
+ trailer
17
+ - Added a new Nikon LensID
18
+ - Extract PreviewImage from Chigee AIO-5 dashcam videos
19
+ - Changed name and print conversion of a recently added FujiFilm tag
20
+ - Only issue "Tag not defined" warnings for the first sub-document when using
21
+ the -p option
22
+ - Fixed a Nikon Z lens name (github #250)
23
+ - Fixed Windows version so -sort works properly with -listgeo
24
+ - API Changes:
25
+ - Added PrintCSV option for optimized extraction of GM PDR data in CSV
26
+ format
27
+
10
28
  Mar. 27, 2024 - Version 12.81
11
29
 
12
30
  - Added ability to read EXIF and XMP from EXR images
@@ -19,8 +37,8 @@ Mar. 27, 2024 - Version 12.81
19
37
  - Added support for new version of Canon DR4 files
20
38
  - Added a number of new iTunesInfo tags
21
39
  - Added a new Olympus LensType
22
- - Allow regular expressions to be used when writing Geolocate tag
23
40
  - Decode a number of new Nikon tags (thanks Warren Hatch)
41
+ - Allow regular expressions to be used when writing Geolocate tag
24
42
  - Enhanced writing of Geolocate tag to also write Keys:LocationName
25
43
  - Cache the results of the last reverse geolocation search to speed batch
26
44
  processing when multiple files have the same search parameters
data/bin/MANIFEST CHANGED
@@ -80,6 +80,7 @@ html/TagNames/FujiFilm.html
80
80
  html/TagNames/GE.html
81
81
  html/TagNames/GIF.html
82
82
  html/TagNames/GIMP.html
83
+ html/TagNames/GM.html
83
84
  html/TagNames/GPS.html
84
85
  html/TagNames/GeoTiff.html
85
86
  html/TagNames/GoPro.html
@@ -293,6 +294,7 @@ lib/Image/ExifTool/FujiFilm.pm
293
294
  lib/Image/ExifTool/GE.pm
294
295
  lib/Image/ExifTool/GIF.pm
295
296
  lib/Image/ExifTool/GIMP.pm
297
+ lib/Image/ExifTool/GM.pm
296
298
  lib/Image/ExifTool/GPS.pm
297
299
  lib/Image/ExifTool/GeoLang/cs.pm
298
300
  lib/Image/ExifTool/GeoLang/de.pm
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.81"
53
+ "version" : "12.82"
54
54
  }
data/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.81
34
+ version: 12.82
data/bin/README CHANGED
@@ -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.81.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.81
112
+ gzip -dc Image-ExifTool-12.82.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.82
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.81';
14
+ my $version = '12.82';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -217,7 +217,7 @@ my $tmpFile; # temporary file to delete on exit
217
217
  my $tmpText; # temporary text file
218
218
  my $validFile; # flag indicating we processed a valid file
219
219
  my $verbose; # verbose setting
220
- my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
220
+ my $vout; # verbose output file reference (\*STDOUT or \*STDERR by default)
221
221
  my $windowTitle; # title for console window
222
222
  my %wroteHEAD; # list of output txt files to which we wrote HEAD
223
223
  my $xml; # flag for XML-formatted output
@@ -735,10 +735,11 @@ 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
- push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
739
738
  next if $minPop and $entry[7] < $minPop;
740
739
  next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
740
+ push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
741
741
  $_ = defined $_ ? $mt->Decode($_, 'UTF8') : '' foreach @entry[@isUTF8];
742
+ pop @entry if $isAlt and not $entry[10];
742
743
  print join(',', @entry), "\n";
743
744
  }
744
745
  } else { # 'g(\d*)'
@@ -2180,7 +2181,7 @@ sub GetImageInfo($$)
2180
2181
 
2181
2182
  my $lineCount = 0;
2182
2183
  my ($fp, $outfile, $append);
2183
- if ($textOut and $verbose and not $tagOut) {
2184
+ if ($textOut and ($verbose or $et->Options('PrintCSV')) and not $tagOut) {
2184
2185
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2185
2186
  $fp or EFile($file), ++$countBad, return;
2186
2187
  # delete file if we exit prematurely (unless appending)
@@ -2303,7 +2304,7 @@ sub GetImageInfo($$)
2303
2304
  $lastDoc = 0;
2304
2305
  }
2305
2306
  for ($doc=0; $doc<=$lastDoc; ++$doc) {
2306
- my $skipBody;
2307
+ my ($skipBody, $opt);
2307
2308
  foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
2308
2309
  my $prf = $printFmt{$type} or next;
2309
2310
  if ($type eq 'HEAD' and defined $outfile) {
@@ -2311,6 +2312,12 @@ sub GetImageInfo($$)
2311
2312
  $wroteHEAD{$outfile} = 1;
2312
2313
  }
2313
2314
  next if $type eq 'BODY' and $skipBody;
2315
+ # silence "IF" warnings and warnings for subdocuments > 1
2316
+ if ($type eq 'IF' or ($doc > 1 and not $$et{OPTIONS}{IgnoreMinorErrors})) {
2317
+ $opt = 'Silent';
2318
+ } else {
2319
+ $opt = 'Warn';
2320
+ }
2314
2321
  if ($lastDoc) {
2315
2322
  if ($doc) {
2316
2323
  next if $type eq 'HEAD' or $type eq 'TAIL'; # only repeat SECT/IF/BODY/ENDS
@@ -2320,7 +2327,6 @@ sub GetImageInfo($$)
2320
2327
  }
2321
2328
  }
2322
2329
  my @lines;
2323
- my $opt = $type eq 'IF' ? 'Silent' : 'Warn'; # silence "IF" warnings
2324
2330
  foreach (@$prf) {
2325
2331
  my $line = $et->InsertTagValues($_, \@foundTags, $opt, $grp, $cache);
2326
2332
  if ($type eq 'IF') {
@@ -5662,7 +5668,7 @@ with this command:
5662
5668
 
5663
5669
  produces output like this:
5664
5670
 
5665
- -- Generated by ExifTool 12.81 --
5671
+ -- Generated by ExifTool 12.82 --
5666
5672
  File: a.jpg - 2003:10:31 15:44:19
5667
5673
  (f/5.6, 1/60s, ISO 100)
5668
5674
  File: b.jpg - 2006:05:23 11:57:38
@@ -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.54';
38
+ $VERSION = '3.55';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -95,16 +95,9 @@ my %tweakOrder = (
95
95
  Lytro => 'SigmaRaw',
96
96
  PhotoMechanic => 'FotoStation',
97
97
  Microsoft => 'PhotoMechanic',
98
- 'Microsoft::MP'=> 'Microsoft::MP1',
99
98
  GIMP => 'Microsoft',
100
- 'Nikon::CameraSettingsD300' => 'Nikon::ShotInfoD300b',
101
- 'Pentax::LensData' => 'Pentax::LensInfo2',
102
- 'Sony::SRF2' => 'Sony::SRF',
103
99
  DarwinCore => 'AFCP',
104
- 'MWG::Regions' => 'MWG::Composite',
105
- 'MWG::Keywords' => 'MWG::Regions',
106
- 'MWG::Collections' => 'MWG::Keywords',
107
- 'GoPro::fdsc' => 'GoPro::KBAT',
100
+ MWG => 'Shortcuts',
108
101
  );
109
102
 
110
103
  # list of all recognized Format strings
@@ -671,6 +664,15 @@ will extract all available information even for tags not listed.
671
664
  Tags in these tables are referred to as "pseudo" tags because their
672
665
  information is not stored in the file itself. As such, B<Writable> tags in
673
666
  these tables may be changed without having to rewrite the file.
667
+ },
668
+ GM => q{
669
+ These tags are extracted from GM/Cosworth PDR (Performance Data Recorder)
670
+ information found in videos from General Motors cars such as Corvette and
671
+ Camero.
672
+
673
+ Use the API L<PrintCSV|../ExifTool.html#PrintCSV> option to output all timed
674
+ PDR data in CSV format at greatly increased speed and with much lower memory
675
+ usage.
674
676
  },
675
677
  PodTrailer => q{
676
678
  ~head1 NOTES
@@ -708,7 +710,7 @@ my %shortcutNotes = (
708
710
  color space when deleting all other metadata
709
711
  },
710
712
  CommonIFD0 => q{
711
- common metadata tags found in IFD0 of TIFF-format images. Used to simpify
713
+ common metadata tags found in IFD0 of TIFF-format images. Used to simplify
712
714
  deletion of all metadata from these images. See
713
715
  L<FAQ number 7|../faq.html#Q7> for details
714
716
  },
@@ -852,7 +854,7 @@ sub new
852
854
  my ($tagID, $binaryTable, $noID, $hexID, $isIPTC, $isXMP);
853
855
  $isIPTC = 1 if $writeProc and $writeProc eq \&Image::ExifTool::IPTC::WriteIPTC;
854
856
  # generate flattened tag names for structure fields if this is an XMP table
855
- if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') {
857
+ if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP' or $$vars{ADD_FLATTENED}) {
856
858
  Image::ExifTool::XMP::AddFlattenedTags($table);
857
859
  $isXMP = 1;
858
860
  }
@@ -1526,7 +1528,8 @@ TagID: foreach $tagID (@keys) {
1526
1528
  my $fullName = ($strName =~ / / ? '' : 'XMP ') . "$strName Struct";
1527
1529
  my $info = $tagNameInfo{$fullName} = [ ];
1528
1530
  my $tag;
1529
- foreach $tag (sort keys %$struct) {
1531
+ my $order = $$struct{SORT_ORDER} || [ sort keys %$struct ];
1532
+ foreach $tag (@$order) {
1530
1533
  my $tagInfo = $$struct{$tag};
1531
1534
  next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE' and $tag ne 'GROUPS';
1532
1535
  warn "WARNING: $strName Struct containes $tag\n" if $Image::ExifTool::specialTags{$tag};
@@ -1539,6 +1542,8 @@ TagID: foreach $tagID (@keys) {
1539
1542
  push @vals, $writable;
1540
1543
  $structs{$writable} = 1;
1541
1544
  $writable = "=$writable";
1545
+ } elsif (defined $$tagInfo{Writable}) {
1546
+ $writable = 'no';
1542
1547
  } else {
1543
1548
  $writable = 'string';
1544
1549
  }
@@ -1548,7 +1553,7 @@ TagID: foreach $tagID (@keys) {
1548
1553
  # handle PrintConv lookups in Structure elements
1549
1554
  my $printConv = $$tagInfo{PrintConv};
1550
1555
  if (ref $printConv eq 'HASH') {
1551
- foreach (sort keys %$printConv) {
1556
+ foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
1552
1557
  next if /^(OTHER|BITMASK)$/;
1553
1558
  push @vals, "$_ = $$printConv{$_}";
1554
1559
  }
@@ -1822,24 +1827,7 @@ sub TweakOrder($$)
1822
1827
  local $_;
1823
1828
  my ($sortedTables, $tweakOrder) = @_;
1824
1829
  my @tweak = sort keys %$tweakOrder;
1825
- my (%addedMain, @sorted);
1826
- # flag files which have a "Main" table
1827
- foreach (@$sortedTables) {
1828
- $addedMain{$1} = 0 if /^Image::ExifTool::(\w+)::(\w+)/ and $2 eq 'Main';
1829
- }
1830
- # make sure that the main table always comes first in each file
1831
- foreach (@$sortedTables) {
1832
- if (/^Image::ExifTool::(\w+)::(\w+)/) {
1833
- if ($addedMain{$1}) {
1834
- next if $2 eq 'Main'; # don't add again
1835
- } elsif (defined $addedMain{$1}) {
1836
- push @sorted, "Image::ExifTool::${1}::Main" if $2 ne 'Main';
1837
- $addedMain{$1} = 1;
1838
- }
1839
- }
1840
- push @sorted, $_;
1841
- }
1842
- @$sortedTables = @sorted;
1830
+ my (@sorted, %hasMain, %module, $entry);
1843
1831
  # apply manual tweaks
1844
1832
  while (@tweak) {
1845
1833
  my $table = shift @tweak;
@@ -1858,6 +1846,31 @@ sub TweakOrder($$)
1858
1846
  }
1859
1847
  @$sortedTables = (@notMoving, @moving, @after);
1860
1848
  }
1849
+ # flag modules which have a "Main" table, and organize tables by module name
1850
+ foreach (@$sortedTables) {
1851
+ if (not /^Image::ExifTool::(\w+)::(\w+)/) {
1852
+ push @sorted, $_;
1853
+ } else {
1854
+ $hasMain{$1} = 1 if $2 eq 'Main';
1855
+ push @sorted, $module{$1} = [ ] unless $module{$1};
1856
+ push @{$module{$1}}, $_;
1857
+ }
1858
+ }
1859
+ # force MWG::Composite table first
1860
+ my @mwg = ( 'Image::ExifTool::MWG::Composite' );
1861
+ /Composite/ or push @mwg, $_ foreach @{$module{MWG}};
1862
+ @{$module{MWG}} = @mwg;
1863
+ # make sure that the main table always comes first in each file
1864
+ # and that all other tables from this group follow
1865
+ @$sortedTables = ( );
1866
+ foreach $entry (@sorted) {
1867
+ ref $entry or push(@$sortedTables, $entry), next;
1868
+ $$entry[0] =~ /^Image::ExifTool::(\w+)::(\w+)/ or die 'Internal error';
1869
+ my $main = "Image::ExifTool::$1::Main";
1870
+ # main table must come first (even if it doesn't exist)
1871
+ push @$sortedTables, $main if $hasMain{$1};
1872
+ $_ eq $main or push(@$sortedTables, $_) foreach @$entry;
1873
+ }
1861
1874
  }
1862
1875
 
1863
1876
  #------------------------------------------------------------------------------
@@ -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.93';
34
+ $VERSION = '1.94';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -550,7 +550,14 @@ my %faceCategories = (
550
550
  3 => 'Electronic Front Curtain', #10
551
551
  },
552
552
  },
553
- 0x1051 => { Name => 'Cropped', Writable => 'int8u', PrintConv => { 0 => 'No', 1 => 'Yes' } }, #forum15784
553
+ 0x1051 => { #forum15784
554
+ Name => 'CropFlag',
555
+ Writable => 'int8u',
556
+ Notes => q(
557
+ this tag exists only if the image was cropped, and is 0 for cropped JPG
558
+ image or 1 for a cropped RAF
559
+ ),
560
+ },
554
561
  0x1052 => { Name => 'CropTopLeft', Writable => 'int32u' }, #forum15784
555
562
  0x1053 => { Name => 'CropSize', Writable => 'int32u' }, #forum15784
556
563
  # 0x1100 - This may not work well for newer cameras (ref forum12682)