exiftool_vendored 12.39.0 → 12.41.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +45 -0
  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/arg_files/exif2xmp.args +5 -0
  8. data/bin/arg_files/xmp2exif.args +6 -0
  9. data/bin/config_files/acdsee.config +6 -6
  10. data/bin/config_files/photoshop_paths.config +30 -7
  11. data/bin/config_files/picasa_faces.config +1 -1
  12. data/bin/config_files/pix4d.config +2 -2
  13. data/bin/config_files/tiff_version.config +2 -2
  14. data/bin/exiftool +52 -21
  15. data/bin/lib/Image/ExifTool/Canon.pm +78 -4
  16. data/bin/lib/Image/ExifTool/Exif.pm +44 -20
  17. data/bin/lib/Image/ExifTool/Geotag.pm +3 -2
  18. data/bin/lib/Image/ExifTool/MacOS.pm +9 -9
  19. data/bin/lib/Image/ExifTool/MakerNotes.pm +12 -1
  20. data/bin/lib/Image/ExifTool/Nikon.pm +39 -12
  21. data/bin/lib/Image/ExifTool/Olympus.pm +7 -6
  22. data/bin/lib/Image/ExifTool/QuickTime.pm +9 -5
  23. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
  24. data/bin/lib/Image/ExifTool/Samsung.pm +5 -1
  25. data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
  26. data/bin/lib/Image/ExifTool/Sony.pm +10 -4
  27. data/bin/lib/Image/ExifTool/TagLookup.pm +6360 -6354
  28. data/bin/lib/Image/ExifTool/TagNames.pod +22 -2
  29. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -3
  30. data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -0
  31. data/bin/lib/Image/ExifTool/XMP.pm +9 -1
  32. data/bin/lib/Image/ExifTool/XMPStruct.pl +21 -7
  33. data/bin/lib/Image/ExifTool.pm +11 -3
  34. data/bin/lib/Image/ExifTool.pod +7 -6
  35. data/bin/perl-Image-ExifTool.spec +1 -1
  36. data/lib/exiftool_vendored/version.rb +1 -1
  37. 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 25764 tags, with 16462 unique tag names.
15
+ They contain a total of 25775 tags, with 16465 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
@@ -669,6 +669,7 @@ for the official EXIF 2.32 specification.
669
669
  MakerNoteNintendo ExifIFD Nintendo
670
670
  MakerNoteOlympus ExifIFD Olympus
671
671
  MakerNoteOlympus2 ExifIFD Olympus
672
+ MakerNoteOlympus3 ExifIFD Olympus
672
673
  MakerNoteLeica ExifIFD Panasonic
673
674
  MakerNoteLeica2 ExifIFD Panasonic Leica2
674
675
  MakerNoteLeica3 ExifIFD Panasonic Leica3
@@ -7346,6 +7347,7 @@ Unknown only to reduce the volume of the normal output.
7346
7347
  0x4021 MultiExp Canon MultiExp
7347
7348
  0x4024 FilterInfo Canon FilterInfo
7348
7349
  0x4025 HDRInfo Canon HDRInfo
7350
+ 0x4026 LogInfo Canon LogInfo
7349
7351
  0x4028 AFConfig Canon AFConfig
7350
7352
  0x403f RawBurstModeRoll Canon RawBurstInfo
7351
7353
 
@@ -9515,6 +9517,18 @@ Information about creative filter settings.
9515
9517
  1 HDR int32s
9516
9518
  2 HDREffect int32s
9517
9519
 
9520
+ =head3 Canon LogInfo Tags
9521
+
9522
+ Index4 Tag Name Writable
9523
+ ------ -------- --------
9524
+ 4 CompressionFormat int32s
9525
+ 6 Sharpness int32s
9526
+ 7 Saturation int32s
9527
+ 8 ColorTone int32s
9528
+ 9 ColorSpace2 int32s
9529
+ 10 ColorMatrix int32s
9530
+ 11 CanonLogVersion int32s
9531
+
9518
9532
  =head3 Canon AFConfig Tags
9519
9533
 
9520
9534
  Index4 Tag Name Writable
@@ -13591,6 +13605,8 @@ These tags belong to the ExifTool XMP-ast family 1 group.
13591
13605
  About no
13592
13606
  GPSAltitude no
13593
13607
  GPSAltitudeRef no
13608
+ GPSImgDirection no
13609
+ GPSImgDirectionRef no
13594
13610
  GPSLatitude no
13595
13611
  GPSLatitudeRef no
13596
13612
  GPSLongitude no
@@ -14317,6 +14333,7 @@ These tags are used by the Z9.
14317
14333
  434 FlashOutput? int8u
14318
14334
  444 FlashRemoteControl? int8u
14319
14335
  456 FlashWirelessOption? int8u
14336
+ 528 AFAreaMode int8u
14320
14337
  530 VRMode int8u
14321
14338
  534 BracketSet int8u
14322
14339
  536 BracketProgram int8u
@@ -14710,7 +14727,7 @@ These tags are used by the D4S, D750, D810, D5500, D7200 (FlashInfoVersion
14710
14727
  0 AFInfo2Version no
14711
14728
  62 AFImageWidth int16u
14712
14729
  64 AFImageHeight int16u
14713
- 67 FocusPositionHoriontal int8u~
14730
+ 67 FocusPositionHorizontal int8u~
14714
14731
  69 FocusPositionVertical int8u~
14715
14732
  70 AFAreaWidth int16u
14716
14733
  72 AFAreaHeight int16u
@@ -20978,6 +20995,7 @@ still proprietary) Adobe format.
20978
20995
  MakerNoteNintendo Nintendo
20979
20996
  MakerNoteOlympus Olympus
20980
20997
  MakerNoteOlympus2 Olympus
20998
+ MakerNoteOlympus3 Olympus
20981
20999
  MakerNoteLeica Panasonic
20982
21000
  MakerNoteLeica2 Panasonic Leica2
20983
21001
  MakerNoteLeica3 Panasonic Leica3
@@ -37010,6 +37028,7 @@ FileName.
37010
37028
  NewGUID ExifTool no
37011
37029
  Now ExifTool no
37012
37030
  OtherImage File no
37031
+ PageCount File no
37013
37032
  PreviewImage File yes
37014
37033
  PreviewPDF File no
37015
37034
  PreviewPNG File no
@@ -37517,6 +37536,7 @@ for more details.
37517
37536
  MakerNoteNintendo
37518
37537
  MakerNoteOlympus
37519
37538
  MakerNoteOlympus2
37539
+ MakerNoteOlympus3
37520
37540
  MakerNoteLeica
37521
37541
  MakerNoteLeica2
37522
37542
  MakerNoteLeica3
@@ -1391,9 +1391,13 @@ sub WriteQuickTime($$$)
1391
1391
  $pos += $siz;
1392
1392
  }
1393
1393
  if ($msg) {
1394
- my $grp = $$et{CUR_WRITE_GROUP} || $parent;
1395
- $et->Error("$msg for $grp");
1396
- return $rtnErr;
1394
+ # (allow empty sample description for non-audio/video handler types, eg. 'url ', 'meta')
1395
+ if ($$et{HandlerType}) {
1396
+ my $grp = $$et{CUR_WRITE_GROUP} || $parent;
1397
+ $et->Error("$msg for $grp");
1398
+ return $rtnErr;
1399
+ }
1400
+ $flg = 1; # (this seems to be the case)
1397
1401
  }
1398
1402
  $$et{QtDataFlg} = $flg;
1399
1403
  }
@@ -298,6 +298,8 @@ sub SetPropertyPath($$;$$$$)
298
298
  $flatInfo = $$tagTablePtr{$flatID};
299
299
  if ($flatInfo) {
300
300
  return if $$flatInfo{PropertyPath};
301
+ } elsif (@$propList > 50) {
302
+ return; # avoid deep recursion
301
303
  } else {
302
304
  # flattened tag doesn't exist, so create it now
303
305
  # (could happen if we were just writing a structure)
@@ -3399,6 +3399,10 @@ NoLoop:
3399
3399
  }
