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.
- checksums.yaml +4 -4
- data/bin/Changes +55 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/Makefile.PL +1 -0
- data/bin/README +2 -2
- data/bin/build_geolocation +7 -3
- data/bin/exiftool +43 -33
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +86 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +59 -8
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +3 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +91 -33
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
- data/bin/lib/Image/ExifTool/Google.pm +804 -0
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +2 -2
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +4 -6
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
- data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
- data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +6 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +51 -39
- data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
- data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +7 -6
- data/bin/lib/Image/ExifTool/RIFF.pm +5 -3
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
- data/bin/lib/Image/ExifTool/Sony.pm +20 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5749 -5695
- data/bin/lib/Image/ExifTool/TagNames.pod +690 -519
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +2 -1
- data/bin/lib/Image/ExifTool/XMP.pm +39 -32
- data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +6 -4
- data/bin/lib/Image/ExifTool.pod +3 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -6
@@ -19,7 +19,7 @@ $VERSION = '1.05';
|
|
19
19
|
|
20
20
|
# Text tags
|
21
21
|
%Image::ExifTool::Text::Main = (
|
22
|
-
VARS => {
|
22
|
+
VARS => { ID_FMT => 'none' },
|
23
23
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Document' },
|
24
24
|
NOTES => q{
|
25
25
|
Although basic text files contain no metadata, the following tags are
|
@@ -16,7 +16,7 @@ $VERSION = '1.01';
|
|
16
16
|
|
17
17
|
%Image::ExifTool::Trailer::Vivo = (
|
18
18
|
GROUPS => { 0 => 'Trailer', 1 => 'Vivo', 2 => 'Image' },
|
19
|
-
VARS => {
|
19
|
+
VARS => { ID_FMT => 'none' },
|
20
20
|
NOTES => 'Information written in JPEG trailer by some Vivo phones.',
|
21
21
|
# (don't know for sure what type of image this is, but it is in JPEG format)
|
22
22
|
HDRImage => {
|
@@ -23,7 +23,7 @@ sub PrintRecord($$$);
|
|
23
23
|
# WPG metadata
|
24
24
|
%Image::ExifTool::WPG::Main = (
|
25
25
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
|
26
|
-
VARS => {
|
26
|
+
VARS => { ID_FMT => 'none' },
|
27
27
|
NOTES => 'Tags extracted from WordPerfect Graphics (WPG) images.',
|
28
28
|
WPGVersion => { },
|
29
29
|
ImageWidthInches => { PrintConv => 'sprintf("%.2f",$val)' },
|
@@ -52,7 +52,7 @@ my %bool = ( PrintConv => { 0 => 'No', 1 => 'Yes' }, PrintConvColumns => 2 );
|
|
52
52
|
GROUPS => { 0 => 'WTV', 1 => 'WTV', 2 => 'Video' },
|
53
53
|
PROCESS_PROC => \&ProcessMetadata,
|
54
54
|
NOTES => 'ExifTool will extract any tag found, even if not in this table.',
|
55
|
-
VARS => {
|
55
|
+
VARS => { ID_FMT => 'none' },
|
56
56
|
'Duration' => {
|
57
57
|
Name => 'Duration',
|
58
58
|
ValueConv => '$val/1e7',
|
@@ -1352,7 +1352,8 @@ sub SetNewValuesFromFile($$;@)
|
|
1352
1352
|
# get all tags from source file (including MakerNotes block)
|
1353
1353
|
$info = $srcExifTool->ImageInfo($srcFile);
|
1354
1354
|
}
|
1355
|
-
|
1355
|
+
# (allow processing to continue if we have alternate files that may have been read OK)
|
1356
|
+
return $info if $$info{Error} and $$info{Error} eq 'Error opening file' and not $$self{ALT_EXIFTOOL};
|
1356
1357
|
delete $$srcExifTool{VALUE}{Error}; # delete so we can check this later
|
1357
1358
|
|
1358
1359
|
# sort tags in file order with priority tags last
|
@@ -862,35 +862,43 @@ my %sRangeMask = (
|
|
862
862
|
},
|
863
863
|
GAudio => {
|
864
864
|
Name => 'GAudio',
|
865
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
865
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GAudio' },
|
866
866
|
},
|
867
867
|
GImage => {
|
868
868
|
Name => 'GImage',
|
869
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
869
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GImage' },
|
870
870
|
},
|
871
871
|
GPano => {
|
872
872
|
Name => 'GPano',
|
873
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
873
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GPano' },
|
874
|
+
},
|
875
|
+
GContainer => {
|
876
|
+
Name => 'GContainer',
|
877
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GContainer' },
|
874
878
|
},
|
875
879
|
GSpherical => {
|
876
880
|
Name => 'GSpherical',
|
877
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
881
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GSpherical' },
|
878
882
|
},
|
879
883
|
GDepth => {
|
880
884
|
Name => 'GDepth',
|
881
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
885
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GDepth' },
|
882
886
|
},
|
883
887
|
GFocus => {
|
884
888
|
Name => 'GFocus',
|
885
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
889
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GFocus' },
|
886
890
|
},
|
887
891
|
GCamera => {
|
888
892
|
Name => 'GCamera',
|
889
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
893
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GCamera' },
|
890
894
|
},
|
891
895
|
GCreations => {
|
892
896
|
Name => 'GCreations',
|
893
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
897
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GCreations' },
|
898
|
+
},
|
899
|
+
Device => {
|
900
|
+
Name => 'Device',
|
901
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::Device' },
|
894
902
|
},
|
895
903
|
dwc => {
|
896
904
|
Name => 'dwc',
|
@@ -908,10 +916,6 @@ my %sRangeMask = (
|
|
908
916
|
Name => 'LImage',
|
909
917
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::LImage' },
|
910
918
|
},
|
911
|
-
Device => {
|
912
|
-
Name => 'Device',
|
913
|
-
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Device' },
|
914
|
-
},
|
915
919
|
sdc => {
|
916
920
|
Name => 'sdc',
|
917
921
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::sdc' },
|
@@ -948,10 +952,6 @@ my %sRangeMask = (
|
|
948
952
|
Name => 'seal',
|
949
953
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::seal' },
|
950
954
|
},
|
951
|
-
GContainer => {
|
952
|
-
Name => 'GContainer',
|
953
|
-
SubDirectory => { TagTable => 'Image::ExifTool::XMP::GContainer' },
|
954
|
-
},
|
955
955
|
);
|
956
956
|
|
957
957
|
# hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
|
@@ -3350,13 +3350,14 @@ sub PrintLensID(@)
|
|
3350
3350
|
#------------------------------------------------------------------------------
|
3351
3351
|
# Convert XMP date/time to EXIF format
|
3352
3352
|
# Inputs: 0) XMP date/time string, 1) set if we aren't sure this is a date
|
3353
|
-
# Returns: EXIF date/time
|
3353
|
+
# Returns: EXIF date/time, and flag in list context if this was a standard date/time value
|
3354
3354
|
sub ConvertXMPDate($;$)
|
3355
3355
|
{
|
3356
3356
|
my ($val, $unsure) = @_;
|
3357
3357
|
if ($val =~ /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}:\d{2})(:\d{2})?\s*(\S*)$/) {
|
3358
3358
|
my $s = $5 || ''; # seconds may be missing
|
3359
3359
|
$val = "$1:$2:$3 $4$s$6"; # convert back to EXIF time format
|
3360
|
+
return($val, 1) if wantarray;
|
3360
3361
|
} elsif (not $unsure and $val =~ /^(\d{4})(-\d{2}){0,2}/) {
|
3361
3362
|
$val =~ tr/-/:/;
|
3362
3363
|
}
|
@@ -3647,7 +3648,12 @@ NoLoop:
|
|
3647
3648
|
if (($new or $fmt eq 'rational') and ConvertRational($val)) {
|
3648
3649
|
$rational = $rawVal;
|
3649
3650
|
} else {
|
3650
|
-
|
3651
|
+
my $stdDate;
|
3652
|
+
($val, $stdDate) = ConvertXMPDate($val, $new) if $new or $fmt eq 'date';
|
3653
|
+
if ($stdDate and $added) {
|
3654
|
+
$$tagInfo{Groups}{2} = 'Time';
|
3655
|
+
$$tagInfo{PrintConv} = '$self->ConvertDateTime($val)';
|
3656
|
+
}
|
3651
3657
|
}
|
3652
3658
|
if ($$et{XmpValidate} and $fmt and $fmt eq 'boolean' and $val!~/^True|False$/) {
|
3653
3659
|
if ($val =~ /^true|false$/) {
|
@@ -3659,6 +3665,10 @@ NoLoop:
|
|
3659
3665
|
# protect against large binary data in unknown tags
|
3660
3666
|
$$tagInfo{Binary} = 1 if $new and length($val) > 65536;
|
3661
3667
|
}
|
3668
|
+
if ($$et{OPTIONS}{Verbose}) {
|
3669
|
+
my $tagID = join('/',@$props);
|
3670
|
+
$et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val);
|
3671
|
+
}
|
3662
3672
|
# store the value for this tag
|
3663
3673
|
my $key = $et->FoundTag($tagInfo, $val) or return 0;
|
3664
3674
|
# save original components of rational numbers (used when copying)
|
@@ -3677,21 +3687,17 @@ NoLoop:
|
|
3677
3687
|
# set group1 dynamically according to the namespace
|
3678
3688
|
$et->SetGroup($key, "$$tagTablePtr{GROUPS}{0}-$ns");
|
3679
3689
|
}
|
3680
|
-
if ($$et{OPTIONS}{Verbose}) {
|
3681
|
-
|
3682
|
-
|
3683
|
-
|
3684
|
-
|
3685
|
-
|
3686
|
-
|
3687
|
-
|
3688
|
-
$props = '';
|
3689
|
-
}
|
3690
|
-
my $g1 = $et->GetGroup($key, 1);
|
3691
|
-
$et->VPrint(0, $$et{INDENT}, "[adding $g1:$tag]$props\n");
|
3690
|
+
if ($added and $$et{OPTIONS}{Verbose}) {
|
3691
|
+
my $props;
|
3692
|
+
if (@$added > 1) {
|
3693
|
+
$$tagInfo{Flat} = 0; # this is a flattened tag
|
3694
|
+
my @props = map { $$_[0] } @$added;
|
3695
|
+
$props = ' (' . join('/',@props) . ')';
|
3696
|
+
} else {
|
3697
|
+
$props = '';
|
3692
3698
|
}
|
3693
|
-
my $
|
3694
|
-
$et->
|
3699
|
+
my $g1 = $et->GetGroup($key, 1);
|
3700
|
+
$et->VPrint(0, $$et{INDENT}, "[adding $g1:$tag]$props\n");
|
3695
3701
|
}
|
3696
3702
|
# allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
|
3697
3703
|
if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
|
@@ -3704,6 +3710,7 @@ NoLoop:
|
|
3704
3710
|
DirName => $$subdir{DirName} || $$tagInfo{Name},
|
3705
3711
|
DataPt => $dataPt,
|
3706
3712
|
DirLen => length $$dataPt,
|
3713
|
+
TagInfo => $tagInfo,
|
3707
3714
|
IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
|
3708
3715
|
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
3709
3716
|
NoStruct => 1, # (don't try to build structures since this isn't true XMP)
|