exiftool_vendored 12.57.0 → 12.58.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +14 -0
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/config_files/rotate_regions.config +1 -1
  7. data/bin/exiftool +25 -21
  8. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  9. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
  11. data/bin/lib/Image/ExifTool/Canon.pm +26 -6
  12. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  13. data/bin/lib/Image/ExifTool/Exif.pm +24 -5
  14. data/bin/lib/Image/ExifTool/FlashPix.pm +2 -2
  15. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  16. data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
  17. data/bin/lib/Image/ExifTool/LNK.pm +5 -4
  18. data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
  19. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  20. data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
  21. data/bin/lib/Image/ExifTool/Nikon.pm +385 -110
  22. data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
  23. data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
  24. data/bin/lib/Image/ExifTool/QuickTime.pm +5 -5
  25. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  26. data/bin/lib/Image/ExifTool/README +8 -0
  27. data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
  28. data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
  30. data/bin/lib/Image/ExifTool/Sony.pm +23 -1
  31. data/bin/lib/Image/ExifTool/TagLookup.pm +4457 -4441
  32. data/bin/lib/Image/ExifTool/TagNames.pod +76 -12
  33. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  34. data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
  35. data/bin/lib/Image/ExifTool/Writer.pl +3 -1
  36. data/bin/lib/Image/ExifTool/XMP.pm +2 -2
  37. data/bin/lib/Image/ExifTool.pm +57 -12
  38. data/bin/perl-Image-ExifTool.spec +1 -1
  39. data/lib/exiftool_vendored/version.rb +1 -1
  40. metadata +2 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 26359 tags, with 16845 unique tag names.
15
+ They contain a total of 26381 tags, with 16854 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -28,7 +28,8 @@ gives the order of values for a serial data stream.
28
28
  A B<Tag Name> is the handle by which the information is accessed in
29
29
  ExifTool. In some instances, more than one name may correspond to a single
30
30
  tag ID. In these cases, the actual name used depends on the context in
31
- which the information is found. Case is not significant for tag names. A
31
+ which the information is found. Valid characters in a tag name are A-Z,
32
+ a-z, 0-9, hyphen (-) and underline (_). Case is not significant. A
32
33
  question mark (C<?>) after a tag name indicates that the information is
33
34
  either not understood, not verified, or not very useful -- these tags are
34
35
  not extracted by ExifTool unless the Unknown (-u) option is enabled. Be
@@ -124,6 +125,8 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
124
125
  FPXR FlashPix
125
126
  InfiRayFactory InfiRay Factory
126
127
  ThermalParams DJI ThermalParams
128
+ ThermalParams2 DJI ThermalParams2
129
+ ThermalParams3 DJI ThermalParams3
127
130
  PreviewImage no
128
131
  'APP5' RMETA Ricoh RMETA
129
132
  SamsungUniqueID Samsung APP5
@@ -140,6 +143,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
140
143
  Huawei Unknown
141
144
  Qualcomm Qualcomm
142
145
  InfiRayOpMode InfiRay OpMode
146
+ DJI-DBG DJI Info
143
147
  'APP8' SPIFF JPEG SPIFF
144
148
  InfiRayIsothermal InfiRay Isothermal
145
149
  'APP9' MediaJukebox JPEG MediaJukebox
@@ -10866,6 +10870,30 @@ Thermal parameters extracted from APP4 of DJI RJPEG files from the ZH20T.
10866
10870
  86 DB no
10867
10871
  88 KK no
10868
10872
 
10873
+ =head3 DJI ThermalParams2 Tags
10874
+
10875
+ Thermal parameters extracted from APP4 of DJI M3T RJPEG files.
10876
+
10877
+ Index1 Tag Name Writable
10878
+ ------ -------- --------
10879
+ 0 AmbientTemperature no
10880
+ 4 ObjectDistance no
10881
+ 8 Emissivity no
10882
+ 12 RelativeHumidity no
10883
+ 16 ReflectedTemperature no
10884
+ 101 IDString no
10885
+
10886
+ =head3 DJI ThermalParams3 Tags
10887
+
10888
+ Thermal parameters extracted from APP4 of some DJI RJPEG files.
10889
+
10890
+ Index1 Tag Name Writable
10891
+ ------ -------- --------
10892
+ 4 RelativeHumidity no
10893
+ 6 ObjectDistance no
10894
+ 8 Emissivity no
10895
+ 10 ReflectedTemperature no
10896
+
10869
10897
  =head2 FLIR Tags
10870
10898
 
10871
10899
  Information extracted from the maker notes of JPEG images from thermal
@@ -13707,6 +13735,8 @@ DiMAGE X and Xt.
13707
13735
  ShotInfoD300b Nikon ShotInfoD300b
13708
13736
  ShotInfoD300S Nikon ShotInfoD300S
13709
13737
  ShotInfoD700 Nikon ShotInfoD700
13738
+ ShotInfoD780 Nikon ShotInfoD780
13739
+ ShotInfoD7500 Nikon ShotInfoD7500
13710
13740
  ShotInfoD800 Nikon ShotInfoD800
13711
13741
  ShotInfoD810 Nikon ShotInfoD810
13712
13742
  ShotInfoD850 Nikon ShotInfoD850
@@ -14246,6 +14276,34 @@ firmware 1.02f.
14246
14276
  647 ShutterCount int32u
14247
14277
  804 CustomSettingsD700 NikonCustom SettingsD700
14248
14278
 
14279
+ =head3 Nikon ShotInfoD780 Tags
14280
+
14281
+ These tags are extracted from encrypted data in images from the D780.
14282
+
14283
+ Index Tag Name Writable
14284
+ ----- -------- --------
14285
+ 0 ShotInfoVersion no
14286
+ 4 FirmwareVersion no
14287
+ 156 OrientOffset Nikon OrientationInfo
14288
+
14289
+ =head3 Nikon OrientationInfo Tags
14290
+
14291
+ Index1 Tag Name Writable
14292
+ ------ -------- --------
14293
+ 0 RollAngle fixed32u
14294
+ 4 PitchAngle fixed32u
14295
+ 8 YawAngle fixed32u
14296
+
14297
+ =head3 Nikon ShotInfoD7500 Tags
14298
+
14299
+ These tags are extracted from encrypted data in images from the D7500.
14300
+
14301
+ Index Tag Name Writable
14302
+ ----- -------- --------
14303
+ 0 ShotInfoVersion no
14304
+ 4 FirmwareVersion no
14305
+ 160 OrientOffset Nikon OrientationInfo
14306
+
14249
14307
  =head3 Nikon ShotInfoD800 Tags
14250
14308
 
14251
14309
  These tags are extracted from encrypted data in images from the D800.
@@ -14299,14 +14357,6 @@ These tags are extracted from encrypted data in images from the D810.
14299
14357
  4 ISOAutoShutterTime int8u & 0x3f
14300
14358
  5 ISOAutoHiLimit int8u & 0xff
14301
14359
 
14302
- =head3 Nikon OrientationInfo Tags
14303
-
14304
- Index1 Tag Name Writable
14305
- ------ -------- --------
14306
- 0 RollAngle fixed32u
14307
- 4 PitchAngle fixed32u
14308
- 8 YawAngle fixed32u
14309
-
14310
14360
  =head3 Nikon ShotInfoD850 Tags
14311
14361
 
14312
14362
  These tags are extracted from encrypted data in images from the D850.
@@ -14606,6 +14656,7 @@ These tags are extracted from encrypted data in images from the Z9.
14606
14656
  0 ShotInfoVersion no
14607
14657
  4 FirmwareVersion no
14608
14658
  48 SequenceOffset Nikon SeqInfoZ9
14659
+ 88 Offset13 Nikon Offset13InfoZ9
14609
14660
  132 OrientOffset Nikon OrientationInfo
14610
14661
  140 MenuOffset Nikon MenuInfoZ9
14611
14662
 
@@ -14616,6 +14667,15 @@ These tags are extracted from encrypted data in images from the Z9.
14616
14667
  32 FocusShiftShooting int8u~
14617
14668
  40 IntervalShooting int16u~
14618
14669
 
14670
+ =head3 Nikon Offset13InfoZ9 Tags
14671
+
14672
+ Index1 Tag Name Writable
14673
+ ------ -------- --------
14674
+ 3048 AFAreaInitialXPosition int8s~
14675
+ 3049 AFAreaInitialYPosition int8s~
14676
+ 3050 AFAreaInitialWidth no
14677
+ 3051 AFAreaInitialHeight no
14678
+
14619
14679
  =head3 Nikon MenuInfoZ9 Tags
14620
14680
 
14621
14681
  Index1 Tag Name Writable
@@ -14662,6 +14722,7 @@ These tags are used by the Z9.
14662
14722
  556 SecondarySlotFunction int8u
14663
14723
  572 DXCropAlert int8u
14664
14724
  574 SubjectDetection int8u
14725
+ 576 DynamicAFAreaSize int8u
14665
14726
  604 MovieImageArea? int8u & 0x01
14666
14727
  614 MovieType? int8u
14667
14728
  616 MovieISOAutoHiLimit? int16u
@@ -14737,6 +14798,7 @@ These tags are used by the Z9 firmware 3.00.
14737
14798
  576 SecondarySlotFunction int8u
14738
14799
  592 DXCropAlert int8u
14739
14800
  594 SubjectDetection int8u
14801
+ 596 DynamicAFAreaSize int8u
14740
14802
  636 HighFrequencyFlickerReductionShooting? int8u
14741
14803
  646 MovieImageArea? int8u & 0x01
14742
14804
  656 MovieType? int8u
@@ -14938,15 +15000,16 @@ Tags found in the encrypted LensData from cameras such as the Z6 and Z7.
14938
15000
  18 MaxApertureAtMaxFocal int8u
14939
15001
  19 MCUVersion int8u
14940
15002
  20 EffectiveMaxAperture int8u
15003
+ 47 NewLensData undef[17]
14941
15004
  48 LensID int16u
14942
- 53 LensMountType? int8u
15005
+ 53 LensMountType int8u
14943
15006
  54 MaxAperture int16u
14944
15007
  56 FNumber int16u
14945
15008
  60 FocalLength int16u
14946
15009
  76 FocusDistanceRangeWidth? int8u
14947
15010
  78 FocusDistance int16u~
14948
15011
  86 LensDriveEnd? int8u
14949
- 90 LensPositionAbsolute? int32s
15012
+ 90 LensPositionAbsolute int32s
14950
15013
 
14951
15014
  =head3 Nikon LensDataUnknown Tags
14952
15015
 
@@ -38055,6 +38118,7 @@ FileName.
38055
38118
  ICC_Profile ICC_Profile yes!
38056
38119
  ID3Size File no
38057
38120
  IPTC IPTC yes!
38121
+ ImageDataMD5 File no
38058
38122
  ImageHeight File no
38059
38123
  ImageWidth File no
38060
38124
  JPEGDigest File no
@@ -17,7 +17,7 @@ package Image::ExifTool::Validate;
17
17
  use strict;
18
18
  use vars qw($VERSION %exifSpec);
19
19
 
20
- $VERSION = '1.19';
20
+ $VERSION = '1.20';
21
21
 
22
22
  use Image::ExifTool qw(:Utils);
23
23
  use Image::ExifTool::Exif;
@@ -437,8 +437,8 @@ sub ValidateExif($$$$$$$$)
437
437
  $et->Warn(sprintf('Wrong IFD for 0x%.4x %s (should be %s not %s)', $tag, $$ti{Name}, $wgp, $ifd));
438
438
  }
439
439
  }
440
- } elsif (not $otherSpec{$$et{VALUE}{FileType}} or
441
- (not $otherSpec{$$et{VALUE}{FileType}}{$tag} and not $otherSpec{$$et{VALUE}{FileType}}{All}))
440
+ } elsif (not $otherSpec{$$et{FileType}} or
441
+ (not $otherSpec{$$et{FileType}}{$tag} and not $otherSpec{$$et{FileType}}{All}))
442
442
  {
443
443
  if ($tagTablePtr eq \%Image::ExifTool::Exif::Main or $$tagInfo{Unknown}) {
444
444
  $et->Warn(sprintf('Non-standard %s tag 0x%.4x %s', $ifd, $tag, $$ti{Name}), 1);
@@ -459,8 +459,8 @@ sub ValidateExif($$$$$$$$)
459
459
  $et->Warn(sprintf('Non-standard count (%d) for %s 0x%.4x %s', $count, $ifd, $tag, $$ti{Name}));
460
460
  }
461
461
  }
462
- } elsif (not $otherSpec{$$et{VALUE}{FileType}} or
463
- (not $otherSpec{$$et{VALUE}{FileType}}{$tag} and not $otherSpec{$$et{VALUE}{FileType}}{All}))
462
+ } elsif (not $otherSpec{$$et{FileType}} or
463
+ (not $otherSpec{$$et{FileType}}{$tag} and not $otherSpec{$$et{FileType}}{All}))
464
464
  {
465
465
  $et->Warn(sprintf('Unknown %s tag 0x%.4x', $ifd, $tag), 1);
466
466
  }
@@ -419,6 +419,48 @@ sub ValidateImageData($$$;$)
419
419
  }
420
420
  }
421
421
 
422
+ #------------------------------------------------------------------------------
423
+ # Add specified image data to ImageDataMD5 hash
424
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) lookup for [tagInfo,value] based on tagID
425
+ sub AddImageDataMD5($$$)
426
+ {
427
+ my ($et, $dirInfo, $offsetInfo) = @_;
428
+ my ($tagID, $offset, $buff);
429
+
430
+ my $verbose = $et->Options('Verbose');
431
+ my $md5 = $$et{ImageDataMD5};
432
+ my $raf = $$dirInfo{RAF};
433
+ my $base = $$dirInfo{Base} || 0;
434
+
435
+ foreach $tagID (sort keys %$offsetInfo) {
436
+ next unless ref $$offsetInfo{$tagID} eq 'ARRAY'; # ignore scalar tag values used for Validate
437
+ my $tagInfo = $$offsetInfo{$tagID}[0];
438
+ next unless $$tagInfo{IsImageData} and $$tagInfo{OffsetPair}; # only consider image data
439
+ my $sizeID = $$tagInfo{OffsetPair};
440
+ next unless $sizeID and $$offsetInfo{$sizeID};
441
+ my @offsets = split ' ', $$offsetInfo{$tagID}[1];
442
+ my @sizes = split ' ', $$offsetInfo{$sizeID}[1];
443
+ my $total = 0;
444
+ foreach $offset (@offsets) {
445
+ my $size = shift @sizes;
446
+ next unless $offset =~ /^\d+$/ and $size and $size =~ /^\d+$/ and $size;
447
+ next unless $raf->Seek($offset+$base, 0);
448
+ while ($size) {
449
+ my $bytes = $size > 65536 ? 65536 : $size;
450
+ $raf->Read($buff, $bytes) or last;
451
+ $md5->add($buff);
452
+ $total += length($buff);
453
+ $size -= $bytes;
454
+ }
455
+ }
456
+ if ($verbose) {
457
+ my $name = "$$dirInfo{DirName}:$$tagInfo{Name}";
458
+ $name =~ s/Offsets|Start$//;
459
+ $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $total bytes of $name data)\n");
460
+ }
461
+ }
462
+ }
463
+
422
464
  #------------------------------------------------------------------------------
423
465
  # Handle error while writing EXIF
424
466
  # Inputs: 0) ExifTool ref, 1) error string, 2) tag table ref
@@ -1419,6 +1419,8 @@ sub SetNewValuesFromFile($$;@)
1419
1419
  $tag =~ s/(.+?)\s*(>|<) ?//;
1420
1420
  $$opts{EXPR} = 1; # flag this expression
1421
1421
  } else {
1422
+ # (not sure why this is here because sign should be before '<')
1423
+ # (--> allows "<+" or "<-", which is an undocumented feature)
1422
1424
  $opt = $1 if $tag =~ s/^([-+])\s*//;
1423
1425
  }
1424
1426
  }
@@ -4204,7 +4206,7 @@ sub WriteDirectory($$$;$)
4204
4206
  return '' unless $dataPt or $$dirInfo{RAF}; # nothing to do if block never existed
4205
4207
  # don't allow MakerNotes to be removed from RAW files
4206
4208
  if ($blockName eq 'MakerNotes' and $rawType{$$self{FileType}}) {
4207
- $self->Warn("Can't delete MakerNotes from $$self{VALUE}{FileType}",1);
4209
+ $self->Warn("Can't delete MakerNotes from $$self{FileType}",1);
4208
4210
  return undef;
4209
4211
  }
4210
4212
  $verb = 'Deleting';
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.56';
53
+ $VERSION = '3.57';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3097,7 +3097,7 @@ sub ScanForXMP($$)
3097
3097
  undef $buff;
3098
3098
  }
3099
3099
  }
3100
- unless ($$et{VALUE}{FileType}) {
3100
+ unless ($$et{FileType}) {
3101
3101
  $$et{FILE_TYPE} = $$et{FILE_EXT};
3102
3102
  $et->SetFileType('<unknown file containing XMP>', undef, '');
3103
3103
  }
@@ -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.57';
32
+ $VERSION = '12.58';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -1821,6 +1821,13 @@ my %systemTagsNotes = (
1821
1821
  if specifically requested
1822
1822
  },
1823
1823
  },
1824
+ ImageDataMD5 => {
1825
+ Notes => q{
1826
+ MD5 of image data. Generated only if specifically requested for JPEG and
1827
+ TIFF-based images, except Panasonic raw for now. Includes image data,
1828
+ OtherImage and JpgFromRaw in the MD5, but not ThumbnailImage or PreviewImage
1829
+ },
1830
+ },
1824
1831
  );
1825
1832
 
1826
1833
  # tags defined by UserParam option (added at runtime)
@@ -2479,7 +2486,15 @@ sub ExtractInfo($;@)
2479
2486
  $self->WarnOnce('Install Time::HiRes to generate ProcessingTime');
2480
2487
  }
2481
2488
  }
2482
-
2489
+
2490
+ # create MD5 object if ImageDataMD5 is requested
2491
+ if ($$req{imagedatamd5} and not $$self{ImageDataMD5}) {
2492
+ if (require Digest::MD5) {
2493
+ $$self{ImageDataMD5} = Digest::MD5->new;
2494
+ } else {
2495
+ $self->WarnOnce('Install Digest::MD5 to calculate image data MD5');
2496
+ }
2497
+ }
2483
2498
  ++$$self{FILE_SEQUENCE}; # count files read
2484
2499
  }
2485
2500
 
@@ -2870,6 +2885,10 @@ sub ExtractInfo($;@)
2870
2885
  # restore necessary members when exiting re-entrant code
2871
2886
  $$self{$_} = $$reEntry{$_} foreach keys %$reEntry;
2872
2887
  SetByteOrder($saveOrder);
2888
+ } elsif ($$self{ImageDataMD5}) {
2889
+ my $digest = $$self{ImageDataMD5}->hexdigest;
2890
+ # (don't store empty digest)
2891
+ $self->FoundTag(ImageDataMD5 => $digest) unless $digest eq 'd41d8cd98f00b204e9800998ecf8427e';
2873
2892
  }
2874
2893
 
2875
2894
  # ($type may be undef without an Error when processing sub-documents)
@@ -4297,9 +4316,9 @@ sub GetFileTime($$)
4297
4316
  # on Windows, try to work around incorrect file times when daylight saving time is in effect
4298
4317
  if ($^O eq 'MSWin32') {
4299
4318
  if (not eval { require Win32::API }) {
4300
- $self->WarnOnce('Install Win32::API for proper handling of Windows file times');
4319
+ $self->WarnOnce('Install Win32::API for proper handling of Windows file times', 1);
4301
4320
  } elsif (not eval { require Win32API::File }) {
4302
- $self->WarnOnce('Install Win32API::File for proper handling of Windows file times');
4321
+ $self->WarnOnce('Install Win32API::File for proper handling of Windows file times', 1);
4303
4322
  } else {
4304
4323
  # get Win32 handle, needed for GetFileTime
4305
4324
  my $win32Handle = eval { Win32API::File::GetOsFHandle($file) };
@@ -5868,7 +5887,8 @@ sub ConvertTimeSpan($;$)
5868
5887
  #------------------------------------------------------------------------------
5869
5888
  # Patched timelocal() that fixes ActivePerl timezone bug
5870
5889
  # Inputs/Returns: same as timelocal()
5871
- # Notes: must 'require Time::Local' before calling this routine
5890
+ # Notes: must 'require Time::Local' before calling this routine.
5891
+ # Also note that year should be full year, and not relative to 1900 as with localtime
5872
5892
  sub TimeLocal(@)
5873
5893
  {
5874
5894
  my $tm = Time::Local::timelocal(@_);
@@ -6338,7 +6358,10 @@ sub ProcessJPEG($$)
6338
6358
  my %dumpParms = ( Out => $out );
6339
6359
  my ($success, $wantTrailer, $trailInfo, $foundSOS, %jumbfChunk);
6340
6360
  my (@iccChunk, $iccChunkCount, $iccChunksTotal, @flirChunk, $flirCount, $flirTotal);
6341
- my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP);
6361
+ my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP, $md5);
6362
+
6363
+ # get pointer to MD5 object if it exists and we are the top-level JPEG
6364
+ $md5 = $$self{ImageDataMD5} if $$self{FILE_TYPE} eq 'JPEG' and not $$self{DOC_NUM};
6342
6365
 
6343
6366
  # check to be sure this is a valid JPG (or J2C, or EXV) file
6344
6367
  return 0 unless $raf->Read($s, 2) == 2 and $s =~ /^\xff[\xd8\x4f\x01]/;
@@ -6386,7 +6409,9 @@ sub ProcessJPEG($$)
6386
6409
  #
6387
6410
  # read ahead to the next segment unless we have reached EOI, SOS or SOD
6388
6411
  #
6389
- unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer) or $marker==0x93)) {
6412
+ unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer and not $md5) or
6413
+ $marker==0x93))
6414
+ {
6390
6415
  # read up to next marker (JPEG markers begin with 0xff)
6391
6416
  my $buff;
6392
6417
  $raf->ReadLine($buff) or last;
@@ -6416,6 +6441,8 @@ sub ProcessJPEG($$)
6416
6441
  $nextSegPos = $raf->Tell();
6417
6442
  $len -= 4; # subtract size of length word
6418
6443
  last unless $raf->Seek($len, 1);
6444
+ } elsif ($md5 and defined $marker and ($marker == 0x00 or $marker == 0xda)) {
6445
+ $md5->add($buff); # (note: this includes the terminating 0xff's)
6419
6446
  }
6420
6447
  # read second segment too if this was the first
6421
6448
  next unless defined $marker;
@@ -6626,7 +6653,7 @@ sub ProcessJPEG($$)
6626
6653
  next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
6627
6654
  }
6628
6655
  # must scan to EOI if Validate or JpegCompressionFactor used
6629
- next if $$options{Validate} or $calcImageLen or $$req{trailer};
6656
+ next if $$options{Validate} or $calcImageLen or $$req{trailer} or $md5;
6630
6657
  # nothing interesting to parse after start of scan (SOS)
6631
6658
  $success = 1;
6632
6659
  last; # all done parsing file
@@ -7009,7 +7036,7 @@ sub ProcessJPEG($$)
7009
7036
  $self->FoundTag('PreviewImage', $preview);
7010
7037
  undef $preview;
7011
7038
  }
7012
- } elsif ($marker == 0xe4) { # APP4 (InfiRay, "SCALADO", FPXR, PreviewImage)
7039
+ } elsif ($marker == 0xe4) { # APP4 (InfiRay, "SCALADO", FPXR, DJI, PreviewImage)
7013
7040
  if ($$segDataPt =~ /^SCALADO\0/ and $length >= 16) {
7014
7041
  $dumpType = 'SCALADO';
7015
7042
  my ($num, $idx, $len) = unpack('x8n2N', $$segDataPt);
@@ -7040,6 +7067,16 @@ sub ProcessJPEG($$)
7040
7067
  DirStart(\%dirInfo, 0, 0);
7041
7068
  my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams');
7042
7069
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7070
+ } elsif ($$self{Make} eq 'DJI' and $$segDataPt =~ /^(.{32})?.{32}\x2c\x01\x20\0/s) {
7071
+ $dumpType = 'DJI ThermalParams2';
7072
+ DirStart(\%dirInfo, $1 ? 32 : 0, 0);
7073
+ my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams2');
7074
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7075
+ } elsif ($$self{Make} eq 'DJI' and $$segDataPt =~ /^.{32}\xaa\x55\x38\0/s) {
7076
+ $dumpType = 'DJI ThermalParams3';
7077
+ DirStart(\%dirInfo, 32, 0);
7078
+ my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams3');
7079
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7043
7080
  } elsif ($$self{HasIJPEG} and $length >= 120) {
7044
7081
  $dumpType = 'InfiRay Factory';
7045
7082
  SetByteOrder('II');
@@ -7153,6 +7190,13 @@ sub ProcessJPEG($$)
7153
7190
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7154
7191
  delete $$self{SET_GROUP0};
7155
7192
  delete $$self{SET_GROUP1};
7193
+ } elsif ($$segDataPt =~ /^DJI-DBG\0/) {
7194
+ $dumpType = 'DJI Info';
7195
+ my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::Info');
7196
+ DirStart(\%dirInfo, 8, 0);
7197
+ $$self{SET_GROUP0} = 'APP7';
7198
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7199
+ delete $$self{SET_GROUP0};
7156
7200
  } elsif ($$segDataPt =~ /^\x1aQualcomm Camera Attributes/) {
7157
7201
  # found in HP iPAQ_VoiceMessenger
7158
7202
  $dumpType = 'Qualcomm';
@@ -7681,7 +7725,7 @@ sub DoProcessTIFF($$;$)
7681
7725
  }
7682
7726
  }
7683
7727
  # update FileType if necessary now that we know more about the file
7684
- if ($$self{DNGVersion} and $$self{VALUE}{FileType} !~ /^(DNG|GPR)$/) {
7728
+ if ($$self{DNGVersion} and $$self{FileType} !~ /^(DNG|GPR)$/) {
7685
7729
  # override whatever FileType we set since we now know it is DNG
7686
7730
  $self->OverrideFileType($$self{TIFF_TYPE} = 'DNG');
7687
7731
  }
@@ -8567,7 +8611,7 @@ sub DoEscape($$)
8567
8611
  sub SetFileType($;$$$)
8568
8612
  {
8569
8613
  my ($self, $fileType, $mimeType, $normExt) = @_;
8570
- unless ($$self{VALUE}{FileType} and not $$self{DOC_NUM}) {
8614
+ unless ($$self{FileType} and not $$self{DOC_NUM}) {
8571
8615
  my $baseType = $$self{FILE_TYPE};
8572
8616
  my $ext = $$self{FILE_EXT};
8573
8617
  $fileType or $fileType = $baseType;
@@ -8586,7 +8630,8 @@ sub SetFileType($;$$$)
8586
8630
  $normExt = $fileTypeExt{$fileType};
8587
8631
  $normExt = $fileType unless defined $normExt;
8588
8632
  }
8589
- $$self{FileType} = $fileType;
8633
+ # ($$self{FileType} is the file type of the main document)
8634
+ $$self{FileType} = $fileType unless $$self{DOC_NUM};
8590
8635
  $self->FoundTag('FileType', $fileType);
8591
8636
  $self->FoundTag('FileTypeExtension', uc $normExt);
8592
8637
  $self->FoundTag('MIMEType', $mimeType || 'application/unknown');
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.57
3
+ Version: 12.58
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.57.0')
4
+ VERSION = Gem::Version.new('12.58.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.57.0
4
+ version: 12.58.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-02-23 00:00:00.000000000 Z
12
+ date: 2023-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool