exiftool_vendored 11.97.0 → 11.98.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.

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