exiftool_vendored 12.68.0 → 12.72.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +98 -15
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +10 -10
  7. data/bin/exiftool +32 -25
  8. data/bin/lib/Image/ExifTool/AAC.pm +175 -0
  9. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
  10. data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
  11. data/bin/lib/Image/ExifTool/Canon.pm +87 -20
  12. data/bin/lib/Image/ExifTool/DJI.pm +3 -2
  13. data/bin/lib/Image/ExifTool/DNG.pm +25 -2
  14. data/bin/lib/Image/ExifTool/EXE.pm +54 -6
  15. data/bin/lib/Image/ExifTool/Exif.pm +204 -22
  16. data/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
  17. data/bin/lib/Image/ExifTool/GIF.pm +5 -1
  18. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  19. data/bin/lib/Image/ExifTool/ID3.pm +76 -10
  20. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  21. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/JSON.pm +4 -1
  23. data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
  24. data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
  25. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  26. data/bin/lib/Image/ExifTool/Nikon.pm +213 -105
  27. data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
  28. data/bin/lib/Image/ExifTool/PNG.pm +8 -13
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +15 -2
  30. data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
  31. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -2
  32. data/bin/lib/Image/ExifTool/QuickTime.pm +60 -14
  33. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
  34. data/bin/lib/Image/ExifTool/README +14 -5
  35. data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
  36. data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
  37. data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
  38. data/bin/lib/Image/ExifTool/Sony.pm +177 -37
  39. data/bin/lib/Image/ExifTool/TagLookup.pm +6971 -6714
  40. data/bin/lib/Image/ExifTool/TagNames.pod +957 -372
  41. data/bin/lib/Image/ExifTool/Text.pm +4 -5
  42. data/bin/lib/Image/ExifTool/Validate.pm +23 -20
  43. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  44. data/bin/lib/Image/ExifTool/WriteExif.pl +33 -8
  45. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
  46. data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
  47. data/bin/lib/Image/ExifTool/Writer.pl +121 -28
  48. data/bin/lib/Image/ExifTool/XMP.pm +67 -2
  49. data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
  50. data/bin/lib/Image/ExifTool.pm +94 -43
  51. data/bin/lib/Image/ExifTool.pod +28 -17
  52. data/bin/perl-Image-ExifTool.spec +9 -9
  53. data/lib/exiftool_vendored/version.rb +1 -1
  54. metadata +3 -2
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.68';
32
+ $VERSION = '12.72';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -132,7 +132,7 @@ sub Rename($$$);
132
132
  sub Unlink($@);
133
133
  sub SetFileTime($$;$$$$);
134
134
  sub DoEscape($$);
135
- sub ConvertFileSize($);
135
+ sub ConvertFileSize($;$);
136
136
  sub ParseArguments($;@); #(defined in attempt to avoid mod_perl problem)
137
137
  sub ReadValue($$$;$$$);
138
138
 
@@ -145,16 +145,16 @@ sub ReadValue($$$;$$$);
145
145
  WPG ICO PICT PNG MNG FLIF DjVu DPX OpenEXR ZISRAW MRC LIF MRC::FEI12 MIFF
146
146
  PCX PGF PSP PhotoCD Radiance Other::PFM PDF PostScript Photoshop::Header
147
147
  Photoshop::Layers Photoshop::ImageData FujiFilm::RAF FujiFilm::IFD
148
- Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3 ID3::Lyrics3
149
- FLAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible MPC MPEG::Audio
150
- MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile QuickTime::Stream
151
- QuickTime::Tags360Fly Matroska Matroska::StdTag MOI MXF DV Flash Flash::FLV
152
- Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS XISF
153
- MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion
154
- EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard
155
- Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR
156
- ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem
157
- FlashPix::DocTable
148
+ FujiFilm::MRAW Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3
149
+ ID3::Lyrics3 FLAC AAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible
150
+ MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile
151
+ QuickTime::Stream QuickTime::Tags360Fly Matroska Matroska::StdTag MOI MXF DV
152
+ Flash Flash::FLV Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF
153
+ WTV DICOM FITS XISF MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH
154
+ Torrent EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF
155
+ EXE::AR EXE::CHM LNK Font VCard Text VCard::VCalendar VCard::VNote RSRC
156
+ Rawzor ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF
157
+ FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
158
158
  );
159
159
 
160
160
  # alphabetical list of current Lang modules
@@ -197,7 +197,7 @@ $defaultLang = 'en'; # default language
197
197
  RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
198
198
  RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard LRI
199
199
  R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD ICO
200
- TXT);
200
+ TXT AAC);
201
201
 
202
202
  # file types that we can write (edit)
203
203
  my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -206,6 +206,7 @@ my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
206
206
  my %writeTypes; # lookup for writable file types (hash filled if required)
207
207
 
208
208
  # file extensions that we can't write for various base types
209
+ # (See here for 3FR reason: https://exiftool.org/forum/index.php?msg=17570)
209
210
  %noWriteFile = (
210
211
  TIFF => [ qw(3FR DCR K25 KDC SRF) ],
211
212
  XMP => [ qw(SVG INX) ],
@@ -232,6 +233,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
232
233
  '7Z' => ['7Z', '7z archive'],
233
234
  A => ['EXE', 'Static library'],
234
235
  AA => ['AA', 'Audible Audiobook'],
236
+ AAC => ['AAC', 'Advanced Audio Coding'],
235
237
  AAE => ['PLIST','Apple edit information'],
236
238
  AAX => ['MOV', 'Audible Enhanced Audiobook'],
237
239
  ACR => ['DICOM','American College of Radiology ACR-NEMA'],
@@ -365,6 +367,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
365
367
  JPC => 'J2C',
366
368
  JPE => 'JPEG',
367
369
  JPEG => ['JPEG', 'Joint Photographic Experts Group'],
370
+ JPH => ['JP2', 'High-throughput JPEG 2000'],
368
371
  JPF => 'JP2',
369
372
  JPG => 'JPEG',
370
373
  JPM => ['JP2', 'JPEG 2000 compound image'],
@@ -596,6 +599,7 @@ my %fileDescription = (
596
599
  '3FR' => 'image/x-hasselblad-3fr',
597
600
  '7Z' => 'application/x-7z-compressed',
598
601
  AA => 'audio/audible',
602
+ AAC => 'audio/aac',
599
603
  AAE => 'application/vnd.apple.photos',
600
604
  AI => 'application/vnd.adobe.illustrator',
601
605
  AIFF => 'audio/x-aiff',
@@ -677,6 +681,7 @@ my %fileDescription = (
677
681
  JNG => 'image/jng',
678
682
  JP2 => 'image/jp2',
679
683
  JPEG => 'image/jpeg',
684
+ JPH => 'image/jph',
680
685
  JPM => 'image/jpm',
681
686
  JPS => 'image/x-jps',
682
687
  JPX => 'image/jpx',
@@ -891,6 +896,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
891
896
  # - this test must not be more stringent than module logic
892
897
  %magicNumber = (
893
898
  AA => '.{4}\x57\x90\x75\x36',
899
+ AAC => '\xff[\xf0\xf1]',
894
900
  AIFF => '(FORM....AIF[FC]|AT&TFORM)',
895
901
  ALIAS=> "book\0\0\0\0mark\0\0\0\0",
896
902
  APE => '(MAC |APETAGEX|ID3)',
@@ -1066,6 +1072,7 @@ my %xmpShorthandOpt = ( 0 => 'None', 1 => 'Shorthand', 2 => ['Shorthand','OneDes
1066
1072
  my @availableOptions = (
1067
1073
  [ 'Binary', undef, 'flag to extract binary values even if tag not specified' ],
1068
1074
  [ 'ByteOrder', undef, 'default byte order when creating EXIF information' ],
1075
+ [ 'ByteUnit', 'SI', 'units for byte conversions (SI or Binary)'],
1069
1076
  [ 'Charset', 'UTF8', 'character set for converting Unicode characters' ],
1070
1077
  [ 'CharsetEXIF', undef, 'internal EXIF "ASCII" string encoding' ],
1071
1078
  [ 'CharsetFileName', undef, 'external encoding for file names' ],
@@ -1112,6 +1119,7 @@ my @availableOptions = (
1112
1119
  [ 'MakerNotes', undef, 'extract maker notes as a block' ],
1113
1120
  [ 'MDItemTags', undef, 'extract MacOS metadata item tags' ],
1114
1121
  [ 'MissingTagValue', undef, 'value for missing tags when expanded in expressions' ],
1122
+ [ 'NoMandatory', undef, 'bypass writing of mandatory EXIF tags' ],
1115
1123
  [ 'NoMultiExif', undef, 'raise error when writing multi-segment EXIF' ],
1116
1124
  [ 'NoPDFList', undef, 'flag to avoid splitting PDF List-type tag values' ],
1117
1125
  [ 'NoWarning', undef, 'regular expression for warnings to suppress' ],
@@ -1307,8 +1315,9 @@ my %systemTagsNotes = (
1307
1315
  FileSize => {
1308
1316
  Groups => { 1 => 'System', 2 => 'Other' },
1309
1317
  Notes => q{
1310
- note that the print conversion for this tag uses historic prefixes: 1 kB =
1311
- 1024 bytes, etc.
1318
+ note that the print conversion for this tag uses SI prefixes by default: 1
1319
+ kB = 1000 bytes, etc. Set the API ByteUnit option to "Binary" to use binary
1320
+ prefixes instead: 1 KiB = 1024 bytes, etc.
1312
1321
  },
1313
1322
  PrintConv => \&ConvertFileSize,
1314
1323
  },
@@ -2413,17 +2422,28 @@ sub Options($$;@)
2413
2422
  }
2414
2423
  $$options{$param} = $newVal;
2415
2424
  } elsif ($param eq 'ImageHashType') {
2416
- if (defined $newVal and $newVal =~ /^(MD5|SHA256|SHA512)$/i) {
2425
+ if (not defined $newVal) {
2426
+ warn("Can't set $param to undef\n");
2427
+ } elsif ($newVal =~ /^(MD5|SHA256|SHA512)$/i) {
2417
2428
  $$options{$param} = uc($newVal);
2418
2429
  } else {
2419
- warn("Invalid $param setting '${newVal}'\n"), return $oldVal;
2430
+ warn("Invalid $param setting '${newVal}'\n");
2420
2431
  }
2421
2432
  } elsif ($param eq 'StructFormat') {
2422
2433
  if (defined $newVal) {
2423
- $newVal =~ /^(JSON|JSONQ)$/i or warn("Invalid $param setting '${newVal}'\n"), return $oldVal;
2434
+ $newVal =~ /^(JSON|JSONQ)$/i or warn("Invalid $param setting '${newVal}'\n"), next;
2424
2435
  $newVal = uc($newVal);
2425
2436
  }
2426
2437
  $$options{$param} = $newVal;
2438
+ } elsif ($param eq 'ByteUnit') {
2439
+ if (defined $newVal) {
2440
+ # (allow "Metric" or "SI" for SI, and "IT" or "Binary" for Binary)
2441
+ my $goodVal = ($newVal =~ /^S|M/i ? 'SI' : ($newVal =~ /^I|B/i ? 'Binary' : undef));
2442
+ $goodVal or warn("Invalid $param setting '${newVal}'\n"), next;
2443
+ $$options{$param} = $goodVal;
2444
+ } else {
2445
+ warn("Can't set $param to undef\n");
2446
+ }
2427
2447
  } else {
2428
2448
  if ($param eq 'Escape') {
2429
2449
  # set ESCAPE_PROC
@@ -2548,7 +2568,7 @@ sub ExtractInfo($;@)
2548
2568
  $self->WarnOnce('Install Time::HiRes to generate ProcessingTime');
2549
2569
  }
2550
2570
  }
2551
-
2571
+
2552
2572
  # create Hash object if ImageDataHash is requested
2553
2573
  if ($$req{imagedatahash} and not $$self{ImageDataHash}) {
2554
2574
  my $imageHashType = $self->Options('ImageHashType');
@@ -3456,9 +3476,10 @@ sub GetValue($$;$)
3456
3476
  } elsif (wantarray) {
3457
3477
  # return array if requested
3458
3478
  return @$value;
3459
- } elsif ($type eq 'PrintConv' and not $$self{OPTIONS}{List} and not ref $$value[0]) {
3460
- # join PrintConv values in comma-separated string if List option not used
3479
+ } elsif ($type eq 'PrintConv' and not $$self{OPTIONS}{List}) {
3480
+ # join PrintConv values in delimited string if List option not used
3461
3481
  # and list contains simple scalars (otherwise return ARRAY ref)
3482
+ ref and return $value foreach @$value;
3462
3483
  $value = join $$self{OPTIONS}{ListSep}, @$value;
3463
3484
  }
3464
3485
  }
@@ -4159,12 +4180,16 @@ sub ExtractAltInfo($)
4159
4180
  next unless defined $fileName;
4160
4181
  }
4161
4182
  $altExifTool->ExtractInfo($fileName);
4183
+ my $err = $$altExifTool{VALUE}{Error};
4184
+ $err and $self->Warn(qq{$err "$fileName"});
4162
4185
  # set family 8 group name for all tags
4163
4186
  foreach (keys %{$$altExifTool{VALUE}}) {
4164
4187
  my $ex = $$altExifTool{TAG_EXTRA}{$_};
4165
4188
  $ex or $ex = $$altExifTool{TAG_EXTRA}{$_} = { };
4166
4189
  $$ex{G8} = $g8;
4167
4190
  }
4191
+ # prepare our sorted list of found tags
4192
+ $$altExifTool{FoundTags} = [ reverse sort keys %{$$altExifTool{VALUE}} ];
4168
4193
  $$altExifTool{DID_EXTRACT} = 1;
4169
4194
  }
4170
4195
  # if necessary, build composite tags that rely on tags from alternate files
@@ -6023,7 +6048,7 @@ sub ConvertDateTime($$)
6023
6048
  ++$a[5];
6024
6049
  last; # (this was a goto)
6025
6050
  }
6026
- }
6051
+ }
6027
6052
  }
6028
6053
  $neg and $frac =~ s/^\.//;
6029
6054
  $fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
@@ -6203,16 +6228,26 @@ sub GetUnixTime($;$)
6203
6228
  # Print conversion for file size
6204
6229
  # Inputs: 0) file size in bytes
6205
6230
  # Returns: converted file size
6206
- sub ConvertFileSize($)
6207
- {
6208
- my $val = shift;
6209
- $val < 2000 and return "$val bytes";
6210
- $val < 10000 and return sprintf('%.1f kB', $val / 1000);
6211
- $val < 2000000 and return sprintf('%.0f kB', $val / 1000);
6212
- $val < 10000000 and return sprintf('%.1f MB', $val / 1000000);
6213
- $val < 2000000000 and return sprintf('%.0f MB', $val / 1000000);
6214
- $val < 10000000000 and return sprintf('%.1f GB', $val / 1000000000);
6215
- return sprintf('%.0f GB', $val / 1000000000);
6231
+ sub ConvertFileSize($;$)
6232
+ {
6233
+ my ($val, $et) = @_;
6234
+ if ($et and $$et{OPTIONS}{ByteUnit} eq 'Binary') {
6235
+ $val < 2048 and return "$val bytes";
6236
+ $val < 10240 and return sprintf('%.1f KiB', $val / 1024);
6237
+ $val < 2097152 and return sprintf('%.0f KiB', $val / 1024);
6238
+ $val < 10485760 and return sprintf('%.1f MiB', $val / 1048576);
6239
+ $val < 2147483648 and return sprintf('%.0f MiB', $val / 1048576);
6240
+ $val < 10737418240 and return sprintf('%.1f GiB', $val / 1073741824);
6241
+ return sprintf('%.0f GiB', $val / 1073741824);
6242
+ } else {
6243
+ $val < 2000 and return "$val bytes";
6244
+ $val < 10000 and return sprintf('%.1f kB', $val / 1000);
6245
+ $val < 2000000 and return sprintf('%.0f kB', $val / 1000);
6246
+ $val < 10000000 and return sprintf('%.1f MB', $val / 1000000);
6247
+ $val < 2000000000 and return sprintf('%.0f MB', $val / 1000000);
6248
+ $val < 10000000000 and return sprintf('%.1f GB', $val / 1000000000);
6249
+ return sprintf('%.0f GB', $val / 1000000000);
6250
+ }
6216
6251
  }
6217
6252
 
6218
6253
  #------------------------------------------------------------------------------
@@ -6714,6 +6749,7 @@ sub ProcessJPEG($$)
6714
6749
  pop @$path;
6715
6750
  $verbose and print $out "JPEG EOI\n";
6716
6751
  my $pos = $raf->Tell();
6752
+ $$self{TrailerStart} = $pos unless $$self{DOC_NUM};
6717
6753
  if ($htmlDump and $dumpEnd) {
6718
6754
  $self->HDump($dumpEnd, $pos-2-$dumpEnd, '[JPEG Image Data]', undef, 0x08);
6719
6755
  $self->HDump($pos-2, 2, 'JPEG EOI', undef);
@@ -6852,8 +6888,10 @@ sub ProcessJPEG($$)
6852
6888
  require Image::ExifTool::Panasonic;
6853
6889
  Image::ExifTool::Panasonic::ProcessLeicaTrailer($self);
6854
6890
  $wantTrailer = 1 if $$self{LeicaTrailer};
6855
- } else {
6856
- $wantTrailer = 1 if $$options{ExtractEmbedded};
6891
+ } elsif ($$options{ExtractEmbedded} or ($$self{VALUE}{HiddenDataOffset} and
6892
+ $$self{VALUE}{HiddenDataLength} and ($$options{Validate} or $$req{hiddendata})))
6893
+ {
6894
+ $wantTrailer = 1;
6857
6895
  }
6858
6896
  next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
6859
6897
  }
@@ -7480,7 +7518,8 @@ sub ProcessJPEG($$)
7480
7518
  my $hdr = $1;
7481
7519
  $dumpType = 'JUMBF';
7482
7520
  SetByteOrder('MM');
7483
- my $seq = Get32u($segDataPt, 4) - 1; # (start from 0)
7521
+ # (sequence should start from 1, but some software incorrectly writes 0)
7522
+ my $seq = Get32u($segDataPt, 4);
7484
7523
  my $len = Get32u($segDataPt, 8);
7485
7524
  my $type = substr($$segDataPt, 12, 4);
7486
7525
  my $hdrLen;
@@ -7490,14 +7529,13 @@ sub ProcessJPEG($$)
7490
7529
  } else {
7491
7530
  $hdrLen = 8;
7492
7531
  }
7493
- $jumbfChunk{$type} or $jumbfChunk{$type} = [ ];
7532
+ $jumbfChunk{$type} or $jumbfChunk{$type} = [ '' ];
7494
7533
  if ($len < $hdrLen) {
7495
7534
  $self->Warn('Invalid JUMBF segment');
7496
- } elsif ($seq < 0) {
7497
- $self->Warn('Invalid JUMBF sequence number');
7498
- } elsif (defined $jumbfChunk{$type}[$seq]) {
7535
+ } elsif (defined $jumbfChunk{$type}[$seq] and length $jumbfChunk{$type}[$seq]) {
7499
7536
  $self->Warn('Duplicate JUMBF sequence number');
7500
7537
  } else {
7538
+ $seq or $self->Warn('Incorrect JUMBF sequence numbering (should start from 0, not 1)');
7501
7539
  # add to list of JUMBF chunks
7502
7540
  $jumbfChunk{$type}[$seq] = substr($$segDataPt, 8 + $hdrLen);
7503
7541
  # check to see if we have a complete JUMBF box
@@ -7721,6 +7759,19 @@ sub ProcessTIFF($$;$)
7721
7759
  return $rtnVal;
7722
7760
  }
7723
7761
 
7762
+ #------------------------------------------------------------------------------
7763
+ # Process TIFF as a sub-document
7764
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref
7765
+ # Returns: 1 if this looked like a valid EXIF block, 0 otherwise, or -1 on write error
7766
+ sub ProcessSubTIFF($$;$)
7767
+ {
7768
+ my ($self, $dirInfo, $tagTablePtr) = @_;
7769
+ $$self{DOC_NUM} = ++$$self{DOC_COUNT};
7770
+ my $rtnVal = $self->ProcessTIFF($dirInfo, $tagTablePtr);
7771
+ delete $$self{DOC_NUM};
7772
+ return $rtnVal;
7773
+ }
7774
+
7724
7775
  #------------------------------------------------------------------------------
7725
7776
  # Process TIFF data
7726
7777
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref
@@ -7736,8 +7787,8 @@ sub DoProcessTIFF($$;$)
7736
7787
  my ($err, $sig, $canonSig, $otherSig);
7737
7788
 
7738
7789
  # attempt to read TIFF header
7739
- $$self{EXIF_DATA} = '';
7740
7790
  if ($raf) {
7791
+ $$self{EXIF_DATA} = '';
7741
7792
  if ($outfile) {
7742
7793
  $raf->Seek(0, 0) or return 0;
7743
7794
  if ($base) {
@@ -8089,8 +8140,8 @@ sub DoProcessTIFF($$;$)
8089
8140
  # check DNG version
8090
8141
  if ($$self{DNGVersion}) {
8091
8142
  my $ver = $$self{DNGVersion};
8092
- # currently support up to DNG version 1.6
8093
- unless ($ver =~ /^(\d+) (\d+)/ and "$1.$2" <= 1.6) {
8143
+ # currently support up to DNG version 1.7
8144
+ unless ($ver =~ /^(\d+) (\d+)/ and "$1.$2" <= 1.7) {
8094
8145
  $ver =~ tr/ /./;
8095
8146
  $self->Error("DNG Version $ver not yet tested", 1);
8096
8147
  }
@@ -8359,7 +8410,7 @@ sub GetTagInfo($$$;$$$)
8359
8410
  }
8360
8411
  }
8361
8412
  # don't return Unknown tags unless that option is set (also see forum13716)
8362
- if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not
8413
+ if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not
8363
8414
  ($$self{OPTIONS}{Verbose} or $$self{HTML_DUMP} or
8364
8415
  ($$self{OPTIONS}{Validate} and not $$tagInfo{AddedUnknown})))
8365
8416
  {
@@ -467,6 +467,12 @@ big-endian ('MM') order is assumed. This can also be set via the
467
467
  L<ExifByteOrder tag|Image::ExifTool::TagNames/Extra Tags>, but the ByteOrder
468
468
  option takes precedence if both are set.
469
469
 
470
+ =item ByteUnit
471
+
472
+ Units for print conversion of FileSize and other byte values. Either 'SI'
473
+ (eg. kB for 1000 bytes) or 'Binary' (eg. KiB for 1024 bytes). Default is
474
+ 'SI'.
475
+
470
476
  =item Charset
471
477
 
472
478
  Character set for encoding character tag values passed to/from ExifTool with
@@ -554,12 +560,12 @@ without recoding. Default is 0.
554
560
  Comma-delimited list of settings for writing compact XMP. Below is a list
555
561
  of available settings. Note that 'NoPadding' effects only embedded XMP
556
562
  since padding is never written for stand-alone XMP files. Also note that
557
- 'OneDesc' is not recommended when writing XMP larger than 64 kB to a JPG
563
+ 'OneDesc' is not recommended when writing XMP larger than 64 KiB to a JPG
558
564
  file because it interferes with ExifTool's technique of splitting off large
559
565
  rdf:Description elements into the extended XMP. Case is not significant for
560
566
  any of these options. Aliases are given in brackets. Default is undef.
561
567
 
562
- NoPadding - Avoid 2 kB of recommended padding at end of XMP (NoPad)
568
+ NoPadding - Avoid 2 KiB of recommended padding at end of XMP (NoPad)
563
569
  NoIndent - No spaces to indent lines (NoSpace, NoSpaces)
564
570
  NoNewline - Avoid unnecessary newlines (NoNewlines)
565
571
  Shorthand - Use XMP Shorthand format
@@ -867,6 +873,10 @@ writing. This applies only to queued values, and doesn't resolve duplicates
867
873
  with existing values in the file when adding to an existing list. Default
868
874
  is undef.
869
875
 
876
+ =item NoMandatory
877
+
878
+ Flag to bypass writing of mandatory EXIF tags. Default is undef.
879
+
870
880
  =item NoMultiExif
871
881
 
872
882
  Raise error when attempting to write multi-segment EXIF in a JPEG image.
@@ -2415,23 +2425,24 @@ Here is a complete list of groups for each of these families:
2415
2425
 
2416
2426
  =item Family 0 (Information Type):
2417
2427
 
2418
- AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2, APP3,
2419
- APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG, DV,
2420
- DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC, FLIR, File, Flash, FlashPix,
2421
- Font, FotoStation, GIF, GIMP, GeoTiff, GoPro, H264, HTML, ICC_Profile, ID3,
2422
- IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF, Jpeg2000, LNK, Leaf, Lytro, M2TS,
2423
- MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta,
2424
- Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG, PSP, Palm, Parrot, PanasonicRaw,
2425
- PhotoCD, PhotoMechanic, Photoshop, PostScript, PrintIM, QuickTime, RAF,
2426
- RIFF, RSRC, RTF, Radiance, Rawzor, Real, Red, SVG, SigmaRaw, Stim, Theora,
2427
- Torrent, Trailer, UserParam, VCard, Vorbis, WTV, XML, XMP, ZIP
2428
+ AAC, AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2,
2429
+ APP3, APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG,
2430
+ DV, DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC, FLIR, File, Flash,
2431
+ FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro, H264, HTML,
2432
+ ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF, Jpeg2000, LNK,
2433
+ Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF, MXF,
2434
+ MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG, PSP,
2435
+ Palm, Parrot, PanasonicRaw, PhotoCD, PhotoMechanic, Photoshop, PostScript,
2436
+ PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real, Red, SVG,
2437
+ SigmaRaw, Stim, Theora, Torrent, Trailer, UserParam, VCard, Vorbis, WTV,
2438
+ XML, XMP, ZIP
2428
2439
 
2429
2440
  =item Family 1 (Specific Location):
2430
2441
 
2431
- AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple, Audible,
2432
- CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw, CanonVRD,
2433
- Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta, Ducky,
2434
- EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2442
+ AAC, AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple,
2443
+ Audible, CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw,
2444
+ CanonVRD, Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta,
2445
+ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2435
2446
  FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
2436
2447
  GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
2437
2448
  HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
@@ -2440,7 +2451,7 @@ ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
2440
2451
  IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
2441
2452
  JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
2442
2453
  KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf,
2443
- LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC, MIE-Audio, MIE-Camera,
2454
+ LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio, MIE-Camera,
2444
2455
  MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image,
2445
2456
  MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
2446
2457
  MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.68
3
+ Version: 12.72
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -22,13 +22,14 @@ supported by ExifTool (r = read, w = write, c = create):
22
22
 
23
23
  File Types
24
24
  ------------+-------------+-------------+-------------+------------
25
- 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
26
- 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
27
- 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
28
- 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
29
- 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
30
- A r | DVR-MS r | JSON r | OFR r | RWL r/w
31
- AA r | DYLIB r | JXL r | OGG r | RWZ r
25
+ 360 r/w | DOCX r | ISO r | NRW r/w | RAR r
26
+ 3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
27
+ 3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
28
+ 3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
29
+ 7Z r | DV r | JP2 r/w | ODS r | RTF r
30
+ A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
31
+ AA r | DVR-MS r | JSON r | OFR r | RWL r/w
32
+ AAC r | DYLIB r | JXL r | OGG r | RWZ r
32
33
  AAE r | EIP r | K25 r | OGV r | RM r
33
34
  AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
34
35
  ACR r | EPUB r | KEY r | OPUS r | SKETCH r
@@ -64,7 +65,6 @@ supported by ExifTool (r = read, w = write, c = create):
64
65
  DLL r | INSP r/w | MXF r | RA r | XLSX r
65
66
  DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
66
67
  DOC r | INX r | NKSC r/w | RAM r | ZIP r
67
- DOCX r | ISO r | NRW r/w | RAR r |
68
68
 
69
69
  Meta Information
70
70
  ----------------------+----------------------+---------------------
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.68.0')
4
+ VERSION = Gem::Version.new('12.72.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.68.0
4
+ version: 12.72.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-10-26 00:00:00.000000000 Z
12
+ date: 2023-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool
@@ -78,6 +78,7 @@ files:
78
78
  - bin/lib/Image/ExifTool.pm
79
79
  - bin/lib/Image/ExifTool.pod
80
80
  - bin/lib/Image/ExifTool/7Z.pm
81
+ - bin/lib/Image/ExifTool/AAC.pm
81
82
  - bin/lib/Image/ExifTool/AES.pm
82
83
  - bin/lib/Image/ExifTool/AFCP.pm
83
84
  - bin/lib/Image/ExifTool/AIFF.pm