exiftool-vendored.exe 13.17.0 → 13.26.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.
Files changed (49) hide show
  1. package/bin/README.txt +14 -14
  2. package/bin/exiftool.exe +0 -0
  3. package/bin/exiftool_files/exiftool.pl +117 -46
  4. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +12 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  6. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +3 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +190 -29
  9. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +22 -11
  10. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +2 -9
  11. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +3 -3
  13. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  14. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +86 -48
  15. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -0
  16. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +2 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +5 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +5 -1
  19. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +3 -2
  20. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +944 -1237
  21. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/PCAP.pm +462 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +10 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +92 -29
  25. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +2 -2
  28. package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +713 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +24 -11
  30. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +78 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +371 -324
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +75 -27
  33. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +15 -6
  34. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +33 -14
  35. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +5067 -4967
  36. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +457 -336
  37. package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +3 -3
  38. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +4 -4
  39. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -4
  41. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +58 -5
  43. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +14 -13
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +55 -20
  45. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +7 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool.pm +63 -29
  47. package/bin/exiftool_files/lib/Image/ExifTool.pod +84 -86
  48. package/bin/exiftool_files/windows_exiftool.txt +96 -72
  49. package/package.json +4 -4
@@ -18,7 +18,7 @@ use strict;
18
18
  use vars qw($VERSION);
19
19
  use Image::ExifTool qw(:DataAccess :Utils);
20
20
 
21
- $VERSION = '1.02';
21
+ $VERSION = '1.03';
22
22
 
23
23
  sub ProcessProtobuf($$$;$);
24
24
 
@@ -174,11 +174,11 @@ sub ProcessProtobuf($$$;$)
174
174
  my $dir = { DataPt => \$buff, Pos => 0 };
175
175
  my $num = VarInt($dir);
176
176
  my $den = VarInt($dir);
177
- $val = (defined $num and $den) ? "$num/$den" : 'err';
177
+ $val = (defined $num and $den) ? $num/$den : 'err';
178
178
  } else {
179
179
  $val = ReadValue(\$buff, 0, $$tagInfo{Format}, undef, length($buff));
180
180
  }
181
- } elsif ($type == 0) {
181
+ } elsif ($type == 0) { # varInt
182
182
  $val = $buff;
183
183
  my $hex = sprintf('%x', $val);
184
184
  if (length($hex) == 16 and $hex =~ /^ffffffff/) {
@@ -188,9 +188,9 @@ sub ProcessProtobuf($$$;$)
188
188
  my $signed = ($val & 1) ? -($val >> 1)-1 : ($val >> 1);
189
189
  $val .= " (0x$hex, signed $signed)";
190
190
  }
191
- } elsif ($type == 1) {
191
+ } elsif ($type == 1) { # 64-bit number
192
192
  $val = '0x' . unpack('H*', $buff) . ' (double ' . GetDouble(\$buff,0) . ')';
193
- } elsif ($type == 2) {
193
+ } elsif ($type == 2) { # string, bytes or protobuf
194
194
  if ($$tagInfo{SubDirectory}) {
195
195
  # (fall through to process known SubDirectory)
196
196
  } elsif ($$tagInfo{IsProtobuf}) {
@@ -203,14 +203,27 @@ sub ProcessProtobuf($$$;$)
203
203
  ProcessProtobuf($et, \%subdir, $tagTbl, "$prefix$id-");
204
204
  $$et{INDENT} = substr($$et{INDENT}, 0, -2);
205
205
  next;
206
- } elsif ($buff !~ /[^\x20-\x7e]/) {
207
- $val = $buff; # assume this is an ASCII string
208
- } elsif (length($buff) % 4) {
209
- $val = '0x' . unpack('H*', $buff);
210
206
  } else {
211
- $val = '0x' . join(' ', unpack('(H8)*', $buff)); # (group in 4-byte blocks)
207
+ # check for rational value (2 varInt values)
208
+ my $rat;
209
+ my %dir = ( DataPt => \$buff, Pos => 0 );
210
+ my $num = VarInt(\%dir);
211
+ if (defined $num) {
212
+ my $denom = VarInt(\%dir);
213
+ $rat = " (rational $num/$denom)" if $denom and $dir{Pos} == length($buff);
214
+ }
215
+ if ($buff !~ /[^\x20-\x7e]/) {
216
+ $val = $buff; # assume this is an ASCII string
217
+ } elsif (length($buff) % 4) {
218
+ $val = '0x' . unpack('H*', $buff);
219
+ } else {
220
+ my $n = length($buff) / 4;
221
+ # (do this instead of '(H8)*' because older Perl version didn't support this)
222
+ $val = '0x' . join(' ', unpack("(H8)$n", $buff)); # (group in 4-byte blocks)
223
+ }
224
+ $val .= $rat if $rat;
212
225
  }
213
- } elsif ($type == 5) {
226
+ } elsif ($type == 5) { # 32-bit number
214
227
  $val = '0x' . unpack('H*', $buff) . ' (int32u ' . Get32u(\$buff, 0);
215
228
  $val .= ', int32s ' . Get32s(\$buff, 0) if ord(substr($buff,3,1)) & 0x80;
216
229
  $val .= ', float ' . GetFloat(\$buff, 0) . ')';
@@ -12,9 +12,10 @@ use strict;
12
12
  use vars qw($VERSION);
13
13
  use Image::ExifTool qw(:DataAccess :Utils);
14
14
 
15
- $VERSION = '1.01';
15
+ $VERSION = '1.02';
16
16
 
17
17
  sub ProcessQualcomm($$$);
18
+ sub ProcessDualCamera($$$);
18
19
  sub MakeNameAndDesc($$);
19
20
 
20
21
  # Qualcomm format codes (ref PH (NC))
@@ -1224,6 +1225,59 @@ my @qualcommFormat = (
1224
1225
  'HJR_texture_threshold' => { },
1225
1226
  );
1226
1227
 
1228
+ %Image::ExifTool::Qualcomm::DualCamera = (
1229
+ PROCESS_PROC => \&ProcessDualCamera,
1230
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1231
+ VARS => { NO_ID => 1, NO_LOOKUP => 1 }, # too long, too many, and too obscure
1232
+ NOTES => q{
1233
+ Found in JPEG APP4 "Qualcomm Dual Camera Attributes" written by some Nokia
1234
+ phones.
1235
+ },
1236
+ 'Sensor Crop left' => 'SensorCropLeft',
1237
+ 'Sensor Crop top' => 'SensorCropTop',
1238
+ 'Sensor Crop width' => 'SensorCropWidth',
1239
+ 'Sensor Crop height' => 'SensorCropHeight',
1240
+ 'Sensor ROI Map left' => 'SensorROIMapLeft',
1241
+ 'Sensor ROI Map top' => 'SensorROIMapTop',
1242
+ 'Sensor ROI Map width' => 'SensorROIMapWidth',
1243
+ 'Sensor ROI Map height' => 'SensorROIMapHeight',
1244
+ 'CAMIF Crop left' => 'CAMIFCropLeft',
1245
+ 'CAMIF Crop top' => 'CAMIFCropTop',
1246
+ 'CAMIF Crop width' => 'CAMIFCropWidth',
1247
+ 'CAMIF Crop height' => 'CAMIFCropHeight',
1248
+ 'CAMIF ROI Map left' => 'CAMIF_ROIMapLeft',
1249
+ 'CAMIF ROI Map top' => 'CAMIF_ROIMapTop',
1250
+ 'CAMIF ROI Map width' => 'CAMIF_ROIMapWidth',
1251
+ 'CAMIF ROI Map height' => 'CAMIF_ROIMapHeight',
1252
+ 'ISP Crop left' => 'ISPCropLeft',
1253
+ 'ISP Crop top' => 'ISPCropTop',
1254
+ 'ISP Crop width' => 'ISPCropWidth',
1255
+ 'ISP Crop height' => 'ISPCropHeight',
1256
+ 'ISP ROI Map left' => 'ISP_ROIMapLeft',
1257
+ 'ISP ROI Map top' => 'ISP_ROIMapTop',
1258
+ 'ISP ROI Map width' => 'ISP_ROIMapWidth',
1259
+ 'ISP ROI Map height' => 'ISP_ROIMapHeight',
1260
+ 'CPP Crop left' => 'CPPCropLeft',
1261
+ 'CPP Crop top' => 'CPPCropTop',
1262
+ 'CPP Crop width' => 'CPPCropWidth',
1263
+ 'CPP Crop height' => 'CPPCropHeight',
1264
+ 'CPP ROI Map left' => 'CPP_ROIMapLeft',
1265
+ 'CPP ROI Map top' => 'CPP_ROIMapTop',
1266
+ 'CPP ROI Map width' => 'CPP_ROIMapWidth',
1267
+ 'CPP ROI Map height' => 'CPP_ROIMapHeight',
1268
+ 'DDM Crop left' => 'DDMCropLeft',
1269
+ 'DDM Crop top' => 'DDMCropTop',
1270
+ 'DDM Crop width' => 'DDMCropWidth',
1271
+ 'DDM Crop height' => 'DDMCropHeight',
1272
+ 'Focal length Ratio' => 'FocalLengthRatio',
1273
+ 'Current pipeline mirror flip setting' => 'CurrentPipelineMirrorFlipSetting',
1274
+ 'Current pipeline rotation setting' => 'CurrentPipelineRotationSetting',
1275
+ 'AF ROI left' => 'AF_ROILeft',
1276
+ 'AF ROI top' => 'AF_ROITop',
1277
+ 'AF ROI width' => 'AF_ROIWidth',
1278
+ 'AF ROI height' => 'AF_ROIHeight',
1279
+ );
1280
+
1227
1281
  # generate tag names and descriptions
1228
1282
  {
1229
1283
  local $_;
@@ -1258,6 +1312,29 @@ sub MakeNameAndDesc($$)
1258
1312
  return 1;
1259
1313
  }
1260
1314
 
1315
+ #------------------------------------------------------------------------------
1316
+ # Process Qualcomm Dual Camera APP4 metadata (ref PH)
1317
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
1318
+ # Returns: 1 on success
1319
+ sub ProcessDualCamera($$$)
1320
+ {
1321
+ my ($et, $dirInfo, $tagTablePtr) = @_;
1322
+ my $dataPt = $$dirInfo{DataPt};
1323
+ my $dataPos = $$dirInfo{DataPos};
1324
+ my $pos = $$dirInfo{DirStart};
1325
+
1326
+ $et->VerboseDir('Qualcomm Dual Camera', undef, $$dirInfo{DirLen});
1327
+ pos($$dataPt) = $pos;
1328
+ while ($$dataPt =~ /\x0a/g) {
1329
+ my $str = substr($$dataPt, $pos, pos($$dataPt) - $pos - 1);
1330
+ next unless $str =~ /^(.*?)\s*=\s*(.*)/;
1331
+ my ($tag, $val) = ($1, $2);
1332
+ $et->HandleTag($tagTablePtr, $tag, $val, MakeTagInfo => 1);
1333
+ $pos = pos($$dataPt);
1334
+ }
1335
+ return 1;
1336
+ }
1337
+
1261
1338
  #------------------------------------------------------------------------------
1262
1339
  # Process Qualcomm APP7 metadata (ref PH)
1263
1340
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref