exiftool-vendored.exe 12.44.0 → 12.49.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 (56) hide show
  1. package/bin/exiftool_files/Changes +112 -3
  2. package/bin/exiftool_files/README +45 -44
  3. package/bin/exiftool_files/config_files/acdsee.config +2 -1
  4. package/bin/exiftool_files/config_files/frameCount.config +56 -0
  5. package/bin/exiftool_files/config_files/tiff_version.config +1 -1
  6. package/bin/exiftool_files/exiftool.pl +77 -66
  7. package/bin/exiftool_files/fmt_files/gpx.fmt +3 -0
  8. package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +3 -0
  9. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +6 -2
  10. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +17 -9
  11. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +33 -15
  12. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +8 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +7 -8
  14. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +9 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +11 -7
  16. package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +17 -3
  17. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +4 -3
  18. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +4 -2
  19. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +31 -5
  20. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +2 -2
  21. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +3 -2
  22. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +141 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +6 -6
  24. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +55 -8
  25. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +9 -3
  26. package/bin/exiftool_files/lib/Image/ExifTool/MISB.pm +494 -0
  27. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +3 -1
  28. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +24 -16
  29. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +39 -31
  30. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +5 -3
  31. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +21 -4
  32. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
  33. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +29 -3
  34. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +113 -8
  35. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +44 -6
  36. package/bin/exiftool_files/lib/Image/ExifTool/README +1 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +106 -9
  38. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +2 -2
  39. package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +27 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +37 -13
  41. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +8 -3
  42. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +188 -7
  43. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +3051 -2732
  44. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +3 -4
  45. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +2 -3
  46. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +3 -3
  47. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
  48. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +100 -23
  49. package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +2 -6
  50. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +359 -0
  51. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +10 -3
  52. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +76 -58
  53. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +11 -4
  54. package/bin/exiftool_files/lib/Image/ExifTool.pm +75 -15
  55. package/bin/exiftool_files/lib/Image/ExifTool.pod +61 -57
  56. package/package.json +2 -2
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::PLIST;
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # Apple iPhone metadata (ref PH)
21
21
  %Image::ExifTool::Apple::Main = (
@@ -80,7 +80,7 @@ $VERSION = '1.06';
80
80
  # 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
81
81
  # 0x000f - int32s: 2,3
82
82
  # 0x0010 - int32s: 1
83
- 0x0011 => {
83
+ 0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565)
84
84
  Name => 'MediaGroupUUID', #NealKrawetz private communication
85
85
  # (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
86
86
  Writable => 'string',
@@ -91,6 +91,10 @@ $VERSION = '1.06';
91
91
  Writable => 'string',
92
92
  },
93
93
  # 0x0016 - string[29]: "AXZ6pMTOh2L+acSh4Kg630XCScoO\0"
94
+ 0x0017 => { #forum13565 (only valid if MediaGroupUUID exists)
95
+ Name => 'LivePhotoVideoIndex',
96
+ Notes => 'divide by RunTimeScale to get time in seconds',
97
+ },
94
98
  # 0x0017 - int32s: 0,8192
95
99
  # 0x0019 - int32s: 0,2,128
96
100
  # 0x001a - string[6]: "q825s\0"
@@ -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.47';
38
+ $VERSION = '3.49';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -501,11 +501,13 @@ been decoded. Use the L<Unknown|../ExifTool.html#Unknown> (-u) option to extrac
501
501
  },
502
502
  GeoTiff => q{
503
503
  ExifTool extracts the following tags from GeoTIFF images. See
504
- L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html> for the
505
- complete GeoTIFF specification. Also included in the table below are
506
- ChartTIFF tags (see L<http://www.charttiff.com/whitepapers.shtml>). GeoTIFF
507
- tags are not writable individually, but they may be copied en mass via the
508
- block tags GeoTiffDirectory, GeoTiffDoubleParams and GeoTiffAsciiParams.
504
+ L<https://web.archive.org/web/20070820121549/http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
505
+ for the complete GeoTIFF specification. Also included in the table below
506
+ are ChartTIFF tags (see
507
+ L<https://web.archive.org/web/20020828193928/http://www.charttiff.com/whitepapers.shtml>).
508
+ GeoTIFF tags are not writable individually, but they may be copied en mass
509
+ via the block tags GeoTiffDirectory, GeoTiffDoubleParams and
510
+ GeoTiffAsciiParams.
509
511
  },
510
512
  JFIF => q{
511
513
  The following information is extracted from the JPEG JFIF header. See
@@ -1324,9 +1326,12 @@ TagID: foreach $tagID (@keys) {
1324
1326
  if ($writable) {
1325
1327
  foreach ('PrintConv','ValueConv') {
1326
1328
  next unless $$tagInfo{$_};
1327
- next if $$tagInfo{$_ . 'Inv'};
1328
- next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
1329
- next if $$tagInfo{WriteAlso};
1329
+ next if defined $$tagInfo{$_ . 'Inv'};
1330
+ # (undefined inverse conversion overrides hash lookup)
1331
+ unless (exists $$tagInfo{$_ . 'Inv'}) {
1332
+ next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
1333
+ next if $$tagInfo{WriteAlso};
1334
+ }
1330
1335
  if ($_ eq 'ValueConv') {
1331
1336
  undef $writable;
1332
1337
  } else {
@@ -2570,6 +2575,9 @@ sub WriteTagNames($$)
2570
2575
  $tip = '';
2571
2576
  # use copyright symbol in QuickTime UserData tags
2572
2577
  $tagIDstr =~ s/^"\\xa9/"&copy;/;
2578
+ # escape necessary characters in html
2579
+ $tagIDstr =~ s/>/&gt;/g;
2580
+ $tagIDstr =~ s/</&lt;/g;
2573
2581
  }
2574
2582
  # add tooltip for special writable attributes
2575
2583
  my $wtip = '';
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.59';
91
+ $VERSION = '4.62';
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)
@@ -480,6 +480,7 @@ $VERSION = '4.59';
480
480
  255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
481
481
  255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
482
482
  255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
483
+ 255.3 => 'Yongnuo YN 50mm f/1.8', #50
483
484
  368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
484
485
  368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
485
486
  368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
@@ -493,6 +494,7 @@ $VERSION = '4.59';
493
494
  '368.10' => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
494
495
  '368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
495
496
  '368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
497
+ '368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
496
498
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
497
499
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
498
500
  489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
@@ -602,18 +604,24 @@ $VERSION = '4.59';
602
604
  '61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
603
605
  '61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
604
606
  '61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
605
- '61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
606
- '61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
607
+ '61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
608
+ '61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
607
609
  '61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
608
- '61182.30' => 'Canon RF 16mm F2.8 STM', #42
609
- '61182.31' => 'Canon RF 400mm F2.8L IS USM', #IB
610
- '61182.32' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
611
- '61182.33' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
612
- '61182.34' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
613
- # we need the RFLensType values for the following...
614
- '61182.35' => 'Canon RF 800mm F5.6L IS USM', #PH (NC)
615
- '61182.36' => 'Canon RF 1200mm F8L IS USM', #PH (NC)
616
- '61182.37' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
610
+ '61182.30' => 'Canon RF 24mm F1.8 MACRO IS STM', #42
611
+ '61182.31' => 'Canon RF 16mm F2.8 STM', #42
612
+ '61182.32' => 'Canon RF 400mm F2.8L IS USM', #IB
613
+ '61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
614
+ '61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
615
+ '61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
616
+ '61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
617
+ '61182.37' => 'Canon RF 800mm F5.6L IS USM', #42
618
+ '61182.38' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
619
+ '61182.39' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
620
+ '61182.40' => 'Canon RF 1200mm F8L IS USM', #42
621
+ '61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
622
+ '61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
623
+ # we need the RFLensType values for the following...
624
+ '61182.43' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
617
625
  65535 => 'n/a',
618
626
  );
619
627
 
@@ -6812,14 +6820,22 @@ my %ciMaxFocal = (
6812
6820
  281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
6813
6821
  282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
6814
6822
  283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
6815
- 284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
6816
- 285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
6823
+ 284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
6824
+ 285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
6817
6825
  286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
6826
+ 287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
6818
6827
  288 => 'Canon RF 16mm F2.8 STM', #42
6819
6828
  289 => 'Canon RF 400mm F2.8L IS USM', #IB
6820
6829
  290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
6821
6830
  291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
6822
6831
  292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
6832
+ 295 => 'Canon RF 800mm F5.6L IS USM', #42
6833
+ 296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
6834
+ 297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
6835
+ 298 => 'Canon RF 1200mm F8L IS USM', #42
6836
+ 299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
6837
+ 300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
6838
+ 302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
6823
6839
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6824
6840
  },
6825
6841
  },
@@ -6864,6 +6880,7 @@ my %ciMaxFocal = (
6864
6880
  8 => '4:5',
6865
6881
  12 => '3:2 (APS-H crop)', #IB
6866
6882
  13 => '3:2 (APS-C crop)', #IB
6883
+ 258 => '4:3 crop', #PH (NC)
6867
6884
  },
6868
6885
  },
6869
6886
  # (could use better names for these, or the Crop tags above, or both)
@@ -9393,8 +9410,9 @@ my %filterConv = (
9393
9410
  # numbers from the previous image, so we need special logic
9394
9411
  # to handle the FileIndex wrap properly)
9395
9412
  $val[1] == 10000 and $val[1] = 1, ++$val[0];
9396
- return sprintf("%.3d-%.4d",@val);
9413
+ return sprintf("%.3d%.4d",@val);
9397
9414
  },
9415
+ PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
9398
9416
  },
9399
9417
  );
9400
9418
 
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::Canon;
23
23
 
24
- $VERSION = '1.58';
24
+ $VERSION = '1.59';
25
25
 
26
26
  sub WriteCRW($$);
27
27
  sub ProcessCanonRaw($$$);
@@ -625,6 +625,13 @@ sub ProcessCanonRaw($$$)
625
625
  $raf->Seek($blockStart+$blockSize-4, 0) or return 0;
626
626
  $raf->Read($buff, 4) == 4 or return 0;
627
627
  my $dirOffset = Get32u(\$buff,0) + $blockStart;
628
+ # avoid infinite recursion
629
+ $$et{ProcessedCanonRaw} or $$et{ProcessedCanonRaw} = { };
630
+ if ($$et{ProcessedCanonRaw}{$dirOffset}) {
631
+ $et->Warn("Not processing double-referenced $$dirInfo{DirName} directory");
632
+ return 0;
633
+ }
634
+ $$et{ProcessedCanonRaw}{$dirOffset} = 1;
628
635
  $raf->Seek($dirOffset, 0) or return 0;
629
636
  $raf->Read($buff, 2) == 2 or return 0;
630
637
  my $entries = Get16u(\$buff,0); # get number of entries in directory
@@ -23,7 +23,7 @@ use vars qw($VERSION);
23
23
  use Image::ExifTool qw(:DataAccess :Utils);
24
24
  use Image::ExifTool::Canon;
25
25
 
26
- $VERSION = '1.33';
26
+ $VERSION = '1.34';
27
27
 
28
28
  sub ProcessCanonVRD($$;$);
29
29
  sub WriteCanonVRD($$;$);
@@ -2046,17 +2046,16 @@ sub ProcessCanonVRD($$;$)
2046
2046
  return 0;
2047
2047
  }
2048
2048
  }
2049
- # exit quickly if writing and no CanonVRD tags are being edited
2050
- if ($outfile and not exists $$et{EDIT_DIRS}{CanonVRD}) {
2051
- print $out "$$et{INDENT} [nothing changed]\n" if $verbose;
2052
- return 1 if $outfile eq $dataPt;
2053
- return Write($outfile, $$dataPt) ? 1 : -1;
2054
- }
2055
-
2056
2049
  my $vrdType = 'VRD';
2057
2050
 
2058
2051
  if ($outfile) {
2059
2052
  $verbose and not $created and print $out " Rewriting CanonVRD trailer\n";
2053
+ # exit quickly if writing and no CanonVRD tags are being edited
2054
+ unless (exists $$et{EDIT_DIRS}{CanonVRD}) {
2055
+ print $out "$$et{INDENT} [nothing changed in CanonVRD]\n" if $verbose;
2056
+ return 1 if $outfile eq $dataPt;
2057
+ return Write($outfile, $$dataPt) ? 1 : -1;
2058
+ }
2060
2059
  # delete CanonVRD information if specified
2061
2060
  my $doDel = $$et{DEL_GROUP}{CanonVRD};
2062
2061
  unless ($doDel) {
@@ -21,7 +21,7 @@ use strict;
21
21
  use vars qw($VERSION);
22
22
  use Image::ExifTool qw(:DataAccess :Utils);
23
23
 
24
- $VERSION = '1.17';
24
+ $VERSION = '1.18';
25
25
 
26
26
  sub ProcessPEResources($$);
27
27
  sub ProcessPEVersion($$);
@@ -1233,6 +1233,14 @@ sub ProcessEXE($$)
1233
1233
  $tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO');
1234
1234
  if ($1 eq "\xca\xfe\xba\xbe") {
1235
1235
  SetByteOrder('MM');
1236
+ my $ver = Get32u(\$buff, 4);
1237
+ # Java bytecode .class files have the same magic number, so we need to look deeper
1238
+ # (ref https://github.com/file/file/blob/master/magic/Magdir/cafebabe#L6-L15)
1239
+ if ($ver > 30) {
1240
+ # this is Java bytecode
1241
+ $et->SetFileType('Java bytecode', 'application/java-byte-code', 'class');
1242
+ return 1;
1243
+ }
1236
1244
  $et->SetFileType('Mach-O fat binary executable', undef, '');
1237
1245
  return 1 if $fast3;
1238
1246
  my $count = Get32u(\$buff, 4); # get architecture count
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
56
56
  use Image::ExifTool qw(:DataAccess :Utils);
57
57
  use Image::ExifTool::MakerNotes;
58
58
 
59
- $VERSION = '4.40';
59
+ $VERSION = '4.42';
60
60
 
61
61
  sub ProcessExif($$$);
62
62
  sub WriteExif($$$);
@@ -2080,6 +2080,7 @@ my %opcodeInfo = (
2080
2080
  Groups => { 2 => 'Time' },
2081
2081
  Notes => 'time zone for ModifyDate',
2082
2082
  Writable => 'string',
2083
+ Shift => 'Time',
2083
2084
  PrintConvInv => q{
2084
2085
  return "+00:00" if $val =~ /\d{2}Z$/;
2085
2086
  return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
@@ -2091,6 +2092,7 @@ my %opcodeInfo = (
2091
2092
  Groups => { 2 => 'Time' },
2092
2093
  Notes => 'time zone for DateTimeOriginal',
2093
2094
  Writable => 'string',
2095
+ Shift => 'Time',
2094
2096
  PrintConvInv => q{
2095
2097
  return "+00:00" if $val =~ /\d{2}Z$/;
2096
2098
  return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
@@ -2102,6 +2104,7 @@ my %opcodeInfo = (
2102
2104
  Groups => { 2 => 'Time' },
2103
2105
  Notes => 'time zone for CreateDate',
2104
2106
  Writable => 'string',
2107
+ Shift => 'Time',
2105
2108
  PrintConvInv => q{
2106
2109
  return "+00:00" if $val =~ /\d{2}Z$/;
2107
2110
  return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
@@ -4080,7 +4083,7 @@ my %opcodeInfo = (
4080
4083
  WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
4081
4084
  },
4082
4085
  0xcd30 => { # DNG 1.6
4083
- Name => 'SemanticInstanceIFD',
4086
+ Name => 'SemanticInstanceID',
4084
4087
  # Writable => 'string',
4085
4088
  WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
4086
4089
  },
@@ -4842,10 +4845,10 @@ my %subSecConv = (
4842
4845
  Writable => 1,
4843
4846
  Protected => 1,
4844
4847
  WriteAlso => {
4845
- GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
4846
- GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
4847
- GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
4848
- GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
4848
+ GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef',
4849
+ GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef',
4850
+ GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef',
4851
+ GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef',
4849
4852
  },
4850
4853
  PrintConvInv => q{
4851
4854
  return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
@@ -6012,7 +6015,8 @@ sub ProcessExif($$$)
6012
6015
  my $tagID = Get16u($dataPt, $entry);
6013
6016
  my $format = Get16u($dataPt, $entry+2);
6014
6017
  my $count = Get32u($dataPt, $entry+4);
6015
- if ($format < 1 or $format > 13) {
6018
+ # (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
6019
+ if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
6016
6020
  if ($mapFmt and $$mapFmt{$format}) {
6017
6021
  $format = $$mapFmt{$format};
6018
6022
  } else {
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.08';
17
+ $VERSION = '1.09';
18
18
 
19
19
  sub ProcessBitStream($$$);
20
20
 
@@ -29,7 +29,19 @@ sub ProcessBitStream($$$);
29
29
  SubDirectory => { TagTable => 'Image::ExifTool::FLAC::StreamInfo' },
30
30
  },
31
31
  1 => { Name => 'Padding', Binary => 1, Unknown => 1 },
32
- 2 => { Name => 'Application', Binary => 1, Unknown => 1 },
32
+ 2 => [{ # (see forum14064)
33
+ Name => 'Application_riff',
34
+ Condition => '$$valPt =~ /^riff(?!RIFF)/', # (all "riff" blocks but header)
35
+ SubDirectory => {
36
+ TagTable => 'Image::ExifTool::RIFF::Main',
37
+ ByteOrder => 'LittleEndian',
38
+ Start => 4,
39
+ },
40
+ },{
41
+ Name => 'ApplicationUnknown',
42
+ Binary => 1,
43
+ Unknown => 1,
44
+ }],
33
45
  3 => { Name => 'SeekTable', Binary => 1, Unknown => 1 },
34
46
  4 => {
35
47
  Name => 'VorbisComment',
@@ -255,9 +267,11 @@ sub ProcessFLAC($$)
255
267
  print $out "FLAC metadata block, type $tag:\n";
256
268
  $et->VerboseDump(\$buff, DataPos => $raf->Tell() - $size);
257
269
  }
258
- $et->HandleTag($tagTablePtr, $tag, undef,
270
+ $et->HandleTag($tagTablePtr, $tag, $buff,
259
271
  DataPt => \$buff,
260
272
  DataPos => $raf->Tell() - $size,
273
+ Start => 0,
274
+ Size => $size,
261
275
  );
262
276
  last if $last; # all done if is set
263
277
  }
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
24
24
  use Image::ExifTool::Exif;
25
25
  use Image::ExifTool::GPS;
26
26
 
27
- $VERSION = '1.20';
27
+ $VERSION = '1.21';
28
28
 
29
29
  sub ProcessFLIR($$;$);
30
30
  sub ProcessFLIRText($$$);
@@ -99,7 +99,8 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
99
99
  NOTES => q{
100
100
  Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
101
101
  images. These tags may also be extracted from the first frame of an FLIR
102
- SEQ file, or all frames if the ExtractEmbedded option is used.
102
+ SEQ file, or all frames if the ExtractEmbedded option is used. Setting
103
+ ExtractEmbedded to 2 also the raw thermal data from all frames.
103
104
  },
104
105
  "_header" => {
105
106
  Name => 'FFFHeader',
@@ -1551,7 +1552,7 @@ sub ProcessFLIR($$;$)
1551
1552
  $$et{INDENT}, $i, $recType, $recPos, $recLen;
1552
1553
 
1553
1554
  # skip RawData records for embedded documents
1554
- if ($recType == 1 and $$et{DOC_NUM}) {
1555
+ if ($recType == 1 and $$et{DOC_NUM} and $et->Options('ExtractEmbedded') < 2) {
1555
1556
  $raf->Seek($base+$recPos+$recLen) or $success = 0, last;
1556
1557
  next;
1557
1558
  }
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::ASF; # for GetGUID()
23
23
 
24
- $VERSION = '1.40';
24
+ $VERSION = '1.41';
25
25
 
26
26
  sub ProcessFPX($$);
27
27
  sub ProcessFPXR($$$);
@@ -1338,7 +1338,9 @@ sub ConvertDTTM($)
1338
1338
  my $hr = ($val >> 6) & 0x1f;
1339
1339
  my $min = ($val & 0x3f);
1340
1340
  $yr += 1900 if $val;
1341
- return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:00%s",$yr,$mon,$day,$hr,$min,$val ? 'Z' : '');
1341
+ # ExifTool 12.48 dropped the "Z" on the time here because a test .doc
1342
+ # file written by Word 2011 on Mac certainly used local time here
1343
+ return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:00",$yr,$mon,$day,$hr,$min);
1342
1344
  }
1343
1345
 
1344
1346
  #------------------------------------------------------------------------------
@@ -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.82';
34
+ $VERSION = '1.84';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -254,6 +254,23 @@ my %faceCategories = (
254
254
  0x2e0 => '-4 (weakest)', #10 (-4)
255
255
  },
256
256
  },
257
+ 0x100f => { #PR158
258
+ Name => 'Clarity',
259
+ Writable => 'int32s', #PH
260
+ PrintConv => {
261
+ -5000 => '-5',
262
+ -4000 => '-4',
263
+ -3000 => '-3',
264
+ -2000 => '-2',
265
+ -1000 => '-1',
266
+ 0 => '0',
267
+ 1000 => '1',
268
+ 2000 => '2',
269
+ 3000 => '3',
270
+ 4000 => '4',
271
+ 5000 => '5',
272
+ },
273
+ },
257
274
  0x1010 => {
258
275
  Name => 'FujiFlashMode',
259
276
  Writable => 'int16u',
@@ -444,7 +461,7 @@ my %faceCategories = (
444
461
  PrintConv => { 0 => 'Off', 1 => 'On' },
445
462
  },
446
463
  0x1047 => { #12
447
- Name => 'GrainEffect',
464
+ Name => 'GrainEffectRoughness',
448
465
  Writable => 'int32s',
449
466
  PrintConv => {
450
467
  0 => 'Off',
@@ -469,6 +486,15 @@ my %faceCategories = (
469
486
  PrintConvInv => '$val + 0',
470
487
  },
471
488
  # 0x104b - BWAdjustment for Green->Magenta (forum10800)
489
+ 0x104c => { #PR158
490
+ Name => "GrainEffectSize",
491
+ Writable => 'int16u', #PH
492
+ PrintConv => {
493
+ 0 => 'Off',
494
+ 16 => 'Small',
495
+ 32 => 'Large',
496
+ },
497
+ },
472
498
  0x104d => { #forum9634
473
499
  Name => 'CropMode',
474
500
  Writable => 'int16u',
@@ -763,8 +789,8 @@ my %faceCategories = (
763
789
  },
764
790
  PrintConvInv => '$val=~/(0x[0-9a-f]+)/i; hex $1',
765
791
  },
766
- 0x1447 => { Name => 'FirmwareVersion', Writable => 'string' },
767
- 0x1448 => { Name => 'FirmwareVersion2', Writable => 'string' },
792
+ 0x1447 => { Name => 'FujiModel', Writable => 'string' },
793
+ 0x1448 => { Name => 'FujiModel2', Writable => 'string' },
768
794
  0x3803 => { #forum10037
769
795
  Name => 'VideoRecordingMode',
770
796
  Groups => { 2 => 'Video' },
@@ -1046,7 +1072,7 @@ my %faceCategories = (
1046
1072
  Mask => 0x000000ff,
1047
1073
  PrintConv => {
1048
1074
  0 => 'Single',
1049
- 1 => 'Continuous Low',
1075
+ 1 => 'Continuous Low', # not used by X-H2S? (see forum13777)
1050
1076
  2 => 'Continuous High',
1051
1077
  },
1052
1078
  },
@@ -369,7 +369,7 @@ my %coordConv = (
369
369
  },
370
370
  WriteAlso => {
371
371
  'GPS:GPSLatitude' => '$val',
372
- 'GPS:GPSLatitudeRef' => '$val < 0 ? "S" : "N"',
372
+ 'GPS:GPSLatitudeRef' => '(defined $val and $val < 0) ? "S" : "N"',
373
373
  },
374
374
  ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
375
375
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
@@ -386,7 +386,7 @@ my %coordConv = (
386
386
  },
387
387
  WriteAlso => {
388
388
  'GPS:GPSLongitude' => '$val',
389
- 'GPS:GPSLongitudeRef' => '$val < 0 ? "W" : "E"',
389
+ 'GPS:GPSLongitudeRef' => '(defined $val and $val < 0) ? "W" : "E"',
390
390
  },
391
391
  Require => {
392
392
  0 => 'GPS:GPSLongitude',
@@ -25,7 +25,7 @@ use strict;
25
25
  use vars qw($VERSION);
26
26
  use Image::ExifTool qw(:DataAccess :Utils);
27
27
 
28
- $VERSION = '1.39';
28
+ $VERSION = '1.40';
29
29
 
30
30
  sub ProcessICC($$);
31
31
  sub ProcessICC_Profile($$$);
@@ -627,7 +627,7 @@ my %manuSig = ( #6
627
627
  swpt => 'SpectralWhitePoint',
628
628
  s2cp => 'StandardToCustomPcc',
629
629
  smap => 'SurfaceMap',
630
- # smwp ? (seen in some v5 samples)
630
+ # smwp ? (seen in some v5 samples [was a mistake in sample production])
631
631
 
632
632
  # the following entry represents the ICC profile header, and doesn't
633
633
  # exist as a tag in the directory. It is only in this table to provide
@@ -815,6 +815,7 @@ my %manuSig = ( #6
815
815
  Name => 'ChromaticityColorant',
816
816
  Format => 'int16u',
817
817
  PrintConv => {
818
+ 0 => 'Unknown',
818
819
  1 => 'ITU-R BT.709',
819
820
  2 => 'SMPTE RP145-1994',
820
821
  3 => 'EBU Tech.3213-E',