exiftool_vendored 13.34.0 → 13.37.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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +55 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/Makefile.PL +1 -0
  7. data/bin/README +2 -2
  8. data/bin/build_geolocation +7 -3
  9. data/bin/exiftool +43 -33
  10. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  11. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
  13. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  14. data/bin/lib/Image/ExifTool/Canon.pm +86 -9
  15. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  16. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  17. data/bin/lib/Image/ExifTool/DJI.pm +59 -8
  18. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  19. data/bin/lib/Image/ExifTool/EXE.pm +3 -2
  20. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  21. data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
  22. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  23. data/bin/lib/Image/ExifTool/FujiFilm.pm +91 -33
  24. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  25. data/bin/lib/Image/ExifTool/GM.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  27. data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
  28. data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
  29. data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
  30. data/bin/lib/Image/ExifTool/Google.pm +804 -0
  31. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  32. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  33. data/bin/lib/Image/ExifTool/ID3.pm +3 -3
  34. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  36. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  37. data/bin/lib/Image/ExifTool/LNK.pm +2 -2
  38. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  39. data/bin/lib/Image/ExifTool/M2TS.pm +4 -6
  40. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  41. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  42. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
  44. data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
  45. data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
  46. data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
  47. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  49. data/bin/lib/Image/ExifTool/Olympus.pm +6 -1
  50. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  51. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  52. data/bin/lib/Image/ExifTool/Pentax.pm +51 -39
  53. data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
  54. data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  57. data/bin/lib/Image/ExifTool/README +7 -6
  58. data/bin/lib/Image/ExifTool/RIFF.pm +5 -3
  59. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  60. data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
  61. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  62. data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
  63. data/bin/lib/Image/ExifTool/Sony.pm +20 -3
  64. data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
  65. data/bin/lib/Image/ExifTool/TagLookup.pm +5749 -5695
  66. data/bin/lib/Image/ExifTool/TagNames.pod +690 -519
  67. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  68. data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
  69. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  70. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  71. data/bin/lib/Image/ExifTool/Writer.pl +2 -1
  72. data/bin/lib/Image/ExifTool/XMP.pm +39 -32
  73. data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
  74. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  75. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  76. data/bin/lib/Image/ExifTool.pm +6 -4
  77. data/bin/lib/Image/ExifTool.pod +3 -3
  78. data/bin/perl-Image-ExifTool.spec +1 -1
  79. data/lib/exiftool_vendored/version.rb +1 -1
  80. metadata +4 -6
@@ -5,9 +5,12 @@
5
5
  #
6
6
  # Revisions: 2024-12-04 - P. Harvey Created
7
7
  #
8
- # Notes: Tag definitions for Protobuf tags support additional 'signed',
9
- # 'unsigned' and 'int64s' formats for varInt (type 0) values,
10
- # and 'rational' for byte (type 2) values
8
+ # Notes: Tag definitions for Protobuf tags support 'signed', 'unsigned',
9
+ # and 'int64s' formats for VARINT (type 0) values, 'int64u',
10
+ # 'int64s', 'rational64u', 'rational64s' and 'double' for I64
11
+ # (type 1), 'undef', 'string' and 'rational' for LEN (type 2),
12
+ # and 'int32u', 'int32s', 'rational32u', 'rational32s',
13
+ # 'fixed32u', 'fixed32s' and 'float' for I32 (type 5) values.
11
14
  #
12
15
  # References: 1) https://protobuf.dev/programming-guides/encoding/
13
16
  #------------------------------------------------------------------------------
@@ -18,7 +21,7 @@ use strict;
18
21
  use vars qw($VERSION);
19
22
  use Image::ExifTool qw(:DataAccess :Utils);
20
23
 
21
- $VERSION = '1.03';
24
+ $VERSION = '1.05';
22
25
 
23
26
  sub ProcessProtobuf($$$;$);
24
27
 
@@ -128,6 +131,9 @@ sub ProcessProtobuf($$$;$)
128
131
  $$et{ProtoPrefix}{$dirName} = '' unless defined $$et{ProtoPrefix}{$dirName};
129
132
  SetByteOrder('II');
130
133
  }
134
+ # prefix for unknown tags
135
+ my $unkPre = $$tagTbl{TAG_PREFIX} ? $$tagTbl{TAG_PREFIX} . '_' : 'Protobuf ';
136
+
131
137
  # loop through protobuf records
132
138
  for (;;) {
133
139
  my $pos = $$dirInfo{Pos};
@@ -195,7 +201,7 @@ sub ProcessProtobuf($$$;$)
195
201
  # (fall through to process known SubDirectory)
196
202
  } elsif ($$tagInfo{IsProtobuf}) {
197
203
  # process Unknown protobuf directories
198
- $et->VPrint(1, "$$et{INDENT}Protobuf $tag (" . length($buff) . " bytes) -->\n");
204
+ $et->VPrint(1, "$$et{INDENT}${unkPre}$tag (" . length($buff) . " bytes) -->\n");
199
205
  my $addr = $dataPos + $$dirInfo{Pos} - length($buff);
200
206
  $et->VerboseDump(\$buff, Addr => $addr, Prefix => $$et{INDENT});
201
207
  my %subdir = ( DataPt => \$buff, DataPos => $addr, DirName => $dirName );
@@ -212,7 +218,7 @@ sub ProcessProtobuf($$$;$)
212
218
  my $denom = VarInt(\%dir);
213
219
  $rat = " (rational $num/$denom)" if $denom and $dir{Pos} == length($buff);
214
220
  }
215
- if ($buff !~ /[^\x20-\x7e]/) {
221
+ if ($buff !~ /[^\r\n\t\x20-\x7e]/) {
216
222
  $val = $buff; # assume this is an ASCII string
217
223
  } elsif (length($buff) % 4) {
218
224
  $val = '0x' . unpack('H*', $buff);
@@ -28,7 +28,7 @@ my @qualcommFormat = (
28
28
  %Image::ExifTool::Qualcomm::Main = (
29
29
  PROCESS_PROC => \&ProcessQualcomm,
30
30
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
31
- VARS => { NO_ID => 1, NO_LOOKUP => 1 }, # too long, too many, and too obscure
31
+ VARS => { ID_FMT => 'none', NO_LOOKUP => 1 }, # too long, too many, and too obscure
32
32
  NOTES => q{
33
33
  The tags below have been observed in the JPEG APP7 "Qualcomm Camera
34
34
  Attributes" segment written by some cameras such as the HP iPAQ Voice
@@ -1228,7 +1228,7 @@ my @qualcommFormat = (
1228
1228
  %Image::ExifTool::Qualcomm::DualCamera = (
1229
1229
  PROCESS_PROC => \&ProcessDualCamera,
1230
1230
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1231
- VARS => { NO_ID => 1, NO_LOOKUP => 1 }, # too long, too many, and too obscure
1231
+ VARS => { ID_FMT => 'none', NO_LOOKUP => 1 }, # too long, too many, and too obscure
1232
1232
  NOTES => q{
1233
1233
  Found in JPEG APP4 "Qualcomm Dual Camera Attributes" written by some Nokia
1234
1234
  phones.
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
49
49
  use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
 
52
- $VERSION = '3.19';
52
+ $VERSION = '3.21';
53
53
 
54
54
  sub ProcessMOV($$;$);
55
55
  sub ProcessKeys($$$);
@@ -2269,6 +2269,27 @@ my %userDefined = (
2269
2269
  Base => '$start - 10',
2270
2270
  ByteOrder => 'LittleEndian',
2271
2271
  },
2272
+ },{
2273
+ Name => 'MakerNoteRicohPentax2',
2274
+ # used by cameras such as the Ricoh GR III
2275
+ Condition => '$$valPt=~/^RICOH\0II/',
2276
+ SubDirectory => {
2277
+ TagTable => 'Image::ExifTool::Pentax::Main',
2278
+ ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
2279
+ Start => 8,
2280
+ Base => '$start - 8',
2281
+ ByteOrder => 'LittleEndian',
2282
+ },
2283
+ },{
2284
+ Name => 'MakerNoteRicohPentax3',
2285
+ Condition => '$$valPt=~/^RICOH\0MM/', # (just in case)
2286
+ SubDirectory => {
2287
+ TagTable => 'Image::ExifTool::Pentax::Main',
2288
+ ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
2289
+ Start => 8,
2290
+ Base => '$start - 8',
2291
+ ByteOrder => 'BigEndian',
2292
+ },
2272
2293
  },{
2273
2294
  Name => 'MakerNotePentaxUnknown',
2274
2295
  Binary => 1,
@@ -7301,6 +7322,7 @@ my %userDefined = (
7301
7322
  },
7302
7323
  {
7303
7324
  Name => 'TimeToSampleTable',
7325
+ Format => 'undef',
7304
7326
  Flags => ['Binary','Unknown'],
7305
7327
  },
7306
7328
  ],
@@ -10063,14 +10085,14 @@ sub ProcessMOV($$;$)
10063
10085
  ProcessKenwoodTrailer($et, { RAF => $raf }, $tbl);
10064
10086
  last;
10065
10087
  }
10066
- $ignore = 1;
10067
- if ($tagInfo and not $$tagInfo{Unknown} and not $eeTag) {
10088
+ if (not $tagInfo or $$tagInfo{Unknown}) {
10089
+ $ignore = 1;
10090
+ } elsif ($size > 0x8000000) {
10068
10091
  my $t = PrintableTagID($tag,2);
10069
- if ($size > 0x8000000) {
10070
- $et->Warn("Skipping '${t}' atom > 128 MiB", 1);
10071
- } else {
10072
- $et->Warn("Skipping '${t}' atom > 32 MiB", 2) or $ignore = 0;
10073
- }
10092
+ $et->Warn("Skipping '${t}' atom > 128 MiB", $eeTag ? 2 : 1) and $ignore = 1;
10093
+ } elsif (not $eeTag) {
10094
+ my $t = PrintableTagID($tag,2);
10095
+ $et->Warn("Skipping '${t}' atom > 32 MiB", 2) and $ignore = 1;
10074
10096
  }
10075
10097
  }
10076
10098
  if (defined $tagInfo and not $ignore and not ($tagInfo and $$tagInfo{DontRead})) {
@@ -111,7 +111,7 @@ my %insvLimit = (
111
111
  The tags below are extracted from timed metadata in QuickTime and other
112
112
  formats of video files when the ExtractEmbedded option is used. Although
113
113
  most of these tags are combined into the single table below, ExifTool
114
- currently reads 110 different types of timed GPS metadata from video files.
114
+ currently reads 111 different types of timed GPS metadata from video files.
115
115
  },
116
116
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
117
117
  GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
@@ -211,12 +211,13 @@ key:
211
211
  an ID_LABEL of "Index" is assumed for tables which use
212
212
  ProcessBinaryData or set the IS_BINARY flag.
213
213
 
214
- NO_ID Avoid printing "Tag ID" column in tag name documentation.
215
-
216
- HEX_ID Print tag ID in hexadecimal (with 4 hex digits or more). Set
217
- to 0 for string ID's that look like hex numbers to prevent
218
- them from being converted when importing an XML file for
219
- language translations in BuildLangModules().
214
+ ID_FMT Format for tag ID's in the documentation. Setting is 'hex' to
215
+ print tag ID in hexadecimal (with 4 hex digits or more), 'dec'
216
+ to leave as decimal, 'str' to use a quoted string, or 'none'
217
+ to drop the "Tag ID" column entirely. Any setting other than
218
+ 'hex' prevents hex-looking strings from being converted when
219
+ importing an XML file for language translations in
220
+ BuildLangModules().
220
221
 
221
222
  NO_LOOKUP Do not add tags to TagLookup.pm lookup tables.
222
223
 
@@ -30,7 +30,7 @@ use strict;
30
30
  use vars qw($VERSION $AUTOLOAD);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
 
33
- $VERSION = '1.71';
33
+ $VERSION = '1.72';
34
34
 
35
35
  sub ConvertTimecode($);
36
36
  sub ProcessSGLT($$$);
@@ -2031,6 +2031,7 @@ sub ProcessRIFF($$)
2031
2031
  my $validate = $et->Options('Validate');
2032
2032
  my $ee = $et->Options('ExtractEmbedded');
2033
2033
  my $hash = $$et{ImageDataHash};
2034
+ my $base = 0;
2034
2035
 
2035
2036
  # verify this is a valid RIFF file
2036
2037
  return 0 unless $raf->Read($buff, 12) == 12;
@@ -2042,7 +2043,8 @@ sub ProcessRIFF($$)
2042
2043
  return 0 unless $buff =~ /^(LA0[234]|OFR |LPAC|wvpk)/ and $raf->Read($buf2, 1024);
2043
2044
  $type = $riffType{$1};
2044
2045
  $buff .= $buf2;
2045
- return 0 unless $buff =~ /WAVE(.{4})?fmt /sg and $raf->Seek(pos($buff) - 4, 0);
2046
+ return 0 unless $buff =~ /WAVE(.{4})?(junk|fmt )/sg and $raf->Seek(pos($buff) - 4, 0);
2047
+ $base = pos($buff) - 16;
2046
2048
  }
2047
2049
  $$raf{NoBuffer} = 1 if $et->Options('FastScan'); # disable buffering in FastScan mode
2048
2050
  $mime = $riffMimeType{$type} if $type;
@@ -2159,7 +2161,7 @@ sub ProcessRIFF($$)
2159
2161
  DataPos => 0, # (relative to Base)
2160
2162
  Start => 0,
2161
2163
  Size => $len,
2162
- Base => $pos,
2164
+ Base => $pos + $base,
2163
2165
  );
2164
2166
  if ($setGroups) {
2165
2167
  delete $$et{SET_GROUP0};
@@ -22,7 +22,7 @@ my $implementedRawzorVersion = 199; # (up to version 1.99)
22
22
  # Rawzor-specific tags
23
23
  %Image::ExifTool::Rawzor::Main = (
24
24
  GROUPS => { 2 => 'Other' },
25
- VARS => { NO_ID => 1 },
25
+ VARS => { ID_FMT => 'none' },
26
26
  NOTES => q{
27
27
  Rawzor files store compressed images of other formats. As well as the
28
28
  information listed below, exiftool uncompresses and extracts the meta