3400
3400
  # save property list for verbose "adding" message unless this tag already exists
3401
3401
  $added = \@tagList unless $$tagTablePtr{$tagID};
3402
+ # if this is an empty structure, we must add a Struct field
3403
+ if (not length $val and $$attrs{'rdf:parseType'} and $$attrs{'rdf:parseType'} eq 'Resource') {
3404
+ $$tagInfo{Struct} = { STRUCT_NAME => 'XMP Unknown' };
3405
+ }
3402
3406
  AddTagToTable($tagTablePtr, $tagID, $tagInfo);
3403
3407
  last;
3404
3408
  }
@@ -3730,7 +3734,11 @@ sub ParseXMPElement($$$;$$$$)
3730
3734
  } elsif ($prop eq 'rdf:Description') {
3731
3735
  # remove unnecessary rdf:Description elements since parseType='Resource'
3732
3736
  # is more efficient (also necessary to make property path consistent)
3733
- $parseResource = 1 if grep /^rdf:Description$/, @$propList;
3737
+ if (grep /^rdf:Description$/, @$propList) {
3738
+ $parseResource = 1;
3739
+ # set parseType so we know this is a structure
3740
+ $attrs{'rdf:parseType'} = 'Resource';
3741
+ }
3734
3742
  } elsif ($prop eq 'xmp:xmpmeta') {
3735
3743
  # patch MicrosoftPhoto unconformity
3736
3744
  $prop = 'x:xmpmeta';
@@ -634,15 +634,14 @@ sub RestoreStruct($;$)
634
634
  local $_;
635
635
  my ($et, $keepFlat) = @_;
636
636
  my ($key, %structs, %var, %lists, $si, %listKeys, @siList);
637
- my $ex = $$et{TAG_EXTRA};
638
637
  my $valueHash = $$et{VALUE};
639
638
  my $fileOrder = $$et{FILE_ORDER};
640
639
  my $tagExtra = $$et{TAG_EXTRA};
641
640
  foreach $key (keys %{$$et{TAG_INFO}}) {
642
- $$ex{$key} or next;
643
- my $structProps = $$ex{$key}{Struct} or next;
644
- delete $$ex{$key}{Struct}; # (don't re-use)
645
- my $tagInfo = $$et{TAG_INFO}{$key}; # tagInfo for flattened tag
641
+ $$tagExtra{$key} or next;
642
+ my $structProps = $$tagExtra{$key}{Struct} or next;
643
+ delete $$tagExtra{$key}{Struct}; # (don't re-use)
644
+ my $tagInfo = $$et{TAG_INFO}{$key}; # tagInfo for flattened tag
646
645
  my $table = $$tagInfo{Table};
647
646
  my $prop = shift @$structProps;
648
647
  my $tag = $$prop[0];
@@ -829,8 +828,23 @@ sub RestoreStruct($;$)
829
828
  $var{$_} and push @siList, $_ foreach keys %structs;
830
829
  # save new structures in the same order they were read from file
831
830
  foreach $si (sort { $var{$a}[1] <=> $var{$b}[1] } @siList) {
832
- $key = $et->FoundTag($var{$si}[0], '');
833
- $$valueHash{$key} = $structs{$si};
831
+ # test to see if a tag for this structure has already been generated
832
+ # (this could happen only if one of the structures in a list was empty)
833
+ $key = $var{$si}[0]{Name};
834
+ my $found;
835
+ if ($$valueHash{$key}) {
836
+ my @keys = grep /^$key( \(\d+\))?$/, keys %$valueHash;
837
+ foreach $key (@keys) {
838
+ next unless $$valueHash{$key} eq $structs{$si};
839
+ $found = 1;
840
+ last;
841
+ }
842
+ }
843
+ unless ($found) {
844
+ # otherwise, generate a new tag for this structure
845
+ $key = $et->FoundTag($var{$si}[0], '');
846
+ $$valueHash{$key} = $structs{$si};
847
+ }
834
848
  $$fileOrder{$key} = $var{$si}[1];
835
849
  }
836
850
  }
@@ -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.39';
32
+ $VERSION = '12.41';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -320,7 +320,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
320
320
  FPF => ['FPF', 'FLIR Public image Format'],
321
321
  FPX => ['FPX', 'FlashPix'],
322
322
  GIF => ['GIF', 'Compuserve Graphics Interchange Format'],
323
- GPR => ['TIFF', 'GoPro RAW'],
323
+ GPR => ['TIFF', 'General Purpose RAW'], # https://gopro.github.io/gpr/
324
324
  GZ => 'GZIP',
325
325
  GZIP => ['GZIP', 'GNU ZIP compressed archive'],
326
326
  HDP => ['TIFF', 'Windows HD Photo'],
@@ -1799,6 +1799,7 @@ my %systemTagsNotes = (
1799
1799
  Writable => 1,
1800
1800
  Protected => 1,
1801
1801
  },
1802
+ PageCount => { Notes => 'the number of pages in a multi-page TIFF document' },
1802
1803
  );
1803
1804
 
1804
1805
  # tags defined by UserParam option (added at runtime)
@@ -7448,7 +7449,11 @@ sub DoProcessTIFF($$;$)
7448
7449
  # this looks like a BigTIFF image
7449
7450
  $raf->Seek(0);
7450
7451
  require Image::ExifTool::BigTIFF;
7451
- return 1 if Image::ExifTool::BigTIFF::ProcessBTF($self, $dirInfo);
7452
+ my $result = Image::ExifTool::BigTIFF::ProcessBTF($self, $dirInfo);
7453
+ if ($result) {
7454
+ $self->FoundTag(PageCount => $$self{PageCount}) if $$self{MultiPage};
7455
+ return 1;
7456
+ }
7452
7457
  } elsif ($identifier == 0x4f52 or $identifier == 0x5352) {
7453
7458
  # Olympus ORF image (set FileType now because base type is 'ORF')
7454
7459
  $self->SetFileType($fileType = 'ORF');
@@ -7541,6 +7546,9 @@ sub DoProcessTIFF($$;$)
7541
7546
  # override whatever FileType we set since we now know it is DNG
7542
7547
  $self->OverrideFileType($$self{TIFF_TYPE} = 'DNG');
7543
7548
  }
7549
+ if ($$self{TIFF_TYPE} eq 'TIFF') {
7550
+ $self->FoundTag(PageCount => $$self{PageCount}) if $$self{MultiPage};
7551
+ }
7544
7552
  return 1;
7545
7553
  }
7546
7554
  #
@@ -593,12 +593,13 @@ different when copying tags with L</SetNewValuesFromFile>.
593
593
  =item DateFormat
594
594
 
595
595
  Format for printing date/time values. See C<strftime> in the L<POSIX>
596
- package for details about the format string. If date can not be converted,
597
- value is left unchanged unless the StrictDate option is set. Timezones are
598
- ignored. The inverse conversion (ie. when calling L</SetNewValue>) is
599
- performed only if POSIX::strptime or Time::Piece is installed. The default
600
- setting of undef causes date/time values to remain in standard EXIF format
601
- (similar to a DateFormat of "%Y:%m:%d %H:%M:%S").
596
+ package and L<https://exiftool.org/filename.html#codes> for details about
597
+ the format string. If the date can not be converted, the value is left
598
+ unchanged unless the StrictDate option is set. Timezones are ignored. The
599
+ inverse conversion (ie. when calling L</SetNewValue>) is performed only if
600
+ POSIX::strptime or Time::Piece is installed. The default setting of undef
601
+ causes date/time values to remain in standard EXIF format (similar to a
602
+ DateFormat of "%Y:%m:%d %H:%M:%S").
602
603
 
603
604
  =item Duplicates
604
605
 
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.39
3
+ Version: 12.41
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.39.0')
4
+ VERSION = Gem::Version.new('12.41.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.39.0
4
+ version: 12.41.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: 2022-01-23 00:00:00.000000000 Z
12
+ date: 2022-04-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool