exiftool-vendored.pl 12.84.0 → 12.89.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/Changes +94 -3
  2. package/bin/MANIFEST +1 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +16 -16
  5. package/bin/README +47 -46
  6. package/bin/build_geolocation +96 -20
  7. package/bin/config_files/example.config +5 -0
  8. package/bin/config_files/onone.config +28 -0
  9. package/bin/exiftool +67 -57
  10. package/bin/lib/Image/ExifTool/AIFF.pm +8 -4
  11. package/bin/lib/Image/ExifTool/ASF.pm +4 -1
  12. package/bin/lib/Image/ExifTool/Apple.pm +2 -1
  13. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
  14. package/bin/lib/Image/ExifTool/Canon.pm +100 -7
  15. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  16. package/bin/lib/Image/ExifTool/CanonVRD.pm +5 -2
  17. package/bin/lib/Image/ExifTool/DPX.pm +3 -3
  18. package/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
  19. package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  20. package/bin/lib/Image/ExifTool/Geolocation.pm +18 -8
  21. package/bin/lib/Image/ExifTool/ID3.pm +36 -8
  22. package/bin/lib/Image/ExifTool/InDesign.pm +8 -4
  23. package/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
  24. package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  25. package/bin/lib/Image/ExifTool/Matroska.pm +66 -10
  26. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  27. package/bin/lib/Image/ExifTool/Nikon.pm +21 -2
  28. package/bin/lib/Image/ExifTool/Olympus.pm +27 -17
  29. package/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
  30. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
  31. package/bin/lib/Image/ExifTool/Pentax.pm +139 -22
  32. package/bin/lib/Image/ExifTool/QuickTime.pm +70 -16
  33. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -2
  34. package/bin/lib/Image/ExifTool/RIFF.pm +20 -10
  35. package/bin/lib/Image/ExifTool/Samsung.pm +29 -1
  36. package/bin/lib/Image/ExifTool/Sony.pm +21 -11
  37. package/bin/lib/Image/ExifTool/TagLookup.pm +6806 -6782
  38. package/bin/lib/Image/ExifTool/TagNames.pod +124 -34
  39. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  40. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +86 -16
  41. package/bin/lib/Image/ExifTool/Writer.pl +8 -6
  42. package/bin/lib/Image/ExifTool/XMP.pm +10 -8
  43. package/bin/lib/Image/ExifTool/XMP2.pl +51 -30
  44. package/bin/lib/Image/ExifTool/ZIP.pm +8 -4
  45. package/bin/lib/Image/ExifTool.pm +78 -45
  46. package/bin/lib/Image/ExifTool.pod +66 -50
  47. package/bin/perl-Image-ExifTool.spec +45 -45
  48. package/bin/pp_build_exe.args +4 -4
  49. package/package.json +3 -3
package/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.84';
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($);
@@ -735,6 +735,7 @@ for (;;) {
735
735
  push @isUTF8, 10 if $isAlt;
736
736
  for ($i=0; ; ++$i) {
737
737
  my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
738
+ $#entry = 9; # remove everything after latitude (eg. feature type)
738
739
  next if $minPop and $entry[7] < $minPop;
739
740
  next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
740
741
  push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
@@ -1801,7 +1802,12 @@ if ($outOpt) {
1801
1802
  my $type = GetFileType($outOpt);
1802
1803
  if ($type) {
1803
1804
  # (must test original file name because we can write .webp but not other RIFF types)
1804
- 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
+ }
1805
1811
  Warn "Can't write $type files\n";
1806
1812
  $rtnVal = 1;
1807
1813
  next;
@@ -2365,7 +2371,7 @@ sub GetImageInfo($$)
2365
2371
  my $errs = $et->GetInfo('Warning', 'Error');
2366
2372
  PrintErrors($et, $errs, $file) and EFile($file);
2367
2373
  } elsif (not $disableOutput) {
2368
- my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
2374
+ my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep, $quote);
2369
2375
  if ($fp) {
2370
2376
  # print file header (only once)
2371
2377
  if ($fileHeader) {
@@ -2408,6 +2414,7 @@ sub GetImageInfo($$)
2408
2414
  } elsif ($json) {
2409
2415
  # set delimiters for JSON or PHP output
2410
2416
  ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
2417
+ $quote = 1 if $$et{OPTIONS}{StructFormat} and $$et{OPTIONS}{StructFormat} eq 'JSONQ';
2411
2418
  print $fp ",\n" if $comma;
2412
2419
  print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
2413
2420
  $comma = 1;
@@ -2701,7 +2708,7 @@ TAG: foreach $tag (@foundTags) {
2701
2708
  }
2702
2709
  }
2703
2710
  }
2704
- FormatJSON($fp, $val, $ind);
2711
+ FormatJSON($fp, $val, $ind, $quote);
2705
2712
  $comma = 1;
2706
2713
  next;
2707
2714
  }
@@ -3493,17 +3500,17 @@ sub EscapeJSON($;$)
3493
3500
 
3494
3501
  #------------------------------------------------------------------------------
3495
3502
  # Print JSON or PHP value
3496
- # Inputs: 0) file reference, 1) value, 2) indentation
3497
- sub FormatJSON($$$)
3503
+ # Inputs: 0) file reference, 1) value, 2) indentation, 3) true to quote numbers
3504
+ sub FormatJSON($$$;$)
3498
3505
  {
3499
3506
  local $_;
3500
- my ($fp, $val, $ind) = @_;
3507
+ my ($fp, $val, $ind, $quote) = @_;
3501
3508
  my $comma;
3502
3509
  if (not ref $val) {
3503
- print $fp EscapeJSON($val);
3510
+ print $fp EscapeJSON($val, $quote);
3504
3511
  } elsif (ref $val eq 'ARRAY') {
3505
3512
  if ($joinLists and not ref $$val[0]) {
3506
- print $fp EscapeJSON(join $listSep, @$val);
3513
+ print $fp EscapeJSON(join($listSep, @$val), $quote);
3507
3514
  } else {
3508
3515
  my ($bra, $ket) = $json == 1 ? ('[',']') : ('Array(',')');
3509
3516
  print $fp $bra;
@@ -4720,50 +4727,50 @@ supported by ExifTool (r = read, w = write, c = create):
4720
4727
 
4721
4728
  File Types
4722
4729
  ------------+-------------+-------------+-------------+------------
4723
- 360 r/w | DOCX r | ITC r | O r | RSRC r
4724
- 3FR r | DPX r | J2C r | ODP r | RTF r
4725
- 3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
4726
- 3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
4727
- 7Z r | DV r | JPEG r/w | OFR r | RWZ r
4728
- A r | DVB r/w | JSON r | OGG r | RM r
4729
- AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
4730
- AAC r | DYLIB r | K25 r | ONP r | SKETCH r
4731
- AAE r | EIP r | KDC r | OPUS r | SO r
4732
- AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
4733
- ACR r | EPUB r | LA r | ORI r/w | SRF r
4734
- AFM r | ERF r/w | LFP r | OTF r | SRW r/w
4735
- AI r/w | EXE r | LIF r | PAC r | SVG r
4736
- AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
4737
- APE r | EXR r | LRV r/w | PBM r/w | THM r/w
4738
- ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
4739
- ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
4740
- ASF r | FFF r/w | MACOS r | PDB r | TTC r
4741
- AVI r | FITS r | MAX r | PDF r/w | TTF r
4742
- AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
4743
- AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
4744
- BMP r | FLIF r/w | MIFF r | PFB r | VNT r
4745
- BPG r | FLV r | MKA r | PFM r | VRD r/w/c
4746
- BTF r | FPF r | MKS r | PGF r | VSD r
4747
- C2PA r | FPX r | MKV r | PGM r/w | WAV r
4748
- CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
4749
- COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
4750
- CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
4751
- CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
4752
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
4753
- CRW r/w | HDR r | MOV r/w | PPT r | WPG r
4754
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
4755
- CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
4756
- CUR r | HTML r | MPC r | PSB r/w | X3F r/w
4757
- CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
4758
- DCM r | ICO r | MPO r/w | PSP r | XISF r
4759
- DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
4760
- DCR r | IDML r | MRC r | R3D r | XLSX r
4761
- DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
4762
- DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
4763
- DJVU r | INSP r/w | NEF r/w | RAM r |
4764
- DLL r | INSV r | NKSC r/w | RAR r |
4765
- DNG r/w | INX r | NRW r/w | RAW r/w |
4766
- DOC r | ISO r | NUMBERS r | RIFF r |
4730
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
4731
+ 3FR r | DPX r | J2C r | NXD r | RIFF r
4732
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
4733
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
4734
+ 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
4735
+ A r | DVB r/w | JSON r | ODT r | RWL r/w
4736
+ AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
4737
+ AAC r | DYLIB r | K25 r | OGG r | RM r
4738
+ AAE r | EIP r | KDC r | OGV r | SEQ r
4739
+ AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
4740
+ ACR r | EPUB r | LA r | OPUS r | SO r
4741
+ AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
4742
+ AI r/w | EXE r | LIF r | ORI r/w | SRF r
4743
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
4744
+ APE r | EXR r | LRV r/w | PAC r | SVG r
4745
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
4746
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
4747
+ ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
4748
+ AVI r | FITS r | MAX r | PCX r | TORRENT r
4749
+ AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
4750
+ AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
4751
+ BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
4752
+ BPG r | FLV r | MKA r | PFA r | VCF r
4753
+ BTF r | FPF r | MKS r | PFB r | VNT r
4754
+ C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
4755
+ CHM r | GIF r/w | MNG r/w | PGF r | VSD r
4756
+ COS r | GLV r/w | MOBI r | PGM r/w | WAV r
4757
+ CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
4758
+ CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
4759
+ CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
4760
+ CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
4761
+ CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
4762
+ CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
4763
+ CUR r | HTML r | MPC r | PPTX r | WTV r
4764
+ CZI r | ICC r/w/c | MPG r | PS r/w | WV r
4765
+ DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
4766
+ DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
4767
+ DCR r | IDML r | MRC r | PSP r | XISF r
4768
+ DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
4769
+ DIVX r | IND r/w | MXF r | R3D r | XLSX r
4770
+ DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
4771
+ DLL r | INSV r | NKA r | RAF r/w | ZIP r
4772
+ DNG r/w | INX r | NKSC r/w | RAM r |
4773
+ DOC r | ISO r | NRW r/w | RAR r |
4767
4774
 
4768
4775
  Meta Information
4769
4776
  ----------------------+----------------------+---------------------
@@ -5677,7 +5684,7 @@ with this command:
5677
5684
 
5678
5685
  produces output like this:
5679
5686
 
5680
- -- Generated by ExifTool 12.84 --
5687
+ -- Generated by ExifTool 12.89 --
5681
5688
  File: a.jpg - 2003:10:31 15:44:19
5682
5689
  (f/5.6, 1/60s, ISO 100)
5683
5690
  File: b.jpg - 2006:05:23 11:57:38
@@ -5916,7 +5923,8 @@ processed file by using %C (upper case) instead of %c. This allows a
5916
5923
  sequential number to be added to output file names, even if the names are
5917
5924
  different. For %C, a copy number of zero is not omitted as it is with %c.
5918
5925
  A leading '-' causes the number to be reset at the start of each new
5919
- directory, and '+' has no effect. The number before the decimal place gives
5926
+ directory (in the original directory structure if the files are being
5927
+ moved), and '+' has no effect. The number before the decimal place gives
5920
5928
  the starting index, the number after the decimal place gives the field
5921
5929
  width. The following examples show the output filenames when used with the
5922
5930
  command C<exiftool rose.jpg star.jpg jet.jpg ...>:
@@ -6117,7 +6125,9 @@ B<-if> and B<-fileOrder> options for details.
6117
6125
  =item B<-fileOrder>[I<NUM>] [-]I<TAG>
6118
6126
 
6119
6127
  Set file processing order according to the sorted value of the specified
6120
- 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:
6121
6131
 
6122
6132
  exiftool -fileOrder DateTimeOriginal DIR
6123
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;
@@ -128,7 +128,8 @@ sub ConvertPLIST($$);
128
128
  1 => 'ProRAW',
129
129
  2 => 'Portrait',
130
130
  10 => 'Photo',
131
- 12 => 'Photo (12)', #PH (NC)
131
+ 11 => 'Manual Focus', #forum16044
132
+ 12 => 'Scene', #forum16044
132
133
  },
133
134
  },
134
135
  0x0015 => { # (ImageGroupIdentifier, ref 2)
@@ -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.56';
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
@@ -600,7 +602,8 @@ running ExifTool the old information may be removed permanently using the
600
602
  DNG => q{
601
603
  The main DNG tags are found in the EXIF table. The tables below define only
602
604
  information found within structures of these main DNG tag values. See
603
- L<http://www.adobe.com/products/dng/> for the official DNG specification.
605
+ L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
606
+ DNG specification.
604
607
  },
605
608
  MPEG => q{
606
609
  The MPEG format doesn't specify any file-level meta information. In lieu of
@@ -905,6 +908,9 @@ TagID: foreach $tagID (@keys) {
905
908
  @infoArray = GetTagInfoList($table,$tagID);
906
909
  }
907
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
+ }
908
914
  my $name = $$tagInfo{Name};
909
915
  if ($$tagInfo{WritePseudo}) {
910
916
  push @writePseudo, $name;
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.74';
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.74';
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,14 @@ 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)
2602
+ 51 => { #forum16036 (EOS R models)
2603
+ Name => 'Clarity',
2604
+ PrintConv => {
2605
+ OTHER => sub { shift },
2606
+ 0x7fff => 'n/a',
2607
+ },
2608
+ },
2593
2609
  );
2594
2610
 
2595
2611
  # focal length information (MakerNotes tag 0x02)
@@ -4715,12 +4731,15 @@ my %ciMaxFocal = (
4715
4731
  FIRST_ENTRY => 0,
4716
4732
  PRIORITY => 0,
4717
4733
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4718
- 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)
4719
4737
  0x0af1 => { #forum15210/15579
4720
4738
  Name => 'ShutterCount',
4721
4739
  Format => 'int32u',
4722
4740
  Notes => 'includes electronic + mechanical shutter',
4723
4741
  },
4742
+ # 0x0bb7 - counts down during focus stack (ref forum16111)
4724
4743
  );
4725
4744
 
4726
4745
  # ref https://exiftool.org/forum/index.php?topic=15356.0
@@ -6382,8 +6401,12 @@ my %ciMaxFocal = (
6382
6401
  10 => 'AF Point Expansion (8 point)', #forum6237
6383
6402
  11 => 'Flexizone Multi (49 point)', #PH (NC, EOS M, live view; 750D 49 points)
6384
6403
  12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
6385
- 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)
6386
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)
6387
6410
  },
6388
6411
  },
6389
6412
  2 => {
@@ -6962,6 +6985,7 @@ my %ciMaxFocal = (
6962
6985
  313 => 'Canon RF 28mm F2.8 STM', #42
6963
6986
  314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
6964
6987
  315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
6988
+ 316 => 'Canon RF 35mm F1.4 L VCM', #42
6965
6989
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6966
6990
  },
6967
6991
  },
@@ -7031,7 +7055,7 @@ my %ciMaxFocal = (
7031
7055
  },
7032
7056
  },
7033
7057
  2 => { #12
7034
- Name => 'Sharpness',
7058
+ Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
7035
7059
  Notes => 'all models except the 20D and 350D',
7036
7060
  Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
7037
7061
  Priority => 0, # (maybe not as reliable as other sharpness values)
@@ -7077,6 +7101,8 @@ my %ciMaxFocal = (
7077
7101
  Name => 'WBShiftGM',
7078
7102
  Notes => 'positive is a shift toward green',
7079
7103
  },
7104
+ 14 => 'UnsharpMaskFineness', #forum16036
7105
+ 15 => 'UnsharpMaskThreshold', #forum16036
7080
7106
  );
7081
7107
 
7082
7108
  # Color balance information (MakerNotes tag 0xa9) (ref PH)
@@ -8759,7 +8785,7 @@ my %ciMaxFocal = (
8759
8785
  Name => 'DigitalLensOptimizer',
8760
8786
  PrintConv => {
8761
8787
  0 => 'Off',
8762
- 1 => 'Stanard',
8788
+ 1 => 'Standard',
8763
8789
  2 => 'High',
8764
8790
  },
8765
8791
  },
@@ -8992,20 +9018,32 @@ my %filterConv = (
8992
9018
  4 => 'Focus High Priority',
8993
9019
  },
8994
9020
  },
8995
- 7 => { #52
9021
+ 7 => [{ #forum16068
9022
+ Name => 'USMLensElectronicMF',
9023
+ Condition => '$$self{Model} =~ /EOS R\d/',
9024
+ Notes => 'EOS R models',
9025
+ PrintConv => {
9026
+ 0 => 'Disable After One-Shot',
9027
+ 1 => 'One-Shot -> Enabled',
9028
+ 2 => 'One-Shot -> Enabled (magnify)',
9029
+ 3 => 'Disable in AF Mode',
9030
+ },
9031
+ },{ #52
8996
9032
  Name => 'USMLensElectronicMF',
9033
+ Notes => 'Other models',
8997
9034
  PrintConv => {
8998
9035
  0 => 'Enable After AF',
8999
9036
  1 => 'Disable After AF',
9000
9037
  2 => 'Disable in AF Mode',
9001
9038
  },
9002
- },
9039
+ }],
9003
9040
  8 => { #52
9004
9041
  Name => 'AFAssistBeam',
9005
9042
  PrintConv => {
9006
9043
  0 => 'Enable',
9007
9044
  1 => 'Disable',
9008
9045
  2 => 'IR AF Assist Beam Only',
9046
+ 3 => 'LED AF Assist Beam Only', #forum16068
9009
9047
  },
9010
9048
  },
9011
9049
  9 => { #52
@@ -9104,6 +9142,19 @@ my %filterConv = (
9104
9142
  2 => 'Auto', #PH (1DXmkII)
9105
9143
  },
9106
9144
  },
9145
+ 20 => { #forum16068
9146
+ Name => 'SubjectToDetect',
9147
+ PrintConv => {
9148
+ 0 => 'None',
9149
+ 1 => 'People',
9150
+ 2 => 'Animals',
9151
+ 3 => 'Vehicles',
9152
+ },
9153
+ },
9154
+ 24 => { #forum16068
9155
+ Name => 'EyeDetection',
9156
+ PrintConv => \%offOn,
9157
+ },
9107
9158
  );
9108
9159
 
9109
9160
  # RAW burst mode info (MakerNotes tag 0x403f) (ref 25)
@@ -9116,6 +9167,48 @@ my %filterConv = (
9116
9167
  2 => 'RawBurstImageCount',
9117
9168
  );
9118
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
+
9119
9212
  # Canon UUID atoms (ref PH, SX280)
9120
9213
  %Image::ExifTool::Canon::uuid = (
9121
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
@@ -1212,9 +1212,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1212
1212
  4 => 'Emphasize Center',
1213
1213
  },
1214
1214
  },
1215
+ 0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
1215
1216
  # 0x20800 - fmt=1: 0
1216
1217
  # 0x20801 - fmt=1: 0
1217
- 0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
1218
1218
  0x20900 => 'ColorHue',
1219
1219
  0x20901 => 'SaturationAdj',
1220
1220
  0x20910 => 'RedHSL',
@@ -1282,6 +1282,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1282
1282
  # 0xf0521 - DLO data
1283
1283
  # 0xf0520 - DLO data
1284
1284
  # 0xf0530 - created when dust delete data applied (4 bytes, all zero)
1285
+ # 0xf0561 - 1932 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1286
+ # 0xf0562 - 1596 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1287
+ # 0xf0566 - 1520 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1285
1288
  # 0xf0600 - fmt=253 (2308 bytes, JPG images)
1286
1289
  # 0xf0601 - fmt=253 (2308 bytes, JPG images)
1287
1290
  # 0x1ff52c - values: 129,130,132 (related to custom picture style somehow)
@@ -1303,7 +1306,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1303
1306
  # 2 - value: 6
1304
1307
  3 => {
1305
1308
  Name => 'DR4CameraModel',
1306
- Writable => 'int32u',
1309
+ Format => 'int32u',
1307
1310
  PrintHex => 1,
1308
1311
  SeparateTable => 'Canon CanonModelID',
1309
1312
  PrintConv => \%Image::ExifTool::Canon::canonModelID,
@@ -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.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # DPX tags
21
21
  %Image::ExifTool::DPX::Main = (
@@ -97,7 +97,7 @@ $VERSION = '1.06';
97
97
  3 => 'Logarithmic',
98
98
  4 => 'Unspecified video',
99
99
  5 => 'SMPTE 274M',
100
- 6 => 'ITU-R 704-4',
100
+ 6 => 'ITU-R 709-4',
101
101
  7 => 'ITU-R 601-5 system B or G (625)',
102
102
  8 => 'ITU-R 601-5 system M (525)',
103
103
  9 => 'Composite video (NTSC)',
@@ -124,7 +124,7 @@ $VERSION = '1.06';
124
124
  1 => 'Printing density',
125
125
  4 => 'Unspecified video',
126
126
  5 => 'SMPTE 274M',
127
- 6 => 'ITU-R 704-4',
127
+ 6 => 'ITU-R 709-4',
128
128
  7 => 'ITU-R 601-5 system B or G (625)',
129
129
  8 => 'ITU-R 601-5 system M (525)',
130
130
  9 => 'Composite video (NTSC)',