exiftool_vendored 13.06.0 → 13.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +55 -4
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/exiftool +29 -15
  8. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  9. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  10. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  11. data/bin/lib/Image/ExifTool/Apple.pm +9 -7
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -3
  13. data/bin/lib/Image/ExifTool/Canon.pm +19 -1
  14. data/bin/lib/Image/ExifTool/DJI.pm +1 -1
  15. data/bin/lib/Image/ExifTool/Exif.pm +2 -2
  16. data/bin/lib/Image/ExifTool/FITS.pm +2 -2
  17. data/bin/lib/Image/ExifTool/FLIF.pm +2 -2
  18. data/bin/lib/Image/ExifTool/FlashPix.pm +11 -11
  19. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  20. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  21. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  22. data/bin/lib/Image/ExifTool/ICC_Profile.pm +80 -1
  23. data/bin/lib/Image/ExifTool/ID3.pm +3 -3
  24. data/bin/lib/Image/ExifTool/IPTC.pm +2 -2
  25. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Jpeg2000.pm +8 -7
  27. data/bin/lib/Image/ExifTool/M2TS.pm +39 -9
  28. data/bin/lib/Image/ExifTool/MXF.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  31. data/bin/lib/Image/ExifTool/PDF.pm +15 -15
  32. data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
  33. data/bin/lib/Image/ExifTool/PNG.pm +6 -5
  34. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  35. data/bin/lib/Image/ExifTool/PhaseOne.pm +3 -3
  36. data/bin/lib/Image/ExifTool/Photoshop.pm +64 -3
  37. data/bin/lib/Image/ExifTool/Protobuf.pm +4 -4
  38. data/bin/lib/Image/ExifTool/QuickTime.pm +72 -24
  39. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +336 -91
  40. data/bin/lib/Image/ExifTool/README +4 -1
  41. data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
  42. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/Ricoh.pm +3 -3
  44. data/bin/lib/Image/ExifTool/Sony.pm +2 -2
  45. data/bin/lib/Image/ExifTool/TagInfoXML.pm +4 -3
  46. data/bin/lib/Image/ExifTool/TagLookup.pm +6982 -6970
  47. data/bin/lib/Image/ExifTool/TagNames.pod +48 -5
  48. data/bin/lib/Image/ExifTool/VCard.pm +2 -2
  49. data/bin/lib/Image/ExifTool/Validate.pm +3 -3
  50. data/bin/lib/Image/ExifTool/WriteExif.pl +2 -2
  51. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +47 -13
  52. data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
  53. data/bin/lib/Image/ExifTool/Writer.pl +32 -21
  54. data/bin/lib/Image/ExifTool/XMP.pm +9 -9
  55. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  56. data/bin/lib/Image/ExifTool.pm +65 -61
  57. data/bin/lib/Image/ExifTool.pod +41 -35
  58. data/bin/perl-Image-ExifTool.spec +1 -1
  59. data/lib/exiftool_vendored/version.rb +1 -1
  60. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 277daacb61b45f8ffcf01c45e8a2ae6c7814aa878af57ce5e700433e37a73a89
4
- data.tar.gz: c27dc0342c61725b98adb52806417396827df205172ae6793f14bb6eb9d3949b
3
+ metadata.gz: 9bd6e60c5e63b9f1c5c19ec9ecff2c388dbb148125958da2dc032788523a6f1b
4
+ data.tar.gz: 0ca3fe31d4880779349339e560485d5780f9568a100ed3b2e66c1bf0d1d556ea
5
5
  SHA512:
6
- metadata.gz: acb79bdb9f29cb00439ad4006faba198b460abed0c655e1cce6d7a3845ec14c8fe19a778dcbdb5401bb5f77b51329329e9ab8a6932c98a9d04ff63ca04be9af0
7
- data.tar.gz: 2771ca21af4d53e1d2138b4b94dd187f1e59c9f9c6230f8d3a8d83be61979b320570084a50f5ae5a3d038114a46cca518dca35e517d8304ed98087c73ceeb163
6
+ metadata.gz: 36c2edb4757ce9a9a1311d4688ceba8da4b9529c1f193cf1e7c70634295e980d93fc68a133d3d5079d9f359dbe2b4efb53a05cf2f5ea5e09b6a4b469ff02a435
7
+ data.tar.gz: 0e977d49e4c994eac82d4e1c2525f30c95112513cc7bc620256f3788d550b4d294681aa36183c49f0bae1ded85b1bce9beba097025d0ecbb88df5774a610a652
data/bin/Changes CHANGED
@@ -4,17 +4,68 @@ 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.00. (Other versions are
7
+ Note: The most recent production release is Version 13.10. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Dec. 20, 2024 - Version 13.10 (production release)
11
+
12
+ - Added warnings for out-of-order entries in 'iinf' and 'ipma' boxes of HEIC
13
+ images
14
+ - Added support for date/time formatting codes %f and %z in the inverse
15
+ print conversion when writing tags
16
+ - Updated Geolocation databases from current geonames.org files
17
+ - Improved verbose output to show values stored with construction method 1 in
18
+ MP4-based files
19
+ - Enhanced the date/time timezone format specifier %z so that %:z returns the
20
+ time zone with a colon separator (eg. "-05:00")
21
+ - Fixed bug where the existing tag wasn't being removed when writing a new
22
+ value for an Unknown QuickTime UserData or ItemList tag
23
+
24
+ Dec. 17, 2024 - Version 13.09
25
+
26
+ - Added a new QuickTime tag (thanks Matti)
27
+ - Added a missing format check on a few tags when writing
28
+ - Decode a couple of new ICC_Profile tags
29
+ - Patched HEIC writer so newly added XMP or EXIF refers to the 'tmap' item as
30
+ well as the primary item of an HDRGainMap image (since iPhone 15 and 16 do
31
+ it this way)
32
+ - Fixed compatibility issue where Apple Preview would no longer show the gain
33
+ map image after adding new XMP to an HEIC with an HDR gain map
34
+
35
+ Dec. 14, 2024 - Version 13.08
36
+
37
+ - Decode ShutterCount for Canon EOS R6 Mark II (thanks Agoston Kapitany)
38
+ - Decode a few new Photoshop tags
39
+ - Suppress all duplicate Warning tags and add count to end of message
40
+ - Changed format of bitmask keys in -listx output
41
+ - Internal streamlining of LIGOGPSINFO decoding
42
+ - Fixed issue where some tags were incorrectly shown as writable in -listx
43
+ output
44
+ - Fixed incorrect scaling for GPSSpeed in one LIGOGPSINFO variant
45
+ - Fixed an issue with filename encoding when the -L option is used and the API
46
+ WindowsLongPath option is active
47
+
48
+ Dec. 11, 2024 - Version 13.07
49
+
50
+ - Decode a number of LIGOGPSINFO encrypted and enciphered timed GPS types
51
+ (long overdue, but it took me a couple of years to acquire enough sample
52
+ videos to have a good cross-section of the different formats)
53
+ - Fixed another place where FileSequence could be incremented twice when a -if
54
+ condition was used
55
+ - Fixed a few places where character 0x7f may not have been escaped in string
56
+ values
57
+ - API Changes:
58
+ - Changed default WindowsLongPath option back to 1 after adding a patch to
59
+ fix issue with piping from stdin
60
+
10
61
  Dec. 5, 2024 - Version 13.06
11
62
 
12
63
  - Decode timed metadata from MP4 videos of yet another dashcam model
13
64
  - Patched issue where FileSequence could increment twice for each file when a
14
65
  -if condition was used
15
66
  - API Changes:
16
- - Revert default WindowsLongPath option until we can solve the pipe
17
- problem)
67
+ - Revert default WindowsLongPath option to the pre-13.05 setting
68
+ until we can solve the pipe problem
18
69
 
19
70
  Dec. 4, 2024 - Version 13.05
20
71
 
@@ -24,7 +75,7 @@ Dec. 4, 2024 - Version 13.05
24
75
  - Decode APP10 AROT HDRGainCurve and APP2 URN UniformResourceName
25
76
  - Decode a couple of new GoPro tags
26
77
  - API Changes:
27
- - Changed default WindowsLongPath option to 1 (please report if this
78
+ - Changed default WindowsLongPath option to 1 (please report if this
28
79
  causes any problems)
29
80
 
30
81
  Nov. 26, 2024 - Version 13.04
data/bin/MANIFEST CHANGED
@@ -937,6 +937,7 @@ t/Writer_58.out
937
937
  t/Writer_59.out
938
938
  t/Writer_6.out
939
939
  t/Writer_60.out
940
+ t/Writer_61.out
940
941
  t/Writer_7.out
941
942
  t/Writer_9.out
942
943
  t/XISF.t
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.06"
53
+ "version" : "13.10"
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.06'
34
+ version: '13.10'
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.06.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.06
112
+ gzip -dc Image-ExifTool-13.10.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.10
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
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.06';
14
+ my $version = '13.10';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -2172,7 +2172,8 @@ sub GetImageInfo($$)
2172
2172
  }
2173
2173
  # can't make use of $info if verbose because we must reprocess
2174
2174
  # the file anyway to generate the verbose output
2175
- if ($verbose or defined $fastCondition or defined $diff) {
2175
+ # (also if writing just to avoid double-incrementing FileSequence)
2176
+ if ($isWriting or $verbose or defined $fastCondition or defined $diff) {
2176
2177
  undef $info;
2177
2178
  --$$et{FILE_SEQUENCE};
2178
2179
  }
@@ -3639,7 +3640,7 @@ sub EscapeJSON($;$)
3639
3640
  if ($json < 2) { # JSON
3640
3641
  $str =~ tr/\0//d; # remove all nulls
3641
3642
  # escape other control characters with \u
3642
- $str =~ s/([\0-\x1f])/sprintf("\\u%.4X",ord $1)/sge;
3643
+ $str =~ s/([\0-\x1f\x7f])/sprintf("\\u%.4X",ord $1)/sge;
3643
3644
  # JSON strings must be valid UTF8
3644
3645
  Image::ExifTool::XMP::FixUTF8(\$str) unless $altEnc;
3645
3646
  } else { # PHP
@@ -3647,7 +3648,7 @@ sub EscapeJSON($;$)
3647
3648
  # must escape "$" too for PHP
3648
3649
  $str =~ s/\$/\\\$/sg;
3649
3650
  # escape other control characters with \x
3650
- $str =~ s/([\0-\x1f])/sprintf("\\x%.2X",ord $1)/sge;
3651
+ $str =~ s/([\0-\x1f\x7f])/sprintf("\\x%.2X",ord $1)/sge;
3651
3652
  }
3652
3653
  return '"' . $str . '"'; # return the quoted string
3653
3654
  }
@@ -5643,16 +5644,29 @@ in the delimiter. Default is ','.
5643
5644
 
5644
5645
  Set the format for date/time tag values. The I<FMT> string may contain
5645
5646
  formatting codes beginning with a percent character (C<%>) to represent the
5646
- various components of a date/time value. The specifics of the I<FMT> syntax
5647
- are system dependent -- consult the C<strftime> man page on your system for
5648
- details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
5649
- option has no effect on date-only or time-only tags and ignores timezone
5650
- information if present. ExifTool adds a C<%f> format code to represent
5651
- fractional seconds, and supports an optional width to specify the number of
5652
- digits after the decimal point (eg. C<%3f> would give something like
5653
- C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
5654
- C<437>). Only one B<-d> option may be used per command. Requires
5655
- POSIX::strptime or Time::Piece for the inversion conversion when writing.
5647
+ various components of a date/time value. ExifTool implements 3 format codes
5648
+ internally (see below), but other format codes are system dependent --
5649
+ consult the C<strftime> man page on your system for details. The default
5650
+ format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
5651
+ date-only or time-only tags. Requires POSIX::strptime or Time::Piece for
5652
+ the inversion conversion when writing. Only one B<-d> option may be used
5653
+ per command.
5654
+
5655
+ Additional format codes implemented internally by ExifTool:
5656
+
5657
+ 1) C<%z> represents the time zone in "+/-HHMM" format. Adding a colon (ie.
5658
+ C<%:z>) adds a colon separator (eg. "-05:00"). If the date/time value
5659
+ doesn't contain a time zone then C<%z> gives the system time zone for the
5660
+ specified date/time value.
5661
+
5662
+ 2) C<%f> represents fractional seconds, and supports an optional width to
5663
+ specify the number of digits after the decimal point (eg. C<%3f> would give
5664
+ something like ".437"). Adding a minus sign drops the decimal point (eg.
5665
+ C<%-3f> would give "437").
5666
+
5667
+ 3) C<%s> represents the number of seconds since 00:00 UTC Jan 1, 1970,
5668
+ taking into account the specified time zone (or system time zone if not
5669
+ specified).
5656
5670
 
5657
5671
  =item B<-D> (B<-decimal>)
5658
5672
 
@@ -5912,7 +5926,7 @@ with this command:
5912
5926
 
5913
5927
  produces output like this:
5914
5928
 
5915
- -- Generated by ExifTool 13.06 --
5929
+ -- Generated by ExifTool 13.10 --
5916
5930
  File: a.jpg - 2003:10:31 15:44:19
5917
5931
  (f/5.6, 1/60s, ISO 100)
5918
5932
  File: b.jpg - 2006:05:23 11:57:38
@@ -231,7 +231,7 @@ sub ProcessAIFF($$)
231
231
  $et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
232
232
  last;
233
233
  } elsif ($et->Options('LargeFileSupport') eq '2') {
234
- $et->WarnOnce('Skipping large chunk (LargeFileSupport is 2)');
234
+ $et->Warn('Skipping large chunk (LargeFileSupport is 2)');
235
235
  }
236
236
  }
237
237
  if ($tagInfo) {
@@ -217,7 +217,7 @@ sub ProcessAPE($$)
217
217
  $val = \$buf2;
218
218
  # extract cover art description separately (hackitty hack)
219
219
  if ($tag =~ /^Cover Art/) {
220
- $buf2 =~ s/^([\x20-\x7f]*)\0//;
220
+ $buf2 =~ s/^([\x20-\x7e]*)\0//;
221
221
  if ($1) {
222
222
  my $t = "$tag Desc";
223
223
  my $v = $1;
@@ -781,7 +781,7 @@ sub ProcessASF($$;$)
781
781
  $err = 'Invalid ASF object size';
782
782
  } elsif ($et->Options('LargeFileSupport')) {
783
783
  if ($et->Options('LargeFileSupport') eq '2') {
784
- $et->WarnOnce('Skipping large ASF object (LargeFileSupport is 2)');
784
+ $et->Warn('Skipping large ASF object (LargeFileSupport is 2)');
785
785
  }
786
786
  if ($raf->Seek($size, 1)) {
787
787
  $et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool::Exif;
17
17
  use Image::ExifTool::PLIST;
18
18
 
19
- $VERSION = '1.13';
19
+ $VERSION = '1.14';
20
20
 
21
21
  sub ConvertPLIST($$);
22
22
 
@@ -291,12 +291,12 @@ sub ConvertPLIST($$);
291
291
  # 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
292
292
  # 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
293
293
  # 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
294
- # 0x004A - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
294
+ # 0x004a - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
295
295
  # 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
296
- # 0x004B - (ZeroShutterLagFailureReason, ref 2)
297
- # 0x004C - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
298
- # 0x004D - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
299
- # 0x004E - (Camera, ref 2)
296
+ # 0x004b - (ZeroShutterLagFailureReason, ref 2)
297
+ # 0x004c - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
298
+ # 0x004d - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
299
+ # 0x004e - (Camera, ref 2)
300
300
  0x004e => {
301
301
  Name => 'Apple_0x004e',
302
302
  Unknown => 1,
@@ -358,7 +358,8 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple');
358
358
  sub ConvertPLIST($$)
359
359
  {
360
360
  my ($val, $et) = @_;
361
- my $dirInfo = { DataPt => \$val };
361
+ my $dirInfo = { DataPt => \$val, NoVerboseDir => 1 };
362
+ my $oldOrder = $et->GetByteOrder();
362
363
  require Image::ExifTool::PLIST;
363
364
  Image::ExifTool::PLIST::ProcessBinaryPLIST($et, $dirInfo);
364
365
  $val = $$dirInfo{Value};
@@ -366,6 +367,7 @@ sub ConvertPLIST($$)
366
367
  require 'Image/ExifTool/XMPStruct.pl';
367
368
  $val = Image::ExifTool::XMP::SerializeStruct($et, $val);
368
369
  }
370
+ $et->SetByteOrder($oldOrder);
369
371
  return $val;
370
372
  }
371
373
 
@@ -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.58';
38
+ $VERSION = '3.59';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -866,10 +866,16 @@ sub new
866
866
  }
867
867
  $noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID};
868
868
  $hexID = $$vars{HEX_ID};
869
+ if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
870
+ and not $$table{CHECK_PROC})
871
+ {
872
+ warn("Binary table $tableName doesn't have a CHECK_PROC\n");
873
+ }
869
874
  my $processBinaryData = ($$table{PROCESS_PROC} and (
870
875
  $$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or
871
876
  $$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted or
872
- $$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered));
877
+ $$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered) or
878
+ $$table{VARS} and $$table{VARS}{IS_BINARY});
873
879
  if ($$vars{ID_LABEL} or $processBinaryData) {
874
880
  my $s = $$table{FORMAT} ? Image::ExifTool::FormatSize($$table{FORMAT}) || 1 : 1;
875
881
  $binaryTable = 1;
@@ -1003,6 +1009,9 @@ TagID: foreach $tagID (@keys) {
1003
1009
  if ($writable and not ($$table{WRITE_PROC} or $tableName =~ /Shortcuts/ or $writable eq '2')) {
1004
1010
  undef $writable;
1005
1011
  }
1012
+ #if ($writable and $$tagInfo{Unknown} and $$table{GROUPS}{0} ne 'MakerNotes') {
1013
+ # warn "Warning: Writable Unknown tag - $short $name\n",
1014
+ #}
1006
1015
  # validate some characteristics of obvious date/time tags
1007
1016
  my @g = $et->GetGroup($tagInfo);
1008
1017
  if ($$tagInfo{List} and $g[2] eq 'Time' and $writable and not $$tagInfo{Protected} and
@@ -1248,7 +1257,7 @@ TagID: foreach $tagID (@keys) {
1248
1257
  }
1249
1258
  } elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
1250
1259
  # translate unprintable values
1251
- if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
1260
+ if ($index =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
1252
1261
  $index = qq{"$index"};
1253
1262
  } else {
1254
1263
  $index = qq{'${index}'};
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.85';
91
+ $VERSION = '4.86';
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)
@@ -1404,6 +1404,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1404
1404
  Condition => '$$self{Model} =~ /\bEOS R[56]$/',
1405
1405
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
1406
1406
  },
1407
+ {
1408
+ Name => 'CanonCameraInfoR6m2',
1409
+ Condition => '$$self{Model} =~ /\bEOS R6m2$/',
1410
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
1411
+ },
1407
1412
  {
1408
1413
  Name => 'CanonCameraInfoG5XII',
1409
1414
  Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
@@ -4752,6 +4757,19 @@ my %ciMaxFocal = (
4752
4757
  # 0x0bb7 - counts down during focus stack (ref forum16111)
4753
4758
  );
4754
4759
 
4760
+ %Image::ExifTool::Canon::CameraInfoR6m2 = (
4761
+ %binaryDataAttrs,
4762
+ FIRST_ENTRY => 0,
4763
+ PRIORITY => 0,
4764
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4765
+ NOTES => 'CameraInfo tags for the EOS R6 Mark II.',
4766
+ 0x0d29 => { #AgostonKapitany
4767
+ Name => 'ShutterCount',
4768
+ Format => 'int32u',
4769
+ Notes => 'includes electronic + mechanical shutter',
4770
+ },
4771
+ );
4772
+
4755
4773
  # ref https://exiftool.org/forum/index.php?topic=15356.0
4756
4774
  %Image::ExifTool::Canon::CameraInfoG5XII = (
4757
4775
  %binaryDataAttrs,
@@ -295,7 +295,7 @@ sub ProcessDJIInfo($$$)
295
295
  while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
296
296
  my ($tag, $val) = split /:/, $1, 2;
297
297
  next unless defined $tag and defined $val;
298
- if ($val =~ /^([\x20-\x7f]+)\0*$/) {
298
+ if ($val =~ /^([\x20-\x7e]+)\0*$/) {
299
299
  $val = $1;
300
300
  } else {
301
301
  my $buff = $val;
@@ -6186,7 +6186,7 @@ sub ProcessExif($$$)
6186
6186
  if ($$dirInfo{DirName} eq 'MakerNotes' and $$et{FileType} eq 'CR3' and
6187
6187
  $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
6188
6188
  {
6189
- $et->WarnOnce("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
6189
+ $et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
6190
6190
  }
6191
6191
  # set flag to calculate image data hash if requested
6192
6192
  $doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
@@ -6656,7 +6656,7 @@ sub ProcessExif($$$)
6656
6656
  if ($count > 500 and $formatStr !~ /^(undef|string|binary)$/ and
6657
6657
  (not $tagInfo or $$tagInfo{LongBinary} or $warned) and not $$et{OPTIONS}{IgnoreMinorErrors})
6658
6658
  {
6659
- $et->WarnOnce('Not decoding some large array(s). Ignore minor errors to decode', 2) unless $warned;
6659
+ $et->Warn('Not decoding some large array(s). Ignore minor errors to decode', 2) unless $warned;
6660
6660
  next if $$et{TAGS_FROM_FILE}; # don't generate bogus value when copying tags
6661
6661
  $val = "(large array of $count $formatStr values)";
6662
6662
  } else {
@@ -61,7 +61,7 @@ sub ProcessFITS($$)
61
61
  my $key = substr($buff, 0, 8);
62
62
  $key =~ s/ +$//; # remove trailing space from key
63
63
  if ($key eq 'CONTINUE') {
64
- defined $continue or $et->WarnOnce('Unexpected FITS CONTINUE keyword'), next;
64
+ defined $continue or $et->Warn('Unexpected FITS CONTINUE keyword'), next;
65
65
  } else {
66
66
  if (defined $continue) {
67
67
  # the previous value wasn't continued, so store with the trailing '&'
@@ -104,7 +104,7 @@ sub ProcessFITS($$)
104
104
  # check for possible continuation, removing trailing '&'
105
105
  $val =~ s/\&$// and $continue = $val, next;
106
106
  } elsif (defined $continue) {
107
- $et->WarnOnce('Invalid FITS CONTINUE value');
107
+ $et->Warn('Invalid FITS CONTINUE value');
108
108
  next;
109
109
  } else {
110
110
  $val =~ s/ *(\/.*)?$//; # remove trailing spaces and comment
@@ -244,7 +244,7 @@ sub WriteFLIF($$)
244
244
  }
245
245
  }
246
246
  } else {
247
- $et->WarnOnce('Install IO::Compress::RawDeflate to write FLIF metadata');
247
+ $et->Warn('Install IO::Compress::RawDeflate to write FLIF metadata');
248
248
  }
249
249
  Write($outfile, $tag, SetVarInt(length $buff), $buff) or return -1;
250
250
  } elsif (not defined $soi) {
@@ -301,7 +301,7 @@ sub ProcessFLIF($$)
301
301
  $et->Warn("Error inflating FLIF $tag chunk");
302
302
  }
303
303
  } else {
304
- $et->WarnOnce('Install IO::Uncompress::RawInflate to decode FLIF metadata');
304
+ $et->Warn('Install IO::Uncompress::RawInflate to decode FLIF metadata');
305
305
  }
306
306
  } else {
307
307
  $raf->Seek($size, 1) or $et->Warn('Seek error'), last;
@@ -1449,7 +1449,7 @@ sub ReadFPXValue($$$$$;$$)
1449
1449
  $noPad = 1; # values sometimes aren't padded inside vectors!!
1450
1450
  my $size = $oleFormatSize{VT_VECTOR};
1451
1451
  if ($valPos + $size > $dirEnd) {
1452
- $et->WarnOnce('Incorrect FPX VT_VECTOR size');
1452
+ $et->Warn('Incorrect FPX VT_VECTOR size');
1453
1453
  last;
1454
1454
  }
1455
1455
  $count = Get32u($dataPt, $valPos);
@@ -1457,14 +1457,14 @@ sub ReadFPXValue($$$$$;$$)
1457
1457
  $valPos += 4;
1458
1458
  } else {
1459
1459
  # can't yet handle this property flag
1460
- $et->WarnOnce('Unknown FPX property');
1460
+ $et->Warn('Unknown FPX property');
1461
1461
  last;
1462
1462
  }
1463
1463
  }
1464
1464
  unless ($format =~ /^VT_/) {
1465
1465
  my $size = Image::ExifTool::FormatSize($format) * $count;
1466
1466
  if ($valPos + $size > $dirEnd) {
1467
- $et->WarnOnce("Incorrect FPX $format size");
1467
+ $et->Warn("Incorrect FPX $format size");
1468
1468
  last;
1469
1469
  }
1470
1470
  @vals = ReadValue($dataPt, $valPos, $format, $count, $size);
@@ -1476,7 +1476,7 @@ sub ReadFPXValue($$$$$;$$)
1476
1476
  my ($item, $val, $len);
1477
1477
  for ($item=0; $item<$count; ++$item) {
1478
1478
  if ($valPos + $size > $dirEnd) {
1479
- $et->WarnOnce("Truncated FPX $format value");
1479
+ $et->Warn("Truncated FPX $format value");
1480
1480
  last;
1481
1481
  }
1482
1482
  # sometimes VT_VECTOR items are padded to even 4-byte boundaries, and sometimes they aren't
@@ -1528,7 +1528,7 @@ sub ReadFPXValue($$$$$;$$)
1528
1528
  $len = Get32u($dataPt, $valPos);
1529
1529
  $len *= 2 if $format eq 'VT_LPWSTR'; # convert to byte count
1530
1530
  if ($valPos + $len + 4 > $dirEnd) {
1531
- $et->WarnOnce("Truncated $format value");
1531
+ $et->Warn("Truncated $format value");
1532
1532
  last;
1533
1533
  }
1534
1534
  $val = substr($$dataPt, $valPos + 4, $len);
@@ -1551,7 +1551,7 @@ sub ReadFPXValue($$$$$;$$)
1551
1551
  } elsif ($format eq 'VT_BLOB' or $format eq 'VT_CF') {
1552
1552
  my $len = Get32u($dataPt, $valPos); # (use local $len because we always expect padding)
1553
1553
  if ($valPos + $len + 4 > $dirEnd) {
1554
- $et->WarnOnce("Truncated $format value");
1554
+ $et->Warn("Truncated $format value");
1555
1555
  last;
1556
1556
  }
1557
1557
  $val = substr($$dataPt, $valPos + 4, $len);
@@ -1627,7 +1627,7 @@ sub ProcessContents($$$)
1627
1627
  while ($$dataPt =~ /\x0bTargetRole1(?:.\x80|\xff\xff.\0.\0Vn(\w+))\0\0\x01.{4}(.{24})/sg) {
1628
1628
  my ($index, @coords) = unpack('Vx4V4', $2);
1629
1629
  next if $index == 0xffffffff;
1630
- $$et{IeImg_lkup}{$index} and $et->WarnOnce('Duplicate image index');
1630
+ $$et{IeImg_lkup}{$index} and $et->Warn('Duplicate image index');
1631
1631
  $$et{IeImg_lkup}{$index} = "@coords";
1632
1632
  $$et{IeImg_class}{$index} = $1 if $1;
1633
1633
  }
@@ -1661,7 +1661,7 @@ sub ProcessWordDocument($$$)
1661
1661
  my $dirLen = length $$dataPt;
1662
1662
  # validate the FIB signature
1663
1663
  unless ($dirLen > 2 and Get16u($dataPt,0) == 0xa5ec) {
1664
- $et->WarnOnce('Invalid FIB signature', 1);
1664
+ $et->Warn('Invalid FIB signature', 1);
1665
1665
  return 0;
1666
1666
  }
1667
1667
  $et->ProcessBinaryData($dirInfo, $tagTablePtr); # process FIB
@@ -2098,7 +2098,7 @@ sub ProcessFPXR($$$)
2098
2098
  my $overlap = length($$obj{Stream}) - $offset;
2099
2099
  my $start = $dirStart + 13;
2100
2100
  if ($overlap < 0 or $dirLen - $overlap < 13) {
2101
- $et->WarnOnce("Bad FPXR stream $index offset",1);
2101
+ $et->Warn("Bad FPXR stream $index offset",1);
2102
2102
  } else {
2103
2103
  # ignore any overlapping data in this segment
2104
2104
  # (this seems to be the convention)
@@ -2338,7 +2338,7 @@ sub ProcessFPX($$)
2338
2338
  $tag =~ s/\0.*//s; # truncate at null (in case length was wrong)
2339
2339
 
2340
2340
  if ($tag eq '0' and not defined $ee) {
2341
- $et->WarnOnce('Use the ExtractEmbedded option to extract embedded information', 3);
2341
+ $et->Warn('Use the ExtractEmbedded option to extract embedded information', 3);
2342
2342
  }
2343
2343
  my $sect = Get32u(\$dir, $pos + 0x74); # start sector number
2344
2344
  my $size = Get32u(\$dir, $pos + 0x78); # stream length
@@ -2441,7 +2441,7 @@ sub ProcessFPX($$)
2441
2441
  my $subTablePtr = GetTagTable($$subdir{TagTable});
2442
2442
  $et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
2443
2443
  } elsif (defined $size and $size > length($buff)) {
2444
- $et->WarnOnce('Truncated object');
2444
+ $et->Warn('Truncated object');
2445
2445
  } else {
2446
2446
  $buff = substr($buff, 0, $size) if defined $size and $size < length($buff);
2447
2447
  if ($tag =~ /^IeImg_0*(\d+)$/) {
@@ -405,7 +405,7 @@ sub ProcessOTF($$)
405
405
  next;
406
406
  }
407
407
  if ($verbose) {
408
- $tag =~ s/([\0-\x1f\x80-\xff])/sprintf('\x%.2x',ord $1)/ge;
408
+ $tag =~ s/([\0-\x1f\x7f-\xff])/sprintf('\x%.2x',ord $1)/ge;
409
409
  my $str = sprintf("%s%d) Tag '%s' (offset 0x%.4x, %d bytes)\n",
410
410
  $$et{INDENT}, $pos/16, $tag, $offset, $size);
411
411
  $et->VPrint(0, $str);
Binary file
@@ -225,7 +225,7 @@ sub ProcessHP($$$)
225
225
  # scan for other tag ID's
226
226
  foreach $tagID (sort(TagTableKeys($tagTablePtr))) {
227
227
  next if $tagID eq 'PreviewImage';
228
- next unless $$dataPt =~ /$tagID:\s*([\x20-\x7f]+)/i;
228
+ next unless $$dataPt =~ /$tagID:\s*([\x20-\x7e]+)/i;
229
229
  $et->HandleTag($tagTablePtr, $tagID, $1);
230
230
  }
231
231
  return 1;