exiftool-vendored.exe 13.47.0 → 13.48.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/exiftool.exe CHANGED
Binary file
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.47';
14
+ my $version = '13.48';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -9728,6 +9728,7 @@ my %filterConv = (
9728
9728
  },
9729
9729
  0x927c => {
9730
9730
  Name => 'MakerNoteCanon',
9731
+ MakerNotes => 1,
9731
9732
  SubDirectory => {
9732
9733
  TagTable => 'Image::ExifTool::Canon::Main',
9733
9734
  ProcessProc => \&Image::ExifTool::ProcessTIFF,
@@ -36,7 +36,7 @@ use vars qw($VERSION);
36
36
  use Image::ExifTool qw(:Public);
37
37
  use Image::ExifTool::GPS;
38
38
 
39
- $VERSION = '1.86';
39
+ $VERSION = '1.87';
40
40
 
41
41
  sub JITTER() { return 2 } # maximum time jitter
42
42
 
@@ -137,6 +137,31 @@ my %otherConv = (
137
137
 
138
138
  my $secPerDay = 24 * 3600; # a useful constant
139
139
 
140
+ #------------------------------------------------------------------------------
141
+ # Split a line of CSV
142
+ # Inputs: 0) line to split, 1) delimiter
143
+ # Returns: list of items
144
+ sub SplitCSV($$)
145
+ {
146
+ my ($line, $delim) = @_;
147
+ my @toks = split /\Q$delim/, $line;
148
+ my (@vals, $v);
149
+ while (@toks) {
150
+ ($v = shift @toks) =~ s/^ +//; # remove leading spaces
151
+ if ($v =~ s/^"//) {
152
+ # quoted value must end in an odd number of quotes
153
+ while ($v !~ /("+)\s*$/ or not length($1) & 1) {
154
+ last unless @toks;
155
+ $v .= $delim . shift @toks;
156
+ }
157
+ $v =~ s/"\s*$//; # remove trailing quote and whitespace
158
+ $v =~ s/""/"/g; # un-escape quotes
159
+ }
160
+ push @vals, $v;
161
+ }
162
+ return @vals;
163
+ }
164
+
140
165
  #------------------------------------------------------------------------------
141
166
  # Load GPS track log file
142
167
  # Inputs: 0) ExifTool ref, 1) track log data or file name
@@ -281,7 +306,7 @@ sub LoadTrackLog($$;$)
281
306
  $format = 'Bramor';
282
307
  } elsif (((/\b(GPS)?Date/i and /\b(GPS)?(Date)?Time/i) or /\bTime\(seconds\)/i) and /\Q$csvDelim/) {
283
308
  chomp;
284
- @csvHeadings = split /\Q$csvDelim/;
309
+ @csvHeadings = SplitCSV($_, $csvDelim);
285
310
  my $isColumbus = ($csvHeadings[0] and $csvHeadings[0] eq 'INDEX'); # (Columbus GPS logger)
286
311
  $format = 'CSV';
287
312
  # convert recognized headings to our parameter names
@@ -382,7 +407,8 @@ sub LoadTrackLog($$;$)
382
407
  # parse attributes (eg. GPX 'lat' and 'lon')
383
408
  # (note: ignore namespace prefixes if they exist)
384
409
  if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) {
385
- my $tag = $xmlTag{lc $2} || $userTag{lc $2};
410
+ my $tag = $xmlTag{lc $2};
411
+ $tag = $userTag{lc $2} unless defined $tag;
386
412
  if ($tag) {
387
413
  $$fix{$tag} = $4;
388
414
  if ($keyCategory{$tag}) {
@@ -399,7 +425,8 @@ sub LoadTrackLog($$;$)
399
425
  # loop through XML elements
400
426
  while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) {
401
427
  $tok = lc $4;
402
- my $tag = $xmlTag{$tok} || $userTag{$tok};
428
+ my $tag = $xmlTag{$tok};
429
+ $tag = $userTag{$tok} unless defined $tag;
403
430
  # parse as a simple property if this element has a value
404
431
  if (defined $tag and not $tag) {
405
432
  # a containing property was opened or closed
@@ -530,7 +557,7 @@ DoneFix: $isDate = 1;
530
557
  goto DoneFix; # save this fix
531
558
  } elsif ($format eq 'CSV') {
532
559
  chomp;
533
- my @vals = split /\Q$csvDelim/;
560
+ my @vals = SplitCSV($_, $csvDelim);
534
561
  #
535
562
  # CSV format output of GPS/IMU POS system
536
563
  # Date* - date in DD/MM/YYYY format
@@ -1557,8 +1584,7 @@ sub ConvertGeosync($$)
1557
1584
  # Returns: UTC time string with fractional seconds
1558
1585
  sub PrintFixTime($)
1559
1586
  {
1560
- my $time = $_[0] + 0.0005; # round off to nearest ms
1561
- my $fsec = int(($time - int($time)) * 1000);
1587
+ my $time = shift;
1562
1588
  return Image::ExifTool::ConvertUnixTime($time, undef, 3) . ' UTC';
1563
1589
  }
1564
1590
 
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.52';
68
+ $VERSION = '4.53';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -576,6 +576,7 @@ sub GetAFPointGrid($$;$);
576
576
  '00 40 2D 88 2C 40 00 06' => 'Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18NII)', #JD
577
577
  'F5 40 2C 8A 2C 40 40 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) Macro (B003)',
578
578
  'F0 3F 2D 8A 2C 40 DF 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)',
579
+ 'E0 40 2D 98 2C 41 DF 0E' => 'Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)', #github385 (D90)
579
580
  'E0 40 2D 98 2C 41 DF 4E' => 'Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)', # (removed AF designation, ref 37)
580
581
  '07 40 2F 44 2C 34 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
581
582
  '07 40 30 45 2D 35 03 02.1' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
@@ -9389,7 +9390,7 @@ my %nikonFocalConversions = (
9389
9390
  %binaryDataAttrs,
9390
9391
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9391
9392
  NOTES => 'These tags are used by the Z6III.',
9392
- DATAMEMBER => [ 360, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
9393
+ DATAMEMBER => [ 360, 364, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
9393
9394
  IS_SUBDIR => [ 1255 ],
9394
9395
  360 => {
9395
9396
  Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
@@ -9399,6 +9400,7 @@ my %nikonFocalConversions = (
9399
9400
  364 => {
9400
9401
  Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9401
9402
  PrintConv => \%highFrameRateZ9,
9403
+ Hook => '$varSize += 4 if $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "02.00"',
9402
9404
  },
9403
9405
  444 => {
9404
9406
  Name => 'MultipleExposureMode',
@@ -10325,7 +10325,7 @@ ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
10325
10325
  if ($tag eq 'ipco' and not $$et{IsItemProperty}) {
10326
10326
  $$et{ItemPropertyContainer} = [ \%dirInfo, $subTable, $proc ];
10327
10327
  $et->VPrint(0,"$$et{INDENT}\[Process ipco box later]");
10328
- } else {
10328
+ } elsif ($fast < 2 or not $$tagInfo{MakerNotes}) {
10329
10329
  $et->ProcessDirectory(\%dirInfo, $subTable, $proc);
10330
10330
  }
10331
10331
  }
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf $configFile @configFiles $noConfig);
31
31
 
32
- $VERSION = '13.47';
32
+ $VERSION = '13.48';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -1045,8 +1045,8 @@ $testLen = 1024; # number of bytes to read when testing for magic number
1045
1045
  # file types with weak magic number recognition
1046
1046
  my %weakMagic = ( MP3 => 1 );
1047
1047
 
1048
- # file types that are determined by the process proc when FastScan == 3
1049
- # (when done, the process proc must exit after SetFileType if FastScan is 3)
1048
+ # file types that are determined by the process proc when FastScan > 2
1049
+ # (when done, the process proc must exit after SetFileType if FastScan is > 2)
1050
1050
  my %processType = map { $_ => 1 } qw(JPEG TIFF XMP AIFF EXE Font PS Real VCard TXT);
1051
1051
 
1052
1052
  # Compact/XMPShorthand option settings
@@ -3015,8 +3015,8 @@ sub ExtractInfo($;@)
3015
3015
  # save file type in member variable
3016
3016
  $$self{FILE_TYPE} = $type;
3017
3017
  $dirInfo{Parent} = ($type eq 'TIFF') ? $tiffType : $type;
3018
- # don't process the file when FastScan == 3
3019
- if ($fast == 3 and not $processType{$type}) {
3018
+ # don't process the file when FastScan > 2
3019
+ if ($fast > 2 and not $processType{$type}) {
3020
3020
  unless ($weakMagic{$type} and (not $ext or $ext ne $type)) {
3021
3021
  $self->SetFileType($dirInfo{Parent});
3022
3022
  }
@@ -7256,7 +7256,7 @@ sub ProcessJPEG($$;$)
7256
7256
  }
7257
7257
  if (not $$self{VALUE}{FileType} or ($$self{DOC_NUM} and $$options{ExtractEmbedded})) {
7258
7258
  $self->SetFileType(); # set FileType tag
7259
- return 1 if $fast == 3; # don't process file when FastScan == 3
7259
+ return 1 if $fast > 2; # don't process file when FastScan > 2
7260
7260
  $$self{LOW_PRIORITY_DIR}{IFD1} = 1; # lower priority of IFD1 tags
7261
7261
  }
7262
7262
  $$raf{NoBuffer} = 1 if $self->Options('FastScan'); # disable buffering in FastScan mode
@@ -8636,8 +8636,8 @@ sub DoProcessTIFF($$;$)
8636
8636
  my $t = ($baseType eq 'TIFF' or $fileType =~ /RAW/) ? $fileType : undef;
8637
8637
  $self->SetFileType($t);
8638
8638
  }
8639
- # don't process file if FastScan == 3
8640
- return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} == 3;
8639
+ # don't process file if FastScan > 2
8640
+ return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} > 2;
8641
8641
  }
8642
8642
  # (accommodate CR3 images which have a TIFF directory with ExifIFD at the top level)
8643
8643
  my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
@@ -9288,6 +9288,9 @@ sub HandleTag($$$$;%)
9288
9288
  }
9289
9289
  if ($tagInfo) {
9290
9290
  if ($subdir) {
9291
+ if ($$tagInfo{MakerNotes} and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} > 1) {
9292
+ return undef; # don't process maker note directories when FastScan > 1
9293
+ }
9291
9294
  my $subdirStart = $parms{Start};
9292
9295
  my $subdirLen = $parms{Size};
9293
9296
  if ($$tagInfo{RawConv} and not $$tagInfo{Writable}) {
@@ -1107,7 +1107,7 @@ OPTIONS
1107
1107
 
1108
1108
  produces output like this:
1109
1109
 
1110
- -- Generated by ExifTool 13.47 --
1110
+ -- Generated by ExifTool 13.48 --
1111
1111
  File: a.jpg - 2003:10:31 15:44:19
1112
1112
  (f/5.6, 1/60s, ISO 100)
1113
1113
  File: b.jpg - 2006:05:23 11:57:38
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exiftool-vendored.exe",
3
- "version": "13.47.0",
3
+ "version": "13.48.0",
4
4
  "description": "Vendored win32 ExifTool for Node.js",
5
5
  "main": "./index.js",
6
6
  "homepage": "https://github.com/photostructure/exiftool-vendored.exe#readme",