exiftool_vendored 12.86.0 → 12.89.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +59 -1
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +2 -2
  5. data/bin/META.yml +17 -17
  6. data/bin/README +3 -2
  7. data/bin/build_geolocation +6 -3
  8. data/bin/config_files/onone.config +28 -0
  9. data/bin/exiftool +20 -12
  10. data/bin/lib/Image/ExifTool/AIFF.pm +8 -4
  11. data/bin/lib/Image/ExifTool/ASF.pm +4 -1
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -7
  13. data/bin/lib/Image/ExifTool/Canon.pm +63 -4
  14. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  15. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  16. data/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
  17. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  18. data/bin/lib/Image/ExifTool/Geolocation.pm +6 -0
  19. data/bin/lib/Image/ExifTool/InDesign.pm +8 -4
  20. data/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
  21. data/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  22. data/bin/lib/Image/ExifTool/Matroska.pm +66 -10
  23. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  24. data/bin/lib/Image/ExifTool/Nikon.pm +3 -2
  25. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
  26. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
  27. data/bin/lib/Image/ExifTool/Pentax.pm +80 -14
  28. data/bin/lib/Image/ExifTool/QuickTime.pm +45 -8
  29. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -2
  30. data/bin/lib/Image/ExifTool/RIFF.pm +20 -10
  31. data/bin/lib/Image/ExifTool/Sony.pm +21 -11
  32. data/bin/lib/Image/ExifTool/TagLookup.pm +6800 -6784
  33. data/bin/lib/Image/ExifTool/TagNames.pod +83 -16
  34. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +84 -15
  35. data/bin/lib/Image/ExifTool/Writer.pl +7 -4
  36. data/bin/lib/Image/ExifTool/XMP.pm +8 -8
  37. data/bin/lib/Image/ExifTool/XMP2.pl +51 -30
  38. data/bin/lib/Image/ExifTool/ZIP.pm +8 -4
  39. data/bin/lib/Image/ExifTool.pm +22 -16
  40. data/bin/lib/Image/ExifTool.pod +15 -6
  41. data/bin/perl-Image-ExifTool.spec +1 -1
  42. data/lib/exiftool_vendored/version.rb +1 -1
  43. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 545516d00429f2217884ee7dd4339504e84b836ee2b778fa44707a637bc4184c
4
- data.tar.gz: a3737fb33959d687603b58ec0062ae907853bbae9bcc856ca10d1ac560368658
3
+ metadata.gz: 7df2d0fa28308f9ca1e01281f5adb79fb0c7f8a10837bb8bed04119b8176e411
4
+ data.tar.gz: c957dcea2b7c27b85bb0dcf947655291551f1d6c9ed60a341c308530e6bf4319
5
5
  SHA512:
6
- metadata.gz: a88fe3c5bad722bbc5e7bf0e0bd07edf8f4dc4707ed6af4895db6eaeacb0a28f14bd1ed72ad90dbfe43fb52eb86c9b569ac858ab5491c3910dfbe79d84cff75a
7
- data.tar.gz: c9fbb0c789ce33da188841f7d0e37de4fcfac563508941fd1ebcaace1d2c6d074c9d8b9bf0e6c5a570aba8601db0b361c6e66b0243923d1fe54ee918509d3cce
6
+ metadata.gz: a5b8e76b963736b502f09c43b1d1d1c3b40533460763e432a5aa0a56151bdda4e5bdaedae95f5a6e7b881437855bee2b9154a88b2c062f7c61a4b0c8f1e4b780
7
+ data.tar.gz: a60d7c3d8736f5edd2da67b517880e13a23fd201eefe66774afdeff76a9050055c45e00fe296f21d771d0f193471e807c3608ca79742b14dbe6bd2ce3c20d08f
data/bin/Changes CHANGED
@@ -7,12 +7,68 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ July 12, 2024 - Version 12.89
11
+
12
+ - Added new Sony lenses and updated decoding of some tags (thanks Jos Roost)
13
+ - Minor change to description of NKA files
14
+ - Fixed Archive::Zip problem in Windows executable version
15
+
16
+ July 11, 2024 - Version 12.88 - "New Windows/MacOS packages"
17
+
18
+ -
19
+
20
+ NOTE: The install procedure for the Windows executable has changed!
21
+ - Windows EXE version now uses Oliver Betz's bundle with Strawberry Perl and
22
+ comes in 32- and 64-bit versions
23
+ - MacOS distribution now uses a flattened package
24
+ - Added ability to read/write deflate-compressed XMP in HEIC files
25
+ - Added a new Canon LensType (thanks Norbert Wasser)
26
+ - Added a new XMP-GCamera tag (thanks Herb)
27
+ - Added a new Nikon LensID
28
+ - Added a few new Canon AFAreaMode values (thanks Wernfried)
29
+ - Added config_files/onone.config to the distribution
30
+ - Decode timed accelerometer readings from NextBase 622GW videos
31
+ - Decode Pentax K-3III CameraOrentation (thanks Peter)
32
+ - Improved German translation for LensModel
33
+ - Enhanced the API StructFormat JSONQ setting to quote all JSON values, even
34
+ if they aren't in a structure
35
+ - Changed -geolocate option so specifying the Keys group writes
36
+ Keys:GPSPosition only if an input city is specified, and Keys:LocationName
37
+ only for input GPS coordinates
38
+ - Tweaked API Geolocation option recognized space-separated lat/lon even when
39
+ there is no decimal point in the numbers
40
+ - API Changes:
41
+ - Changed LargeFileSupport default to 2 and added a warning if a large
42
+ chunk is encountered. Set to 1 to avoid the warning.
43
+
44
+ June 13, 2024 - Version 12.87
45
+
46
+ - Added ability to write Google Container XMP tags (using the namespace prefix
47
+ 'GContainer' to avoid conflict with the Google Device Container prefix)
48
+ - Decode a few new tags for the Canon EOS R5 (thanks John Moyer)
49
+ - Decode battery information for the Pentax K-3 III (thanks Peter)
50
+ - Decode RAFCompression from FujiFilm RAF images (thanks Albert Shan)
51
+ - Avoid reporting FileSize for pipes
52
+ - Updated Geolocation databases from current geonames.org files
53
+ - Enhanced Geolocation feature to allow lat/lon to be input with a space
54
+ separator instead of a comma
55
+ - Skip over Matroska Cluster if necessary to read Tags when referenced from
56
+ SeekHead
57
+ - Changed conversion for Matroska SeekID (now in hex with tag name in
58
+ brackets) and SeekPosition (now returns an absolute offset)
59
+ - Fixed problem writing XMP-Device:EarthPos coordinates
60
+ - Fixed typo in a value of Canon:DigitalLensOptimizer (thanks Martin B.)
61
+ - Fixed decoding of Matroska VideoScanType
62
+ - Fixed misleading error message when -o option was used to write to an
63
+ unsupported file type
64
+
10
65
  June 7, 2024 - Version 12.86
11
66
 
12
67
  - Added a new value for a couple of Olympus tags (thanks Herb)
13
68
  - Improved handling of ID3 user-defined tags
14
69
  - Decode all JPEG segments from RICO box in Ricoh MOV videos
15
- - Decode a few new values for some tags written by Canon EOS R cameras
70
+ - Decode a few new values for some tags written by Canon EOS R cameras (thanks
71
+ John Moyer and Martin B.)
16
72
  - Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
17
73
  some newer models
18
74
  - Fixed issue when writing IPTC date tags with a date/time value containing
@@ -47,6 +103,8 @@ Apr. 23, 2024 - Version 12.84
47
103
  - Decode a few more Apple tags and a new CanonVRD tag
48
104
  - Enhanced Geolocation feature with the ability to return any number of nearby
49
105
  cities
106
+ - Allow coordinates to be entered without comma separator for the Geolocation
107
+ feature as long as both coordinates have a decimal point
50
108
  - Fixed long-standing bug in Windows version that didn't properly handle dates
51
109
  older than 50 years when writing FileModifyDate or FileCreateDate
52
110
  - Fixed API TimeZone option to work in Windows
data/bin/MANIFEST CHANGED
@@ -28,6 +28,7 @@ config_files/frameCount.config
28
28
  config_files/gps2utm.config
29
29
  config_files/guano.config
30
30
  config_files/nksc.config
31
+ config_files/onone.config
31
32
  config_files/photoshop_paths.config
32
33
  config_files/picasa_faces.config
33
34
  config_files/pix4d.config
data/bin/META.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "Phil Harvey (philharvey66 at gmail.com)"
5
5
  ],
6
6
  "dynamic_config" : 1,
7
- "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.133380",
7
+ "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240",
8
8
  "license" : [
9
9
  "perl_5"
10
10
  ],
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.86"
53
+ "version" : "12.89"
54
54
  }
data/bin/META.yml CHANGED
@@ -3,32 +3,32 @@ abstract: 'Read and write meta information'
3
3
  author:
4
4
  - 'Phil Harvey (philharvey66 at gmail.com)'
5
5
  build_requires:
6
- ExtUtils::MakeMaker: 0
6
+ ExtUtils::MakeMaker: '0'
7
7
  configure_requires:
8
- ExtUtils::MakeMaker: 0
8
+ ExtUtils::MakeMaker: '0'
9
9
  dynamic_config: 1
10
- generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.133380'
10
+ generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240'
11
11
  license: perl
12
12
  meta-spec:
13
13
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
14
- version: 1.4
14
+ version: '1.4'
15
15
  name: Image-ExifTool
16
16
  no_index:
17
17
  directory:
18
18
  - t
19
19
  - inc
20
20
  recommends:
21
- Archive::Zip: 0
22
- Compress::Raw::Lzma: 0
23
- Compress::Zlib: 0
24
- Digest::MD5: 0
25
- Digest::SHA: 0
26
- IO::Compress::Brotli: 0
27
- IO::Compress::RawDeflate: 0
28
- IO::Uncompress::Brotli: 0
29
- IO::Uncompress::RawInflate: 0
30
- POSIX::strptime: 0
31
- Time::HiRes: 0
21
+ Archive::Zip: '0'
22
+ Compress::Raw::Lzma: '0'
23
+ Compress::Zlib: '0'
24
+ Digest::MD5: '0'
25
+ Digest::SHA: '0'
26
+ IO::Compress::Brotli: '0'
27
+ IO::Compress::RawDeflate: '0'
28
+ IO::Uncompress::Brotli: '0'
29
+ IO::Uncompress::RawInflate: '0'
30
+ POSIX::strptime: '0'
31
+ Time::HiRes: '0'
32
32
  requires:
33
- perl: 5.004
34
- version: 12.86
33
+ perl: '5.004'
34
+ version: '12.89'
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-12.86.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.86
112
+ gzip -dc Image-ExifTool-12.89.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.89
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -209,6 +209,7 @@ distribution package:
209
209
  gps2utm.config - Generate UTM coordinate tags from GPS info
210
210
  guano.config - Decode individual tags from Guano metadata
211
211
  nksc.config - Decode tags in Nikon ViewNX NKSC files
212
+ onone.config - Definitions for writing On1 XMP tags
212
213
  photoshop_paths.config - For extracting or copying Photoshop paths
213
214
  picasa_faces.config - Convert from Picasa to MWG/MP face regions
214
215
  pix4d.config - Definitions for writing Pix4D XMP tags
@@ -15,6 +15,7 @@
15
15
  # 2024-04-24 - PH Fixed problem with population exponent when run
16
16
  # under ActivePerl
17
17
  # 2024-04-29 - PH Added feature types and default to db v1.03
18
+ # 2024-06-13 - PH Tweaked case of imported feature types
18
19
  #
19
20
  # Notes: Requires these files from https://download.geonames.org/export/
20
21
  #
@@ -208,8 +209,9 @@ Syntax: build_geolocation [OPTIONS] [DBFILE] ...
208
209
  Options:
209
210
  DBFILE - Input database file name or directory. Multiple input database
210
211
  files may be specified. The -p, -c and -cp options apply to
211
- the database that comes after them on the command line.
212
- Default is "$dbFile".
212
+ the database that comes after them on the command line. The
213
+ other input files are assumed to be in the same directory as
214
+ the first database file. Default is "$dbFile".
213
215
  -p POP - Minimum population for cities to include. POP may be a number
214
216
  or be of the form "CC[,C2...]=###" to set different limits for
215
217
  specific countries/regions, where CC and C2 are country codes
@@ -250,7 +252,7 @@ Input files (download from https://download.geonames.org/export/dump/):
250
252
  $countryFile - mandatory country names file
251
253
  $regionFile - mandatory region names file
252
254
  $admin2File - mandatory subregion names file
253
- $featureFile - optional feature codes file
255
+ $featureFile - optional feature codes file(s)
254
256
  $altNamesFile - optional alternate names file (must exist to
255
257
  to generate $outAltNames and $geoLang files)
256
258
 
@@ -478,6 +480,7 @@ if (open INFILE, '<', "$dbdir/$featureFile") {
478
480
  next unless $featureCodes{$items[0]};
479
481
  my $name = ucfirst $items[1];
480
482
  $name =~ s/ ([a-z])/ \U$1/g;
483
+ $name =~ s/(.)\b(Of|Or|A|An|On|In|The|By|For|And)\b/$1\L$2/g;
481
484
  $featureNames{$items[0]} = $name;
482
485
  }
483
486
  close INFILE;
@@ -0,0 +1,28 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: onone.config
3
+ #
4
+ # Description: This config file defines On1 XMP tags for writing.
5
+ #
6
+ # Usage: exiftool -config onone.config -UserFlag=VALUE FILE ...
7
+ #
8
+ # Requires: ExifTool version 10.28 or later
9
+ #
10
+ # Revisions: 2024/07/10 - P. Harvey Created
11
+ #------------------------------------------------------------------------------
12
+
13
+ %Image::ExifTool::UserDefined = (
14
+ 'Image::ExifTool::XMP::Main' => {
15
+ onone => {
16
+ SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::onone' },
17
+ },
18
+ },
19
+ );
20
+
21
+ %Image::ExifTool::UserDefined::onone = (
22
+ GROUPS => { 0 => 'XMP', 1 => 'XMP-onone', 2 => 'Other' },
23
+ NAMESPACE => { 'onone' => 'http://www.ononesoftware.com/vcb/1.0/' },
24
+ WRITABLE => 'string',
25
+ UserFlag => { },
26
+ );
27
+
28
+ 1; #end
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.86';
14
+ my $version = '12.89';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -51,7 +51,7 @@ sub CleanXML($);
51
51
  sub EncodeXML($);
52
52
  sub FormatXML($$$);
53
53
  sub EscapeJSON($;$);
54
- sub FormatJSON($$$);
54
+ sub FormatJSON($$$;$);
55
55
  sub PrintCSV();
56
56
  sub AddGroups($$$$);
57
57
  sub ConvertBinary($);
@@ -1802,7 +1802,12 @@ if ($outOpt) {
1802
1802
  my $type = GetFileType($outOpt);
1803
1803
  if ($type) {
1804
1804
  # (must test original file name because we can write .webp but not other RIFF types)
1805
- unless (CanWrite($outOpt)) {
1805
+ my $canWrite = CanWrite($outOpt);
1806
+ unless ($canWrite) {
1807
+ if (defined $canWrite and $canWrite eq '') {
1808
+ $type = Image::ExifTool::GetFileExtension($outOpt);
1809
+ $type = uc($outOpt) unless defined $type;
1810
+ }
1806
1811
  Warn "Can't write $type files\n";
1807
1812
  $rtnVal = 1;
1808
1813
  next;
@@ -2366,7 +2371,7 @@ sub GetImageInfo($$)
2366
2371
  my $errs = $et->GetInfo('Warning', 'Error');
2367
2372
  PrintErrors($et, $errs, $file) and EFile($file);
2368
2373
  } elsif (not $disableOutput) {
2369
- my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
2374
+ my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep, $quote);
2370
2375
  if ($fp) {
2371
2376
  # print file header (only once)
2372
2377
  if ($fileHeader) {
@@ -2409,6 +2414,7 @@ sub GetImageInfo($$)
2409
2414
  } elsif ($json) {
2410
2415
  # set delimiters for JSON or PHP output
2411
2416
  ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
2417
+ $quote = 1 if $$et{OPTIONS}{StructFormat} and $$et{OPTIONS}{StructFormat} eq 'JSONQ';
2412
2418
  print $fp ",\n" if $comma;
2413
2419
  print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
2414
2420
  $comma = 1;
@@ -2702,7 +2708,7 @@ TAG: foreach $tag (@foundTags) {
2702
2708
  }
2703
2709
  }
2704
2710
  }
2705
- FormatJSON($fp, $val, $ind);
2711
+ FormatJSON($fp, $val, $ind, $quote);
2706
2712
  $comma = 1;
2707
2713
  next;
2708
2714
  }
@@ -3494,17 +3500,17 @@ sub EscapeJSON($;$)
3494
3500
 
3495
3501
  #------------------------------------------------------------------------------
3496
3502
  # Print JSON or PHP value
3497
- # Inputs: 0) file reference, 1) value, 2) indentation
3498
- sub FormatJSON($$$)
3503
+ # Inputs: 0) file reference, 1) value, 2) indentation, 3) true to quote numbers
3504
+ sub FormatJSON($$$;$)
3499
3505
  {
3500
3506
  local $_;
3501
- my ($fp, $val, $ind) = @_;
3507
+ my ($fp, $val, $ind, $quote) = @_;
3502
3508
  my $comma;
3503
3509
  if (not ref $val) {
3504
- print $fp EscapeJSON($val);
3510
+ print $fp EscapeJSON($val, $quote);
3505
3511
  } elsif (ref $val eq 'ARRAY') {
3506
3512
  if ($joinLists and not ref $$val[0]) {
3507
- print $fp EscapeJSON(join $listSep, @$val);
3513
+ print $fp EscapeJSON(join($listSep, @$val), $quote);
3508
3514
  } else {
3509
3515
  my ($bra, $ket) = $json == 1 ? ('[',']') : ('Array(',')');
3510
3516
  print $fp $bra;
@@ -5678,7 +5684,7 @@ with this command:
5678
5684
 
5679
5685
  produces output like this:
5680
5686
 
5681
- -- Generated by ExifTool 12.86 --
5687
+ -- Generated by ExifTool 12.89 --
5682
5688
  File: a.jpg - 2003:10:31 15:44:19
5683
5689
  (f/5.6, 1/60s, ISO 100)
5684
5690
  File: b.jpg - 2006:05:23 11:57:38
@@ -6119,7 +6125,9 @@ B<-if> and B<-fileOrder> options for details.
6119
6125
  =item B<-fileOrder>[I<NUM>] [-]I<TAG>
6120
6126
 
6121
6127
  Set file processing order according to the sorted value of the specified
6122
- I<TAG>. For example, to process files in order of date:
6128
+ I<TAG>. Without this option, files are processed in the order returned by
6129
+ the system, which is commonly by file name, but this is filesystem
6130
+ dependent. For example, to process files in order of date:
6123
6131
 
6124
6132
  exiftool -fileOrder DateTimeOriginal DIR
6125
6133
 
@@ -18,7 +18,7 @@ use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
  use Image::ExifTool::ID3;
20
20
 
21
- $VERSION = '1.12';
21
+ $VERSION = '1.13';
22
22
 
23
23
  # information for time/date-based tags (time zero is Jan 1, 1904)
24
24
  my %timeInfo = (
@@ -226,9 +226,13 @@ sub ProcessAIFF($$)
226
226
  # AIFF chunks are padded to an even number of bytes
227
227
  my $len2 = $len + ($len & 0x01);
228
228
  if ($len2 > 100000000) {
229
- if ($len2 >= 0x80000000 and not $et->Options('LargeFileSupport')) {
230
- $et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
231
- last;
229
+ if ($len2 >= 0x80000000) {
230
+ if (not $et->Options('LargeFileSupport')) {
231
+ $et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
232
+ last;
233
+ } elsif ($et->Options('LargeFileSupport') eq '2') {
234
+ $et->WarnOnce('Skipping large chunk (LargeFileSupport is 2)');
235
+ }
232
236
  }
233
237
  if ($tagInfo) {
234
238
  $et->Warn("Skipping large $$tagInfo{Name} chunk (> 100 MB)");
@@ -17,7 +17,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::Exif;
18
18
  use Image::ExifTool::RIFF;
19
19
 
20
- $VERSION = '1.25';
20
+ $VERSION = '1.26';
21
21
 
22
22
  sub ProcessASF($$;$);
23
23
  sub ProcessContentDescription($$$);
@@ -780,6 +780,9 @@ sub ProcessASF($$;$)
780
780
  if ($size > 0x7fffffff * 4294967296) {
781
781
  $err = 'Invalid ASF object size';
782
782
  } elsif ($et->Options('LargeFileSupport')) {
783
+ if ($et->Options('LargeFileSupport') eq '2') {
784
+ $et->WarnOnce('Skipping large ASF object (LargeFileSupport is 2)');
785
+ }
783
786
  if ($raf->Seek($size, 1)) {
784
787
  $et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
785
788
  $pos += $size;
@@ -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.57';
38
+ $VERSION = '3.58';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -98,6 +98,8 @@ my %tweakOrder = (
98
98
  GIMP => 'Microsoft',
99
99
  DarwinCore => 'AFCP',
100
100
  MWG => 'Shortcuts',
101
+ 'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
102
+ 'FujiFilm::RAFData' => 'FujiFilm::RAF',
101
103
  );
102
104
 
103
105
  # list of all recognized Format strings
@@ -423,11 +425,11 @@ parameters, as well as proprietary information written by many camera
423
425
  models. Tags with a question mark after their name are not extracted unless
424
426
  the L<Unknown|../ExifTool.html#Unknown> option is set.
425
427
 
426
- When writing, ExifTool creates both QuickTime and XMP tags by default, but
427
- the group may be specified to write one or the other separately. If no
428
- location is specified, newly created QuickTime tags are added in the
429
- L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> location if
430
- possible, otherwise in
428
+ When writing video files, ExifTool creates both QuickTime and XMP tags by
429
+ default, but the group may be specified to write one or the other
430
+ separately. If no location is specified, newly created QuickTime tags are
431
+ added in the L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
432
+ location if possible, otherwise in
431
433
  L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
432
434
  finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
433
435
  but this order may be changed by setting the PREFERRED level of the
@@ -478,7 +480,7 @@ the original size by padding with nulls if necessary.
478
480
 
479
481
  See
480
482
  L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
481
- for the official specification.
483
+ for the official QuickTime specification.
482
484
  },
483
485
  Photoshop => q{
484
486
  Photoshop tags are found in PSD and PSB files, as well as inside embedded
@@ -906,6 +908,9 @@ TagID: foreach $tagID (@keys) {
906
908
  @infoArray = GetTagInfoList($table,$tagID);
907
909
  }
908
910
  foreach $tagInfo (@infoArray) {
911
+ if ($binaryTable and $$tagInfo{Writable} and $$tagInfo{Writable} ne '1') {
912
+ warn("$tableName $$tagInfo{Name} Writable should be 1, not $$tagInfo{Writable}\n");
913
+ }
909
914
  my $name = $$tagInfo{Name};
910
915
  if ($$tagInfo{WritePseudo}) {
911
916
  push @writePseudo, $name;
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.76';
91
+ $VERSION = '4.78';
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)
@@ -630,6 +630,7 @@ $VERSION = '4.76';
630
630
  '61182.53' => 'Canon RF 28mm F2.8 STM', #42
631
631
  '61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
632
632
  '61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
633
+ '61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
633
634
  65535 => 'n/a',
634
635
  );
635
636
 
@@ -2128,6 +2129,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2128
2129
  TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
2129
2130
  }
2130
2131
  },
2132
+ 0x4059 => { #forum16111
2133
+ Name => 'LevelInfo',
2134
+ SubDirectory => {
2135
+ Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
2136
+ TagTable => 'Image::ExifTool::Canon::LevelInfo',
2137
+ }
2138
+ },
2131
2139
  );
2132
2140
 
2133
2141
  #..............................................................................
@@ -2590,6 +2598,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2590
2598
  },
2591
2599
  # 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
2592
2600
  # (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
2601
+ # 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
2593
2602
  51 => { #forum16036 (EOS R models)
2594
2603
  Name => 'Clarity',
2595
2604
  PrintConv => {
@@ -4722,12 +4731,15 @@ my %ciMaxFocal = (
4722
4731
  FIRST_ENTRY => 0,
4723
4732
  PRIORITY => 0,
4724
4733
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4725
- NOTES => 'CameraInfo tags for the EOS R6.',
4734
+ NOTES => 'CameraInfo tags for the EOS R5 and R6.',
4735
+ # (see forum16111 for more notes on these tags)
4736
+ # 0x0a5d - some sort of sequence number starting from 1 (ref forum16111)
4726
4737
  0x0af1 => { #forum15210/15579
4727
4738
  Name => 'ShutterCount',
4728
4739
  Format => 'int32u',
4729
4740
  Notes => 'includes electronic + mechanical shutter',
4730
4741
  },
4742
+ # 0x0bb7 - counts down during focus stack (ref forum16111)
4731
4743
  );
4732
4744
 
4733
4745
  # ref https://exiftool.org/forum/index.php?topic=15356.0
@@ -6389,8 +6401,12 @@ my %ciMaxFocal = (
6389
6401
  10 => 'AF Point Expansion (8 point)', #forum6237
6390
6402
  11 => 'Flexizone Multi (49 point)', #PH (NC, EOS M, live view; 750D 49 points)
6391
6403
  12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
6392
- 13 => 'Flexizone Single', #PH (EOS M default, live view)
6404
+ 13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
6393
6405
  14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
6406
+ 19 => 'Flexible Zone AF 1', #github268 (R7)
6407
+ 20 => 'Flexible Zone AF 2', #github268 (R7)
6408
+ 21 => 'Flexible Zone AF 3', #github268 (R7)
6409
+ 22 => 'Whole Area AF', #github268 (R7)
6394
6410
  },
6395
6411
  },
6396
6412
  2 => {
@@ -6969,6 +6985,7 @@ my %ciMaxFocal = (
6969
6985
  313 => 'Canon RF 28mm F2.8 STM', #42
6970
6986
  314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
6971
6987
  315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
6988
+ 316 => 'Canon RF 35mm F1.4 L VCM', #42
6972
6989
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6973
6990
  },
6974
6991
  },
@@ -8768,7 +8785,7 @@ my %ciMaxFocal = (
8768
8785
  Name => 'DigitalLensOptimizer',
8769
8786
  PrintConv => {
8770
8787
  0 => 'Off',
8771
- 1 => 'Stanard',
8788
+ 1 => 'Standard',
8772
8789
  2 => 'High',
8773
8790
  },
8774
8791
  },
@@ -9150,6 +9167,48 @@ my %filterConv = (
9150
9167
  2 => 'RawBurstImageCount',
9151
9168
  );
9152
9169
 
9170
+ # level information (ref forum16111, EOS R5)
9171
+ %Image::ExifTool::Canon::LevelInfo = (
9172
+ %binaryDataAttrs,
9173
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9174
+ FORMAT => 'int32s',
9175
+ FIRST_ENTRY => 1,
9176
+ 4 => {
9177
+ Name => 'RollAngle',
9178
+ Notes => 'converted to degrees of clockwise camera rotation',
9179
+ ValueConv => '$val > 1800 and $val -= 3600; -$val / 10',
9180
+ ValueConvInv => '$val > 0 and $val -= 360; int(-$val * 10 + 0.5)',
9181
+ },
9182
+ 5 => {
9183
+ Name => 'PitchAngle',
9184
+ Notes => 'converted to degrees of upward camera tilt',
9185
+ ValueConv => '$val > 1800 and $val -= 3600; $val / 10',
9186
+ ValueConvInv => '$val < 0 and $val += 360; int($val * 10 + 0.5)',
9187
+ },
9188
+ 7 => {
9189
+ Name => 'FocalLength',
9190
+ ValueConv => '$val / 10',
9191
+ ValueConvInv => 'int($val * 10 + 0.5)',
9192
+ PrintConv => '"$val mm"',
9193
+ PrintConvInv => '$val=~s/\s*mm//;$val',
9194
+ },
9195
+ 8 => {
9196
+ Name => 'MinFocalLength',
9197
+ ValueConv => '$val / 10',
9198
+ ValueConvInv => 'int($val * 10 + 0.5)',
9199
+ PrintConv => '"$val mm"',
9200
+ PrintConvInv => '$val=~s/\s*mm//;$val',
9201
+ },
9202
+ 9 => {
9203
+ Name => 'MaxFocalLength',
9204
+ ValueConv => '$val / 10',
9205
+ ValueConvInv => 'int($val * 10 + 0.5)',
9206
+ PrintConv => '"$val mm"',
9207
+ PrintConvInv => '$val=~s/\s*mm//;$val',
9208
+ },
9209
+
9210
+ );
9211
+
9153
9212
  # Canon UUID atoms (ref PH, SX280)
9154
9213
  %Image::ExifTool::Canon::uuid = (
9155
9214
  GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
@@ -562,7 +562,7 @@ sub BuildMakerNotes($$$$$$);
562
562
  3 => {
563
563
  Name => 'Rotation',
564
564
  Format => 'int32s',
565
- Writable => 'int32s',
565
+ Writable => 1,
566
566
  },
567
567
  4 => 'ComponentBitDepth', #3
568
568
  5 => 'ColorBitDepth', #3
@@ -1306,7 +1306,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1306
1306
  # 2 - value: 6
1307
1307
  3 => {
1308
1308
  Name => 'DR4CameraModel',
1309
- Writable => 'int32u',
1309
+ Format => 'int32u',
1310
1310
  PrintHex => 1,
1311
1311
  SeparateTable => 'Canon CanonModelID',
1312
1312
  PrintConv => \%Image::ExifTool::Canon::canonModelID,