exiftool_vendored 11.97.0 → 11.98.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7221434022aae95d2a68084a499a8b114bbec64edfb43daeefd3e3f33c8b4178
4
- data.tar.gz: 51610e0fb64869f5c989ab9dca28ed73156893d2c5ec19b4374fee27fb9bc87b
3
+ metadata.gz: dd206618b02e9bdc096dbaf8dc497c6bce6a27e5782b42db0a308ba043752c49
4
+ data.tar.gz: 783ecd5157f77b7f56d7c85a3ddcb86aebc170e6e937ebfacfa7141a90f74cd8
5
5
  SHA512:
6
- metadata.gz: 9b8bb1e623b568a39c28c6d9eda0b92a00730de352e48c1aa226624323c403a4a5a5b5b6358b247ae3604006f290c088ae64352be741e1206ff4fb938f55bdcb
7
- data.tar.gz: 343021ad049d3d2443b0a29060ddad05f691f8ed77b5a175f0c6113a880b13ca86ec21b8cff62c24b95040ae28f0755b6f83acb6c388dbdf60510a5d68536ba1
6
+ metadata.gz: c4e18ca046d054a9a06289921a7ebd70801a64f3ac133de19156969077a1618841926104c9eef4cfdcd57ead9aed13ef2b1cd53b16a7b204fd6bba4342b633ef
7
+ data.tar.gz: 397e4a867443f593c3d73be6e549e9b0df9256ef551cad3ff39ef335bada1a47bf63fcdc58435672f39873418d74ecfec7ecc385008da471cd6cb34904f5c26a
data/bin/Changes CHANGED
@@ -7,6 +7,16 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 11.85. (Other versions are
8
8
  considered development releases, and are not uploaded to CPAN.)
9
9
 
10
+ May 1, 2020 - Version 11.98
11
+
12
+ - Added a new Nikon LensID (thanks Warren Hatch)
13
+ - Added a new Sony LensType (thanks LibRaw)
14
+ - Added a new Canon LensType
15
+ - Patched to extract EXIF with an "Exif\0\0" header from WebP images
16
+ - Enhanced -efile option and added to the documentation
17
+ - Minor tweak to -htmlDump output (disallow locking of empty selection)
18
+ - Fixed problem determining Duration of some M2TS videos
19
+
10
20
  Apr. 27, 2020 - Version 11.97
11
21
 
12
22
  - Added experimental -efile option (undocumented)
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.97"
50
+ "version" : "11.98"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 11.97
31
+ version: 11.98
data/bin/README CHANGED
@@ -105,8 +105,8 @@ your home directory, then you would type the following commands in a
105
105
  terminal window to extract and run ExifTool:
106
106
 
107
107
  cd ~/Desktop
108
- gzip -dc Image-ExifTool-11.97.tar.gz | tar -xf -
109
- cd Image-ExifTool-11.97
108
+ gzip -dc Image-ExifTool-11.98.tar.gz | tar -xf -
109
+ cd Image-ExifTool-11.98
110
110
  ./exiftool t/images/ExifTool.jpg
111
111
 
112
112
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '11.97';
13
+ my $version = '11.98';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -90,6 +90,7 @@ my @csvFiles; # list of files when reading with CSV option (in ExifTool Ch
90
90
  my @csvTags; # order of tags for first file with CSV option (lower case)
91
91
  my @delFiles; # list of files to delete
92
92
  my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs
93
+ my @efile; # files for writing list of error/fail/same file names
93
94
  my @exclude; # list of excluded tags
94
95
  my (@echo3, @echo4);# stdout and stderr echo after processing is complete
95
96
  my @files; # list of files and directories to scan
@@ -140,8 +141,6 @@ my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o
140
141
  my $disableOutput; # flag to disable normal output
141
142
  my $doSetFileName; # flag set if FileName may be written
142
143
  my $doUnzip; # flag to extract info from .gz and .bz2 files
143
- my $efile; # file for writing list of error file names
144
- my $efile2; # file for writing list of failed file names
145
144
  my $escapeC; # C-style escape
146
145
  my $escapeHTML; # flag to escape printed values for html
147
146
  my $evalWarning; # warning from eval
@@ -242,7 +241,8 @@ my %optArgs = (
242
241
  '-d' => 1, '-dateformat' => 1,
243
242
  '-D' => 0, # necessary to avoid matching lower-case equivalent
244
243
  '-echo' => 1, '-echo1' => 1, '-echo2' => 1, '-echo3' => 1, '-echo4' => 1,
245
- '-efile' => 1, '-efile1' => 1, '-efile2' => 1,
244
+ '-efile' => 1, '-efile1' => 1, '-efile2' => 1, '-efile3' => 1, '-efile4' => 1,
245
+ '-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
246
246
  '-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
247
247
  '-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
248
248
  '-fileorder' => 1,
@@ -409,6 +409,7 @@ undef @delFiles;
409
409
  undef @dynamicFiles;
410
410
  undef @echo3;
411
411
  undef @echo4;
412
+ undef @efile;
412
413
  undef @exclude;
413
414
  undef @files;
414
415
  undef @newValues;
@@ -442,8 +443,6 @@ undef $deleteOrig;
442
443
  undef $disableOutput;
443
444
  undef $doSetFileName;
444
445
  undef $doUnzip;
445
- undef $efile;
446
- undef $efile2;
447
446
  undef $escapeHTML;
448
447
  undef $escapeC;
449
448
  undef $evalWarning;
@@ -873,13 +872,13 @@ for (;;) {
873
872
  $mt->Options(Duplicates => 1);
874
873
  next;
875
874
  }
876
- if (/^efile([12])?$/i) {
877
- @ARGV or Error("Expecting file name for -$_ option\n"), $badCmd=1, next;
878
- if (defined $1 and $1 eq '2') {
879
- $efile2 = shift;
880
- } else {
881
- $efile = shift;
882
- }
875
+ if (/^efile(\d)?(!)?$/i) {
876
+ my $arg = shift;
877
+ defined $arg or Error("Expecting file name for -$_ option\n"), $badCmd=1, next;
878
+ $efile[0] = $arg if not $1 or $1 & 0x01;
879
+ $efile[1] = $arg if $1 and $1 & 0x02;
880
+ $efile[2] = $arg if $1 and $1 & 0x04;
881
+ unlink $arg if $2;
883
882
  next;
884
883
  }
885
884
  # (-execute handled at top of loop)
@@ -1925,6 +1924,7 @@ sub GetImageInfo($$)
1925
1924
  if (@condition) {
1926
1925
  unless ($file eq '-' or $et->Exists($file)) {
1927
1926
  Warn "Error: File not found - $file\n";
1927
+ EFile($file);
1928
1928
  FileNotFound($file);
1929
1929
  ++$countBad;
1930
1930
  return;
@@ -1970,15 +1970,7 @@ sub GetImageInfo($$)
1970
1970
  }
1971
1971
  unless ($result) {
1972
1972
  $verbose and print $vout "-------- $file (failed condition)$progStr\n";
1973
- if ($efile2) {
1974
- if ($et->Open(\*FAIL_FILE, $efile2, '>>')) {
1975
- print FAIL_FILE $file, "\n" or Warn("Error writing to $efile2\n"), undef $efile2;
1976
- close FAIL_FILE;
1977
- } else {
1978
- Warn("Error opening '${efile2}' for append\n");
1979
- undef $efile2;
1980
- }
1981
- }
1973
+ EFile($file, 2);
1982
1974
  ++$countFailed;
1983
1975
  return;
1984
1976
  }
@@ -1999,6 +1991,7 @@ sub GetImageInfo($$)
1999
1991
  ++$countGoodWr;
2000
1992
  } else {
2001
1993
  Warn "Error renaming $original\n";
1994
+ EFile($file);
2002
1995
  ++$countBad;
2003
1996
  }
2004
1997
  return;
@@ -2009,7 +2002,7 @@ sub GetImageInfo($$)
2009
2002
  my ($fp, $outfile, $append);
2010
2003
  if ($textOut and $verbose and not $tagOut) {
2011
2004
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2012
- $fp or ++$countBad, return;
2005
+ $fp or EFile($file), ++$countBad, return;
2013
2006
  # delete file if we exit prematurely (unless appending)
2014
2007
  $tmpText = $outfile unless $append;
2015
2008
  $et->Options(TextOut => $fp);
@@ -2041,6 +2034,7 @@ sub GetImageInfo($$)
2041
2034
  Warn "Error: File not found - $file\n";
2042
2035
  FileNotFound($file);
2043
2036
  $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
2037
+ EFile($file);
2044
2038
  ++$countBad;
2045
2039
  return;
2046
2040
  }
@@ -2090,6 +2084,7 @@ sub GetImageInfo($$)
2090
2084
  }
2091
2085
  if ($info->{Error}) {
2092
2086
  Warn "Error: $info->{Error} - $file\n";
2087
+ EFile($file);
2093
2088
  ++$countBad;
2094
2089
  return;
2095
2090
  }
@@ -2100,7 +2095,7 @@ sub GetImageInfo($$)
2100
2095
  # or if there is none of the requested information available
2101
2096
  if ($binaryOutput or not %$info) {
2102
2097
  my $errs = $et->GetInfo('Warning', 'Error');
2103
- PrintErrors($et, $errs, $file) and $rtnVal = 1;
2098
+ PrintErrors($et, $errs, $file) and EFile($file), $rtnVal = 1;
2104
2099
  } elsif ($et->GetValue('Error') or ($$et{Validate} and $et->GetValue('Warning'))) {
2105
2100
  $rtnVal = 1;
2106
2101
  }
@@ -2108,7 +2103,7 @@ sub GetImageInfo($$)
2108
2103
  # open output file (or stdout if no output file) if not done already
2109
2104
  unless ($outfile or $tagOut) {
2110
2105
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2111
- $fp or ++$countBad, return;
2106
+ $fp or EFile($file), ++$countBad, return;
2112
2107
  $tmpText = $outfile unless $append;
2113
2108
  }
2114
2109
 
@@ -2167,7 +2162,7 @@ sub GetImageInfo($$)
2167
2162
  }
2168
2163
  delete $printFmt{HEAD} unless $outfile; # print header only once per output file
2169
2164
  my $errs = $et->GetInfo('Warning', 'Error');
2170
- PrintErrors($et, $errs, $file);
2165
+ PrintErrors($et, $errs, $file) and EFile($file);
2171
2166
  } elsif (not $disableOutput) {
2172
2167
  my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
2173
2168
  if ($fp) {
@@ -2659,6 +2654,7 @@ sub SetImageInfo($$$)
2659
2654
  $outfile = FilenameSPrintf($outOpt, $orig);
2660
2655
  if ($outfile eq '') {
2661
2656
  Warn "Error: Can't create file with zero-length name from $orig\n";
2657
+ EFile($infile);
2662
2658
  ++$countBadCr;
2663
2659
  return 0;
2664
2660
  }
@@ -2675,6 +2671,7 @@ sub SetImageInfo($$$)
2675
2671
  unless (CanCreate($outType)) {
2676
2672
  my $what = $srcType ? 'other types' : 'scratch';
2677
2673
  WarnOnce "Error: Can't create $outType files from $what\n";
2674
+ EFile($infile);
2678
2675
  ++$countBadCr;
2679
2676
  return 0;
2680
2677
  }
@@ -2712,6 +2709,7 @@ sub SetImageInfo($$$)
2712
2709
  $outfile = NextUnusedFilename($outfile);
2713
2710
  if ($et->Exists($outfile) and not $doSetFileName) {
2714
2711
  Warn "Error: '${outfile}' already exists - $infile\n";
2712
+ EFile($infile);
2715
2713
  ++$countBadWr;
2716
2714
  return 0;
2717
2715
  }
@@ -2732,7 +2730,7 @@ sub SetImageInfo($$$)
2732
2730
  $setTags = $tagsFromSrc || $setTags{$dyFile};
2733
2731
  } else {
2734
2732
  $fromFile = FilenameSPrintf($dyFile, $orig);
2735
- ++$countBadWr, return 0 unless defined $fromFile;
2733
+ defined $fromFile or EFile($infile), ++$countBadWr, return 0;
2736
2734
  $setTags = $setTags{$dyFile};
2737
2735
  }
2738
2736
  # do we have multiple -tagsFromFile options with this file?
@@ -2817,7 +2815,7 @@ sub SetImageInfo($$$)
2817
2815
  my $err;
2818
2816
  $err = "You shouldn't write FileName or Directory with TestFile" if defined $newFileName or defined $newDir;
2819
2817
  $err = "The -o option shouldn't be used with TestFile" if defined $outfile;
2820
- $err and Warn("Error: $err - $infile\n"), ++$countBadWr, return 0;
2818
+ $err and Warn("Error: $err - $infile\n"), EFile($infile), ++$countBadWr, return 0;
2821
2819
  $testName = FilenameSPrintf($testName, $orig);
2822
2820
  $testName = Image::ExifTool::GetNewFileName($file, $testName) if $file ne '';
2823
2821
  }
@@ -2844,6 +2842,7 @@ sub SetImageInfo($$$)
2844
2842
  $sameFile = $outfile; # same file, but the name has a different case
2845
2843
  } else {
2846
2844
  Warn "Error: '${outfile}' already exists - $infile\n";
2845
+ EFile($infile);
2847
2846
  ++$countBadWr;
2848
2847
  return 0;
2849
2848
  }
@@ -2863,6 +2862,7 @@ sub SetImageInfo($$$)
2863
2862
  unless ($numSet) {
2864
2863
  # no need to write if no tags set
2865
2864
  print $vout "Nothing changed in $file\n" if defined $verbose;
2865
+ EFile($infile, 1);
2866
2866
  ++$countSameWr;
2867
2867
  return 1;
2868
2868
  }
@@ -2870,6 +2870,7 @@ sub SetImageInfo($$$)
2870
2870
  if ($numSet == $numPseudo) {
2871
2871
  # no need to write if no real tags
2872
2872
  Warn("Error: Nothing to write - $file\n");
2873
+ EFile($infile, 1);
2873
2874
  ++$countBadWr;
2874
2875
  return 0;
2875
2876
  }
@@ -2881,6 +2882,7 @@ sub SetImageInfo($$$)
2881
2882
  } else {
2882
2883
  # file doesn't exist, and we can't create it
2883
2884
  Warn "Error: File not found - $file\n";
2885
+ EFile($infile);
2884
2886
  FileNotFound($file);
2885
2887
  ++$countBadWr;
2886
2888
  return 0;
@@ -2895,9 +2897,11 @@ sub SetImageInfo($$$)
2895
2897
  if ($r1 > 0 or $r2 > 0 or $r3 > 0 or $r4 > 0) {
2896
2898
  ++$countGoodWr;
2897
2899
  } elsif ($r1 < 0 or $r2 < 0 or $r3 < 0 or $r4 < 0) {
2900
+ EFile($infile);
2898
2901
  ++$countBadWr;
2899
2902
  return 0;
2900
2903
  } else {
2904
+ EFile($infile, 1);
2901
2905
  ++$countSameWr;
2902
2906
  }
2903
2907
  if (defined $hardLink or defined $symLink or defined $testName) {
@@ -2911,6 +2915,7 @@ sub SetImageInfo($$$)
2911
2915
  $outfile = "${file}_exiftool_tmp";
2912
2916
  if ($et->Exists($outfile)) {
2913
2917
  Warn("Error: Temporary file already exists: $outfile\n");
2918
+ EFile($infile);
2914
2919
  ++$countBadWr;
2915
2920
  return 0;
2916
2921
  }
@@ -3007,6 +3012,7 @@ sub SetImageInfo($$$)
3007
3012
  } else {
3008
3013
  close(NEW_FILE);
3009
3014
  Warn "Error opening $file for writing\n";
3015
+ EFile($infile);
3010
3016
  $et->Unlink($newFile);
3011
3017
  ++$countBadWr;
3012
3018
  }
@@ -3024,11 +3030,13 @@ sub SetImageInfo($$$)
3024
3030
  # unlink may fail if already renamed or no permission
3025
3031
  if (not $et->Unlink($file)) {
3026
3032
  Warn "Error renaming temporary file to $dstFile\n";
3033
+ EFile($infile);
3027
3034
  $et->Unlink($newFile);
3028
3035
  ++$countBadWr;
3029
3036
  # try renaming again now that the target has been deleted
3030
3037
  } elsif (not $et->Rename($newFile, $dstFile)) {
3031
3038
  Warn "Error renaming temporary file to $dstFile\n";
3039
+ EFile($infile);
3032
3040
  # (don't delete tmp file now because it is all we have left)
3033
3041
  ++$countBadWr;
3034
3042
  } else {
@@ -3050,6 +3058,7 @@ sub SetImageInfo($$$)
3050
3058
  ++$countGoodWr;
3051
3059
  }
3052
3060
  } elsif ($success) {
3061
+ EFile($infile, 1);
3053
3062
  if ($isTemporary) {
3054
3063
  # just erase the temporary file since no changes were made
3055
3064
  $et->Unlink($tmpFile);
@@ -3063,6 +3072,7 @@ sub SetImageInfo($$$)
3063
3072
  }
3064
3073
  print $vout "Nothing changed in $file\n" if defined $verbose;
3065
3074
  } else {
3075
+ EFile($infile);
3066
3076
  $et->Unlink($tmpFile) if defined $tmpFile;
3067
3077
  ++$countBadWr;
3068
3078
  }
@@ -3450,7 +3460,7 @@ sub DoSetFromFile($$$)
3450
3460
  ++$warns while $$info{"Warning ($warns)"};
3451
3461
  $numSet -= $warns;
3452
3462
  }
3453
- PrintErrors($et, $info, $file) and ++$countBadWr, return 0;
3463
+ PrintErrors($et, $info, $file) and EFile($file), ++$countBadWr, return 0;
3454
3464
  Warn "Warning: No writable tags set from $file\n" unless $numSet;
3455
3465
  return 1;
3456
3466
  }
@@ -3649,6 +3659,7 @@ sub ScanDir($$;$)
3649
3659
  {
3650
3660
  Warn("Not writing $path\n");
3651
3661
  WarnOnce("Use -overwrite_original_in_place to write files with Unicode surrogate characters\n");
3662
+ EFile($file);
3652
3663
  ++$countBad;
3653
3664
  next;
3654
3665
  }
@@ -3723,6 +3734,7 @@ sub FindFileWindows($$)
3723
3734
  $evalWarning =~ s/ at .*//s;
3724
3735
  Warn "Error: [Win32::FindFile] $evalWarning - $wildfile\n";
3725
3736
  undef @files;
3737
+ EFile($wildfile);
3726
3738
  ++$countBad;
3727
3739
  }
3728
3740
  return @files;
@@ -4049,8 +4061,8 @@ sub CreateDirectory($)
4049
4061
  }
4050
4062
  $dir .= '/';
4051
4063
  }
4064
+ ++$countNewDir if $created;
4052
4065
  }
4053
- ++$countNewDir if $created;
4054
4066
  return $created;
4055
4067
  }
4056
4068
 
@@ -4237,6 +4249,29 @@ sub ReadStayOpen($)
4237
4249
  }
4238
4250
  }
4239
4251
 
4252
+ #------------------------------------------------------------------------------
4253
+ # Add new entry to -efile output file
4254
+ # Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed)
4255
+ sub EFile($$)
4256
+ {
4257
+ my $entry = shift;
4258
+ my $efile = $efile[shift || 0];
4259
+ if (defined $efile and length $entry and $entry ne '-') {
4260
+ my $err;
4261
+ CreateDirectory($efile);
4262
+ if ($mt->Open(\*EFILE_FILE, $efile, '>>')) {
4263
+ print EFILE_FILE $entry, "\n" or Warn("Error writing to $efile\n"), $err = 1;
4264
+ close EFILE_FILE;
4265
+ } else {
4266
+ Warn("Error opening '${efile}' for append\n");
4267
+ $err = 1;
4268
+ }
4269
+ if ($err) {
4270
+ defined $_ and $_ eq $efile and undef $_ foreach @efile;
4271
+ }
4272
+ }
4273
+ }
4274
+
4240
4275
  #------------------------------------------------------------------------------
4241
4276
  # Print list of tags
4242
4277
  # Inputs: 0) message, 1-N) list of tag names
@@ -4282,15 +4317,6 @@ sub PrintErrors($$$)
4282
4317
  Warn "$tag: $info->{$key} - $file\n";
4283
4318
  }
4284
4319
  }
4285
- if ($$info{Error} and $efile) {
4286
- if ($et->Open(\*ERR_FILE, $efile, '>>')) {
4287
- print ERR_FILE $file, "\n" or Warn("Error writing to $efile\n"), undef $efile;
4288
- close ERR_FILE;
4289
- } else {
4290
- Warn("Error opening '${efile}' for append\n");
4291
- undef $efile;
4292
- }
4293
- }
4294
4320
  return $$info{Error};
4295
4321
  }
4296
4322
 
@@ -4523,6 +4549,7 @@ L<Advanced options|/Advanced options>
4523
4549
  -common_args Define common arguments
4524
4550
  -config CFGFILE Specify configuration file name
4525
4551
  -echo[NUM] TEXT Echo text to stdout or stderr
4552
+ -efile[NUM][!] ERRFILE Save names of files with errors
4526
4553
  -execute[NUM] Execute multiple commands on one line
4527
4554
  -srcfile FMT Process a different source file
4528
4555
  -stay_open FLAG Keep reading -@ argfile even after EOF
@@ -5259,7 +5286,7 @@ with this command:
5259
5286
 
5260
5287
  produces output like this:
5261
5288
 
5262
- -- Generated by ExifTool 11.97 --
5289
+ -- Generated by ExifTool 11.98 --
5263
5290
  File: a.jpg - 2003:10:31 15:44:19
5264
5291
  (f/5.6, 1/60s, ISO 100)
5265
5292
  File: b.jpg - 2006:05:23 11:57:38
@@ -6206,6 +6233,17 @@ is output as the command line is parsed, before the processing of any input
6206
6233
  files. I<NUM> may also be 3 or 4 to output text (to stdout or stderr
6207
6234
  respectively) after processing is complete.
6208
6235
 
6236
+ =item B<-efile>[I<NUM>][!] I<ERRFILE>
6237
+
6238
+ Save the names of files giving errors (I<NUM> missing or 1), files that were
6239
+ unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
6240
+ or any combination thereof (by summing I<NUM>, eg. B<-efile3> is the same
6241
+ has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
6242
+ By default, file names are appended to any existing I<ERRFILE>, but
6243
+ I<ERRFILE> is overwritten if an exclamation point is added to the option
6244
+ (eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
6245
+ option if applicable.
6246
+
6209
6247
  =item B<-execute>[I<NUM>]
6210
6248
 
6211
6249
  Execute command for all arguments up to this point on the command line (plus
@@ -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 $exePath);
30
30
 
31
- $VERSION = '11.97';
31
+ $VERSION = '11.98';
32
32
  $RELEASE = '';
33
33
  @ISA = qw(Exporter);
34
34
  %EXPORT_TAGS = (
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.36';
91
+ $VERSION = '4.37';
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)
@@ -486,6 +486,7 @@ $VERSION = '4.36';
486
486
  368.7 => 'Sigma 85mm f/1.4 DG HSM | A', #IB (016)
487
487
  368.8 => 'Sigma 105mm f/1.4 DG HSM', #IB (A018)
488
488
  368.9 => 'Sigma 14-24mm f/2.8 DG HSM', #IB (A018)
489
+ 368.10 => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
489
490
  '368.10' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
490
491
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
491
492
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
@@ -532,7 +533,7 @@ $VERSION = '4.36';
532
533
  757 => 'Canon EF 400mm f/2.8L IS III USM', #IB
533
534
  758 => 'Canon EF 600mm f/4L IS III USM', #IB
534
535
 
535
- 1136 => 'Sigma 24-70mm f/2.8 DG OS HSM | Art 017', #IB
536
+ 1136 => 'Sigma 24-70mm f/2.8 DG OS HSM | A', #IB (017)
536
537
  # (STM lenses - 0x10xx)
537
538
  4142 => 'Canon EF-S 18-135mm f/3.5-5.6 IS STM',
538
539
  4143 => 'Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens',
@@ -13,7 +13,7 @@ use vars qw($VERSION);
13
13
  use Image::ExifTool; # only for FinishTiffDump()
14
14
  use Image::ExifTool::HTML qw(EscapeHTML);
15
15
 
16
- $VERSION = '1.38';
16
+ $VERSION = '1.39';
17
17
 
18
18
  sub DumpTable($$$;$$$$$$);
19
19
  sub Open($$$;@);
@@ -122,7 +122,7 @@ function doClick(e)
122
122
  if (!clicked) {
123
123
  firstOutEvt = lastInEvt = undefined;
124
124
  high(e, 2);
125
- clicked = 1;
125
+ if (hlist) clicked = 1;
126
126
  } else {
127
127
  clicked = 0;
128
128
  if (firstOutEvt) high(firstOutEvt, 0);
@@ -31,7 +31,7 @@ use strict;
31
31
  use vars qw($VERSION);
32
32
  use Image::ExifTool qw(:DataAccess :Utils);
33
33
 
34
- $VERSION = '1.16';
34
+ $VERSION = '1.17';
35
35
 
36
36
  # program map table "stream_type" lookup (ref 6/1)
37
37
  my %streamType = (
@@ -313,7 +313,7 @@ sub ProcessM2TS($$)
313
313
  my $raf = $$dirInfo{RAF};
314
314
  my ($buff, $pLen, $upkPrefix, $j, $fileType, $eof);
315
315
  my (%pmt, %pidType, %data, %sectLen);
316
- my ($startTime, $endTime, $backScan, $maxBack);
316
+ my ($startTime, $endTime, $fwdTime, $backScan, $maxBack);
317
317
  my $verbose = $et->Options('Verbose');
318
318
  my $out = $et->Options('TextOut');
319
319
 
@@ -330,7 +330,7 @@ sub ProcessM2TS($$)
330
330
  $upkPrefix = 'x4N';
331
331
  }
332
332
  my $prePos = $pLen - 188; # byte position of packet prefix
333
- my $readSize = 64 * $pLen; # read 64 packets at once
333
+ my $readSize = 64 * $pLen; # size of our read buffer
334
334
  $raf->Seek(0,0); # rewind to start
335
335
  $raf->Read($buff, $readSize) >= $pLen * 4 or return 0; # require at least 4 packets
336
336
  # validate the sync byte in the next 3 packets
@@ -351,39 +351,58 @@ sub ProcessM2TS($$)
351
351
  my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 );
352
352
  my %needPID = ( 0 => 1 ); # lookup for stream PID's that we still need to parse
353
353
  my $pEnd = 0;
354
- my $i = 0;
355
354
 
356
355
  # parse packets from MPEG-2 Transport Stream
357
356
  for (;;) {
358
357
 
359
358
  unless (%needPID) {
360
359
  last unless defined $startTime;
361
- # seek backwards to find last PCR
362
- if (defined $backScan) {
363
- last if defined $endTime;
364
- $backScan -= $pLen;
365
- last if $backScan < $maxBack;
366
- } else {
367
- undef $endTime;
368
- last if $et->Options('FastScan');
360
+ # reconfigure to seek backwards for last PCR
361
+ unless (defined $backScan) {
362
+ $et->Options('FastScan') and undef($endTime), last;
369
363
  $verbose and print "[Starting backscan for last PCR]\n";
370
- # calculate position of last complete packet
371
- my $fwdPos = $raf->Tell();
364
+ $fwdTime = $endTime;
365
+ undef $endTime;
366
+ # remember how far we got when reading forward through the file
367
+ my $fwdPos = $raf->Tell() - length($buff) + $pEnd;
368
+ # determine the number of whole packets in the file
372
369
  $raf->Seek(0, 2) or last;
373
370
  my $fsize = $raf->Tell();
374
371
  my $nPack = int($fsize / $pLen);
375
- $backScan = ($nPack - 1) * $pLen - $fsize;
372
+ $backScan = $nPack * $pLen - $fsize;
376
373
  # set limit on how far back we will go
377
374
  $maxBack = $fwdPos - $fsize;
378
- $maxBack = -256000 if $maxBack < -256000;
375
+ # scan back a maximum of 512k (have seen last PCR at -276k)
376
+ my $nMax = int(512000 / $pLen); # max packets to scan
377
+ my $nRem = int(-$maxBack / $pLen); # packets remaining in file
378
+ $maxBack = $backScan - $nMax * $pLen if $nRem > $nMax;
379
+ $pEnd = 0;
379
380
  }
380
- $raf->Seek($backScan, 2) or last;
381
381
  }
382
- my $pos = $pEnd;
382
+ my $pos;
383
383
  # read more if necessary
384
- if ($pos + $pLen > length $buff) {
385
- $raf->Read($buff, $readSize) >= $pLen or $eof = 1, last;
386
- $pos = $pEnd = 0;
384
+ if (defined $backScan) {
385
+ last if defined $endTime;
386
+ $pos = $pEnd = $pEnd - 2 * $pLen; # step back to previous packet
387
+ if ($pos < 0) {
388
+ # read another buffer from end of file
389
+ last if $backScan <= $maxBack;
390
+ my $readThis = $readSize;
391
+ $backScan -= $readSize;
392
+ if ($backScan < $maxBack) {
393
+ $readThis = $readSize - ($maxBack - $backScan);
394
+ $backScan = $maxBack;
395
+ }
396
+ $raf->Seek($backScan, 2) or last;
397
+ $raf->Read($buff, $readThis) == $readThis or last;
398
+ $pos = $pEnd = $readThis - $pLen;
399
+ }
400
+ } else {
401
+ $pos = $pEnd;
402
+ if ($pos + $pLen > length $buff) {
403
+ $raf->Read($buff, $readSize) >= $pLen or $eof = 1, last;
404
+ $pos = $pEnd = 0;
405
+ }
387
406
  }
388
407
  $pEnd += $pLen;
389
408
  # decode the packet prefix
@@ -404,8 +423,8 @@ sub ProcessM2TS($$)
404
423
  # my $continuity_counter = $prefix & 0x0000000f;
405
424
 
406
425
  if ($verbose > 1) {
426
+ my $i = ($raf->Tell() - length($buff) + $pEnd) / $pLen - 1;
407
427
  print $out "Transport packet $i:\n";
408
- ++$i;
409
428
  $et->VerboseDump(\$buff, Len => $pLen, Addr => $i * $pLen, Start => $pos - $prePos);
410
429
  my $str = $pidName{$pid} ? " ($pidName{$pid})" : '';
411
430
  printf $out " Timecode: 0x%.4x\n", Get32u(\$buff, $pos - $prePos) if $pLen == 192;
@@ -646,7 +665,8 @@ sub ProcessM2TS($$)
646
665
  }
647
666
 
648
667
  # calculate Duration if available
649
- if (defined $startTime and defined $endTime and $startTime != $endTime) {
668
+ $endTime = $fwdTime unless defined $endTime;
669
+ if (defined $startTime and defined $endTime) {
650
670
  $endTime += 0x80000000 * 1200 if $startTime > $endTime; # handle 33-bit wrap
651
671
  $et->HandleTag($tagTablePtr, 'Duration', $endTime - $startTime);
652
672
  }
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
62
62
  use Image::ExifTool::Exif;
63
63
  use Image::ExifTool::GPS;
64
64
 
65
- $VERSION = '3.81';
65
+ $VERSION = '3.82';
66
66
 
67
67
  sub LensIDConv($$$);
68
68
  sub ProcessNikonAVI($$$);
@@ -297,6 +297,7 @@ sub GetAFPointGrid($$;$);
297
297
  'B8 40 2D 44 2C 34 BA 06' => 'AF-S Nikkor 18-35mm f/3.5-4.5G ED',
298
298
  'A0 40 2D 74 2C 3C BB 0E' => 'AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR', #PH
299
299
  'A1 54 55 55 0C 0C BC 06' => 'AF-S Nikkor 58mm f/1.4G', #IB
300
+ 'A1 48 6E 8E 24 24 DB 4E' => 'AF-S Nikkor 120-300mm f/2.8E FL ED SR VR', #28
300
301
  'A2 40 2D 53 2C 3C BD 0E' => 'AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II',
301
302
  'A4 40 2D 8E 2C 40 BF 0E' => 'AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR',
302
303
  'A5 4C 44 44 14 14 C0 06' => 'AF-S Nikkor 35mm f/1.8G ED', #35 ("ED" ref 11)
@@ -46,7 +46,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
46
46
  use Image::ExifTool::Exif;
47
47
  use Image::ExifTool::GPS;
48
48
 
49
- $VERSION = '2.47';
49
+ $VERSION = '2.48';
50
50
 
51
51
  sub ProcessMOV($$;$);
52
52
  sub ProcessKeys($$$);
@@ -1628,10 +1628,14 @@ my %eeBox = (
1628
1628
  Avoid => 1,
1629
1629
  Format => 'string', # (necessary to remove the trailing NULL)
1630
1630
  },
1631
- date => { # (NC)
1631
+ date => {
1632
1632
  Name => 'DateTimeOriginal',
1633
1633
  Description => 'Date/Time Original',
1634
1634
  Groups => { 2 => 'Time' },
1635
+ Notes => q{
1636
+ Apple Photos has been reported to show a crazy date/time for some MP4 files
1637
+ containing this tag
1638
+ }, #forum10690/11125
1635
1639
  Shift => 'Time',
1636
1640
  ValueConv => q{
1637
1641
  require Image::ExifTool::XMP;
@@ -8232,6 +8236,11 @@ sub HandleItemInfo($)
8232
8236
  if ($buff =~ /^(MM\0\x2a|II\x2a\0)/) {
8233
8237
  $et->Warn('Missing Exif header');
8234
8238
  $start = 0;
8239
+ } elsif ($buff =~ /^Exif\0\0/) {
8240
+ # (haven't seen this yet, but it is just a matter of time
8241
+ # until someone screws it up like this)
8242
+ $et->Warn('Missing Exif header size');
8243
+ $start = 6;
8235
8244
  } else {
8236
8245
  my $n = unpack('N', $buff);
8237
8246
  $start = 4 + $n; # skip "Exif\0\0" header if it exists
@@ -29,7 +29,7 @@ use strict;
29
29
  use vars qw($VERSION);
30
30
  use Image::ExifTool qw(:DataAccess :Utils);
31
31
 
32
- $VERSION = '1.55';
32
+ $VERSION = '1.56';
33
33
 
34
34
  sub ConvertTimecode($);
35
35
  sub ProcessSGLT($$$);
@@ -485,14 +485,26 @@ my %code2charset = (
485
485
  #
486
486
  # WebP-specific tags
487
487
  #
488
- EXIF => { # (WebP)
488
+ EXIF => [{ # (WebP)
489
489
  Name => 'EXIF',
490
+ Condition => '$$valPt =~ /^(II\x2a\0|MM\0\x2a)/',
490
491
  Notes => 'WebP files',
491
492
  SubDirectory => {
492
493
  TagTable => 'Image::ExifTool::Exif::Main',
493
494
  ProcessProc => \&Image::ExifTool::ProcessTIFF,
494
495
  },
495
- },
496
+ },{ # (WebP) - have also seen with "Exif\0\0" header - PH
497
+ Name => 'EXIF',
498
+ Condition => '$$valPt =~ /^Exif\0\0(II\x2a\0|MM\0\x2a)/',
499
+ SubDirectory => {
500
+ TagTable => 'Image::ExifTool::Exif::Main',
501
+ ProcessProc => \&Image::ExifTool::ProcessTIFF,
502
+ Start => 6,
503
+ },
504
+ },{
505
+ Name => 'UnknownEXIF',
506
+ Binary => 1,
507
+ }],
496
508
  'XMP ' => { #14 (WebP)
497
509
  Name => 'XMP',
498
510
  Notes => 'WebP files',
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.23';
37
+ $VERSION = '3.24';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -232,7 +232,7 @@ sub PrintInvLensSpec($;$$);
232
232
  51507 => 'Samyang AF 35mm F1.4', #IB
233
233
  51508 => 'Samyang AF 45mm F1.8',
234
234
  51510 => 'Samyang AF 18mm F2.8', #JR
235
-
235
+ 51512 => 'Samyang AF 75mm F1.8 FE', #IB
236
236
  );
237
237
 
238
238
  # ExposureProgram values (ref PH, mainly decoded from A200)
@@ -10651,6 +10651,7 @@ my %tagExists = (
10651
10651
  'unknown_slmt' => 1,
10652
10652
  'unknownd30' => 1,
10653
10653
  'unknowndata' => 1,
10654
+ 'unknownexif' => 1,
10654
10655
  'unknowninfo' => 1,
10655
10656
  'unknowninfo2' => 1,
10656
10657
  'unknowninfo2version' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 23364 tags, with 15306 unique tag names.
15
+ They contain a total of 23365 tags, with 15307 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -28940,6 +28940,7 @@ sub-documents, but the Duration is calculated for the full video.
28940
28940
  'ANMF' ANMF RIFF ANMF
28941
28941
  'CSET' CharacterSet RIFF CSET
28942
28942
  'EXIF' EXIF EXIF
28943
+ UnknownEXIF no
28943
28944
  'ICCP' ICC_Profile ICC_Profile
28944
28945
  'IDIT' DateTimeOriginal no
28945
28946
  'JUNK' OlympusJunk Olympus AVI
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 11.97
3
+ Version: 11.98
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('11.97.0')
4
+ VERSION = Gem::Version.new('11.98.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.97.0
4
+ version: 11.98.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-28 00:00:00.000000000 Z
12
+ date: 2020-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool