exiftool_vendored 13.27.0 → 13.30.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +52 -1
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/arg_files/exif2xmp.args +2 -1
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/pix4d.config +9 -8
  9. data/bin/exiftool +16 -13
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +1 -1
  11. data/bin/lib/Image/ExifTool/Canon.pm +4 -2
  12. data/bin/lib/Image/ExifTool/Exif.pm +3 -1
  13. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
  14. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  15. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  16. data/bin/lib/Image/ExifTool/JPEG.pm +20 -8
  17. data/bin/lib/Image/ExifTool/LigoGPS.pm +16 -2
  18. data/bin/lib/Image/ExifTool/MPF.pm +5 -1
  19. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  20. data/bin/lib/Image/ExifTool/Olympus.pm +6 -2
  21. data/bin/lib/Image/ExifTool/Panasonic.pm +9 -1
  22. data/bin/lib/Image/ExifTool/Parrot.pm +54 -7
  23. data/bin/lib/Image/ExifTool/Pentax.pm +122 -31
  24. data/bin/lib/Image/ExifTool/Plot.pm +36 -15
  25. data/bin/lib/Image/ExifTool/QuickTime.pm +72 -5
  26. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -6
  27. data/bin/lib/Image/ExifTool/README +5 -0
  28. data/bin/lib/Image/ExifTool/Sigma.pm +12 -4
  29. data/bin/lib/Image/ExifTool/Sony.pm +8 -3
  30. data/bin/lib/Image/ExifTool/TagLookup.pm +3743 -3730
  31. data/bin/lib/Image/ExifTool/TagNames.pod +51 -8
  32. data/bin/lib/Image/ExifTool/WriteExif.pl +2 -0
  33. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
  34. data/bin/lib/Image/ExifTool/Writer.pl +18 -7
  35. data/bin/lib/Image/ExifTool/XMP.pm +2 -2
  36. data/bin/lib/Image/ExifTool.pm +6 -5
  37. data/bin/lib/Image/ExifTool.pod +11 -11
  38. data/bin/perl-Image-ExifTool.spec +1 -1
  39. data/lib/exiftool_vendored/version.rb +1 -1
  40. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb0a184eb27a7f2bd365b24473d079bf59c21bfb5d18e4322438164364218151
4
- data.tar.gz: 39f8672fe231f2d0588920382a7cc7b5d36199a03c7a86f43d0a0161ec5ba2f8
3
+ metadata.gz: 407bb495700282a96cd7754a1e9ce3a6a7dcf4813d87e827aaee71072c30c3db
4
+ data.tar.gz: 062ad0aa55b80eec46031dbc893626cd378be12829be2cd70752170f8084e52a
5
5
  SHA512:
6
- metadata.gz: 4c618366df0c65fff73241fe27a143eacb46a64280866edc3ba23f1b7fc8a5765d605029afd58fce678e080bdbd951989ab460336623afebee96ed1e0c61d891
7
- data.tar.gz: 93d27263a8c922cea0bef3eec89779517dd040539cf9fae2e3712823fe5d48148ca86663ed469300b3677c1a99a3c9ccfc7564bbdd57150894682424db23621f
6
+ metadata.gz: aee8809f7201113e2d5d4e0af3818fc9a2d6336b6300adc85406d55bc18af20e5e6944b6370caff28e4d472a80d8d35f4e182782bfb96b96c52f73daeb8c6438
7
+ data.tar.gz: 8926eb6ea49420269786c0addbdc87e4c0fe3aa19e113369e7591bf59bed98308494de80a797c8e9b3c6941d580ade0e210680960ebc2513c13d67d446e7cd33
data/bin/Changes CHANGED
@@ -4,9 +4,60 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 13.25. (Other versions are
7
+ Note: The most recent production release is Version 13.30. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ May 22, 2025 - Version 13.30 (production release)
11
+
12
+ - Added a new Canon RF lens (thanks Norbert Wasser)
13
+ - Added some new Olympus ArtFilter values
14
+ - Added support for reading timed GPS from Transcend Drive Body Camera 70 MP4
15
+ videos
16
+ - Added a new FujiFilm AdvancedFilter value (thanks Greybeard)
17
+ - Decode maker notes from Sigma BF images
18
+ - Decode a few more Pentax AF-related tags (thanks Karsten Gieselmann)
19
+ - Extract PreviewImage and its metadata from Sigma BF MOV videos
20
+ - Allow multiple config files to be specified on the command line (but leave
21
+ undocumented for now because the config files currently included in the full
22
+ ExifTool package aren't compatible with this feature)
23
+ - Removed warning introduced in version 12.60 for an undefined tag in a -if
24
+ condition, but leave the 12.60 change that sets these tags to an empty
25
+ string when -m is used
26
+ - Patched LensID conversion to better handle a manual lens on a Sony ILCE-7M2
27
+ - Patched to avoid runtime warning when using -fast option and reading and
28
+ HEIC file via a pipe (but you will still get a seek error)
29
+ - Fixed some tag format types in the config_files/pix4d.config file
30
+ - Fixed possible "uninitialized value" warning when reading some types of Ligo
31
+ timed GPS
32
+
33
+ Apr. 27, 2025 - Version 13.29
34
+
35
+ - Changed default -geotime argument to use SubSecDateTimeOriginal if available
36
+ instead of DateTimeOriginal, instead of applying both (as was done since
37
+ ExifTool 13.18). This is more efficient, and avoids an unnecessary warning
38
+ - Properly return warnings from inverse value conversions when copying a tag
39
+ using -tagsFromFile with a tag name string
40
+ - Fixed issue where RW2 images from the Panasonic DC-S1RM2 could be corrupted
41
+ when writing
42
+
43
+ Apr. 25, 2025 - Version 13.28
44
+
45
+ - Added print conversion for Pentax AFPointValues
46
+ - Added another Pentax PictureMode value
47
+ - Decode timed GPS from GKU D900 dashcam videos
48
+ - Decode timed telemetry data from newer ARCore videos
49
+ - Decode Panasonic AFAreaSize (thanks andrewj)
50
+ - Decode ShutterCount for Canon EOS R8 and R50 (github #325)
51
+ - Decode ThumbnailTIFF from some Insta360 videos
52
+ - Decode AROT:HDRGainCurveSize from APP10
53
+ - Updated to the 2025 MPF specification
54
+ - Renamed K-3III AFPoints to AFPointsSelected and changed decoding
55
+ - Fixed bug introduced in 13.23 that could cause an incorrect parsing of XMP
56
+ attributes containing an equals sign
57
+ - Fixed issue reading timed GPS from some Insta360 videos, and issue where
58
+ writing these videos would fail
59
+ - Fixed exif2xmp.args and xmp2exif.args to properly handle EXIF:ImageUniqueID
60
+
10
61
  Apr. 8, 2025 - Version 13.27
11
62
 
12
63
  - Decode AF points for the Pentax K-3III
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.27"
53
+ "version" : "13.30"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.27'
34
+ version: '13.30'
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-13.27.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.27
112
+ gzip -dc Image-ExifTool-13.30.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.30
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -15,6 +15,7 @@
15
15
  # 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
16
16
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
17
17
  # 2025/01/16 - PH Copy Composite SubSec tags to XMP-exif
18
+ # 2025-04-22 - PH Fixed DigitalImageGUID source tag
18
19
  #
19
20
  # References: http://www.metadataworkinggroup.org/specs/
20
21
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -43,7 +44,7 @@
43
44
  -XMP-xmp:CreatorTool < EXIF:Software
44
45
  -XMP-dc:Rights < EXIF:Copyright
45
46
  -XMP-dc:Creator < EXIF:Artist
46
- -XMP-iptcExt:DigitalImageGUID < EXIF:DigImageGUID
47
+ -XMP-iptcExt:DigitalImageGUID < EXIF:ImageUniqueID
47
48
  # XMP flash information is translated by the Composite Flash tag
48
49
  -Composite:Flash < EXIF:Flash
49
50
  # overwrite GPS tags which have different formats in XMP
@@ -19,6 +19,7 @@
19
19
  # XMP-exif:DateTimeOriginal
20
20
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
21
21
  # 2025/01/16 - PH Write Composite:SubSecCreateDate from XMP-exif
22
+ # 2025-04-22 - PH Fixed DigitalImageGUID translation
22
23
  #
23
24
  # References: http://www.metadataworkinggroup.org/specs/
24
25
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -51,7 +52,7 @@
51
52
  -EXIF:Copyright < XMP-dc:Rights
52
53
  -EXIF:Artist < XMP-plus:ImageCreatorName
53
54
  -EXIF:Artist < XMP-dc:Creator
54
- -EXIF:DigImageGUID < XMP-iptcExt:DigitalImageGUID
55
+ -EXIF:ImageUniqueID < XMP-iptcExt:DigitalImageGUID
55
56
  # XMP flash information is translated by the Composite Flash tag
56
57
  -EXIF:Flash < Composite:Flash
57
58
  # generate GPS tags which have been combined into other XMP tags
@@ -8,10 +8,11 @@
8
8
  #
9
9
  # Requires: ExifTool version 7.00 or later
10
10
  #
11
- # References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032-Specifications-of-xmpcamera-tags
11
+ # References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032
12
12
  #
13
13
  # Revisions: 2017/12/08 - P. Harvey Created
14
14
  # 2020/04/02 - PH Updated to current specification
15
+ # 2025/05/01 - PH Changed some Writable types to match the spec
15
16
  #------------------------------------------------------------------------------
16
17
 
17
18
  %Image::ExifTool::UserDefined = (
@@ -40,8 +41,8 @@
40
41
  PerspectiveFocalLength => { Writable => 'real' },
41
42
  PerspectiveDistortion => { },
42
43
  IMULinearVelocity => { },
43
- GPSXYAccuracy => { Writable => 'real' },
44
- GPSZAccuracy => { Writable => 'real' },
44
+ GPSXYAccuracy => { Writable => 'rational' },
45
+ GPSZAccuracy => { Writable => 'rational' },
45
46
  FlightUUID => { },
46
47
  CentralWaveLength => { },
47
48
  BandName => { List => 'Seq' },
@@ -77,11 +78,11 @@
77
78
  Albedo => { List => 'Seq' },
78
79
  ReflectArea => { List => 'Seq' },
79
80
  CalibrationPicture => { Writable => 'integer' },
80
- GyroRate => { Writable => 'real' },
81
- IMUPitchAccuracy => { Writable => 'real' },
82
- IMURollAccuracy => { Writable => 'real' },
83
- IMUYawAccuracy => { Writable => 'real' },
84
- NominalCameraDistance => { Writable => 'real' },
81
+ GyroRate => { Writable => 'rational' },
82
+ IMUPitchAccuracy => { Writable => 'rational' },
83
+ IMURollAccuracy => { Writable => 'rational' },
84
+ IMUYawAccuracy => { Writable => 'rational' },
85
+ NominalCameraDistance => { Writable => 'rational' },
85
86
  AboveGroundAltitude => { Writable => 'real' },
86
87
  SunSensorYaw => { Writable => 'real' },
87
88
  SunSensorPitch => { Writable => 'real' },
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.27';
14
+ my $version = '13.30';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -35,9 +35,9 @@ BEGIN {
35
35
  # add lib directory at start of include path
36
36
  unshift @INC, $incDir;
37
37
  # load or disable config file if specified
38
- if (@ARGV and lc($ARGV[0]) eq '-config') {
38
+ while (@ARGV and lc($ARGV[0]) eq '-config') {
39
39
  shift;
40
- $Image::ExifTool::configFile = shift;
40
+ push @Image::ExifTool::configFiles, shift;
41
41
  }
42
42
  }
43
43
  use Image::ExifTool qw{:Public};
@@ -1396,8 +1396,7 @@ for (;;) {
1396
1396
  # add geotag/geosync/geolocate commands first
1397
1397
  unshift @newValues, pop @newValues;
1398
1398
  if (lc $2 eq 'geotag' and (not defined $addGeotime or $addGeotime) and length $val) {
1399
- $addGeotime = [ ($1 || '') . 'Geotime<DateTimeOriginal#',
1400
- ($1 || '') . 'Geotime<SubSecDateTimeOriginal#' ];
1399
+ $addGeotime = ($1 || '') . q[Geotime<${DateTimeOriginal#;$_=$self->GetValue('SubSecDateTimeOriginal','ValueConv') || $_}];
1401
1400
  }
1402
1401
  }
1403
1402
  }
@@ -1696,9 +1695,8 @@ if (@newValues) {
1696
1695
  # assume -geotime value if -geotag specified without -geotime
1697
1696
  if ($addGeotime) {
1698
1697
  AddSetTagsFile($setTagsFile = '@') unless $setTagsFile and $setTagsFile eq '@';
1699
- push @{$setTags{$setTagsFile}}, @$addGeotime;
1700
- my @a = map qq("-$_"), @$addGeotime;
1701
- $verbose and print $vout 'Arguments ',join(' and ', @a)," are assumed\n";
1698
+ push @{$setTags{$setTagsFile}}, $addGeotime;
1699
+ $verbose and print $vout qq(Using default "-$addGeotime"\n);
1702
1700
  }
1703
1701
  my %setTagsIndex;
1704
1702
  # add/delete option lookup
@@ -6054,7 +6052,7 @@ with this command:
6054
6052
 
6055
6053
  produces output like this:
6056
6054
 
6057
- -- Generated by ExifTool 13.27 --
6055
+ -- Generated by ExifTool 13.30 --
6058
6056
  File: a.jpg - 2003:10:31 15:44:19
6059
6057
  (f/5.6, 1/60s, ISO 100)
6060
6058
  File: b.jpg - 2006:05:23 11:57:38
@@ -6937,12 +6935,14 @@ Geotag images from the specified GPS track log file. Using the B<-geotag>
6937
6935
  option is equivalent to writing a value to the C<Geotag> tag. The GPS
6938
6936
  position is interpolated from the track at a time specified by the value
6939
6937
  written to the C<Geotime> tag. If C<Geotime> is not specified, the value is
6940
- copied from C<DateTimeOriginal#> (the C<#> is added to copy the unformatted
6941
- value, avoiding potential conflicts with the B<-d> option). For example,
6942
- the following two commands are equivalent:
6938
+ copied from C<SubSecDateTimeOriginal#> if it exists, otherwise
6939
+ C<DateTimeOriginal#> (the C<#> is added to copy the unformatted value,
6940
+ avoiding potential conflicts with the B<-d> option). For example, the
6941
+ following two commands are equivalent if SubSecDateTimeOriginal exists in
6942
+ the file:
6943
6943
 
6944
6944
  exiftool -geotag trk.log image.jpg
6945
- exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg
6945
+ exiftool -geotag trk.log "-Geotime<SubSecDateTimeOriginal#" image.jpg
6946
6946
 
6947
6947
  If the C<Geotime> value does not contain a time zone then the local system
6948
6948
  timezone is assumed. Writing C<Geotime> causes the following tags to be
@@ -7150,6 +7150,9 @@ accessing tags from the corresponding C<FileNUM> group.
7150
7150
  User-defined Composite tags may access tags from alternate files using the
7151
7151
  appropriate (case-sensitive) family 8 group name.
7152
7152
 
7153
+ The B<-fast> option, if used, also applies to processing of the alternate
7154
+ files.
7155
+
7153
7156
  =item B<-list_dir>
7154
7157
 
7155
7158
  List directories themselves instead of their contents. This option
@@ -995,7 +995,7 @@ TagID: foreach $tagID (@keys) {
995
995
  if ($format and $format =~ /\$val\{/ and
996
996
  ($$tagInfo{Writable} or not defined $$tagInfo{Writable}))
997
997
  {
998
- warn "Warning: \$var{} used in Format of writable tag - $short $name\n"
998
+ warn "Warning: \$val{} used in Format of writable tag - $short $name\n"
999
999
  }
1000
1000
  }
1001
1001
  if ($$tagInfo{Hidden}) {
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.89';
91
+ $VERSION = '4.91';
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)
@@ -638,6 +638,7 @@ $VERSION = '4.89';
638
638
  '61182.60' => 'Canon RF 16-28mm F2.8 IS STM', #42
639
639
  '61182.61' => 'Canon RF 50mm F1.4 L VCM', #42
640
640
  '61182.62' => 'Canon RF 24mm F1.4 L VCM', #42
641
+ '61182.63' => 'Canon RF 20mm F1.4 L VCM', #42
641
642
  65535 => 'n/a',
642
643
  );
643
644
 
@@ -1410,7 +1411,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1410
1411
  },
1411
1412
  {
1412
1413
  Name => 'CanonCameraInfoR6m2',
1413
- Condition => '$$self{Model} =~ /\bEOS R6m2$/',
1414
+ Condition => '$$self{Model} =~ /\bEOS (R6m2|R8|R50)$/',
1414
1415
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
1415
1416
  },
1416
1417
  {
@@ -7033,6 +7034,7 @@ my %ciMaxFocal = (
7033
7034
  323 => 'Canon RF 16-28mm F2.8 IS STM', #42
7034
7035
  325 => 'Canon RF 50mm F1.4 L VCM', #42
7035
7036
  326 => 'Canon RF 24mm F1.4 L VCM', #42
7037
+ 327 => 'Canon RF 20mm F1.4 L VCM', #42
7036
7038
  # Note: add new RF lenses to %canonLensTypes with ID 61182
7037
7039
  },
7038
7040
  },
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.56';
60
+ $VERSION = '4.57';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -5804,6 +5804,8 @@ sub PrintLensID($$@)
5804
5804
  }
5805
5805
  if ($$et{Make} eq 'SONY') {
5806
5806
  if ($lensType eq 65535) {
5807
+ # patch for manual lens (forum17379)
5808
+ return $$printConv{$lensType} if $$printConv{$lensType} and not $focalLength and $maxAperture == 1;
5807
5809
  # handle Sony E-type lenses when LensType2 isn't valid (NEX/ILCE models only)
5808
5810
  if ($$et{Model} =~ /NEX|ILCE/) {
5809
5811
  unless (%sonyEtype) {
@@ -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.96';
34
+ $VERSION = '1.97';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -628,6 +628,7 @@ my %faceCategories = (
628
628
  0x60006 => 'Partial Color Purple',
629
629
  0x70000 => 'Soft Focus',
630
630
  0x90000 => 'Low Key',
631
+ 0x100000 => 'Light Leak', #forum17392
631
632
  },
632
633
  },
633
634
  0x1210 => { #2
@@ -279,7 +279,7 @@ under the same terms as Perl itself.
279
279
 
280
280
  =over 4
281
281
 
282
- =item L<GIMP source code>
282
+ =item L<https://developer.gimp.org/core/setup/git/>
283
283
 
284
284
  =item L<http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup>
285
285
 
Binary file
@@ -260,15 +260,9 @@ sub ProcessJPEG_HDR($$$);
260
260
  Condition => '$$valPt =~ /^UNICODE\0/',
261
261
  Notes => 'PhotoStudio Unicode comment',
262
262
  }, {
263
- Name => 'HDRGainCurve', #PH (NC)
263
+ Name => 'HDRGainInfo', #PH (NC)
264
264
  Condition => '$$valPt =~ /^AROT\0\0.{4}/s',
265
- Groups => { 1 => 'APP10', 2 => 'Image' },
266
- ValueConv => q{
267
- my $n = unpack('x6N', $val);
268
- return '<truncated AROT data>' if length($val)-6 < $n * 4;
269
- my $str = join ' ', unpack("x10V$n", $val);
270
- return \$str;
271
- },
265
+ SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDRGainInfo' },
272
266
  }],
273
267
  APP11 => [{
274
268
  Name => 'JPEG-HDR',
@@ -347,6 +341,9 @@ sub ProcessJPEG_HDR($$$);
347
341
  $$valPt =~ /~\0\x04\0zmie~\0\0\x0a.{8}[\x10\x18]\x08$/s
348
342
  },
349
343
  SubDirectory => { TagTable => 'Image::ExifTool::MIE::Main' },
344
+ }, {
345
+ Name => 'MPF',
346
+ SubDirectory => { TagTable => 'Image::ExifTool::MPF::Main' },
350
347
  }, {
351
348
  Name => 'Samsung',
352
349
  Condition => '$$valPt =~ /QDIOBS$/',
@@ -382,6 +379,21 @@ sub ProcessJPEG_HDR($$$);
382
379
  }],
383
380
  );
384
381
 
382
+ # HDR gain information (ref PH)
383
+ %Image::ExifTool::JPEG::HDRGainInfo = (
384
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
385
+ GROUPS => { 0 => 'APP10', 1 => 'AROT', 2 => 'Image' },
386
+ 6 => {
387
+ Name => 'HDRGainCurveSize',
388
+ Format => 'int32u',
389
+ },
390
+ 10 => {
391
+ Name => 'HDRGainCurve', # (NC)
392
+ Format => 'int32uRev[$val{6}]',
393
+ Binary => 1,
394
+ },
395
+ );
396
+
385
397
  # JPS APP3 segment (ref http://paulbourke.net/stereographics/stereoimage/)
386
398
  %Image::ExifTool::JPEG::JPS = (
387
399
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -11,7 +11,7 @@ use strict;
11
11
  use vars qw($VERSION);
12
12
  use Image::ExifTool;
13
13
 
14
- $VERSION = '1.02';
14
+ $VERSION = '1.05';
15
15
 
16
16
  sub ProcessLigoGPS($$$;$);
17
17
  sub ProcessLigoJSON($$$);
@@ -264,6 +264,20 @@ sub ParseLigoGPS($$$;$)
264
264
  delete $$et{SET_GROUP1};
265
265
  }
266
266
 
267
+ #------------------------------------------------------------------------------
268
+ # Process GKU dashcam trailer containing JSON-format LigoGPS
269
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
270
+ # Returns: 1 on success
271
+ sub ProcessGKU($$$;$)
272
+ {
273
+ my ($et, $dirInfo, $tagTbl) = @_;
274
+ my $dataPt = $$dirInfo{DataPt};
275
+ my $pos = unpack('V', $$dataPt);
276
+ return 0 if $pos + 13 > length $$dataPt or substr($$dataPt, $pos, 13) ne 'LIGOGPSINFO {';
277
+ pos($$dataPt) = $pos;
278
+ return ProcessLigoJSON($et, $dirInfo, $tagTbl);
279
+ }
280
+
267
281
  #------------------------------------------------------------------------------
268
282
  # Process LIGOGPSINFO data (non-JSON format)
269
283
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
@@ -315,7 +329,7 @@ sub ProcessLigoJSON($$$)
315
329
  my $dataPt = $$dirInfo{DataPt};
316
330
  my $dirLen = $$dirInfo{DirLen};
317
331
  require Image::ExifTool::Import;
318
- $et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
332
+ $et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - (pos($$dataPt) || 0));
319
333
  $$et{SET_GROUP1} = 'LIGO';
320
334
  while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
321
335
  my $json = $1;
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::Exif;
17
17
 
18
- $VERSION = '1.15';
18
+ $VERSION = '1.16';
19
19
 
20
20
  sub ProcessMPImageList($$$);
21
21
 
@@ -127,11 +127,15 @@ sub ProcessMPImageList($$$);
127
127
  0x000000 => 'Undefined',
128
128
  0x010001 => 'Large Thumbnail (VGA equivalent)',
129
129
  0x010002 => 'Large Thumbnail (full HD equivalent)',
130
+ 0x010003 => 'Large Thumbnail (4K equivalent)',
131
+ 0x010004 => 'Large Thumbnail (8K equivalent)',
132
+ 0x010005 => 'Large Thumbnail (16K equivalent)',
130
133
  0x020001 => 'Multi-frame Panorama',
131
134
  0x020002 => 'Multi-frame Disparity',
132
135
  0x020003 => 'Multi-angle',
133
136
  0x030000 => 'Baseline MP Primary Image',
134
137
  0x040000 => 'Original Preservation Image', # (Exif 3.0)
138
+ 0x050000 => 'Gain Map Image',
135
139
  },
136
140
  },
137
141
  4 => {
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
21
21
  sub WriteUnknownOrPreview($$$);
22
22
  sub FixLeicaBase($$;$);
23
23
 
24
- $VERSION = '2.16';
24
+ $VERSION = '2.17';
25
25
 
26
26
  my $debug; # set to 1 to enable debugging code
27
27
 
@@ -991,9 +991,9 @@ my $debug; # set to 1 to enable debugging code
991
991
  {
992
992
  Name => 'MakerNoteSigma',
993
993
  Condition => q{
994
- return undef unless $$self{Make}=~/^(SIGMA|FOVEON)/;
994
+ return undef unless $$self{Make}=~/^(SIGMA|FOVEON)/i;
995
995
  # save version number in "MakerNoteSigmaVer" member variable
996
- $$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0\0(.)/ ? ord($1) : -1;
996
+ $$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0.(.)/s ? ord($1) : -1;
997
997
  return 1;
998
998
  },
999
999
  SubDirectory => {
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.85';
43
+ $VERSION = '2.86';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -113,7 +113,7 @@ my %olympusLensTypes = (
113
113
  '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
114
114
  '0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
115
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
116
- '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
116
+ '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB (also OM System M.Zuiko Digital ED 100-400mm F5.0-6.3 IS II", forum2833)
117
117
  '0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
118
118
  '0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
119
119
  '0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
@@ -550,6 +550,7 @@ my %filters = (
550
550
  4 => 'Light Tone',
551
551
  5 => 'Pin Hole', # (SZ-10 magic filter 2,SZ-31MR,E-PL3)
552
552
  6 => 'Grainy Film',
553
+ 8 => 'Underwater', #forum17348
553
554
  9 => 'Diorama',
554
555
  10 => 'Cross Process',
555
556
  12 => 'Fish Eye', # (SZ-10 magic filter 3)
@@ -581,6 +582,9 @@ my %filters = (
581
582
  39 => 'Partial Color', #forum6269
582
583
  40 => 'Partial Color II', #forum6269
583
584
  41 => 'Partial Color III', #forum6269
585
+ 42 => 'Bleach Bypass', #forum17348
586
+ 43 => 'Bleach Bypass II', #forum17348
587
+ 44 => 'Instant Film', #forum17348
584
588
  );
585
589
 
586
590
  my %toneLevelType = (
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.24';
40
+ $VERSION = '2.25';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -1436,6 +1436,14 @@ my %shootingMode = (
1436
1436
  Name => 'NoiseReductionStrength',
1437
1437
  Writable => 'rational64s',
1438
1438
  },
1439
+ 0xde => { #forum17299
1440
+ Name => 'AFAreaSize',
1441
+ Writable => 'rational64u',
1442
+ Notes => 'relative to size of image',
1443
+ Count => 2,
1444
+ PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
1445
+ PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
1446
+ },
1439
1447
  0xe4 => { #IB
1440
1448
  Name => 'LensTypeModel',
1441
1449
  Condition => '$format eq "int16u"',
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.02';
18
+ $VERSION = '1.03';
19
19
 
20
20
  sub Process_mett($$$);
21
21
 
@@ -61,10 +61,18 @@ sub Process_mett($$$);
61
61
  Name => 'ARCoreAccel',
62
62
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
63
63
  },
64
+ 'application/arcore-accel-0' => {
65
+ Name => 'ARCoreAccel0',
66
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel0', ByteOrder => 'II' },
67
+ },
64
68
  'application/arcore-gyro' => {
65
69
  Name => 'ARCoreGyro',
66
70
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
67
71
  },
72
+ 'application/arcore-gyro-0' => {
73
+ Name => 'ARCoreGyro0',
74
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro0', ByteOrder => 'II' },
75
+ },
68
76
  'application/arcore-video-0' => {
69
77
  Name => 'ARCoreVideo',
70
78
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
@@ -684,11 +692,24 @@ sub Process_mett($$$);
684
692
  # 33: increments slowly (about once every 56 samples or so)
685
693
  );
686
694
 
695
+ # ARCore Accel data (ref PH)
696
+ %Image::ExifTool::Parrot::ARCoreAccel0 = (
697
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
698
+ GROUPS => { 2 => 'Location' },
699
+ NOTES => 'ARCore accelerometer data.',
700
+ FIRST_ENTRY => 0,
701
+ 9 => { # (NC)
702
+ Name => 'Accelerometer',
703
+ Format => 'undef[14]',
704
+ RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
705
+ },
706
+ );
707
+
687
708
  # ARCore Gyro data (ref PH)
688
709
  %Image::ExifTool::Parrot::ARCoreGyro = (
689
710
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
690
711
  GROUPS => { 2 => 'Location' },
691
- NOTES => 'ARCore accelerometer data.',
712
+ NOTES => 'ARCore gyro data.',
692
713
  FIRST_ENTRY => 0,
693
714
  # 00-04: always 10 34 16 3 29
694
715
  4 => {
@@ -704,6 +725,19 @@ sub Process_mett($$$);
704
725
  },
705
726
  );
706
727
 
728
+ # ARCore Gyro data (ref PH)
729
+ %Image::ExifTool::Parrot::ARCoreGyro0 = (
730
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
731
+ GROUPS => { 2 => 'Location' },
732
+ NOTES => 'ARCore gyro data.',
733
+ FIRST_ENTRY => 0,
734
+ 9 => { # (NC)
735
+ Name => 'Gyroscope',
736
+ Format => 'undef[14]',
737
+ RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
738
+ },
739
+ );
740
+
707
741
  %Image::ExifTool::Parrot::ARCoreVideo = (
708
742
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
709
743
  FIRST_ENTRY => 0,
@@ -766,11 +800,24 @@ sub Process_mett($$$)
766
800
  $et->VerboseDir('Parrot mett', undef, $dirEnd);
767
801
 
768
802
  if ($$tagTbl{$metaType}) {
769
- $et->HandleTag($tagTbl, $metaType, undef,
770
- DataPt => $dataPt,
771
- DataPos => $dataPos,
772
- Base => $$dirInfo{Base},
773
- );
803
+ # loop through ARCore records
804
+ while ($pos < $dirEnd - 2) {
805
+ last unless substr($$dataPt,$pos,1) eq "\x0a";
806
+ my $len = ord(substr($$dataPt, $pos+1, 1));
807
+ if ($pos + $len + 2 > $dirEnd) {
808
+ $et->Warn("Unexpected length for $metaType record", 1);
809
+ last;
810
+ }
811
+ $len or $len = $dirEnd - $pos - 2; # use entire record if length is 0
812
+ $et->HandleTag($tagTbl, $metaType, undef,
813
+ DataPt => $dataPt,
814
+ DataPos => $dataPos,
815
+ DirStart => $pos,
816
+ DirLen => $len,
817
+ Base => $$dirInfo{Base},
818
+ );
819
+ $pos += $len + 2;
820
+ }
774
821
  return 1;
775
822
  }
776
823
  while ($pos + 4 < $dirEnd) {