exiftool_vendored 13.08.0 → 13.10.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 +27 -2
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +25 -12
- data/bin/lib/Image/ExifTool/Apple.pm +9 -7
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +8 -0
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +80 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +2 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +2 -2
- data/bin/lib/Image/ExifTool/PNG.pm +2 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +49 -10
- data/bin/lib/Image/ExifTool/TagLookup.pm +3 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +23 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +43 -9
- data/bin/lib/Image/ExifTool/Writer.pl +16 -5
- data/bin/lib/Image/ExifTool.pm +8 -5
- data/bin/lib/Image/ExifTool.pod +41 -35
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9bd6e60c5e63b9f1c5c19ec9ecff2c388dbb148125958da2dc032788523a6f1b
|
|
4
|
+
data.tar.gz: 0ca3fe31d4880779349339e560485d5780f9568a100ed3b2e66c1bf0d1d556ea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36c2edb4757ce9a9a1311d4688ceba8da4b9529c1f193cf1e7c70634295e980d93fc68a133d3d5079d9f359dbe2b4efb53a05cf2f5ea5e09b6a4b469ff02a435
|
|
7
|
+
data.tar.gz: 0e977d49e4c994eac82d4e1c2525f30c95112513cc7bc620256f3788d550b4d294681aa36183c49f0bae1ded85b1bce9beba097025d0ecbb88df5774a610a652
|
data/bin/Changes
CHANGED
|
@@ -4,15 +4,40 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 13.
|
|
7
|
+
Note: The most recent production release is Version 13.10. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Dec. 20, 2024 - Version 13.10 (production release)
|
|
11
|
+
|
|
12
|
+
- Added warnings for out-of-order entries in 'iinf' and 'ipma' boxes of HEIC
|
|
13
|
+
images
|
|
14
|
+
- Added support for date/time formatting codes %f and %z in the inverse
|
|
15
|
+
print conversion when writing tags
|
|
16
|
+
- Updated Geolocation databases from current geonames.org files
|
|
17
|
+
- Improved verbose output to show values stored with construction method 1 in
|
|
18
|
+
MP4-based files
|
|
19
|
+
- Enhanced the date/time timezone format specifier %z so that %:z returns the
|
|
20
|
+
time zone with a colon separator (eg. "-05:00")
|
|
21
|
+
- Fixed bug where the existing tag wasn't being removed when writing a new
|
|
22
|
+
value for an Unknown QuickTime UserData or ItemList tag
|
|
23
|
+
|
|
24
|
+
Dec. 17, 2024 - Version 13.09
|
|
25
|
+
|
|
26
|
+
- Added a new QuickTime tag (thanks Matti)
|
|
27
|
+
- Added a missing format check on a few tags when writing
|
|
28
|
+
- Decode a couple of new ICC_Profile tags
|
|
29
|
+
- Patched HEIC writer so newly added XMP or EXIF refers to the 'tmap' item as
|
|
30
|
+
well as the primary item of an HDRGainMap image (since iPhone 15 and 16 do
|
|
31
|
+
it this way)
|
|
32
|
+
- Fixed compatibility issue where Apple Preview would no longer show the gain
|
|
33
|
+
map image after adding new XMP to an HEIC with an HDR gain map
|
|
34
|
+
|
|
10
35
|
Dec. 14, 2024 - Version 13.08
|
|
11
36
|
|
|
12
37
|
- Decode ShutterCount for Canon EOS R6 Mark II (thanks Agoston Kapitany)
|
|
13
38
|
- Decode a few new Photoshop tags
|
|
14
39
|
- Suppress all duplicate Warning tags and add count to end of message
|
|
15
|
-
- Changed format of bitmask keys in -
|
|
40
|
+
- Changed format of bitmask keys in -listx output
|
|
16
41
|
- Internal streamlining of LIGOGPSINFO decoding
|
|
17
42
|
- Fixed issue where some tags were incorrectly shown as writable in -listx
|
|
18
43
|
output
|
data/bin/MANIFEST
CHANGED
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
|
109
109
|
terminal window to extract and run ExifTool:
|
|
110
110
|
|
|
111
111
|
cd ~/Desktop
|
|
112
|
-
gzip -dc Image-ExifTool-13.
|
|
113
|
-
cd Image-ExifTool-13.
|
|
112
|
+
gzip -dc Image-ExifTool-13.10.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-13.10
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '13.
|
|
14
|
+
my $version = '13.10';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -5644,16 +5644,29 @@ in the delimiter. Default is ','.
|
|
|
5644
5644
|
|
|
5645
5645
|
Set the format for date/time tag values. The I<FMT> string may contain
|
|
5646
5646
|
formatting codes beginning with a percent character (C<%>) to represent the
|
|
5647
|
-
various components of a date/time value.
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5647
|
+
various components of a date/time value. ExifTool implements 3 format codes
|
|
5648
|
+
internally (see below), but other format codes are system dependent --
|
|
5649
|
+
consult the C<strftime> man page on your system for details. The default
|
|
5650
|
+
format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
|
|
5651
|
+
date-only or time-only tags. Requires POSIX::strptime or Time::Piece for
|
|
5652
|
+
the inversion conversion when writing. Only one B<-d> option may be used
|
|
5653
|
+
per command.
|
|
5654
|
+
|
|
5655
|
+
Additional format codes implemented internally by ExifTool:
|
|
5656
|
+
|
|
5657
|
+
1) C<%z> represents the time zone in "+/-HHMM" format. Adding a colon (ie.
|
|
5658
|
+
C<%:z>) adds a colon separator (eg. "-05:00"). If the date/time value
|
|
5659
|
+
doesn't contain a time zone then C<%z> gives the system time zone for the
|
|
5660
|
+
specified date/time value.
|
|
5661
|
+
|
|
5662
|
+
2) C<%f> represents fractional seconds, and supports an optional width to
|
|
5663
|
+
specify the number of digits after the decimal point (eg. C<%3f> would give
|
|
5664
|
+
something like ".437"). Adding a minus sign drops the decimal point (eg.
|
|
5665
|
+
C<%-3f> would give "437").
|
|
5666
|
+
|
|
5667
|
+
3) C<%s> represents the number of seconds since 00:00 UTC Jan 1, 1970,
|
|
5668
|
+
taking into account the specified time zone (or system time zone if not
|
|
5669
|
+
specified).
|
|
5657
5670
|
|
|
5658
5671
|
=item B<-D> (B<-decimal>)
|
|
5659
5672
|
|
|
@@ -5913,7 +5926,7 @@ with this command:
|
|
|
5913
5926
|
|
|
5914
5927
|
produces output like this:
|
|
5915
5928
|
|
|
5916
|
-
-- Generated by ExifTool 13.
|
|
5929
|
+
-- Generated by ExifTool 13.10 --
|
|
5917
5930
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5918
5931
|
(f/5.6, 1/60s, ISO 100)
|
|
5919
5932
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
use Image::ExifTool::PLIST;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.14';
|
|
20
20
|
|
|
21
21
|
sub ConvertPLIST($$);
|
|
22
22
|
|
|
@@ -291,12 +291,12 @@ sub ConvertPLIST($$);
|
|
|
291
291
|
# 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
|
|
292
292
|
# 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
|
|
293
293
|
# 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
|
|
294
|
-
#
|
|
294
|
+
# 0x004a - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
|
|
295
295
|
# 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
|
|
296
|
-
#
|
|
297
|
-
#
|
|
298
|
-
#
|
|
299
|
-
#
|
|
296
|
+
# 0x004b - (ZeroShutterLagFailureReason, ref 2)
|
|
297
|
+
# 0x004c - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
|
|
298
|
+
# 0x004d - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
|
|
299
|
+
# 0x004e - (Camera, ref 2)
|
|
300
300
|
0x004e => {
|
|
301
301
|
Name => 'Apple_0x004e',
|
|
302
302
|
Unknown => 1,
|
|
@@ -358,7 +358,8 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple');
|
|
|
358
358
|
sub ConvertPLIST($$)
|
|
359
359
|
{
|
|
360
360
|
my ($val, $et) = @_;
|
|
361
|
-
my $dirInfo = { DataPt => \$val };
|
|
361
|
+
my $dirInfo = { DataPt => \$val, NoVerboseDir => 1 };
|
|
362
|
+
my $oldOrder = $et->GetByteOrder();
|
|
362
363
|
require Image::ExifTool::PLIST;
|
|
363
364
|
Image::ExifTool::PLIST::ProcessBinaryPLIST($et, $dirInfo);
|
|
364
365
|
$val = $$dirInfo{Value};
|
|
@@ -366,6 +367,7 @@ sub ConvertPLIST($$)
|
|
|
366
367
|
require 'Image/ExifTool/XMPStruct.pl';
|
|
367
368
|
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
|
368
369
|
}
|
|
370
|
+
$et->SetByteOrder($oldOrder);
|
|
369
371
|
return $val;
|
|
370
372
|
}
|
|
371
373
|
|
|
@@ -866,6 +866,11 @@ sub new
|
|
|
866
866
|
}
|
|
867
867
|
$noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID};
|
|
868
868
|
$hexID = $$vars{HEX_ID};
|
|
869
|
+
if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
|
|
870
|
+
and not $$table{CHECK_PROC})
|
|
871
|
+
{
|
|
872
|
+
warn("Binary table $tableName doesn't have a CHECK_PROC\n");
|
|
873
|
+
}
|
|
869
874
|
my $processBinaryData = ($$table{PROCESS_PROC} and (
|
|
870
875
|
$$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or
|
|
871
876
|
$$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted or
|
|
@@ -1004,6 +1009,9 @@ TagID: foreach $tagID (@keys) {
|
|
|
1004
1009
|
if ($writable and not ($$table{WRITE_PROC} or $tableName =~ /Shortcuts/ or $writable eq '2')) {
|
|
1005
1010
|
undef $writable;
|
|
1006
1011
|
}
|
|
1012
|
+
#if ($writable and $$tagInfo{Unknown} and $$table{GROUPS}{0} ne 'MakerNotes') {
|
|
1013
|
+
# warn "Warning: Writable Unknown tag - $short $name\n",
|
|
1014
|
+
#}
|
|
1007
1015
|
# validate some characteristics of obvious date/time tags
|
|
1008
1016
|
my @g = $et->GetGroup($tagInfo);
|
|
1009
1017
|
if ($$tagInfo{List} and $g[2] eq 'Time' and $writable and not $$tagInfo{Protected} and
|
|
Binary file
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# 5) http://www.color.org/icc_specs2.xalter (approved revisions, 2010-07-16)
|
|
13
13
|
# 6) Eef Vreeland private communication
|
|
14
14
|
# 7) https://color.org/specification/ICC.2-2019.pdf
|
|
15
|
+
# 8) https://www.color.org/specification/ICC.1-2022-05.pdf
|
|
15
16
|
#
|
|
16
17
|
# Notes: The ICC profile information is different: the format of each
|
|
17
18
|
# tag is embedded in the information instead of in the directory
|
|
@@ -25,7 +26,7 @@ use strict;
|
|
|
25
26
|
use vars qw($VERSION);
|
|
26
27
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
27
28
|
|
|
28
|
-
$VERSION = '1.
|
|
29
|
+
$VERSION = '1.41';
|
|
29
30
|
|
|
30
31
|
sub ProcessICC($$);
|
|
31
32
|
sub ProcessICC_Profile($$$);
|
|
@@ -367,6 +368,7 @@ my %manuSig = ( #6
|
|
|
367
368
|
Groups => { 2 => 'Time' },
|
|
368
369
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
369
370
|
},
|
|
371
|
+
|
|
370
372
|
targ => {
|
|
371
373
|
Name => 'CharTarget',
|
|
372
374
|
ValueConv => '$val=~s/\0.*//; length $val > 128 ? \$val : $val',
|
|
@@ -493,6 +495,10 @@ my %manuSig = ( #6
|
|
|
493
495
|
},
|
|
494
496
|
},
|
|
495
497
|
ciis => 'ColorimetricIntentImageState', #5
|
|
498
|
+
cicp => { #8 (Coding-independent Code Points)
|
|
499
|
+
Name => 'ColorRepresentation',
|
|
500
|
+
SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::ColorRep' },
|
|
501
|
+
},
|
|
496
502
|
scoe => 'SceneColorimetryEstimates', #5
|
|
497
503
|
sape => 'SceneAppearanceEstimates', #5
|
|
498
504
|
fpce => 'FocalPlaneColorimetryEstimates', #5
|
|
@@ -628,6 +634,7 @@ my %manuSig = ( #6
|
|
|
628
634
|
s2cp => 'StandardToCustomPcc',
|
|
629
635
|
smap => 'SurfaceMap',
|
|
630
636
|
# smwp ? (seen in some v5 samples [was a mistake in sample production])
|
|
637
|
+
hdgm => { Name => 'HDGainMapInfo', Binary => 1 }, #PH
|
|
631
638
|
|
|
632
639
|
# the following entry represents the ICC profile header, and doesn't
|
|
633
640
|
# exist as a tag in the directory. It is only in this table to provide
|
|
@@ -747,6 +754,78 @@ my %manuSig = ( #6
|
|
|
747
754
|
},
|
|
748
755
|
);
|
|
749
756
|
|
|
757
|
+
# Coding-independent code points (cicp) definition
|
|
758
|
+
# (NOTE: conversions are the same as Image::ExifTool::QuickTime::ColorRep tags)
|
|
759
|
+
%Image::ExifTool::ICC_Profile::ColorRep = (
|
|
760
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
761
|
+
GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-cicp', 2 => 'Image' },
|
|
762
|
+
8 => {
|
|
763
|
+
Name => 'ColorPrimaries',
|
|
764
|
+
PrintConv => {
|
|
765
|
+
1 => 'BT.709',
|
|
766
|
+
2 => 'Unspecified',
|
|
767
|
+
4 => 'BT.470 System M (historical)',
|
|
768
|
+
5 => 'BT.470 System B, G (historical)',
|
|
769
|
+
6 => 'BT.601',
|
|
770
|
+
7 => 'SMPTE 240',
|
|
771
|
+
8 => 'Generic film (color filters using illuminant C)',
|
|
772
|
+
9 => 'BT.2020, BT.2100',
|
|
773
|
+
10 => 'SMPTE 428 (CIE 1931 XYZ)', #forum14766
|
|
774
|
+
11 => 'SMPTE RP 431-2',
|
|
775
|
+
12 => 'SMPTE EG 432-1',
|
|
776
|
+
22 => 'EBU Tech. 3213-E',
|
|
777
|
+
},
|
|
778
|
+
},
|
|
779
|
+
9 => {
|
|
780
|
+
Name => 'TransferCharacteristics',
|
|
781
|
+
PrintConv => {
|
|
782
|
+
0 => 'For future use (0)',
|
|
783
|
+
1 => 'BT.709',
|
|
784
|
+
2 => 'Unspecified',
|
|
785
|
+
3 => 'For future use (3)',
|
|
786
|
+
4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
|
|
787
|
+
5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
|
|
788
|
+
6 => 'BT.601',
|
|
789
|
+
7 => 'SMPTE 240 M',
|
|
790
|
+
8 => 'Linear',
|
|
791
|
+
9 => 'Logarithmic (100 : 1 range)',
|
|
792
|
+
10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
|
|
793
|
+
11 => 'IEC 61966-2-4',
|
|
794
|
+
12 => 'BT.1361',
|
|
795
|
+
13 => 'sRGB or sYCC',
|
|
796
|
+
14 => 'BT.2020 10-bit systems',
|
|
797
|
+
15 => 'BT.2020 12-bit systems',
|
|
798
|
+
16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
|
|
799
|
+
17 => 'SMPTE ST 428',
|
|
800
|
+
18 => 'BT.2100 HLG, ARIB STD-B67',
|
|
801
|
+
},
|
|
802
|
+
},
|
|
803
|
+
10 => {
|
|
804
|
+
Name => 'MatrixCoefficients',
|
|
805
|
+
PrintConv => {
|
|
806
|
+
0 => 'Identity matrix',
|
|
807
|
+
1 => 'BT.709',
|
|
808
|
+
2 => 'Unspecified',
|
|
809
|
+
3 => 'For future use (3)',
|
|
810
|
+
4 => 'US FCC 73.628',
|
|
811
|
+
5 => 'BT.470 System B, G (historical)',
|
|
812
|
+
6 => 'BT.601',
|
|
813
|
+
7 => 'SMPTE 240 M',
|
|
814
|
+
8 => 'YCgCo',
|
|
815
|
+
9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
|
|
816
|
+
10 => 'BT.2020 constant luminance',
|
|
817
|
+
11 => 'SMPTE ST 2085 YDzDx',
|
|
818
|
+
12 => 'Chromaticity-derived non-constant luminance',
|
|
819
|
+
13 => 'Chromaticity-derived constant luminance',
|
|
820
|
+
14 => 'BT.2100 ICtCp',
|
|
821
|
+
},
|
|
822
|
+
},
|
|
823
|
+
11 => {
|
|
824
|
+
Name => 'VideoFullRangeFlag',
|
|
825
|
+
PrintConv => { 0 => 'Limited', 1 => 'Full' },
|
|
826
|
+
},
|
|
827
|
+
);
|
|
828
|
+
|
|
750
829
|
# viewingConditionsType (view) definition
|
|
751
830
|
%Image::ExifTool::ICC_Profile::ViewingConditions = (
|
|
752
831
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.43';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -631,6 +631,7 @@ my %j2cMarker = (
|
|
|
631
631
|
%Image::ExifTool::Jpeg2000::ColorSpec = (
|
|
632
632
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
633
633
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData, # (we don't actually call this)
|
|
634
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
634
635
|
GROUPS => { 2 => 'Image' },
|
|
635
636
|
FORMAT => 'int8s',
|
|
636
637
|
WRITABLE => 1,
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::XMP;
|
|
22
22
|
use Image::ExifTool::GPS;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.13';
|
|
25
25
|
|
|
26
26
|
sub ExtractObject($$;$);
|
|
27
27
|
sub Get24u($$);
|
|
@@ -344,7 +344,7 @@ sub ProcessBinaryPLIST($$;$)
|
|
|
344
344
|
my ($i, $buff, @table);
|
|
345
345
|
my $dataPt = $$dirInfo{DataPt};
|
|
346
346
|
|
|
347
|
-
$et->VerboseDir('Binary PLIST');
|
|
347
|
+
$et->VerboseDir('Binary PLIST') unless $$dirInfo{NoVerboseDir};
|
|
348
348
|
SetByteOrder('MM');
|
|
349
349
|
|
|
350
350
|
if ($dataPt) {
|
|
@@ -36,7 +36,7 @@ use strict;
|
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.70';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -435,6 +435,7 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
|
435
435
|
%Image::ExifTool::PNG::PhysicalPixel = (
|
|
436
436
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
437
437
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
|
438
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
438
439
|
WRITABLE => 1,
|
|
439
440
|
GROUPS => { 1 => 'PNG-pHYs', 2 => 'Image' },
|
|
440
441
|
WRITE_GROUP => 'PNG-pHYs',
|
|
@@ -362,6 +362,7 @@ my %unicodeString = (
|
|
|
362
362
|
PROCESS_PROC => \&ProcessChannelOptions,
|
|
363
363
|
VARS => { IS_BINARY => 1 },
|
|
364
364
|
GROUPS => { 2 => 'Image' },
|
|
365
|
+
NOTES => 'These tags relate only to the appearance of a channel.',
|
|
365
366
|
0 => {
|
|
366
367
|
Name => 'ChannelColorSpace',
|
|
367
368
|
Format => 'int16u',
|
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
48
48
|
use Image::ExifTool::Exif;
|
|
49
49
|
use Image::ExifTool::GPS;
|
|
50
50
|
|
|
51
|
-
$VERSION = '3.
|
|
51
|
+
$VERSION = '3.07';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -2222,8 +2222,8 @@ my %userDefined = (
|
|
|
2222
2222
|
_cx_ => { Name => 'CX', Format => 'rational64s', Unknown => 1 },
|
|
2223
2223
|
_cy_ => { Name => 'CY', Format => 'rational64s', Unknown => 1 },
|
|
2224
2224
|
rads => { Name => 'Rads', Format => 'rational64s', Unknown => 1 },
|
|
2225
|
-
lvlm => { Name => 'LevelMeter', Format => 'rational64s', Unknown => 1 }, # (guess)
|
|
2226
|
-
Lvlm => { Name => 'LevelMeter', Format => 'rational64s', Unknown => 1 }, # (guess)
|
|
2225
|
+
lvlm => { Name => 'LevelMeter', Format => 'rational64s', Unknown => 1 }, # (guess, Kodak proprietary)
|
|
2226
|
+
Lvlm => { Name => 'LevelMeter', Format => 'rational64s', Unknown => 1 }, # (guess, Kodak proprietary)
|
|
2227
2227
|
pose => { Name => 'pose', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::pose' } },
|
|
2228
2228
|
# AMBA => Ambarella AVC atom (unknown data written by Kodak Playsport video cam)
|
|
2229
2229
|
# tmlp - 1 byte: 0 (PixPro SP360/4KVR360)
|
|
@@ -2822,7 +2822,7 @@ my %userDefined = (
|
|
|
2822
2822
|
},
|
|
2823
2823
|
iinf => [{
|
|
2824
2824
|
Name => 'ItemInformation',
|
|
2825
|
-
Condition => '$$valPt =~ /^\0/', # (check for version 0)
|
|
2825
|
+
Condition => '$$self{LastItemID} = -1; $$valPt =~ /^\0/', # (check for version 0)
|
|
2826
2826
|
SubDirectory => {
|
|
2827
2827
|
TagTable => 'Image::ExifTool::QuickTime::ItemInfo',
|
|
2828
2828
|
Start => 6, # (4-byte version/flags + 2-byte count)
|
|
@@ -2894,6 +2894,17 @@ my %userDefined = (
|
|
|
2894
2894
|
%unknownInfo,
|
|
2895
2895
|
},
|
|
2896
2896
|
],
|
|
2897
|
+
grpl => {
|
|
2898
|
+
Name => 'Unknown_grpl',
|
|
2899
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::grpl' },
|
|
2900
|
+
},
|
|
2901
|
+
);
|
|
2902
|
+
|
|
2903
|
+
# unknown grpl container
|
|
2904
|
+
%Image::ExifTool::QuickTime::grpl = (
|
|
2905
|
+
PROCESS_PROC => \&ProcessMOV,
|
|
2906
|
+
GROUPS => { 2 => 'Video' },
|
|
2907
|
+
# altr - seen "00 00 00 00 00 00 00 41 00 00 00 02 00 00 00 42 00 00 00 2e"
|
|
2897
2908
|
);
|
|
2898
2909
|
|
|
2899
2910
|
# additional metadata container (ref ISO14496-12:2015)
|
|
@@ -3038,6 +3049,7 @@ my %userDefined = (
|
|
|
3038
3049
|
);
|
|
3039
3050
|
|
|
3040
3051
|
# ref https://aomediacodec.github.io/av1-spec/av1-spec.pdf
|
|
3052
|
+
# (NOTE: conversions are the same as Image::ExifTool::ICC_Profile::ColorRep tags)
|
|
3041
3053
|
%Image::ExifTool::QuickTime::ColorRep = (
|
|
3042
3054
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
3043
3055
|
GROUPS => { 2 => 'Video' },
|
|
@@ -3321,7 +3333,13 @@ my %userDefined = (
|
|
|
3321
3333
|
the associations between items in the file. This information is used by
|
|
3322
3334
|
ExifTool, but these entries are not extracted as tags.
|
|
3323
3335
|
},
|
|
3324
|
-
dimg => {
|
|
3336
|
+
dimg => {
|
|
3337
|
+
Name => 'DerivedImageRef',
|
|
3338
|
+
# also parse these for the ID of the primary 'tmap' item
|
|
3339
|
+
# (tone-mapped image in HDRGainMap HEIC by iPhone 15 and 16)
|
|
3340
|
+
RawConv => \&ParseContentDescribes,
|
|
3341
|
+
WriteHook => \&ParseContentDescribes,
|
|
3342
|
+
},
|
|
3325
3343
|
thmb => { Name => 'ThumbnailRef', RawConv => 'undef' },
|
|
3326
3344
|
auxl => { Name => 'AuxiliaryImageRef', RawConv => 'undef' },
|
|
3327
3345
|
cdsc => {
|
|
@@ -3339,7 +3357,8 @@ my %userDefined = (
|
|
|
3339
3357
|
# hvc1 - HEVC image
|
|
3340
3358
|
# lhv1 - L-HEVC image
|
|
3341
3359
|
# infe - ItemInformationEntry
|
|
3342
|
-
# infe types: avc1,hvc1,lhv1,Exif,xml1,iovl(overlay image),grid,mime,hvt1(tile image)
|
|
3360
|
+
# infe types: avc1,hvc1,lhv1,Exif,xml1,iovl(overlay image),grid,mime,tmap,hvt1(tile image)
|
|
3361
|
+
# ('tmap' has something to do with the new gainmap written by iPhone 15 and 16)
|
|
3343
3362
|
infe => {
|
|
3344
3363
|
Name => 'ItemInfoEntry',
|
|
3345
3364
|
RawConv => \&ParseItemInfoEntry,
|
|
@@ -6569,7 +6588,7 @@ my %userDefined = (
|
|
|
6569
6588
|
PROCESS_PROC => \&ProcessKeys,
|
|
6570
6589
|
WRITE_PROC => \&WriteKeys,
|
|
6571
6590
|
CHECK_PROC => \&CheckQTValue,
|
|
6572
|
-
VARS => { LONG_TAGS =>
|
|
6591
|
+
VARS => { LONG_TAGS => 9 },
|
|
6573
6592
|
WRITABLE => 1,
|
|
6574
6593
|
# (not PREFERRED when writing)
|
|
6575
6594
|
GROUPS => { 1 => 'Keys' },
|
|
@@ -6767,6 +6786,7 @@ my %userDefined = (
|
|
|
6767
6786
|
ValueConv => 'unpack("N", $val)',
|
|
6768
6787
|
Writable => 0, # (don't make this writable because it is found in timed metadata)
|
|
6769
6788
|
},
|
|
6789
|
+
'full-frame-rate-playback-intent' => 'FullFrameRatePlaybackIntent', #forum16824
|
|
6770
6790
|
#
|
|
6771
6791
|
# seen in Apple ProRes RAW file
|
|
6772
6792
|
#
|
|
@@ -8787,6 +8807,7 @@ sub PrintableTagID($;$)
|
|
|
8787
8807
|
# ContentType - mime type of item
|
|
8788
8808
|
# ContentEncoding - item encoding
|
|
8789
8809
|
# URI - URI of a 'uri '-type item
|
|
8810
|
+
# infe - raw data for 'infe' box (when writing only) [retracted]
|
|
8790
8811
|
# ipma:
|
|
8791
8812
|
# Association - list of associated properties in the ipco container
|
|
8792
8813
|
# Essential - list of "essential" flags for the associated properties
|
|
@@ -8937,10 +8958,18 @@ sub ParseItemInfoEntry($$)
|
|
|
8937
8958
|
$$items{$id}{URI} = GetString(\$val, $pos);
|
|
8938
8959
|
}
|
|
8939
8960
|
}
|
|
8961
|
+
#[retracted] # save raw infe box when writing in case we need to sort items later
|
|
8962
|
+
#[retracted] $$items{$id}{infe} = pack('N', length($val)+8) . 'infe' . $val if $$et{IsWriting};
|
|
8940
8963
|
$et->VPrint(1, "$$et{INDENT} Item $id: Type=", $$items{$id}{Type} || '',
|
|
8941
8964
|
' Name=', $$items{$id}{Name} || '',
|
|
8942
8965
|
' ContentType=', $$items{$id}{ContentType} || '',
|
|
8966
|
+
($$et{PrimaryItem} and $$et{PrimaryItem} == $id) ? ' (PrimaryItem)' : '',
|
|
8943
8967
|
"\n") if $verbose > 1;
|
|
8968
|
+
unless ($id > $$et{LastItemID}) {
|
|
8969
|
+
$et->Warn('Item info entries are out of order'); #[retracted] unless $$et{IsWriting};
|
|
8970
|
+
#[retracted] $$et{ItemsNotSorted} = 1; # set flag indicating the items weren't sorted
|
|
8971
|
+
}
|
|
8972
|
+
$$et{LastItemID} = $id;
|
|
8944
8973
|
return undef;
|
|
8945
8974
|
}
|
|
8946
8975
|
|
|
@@ -8961,6 +8990,7 @@ sub ParseItemPropAssoc($$)
|
|
|
8961
8990
|
my $flg = Get32u(\$val, 0);
|
|
8962
8991
|
my $num = Get32u(\$val, 4);
|
|
8963
8992
|
my $pos = 8;
|
|
8993
|
+
my $lastID = -1;
|
|
8964
8994
|
for ($i=0; $i<$num; ++$i) {
|
|
8965
8995
|
if ($ver == 0) {
|
|
8966
8996
|
return undef if $pos + 3 > $len;
|
|
@@ -8993,6 +9023,9 @@ sub ParseItemPropAssoc($$)
|
|
|
8993
9023
|
$$items{$id}{Association} = \@association;
|
|
8994
9024
|
$$items{$id}{Essential} = \@essential;
|
|
8995
9025
|
$et->VPrint(1, "$$et{INDENT} Item $id properties: @association\n") if $verbose > 1;
|
|
9026
|
+
# (according to ISO/IEC 23008-12, these entries must be sorted by item ID)
|
|
9027
|
+
$et->Warn('Item property association entries are out of order') unless $id > $lastID;
|
|
9028
|
+
$lastID = $id;
|
|
8996
9029
|
}
|
|
8997
9030
|
return undef;
|
|
8998
9031
|
}
|
|
@@ -9039,7 +9072,10 @@ sub HandleItemInfo($)
|
|
|
9039
9072
|
}
|
|
9040
9073
|
}
|
|
9041
9074
|
$warn = "Can't currently decode protected $type metadata" if $$item{ProtectionIndex};
|
|
9042
|
-
|
|
9075
|
+
# Note: In HEIC's, these seem to indicate data in 'idat' instead of 'mdat'
|
|
9076
|
+
my $constMeth = $$item{ConstructionMethod} || 0;
|
|
9077
|
+
$warn = "Can't currently extract $type with construction method $constMeth" if $constMeth > 1;
|
|
9078
|
+
$warn = "No 'idat' for $type object with construction method 1" if $constMeth == 1 and not $$et{MediaDataInfo};
|
|
9043
9079
|
$et->Warn($warn) if $warn and $name;
|
|
9044
9080
|
$warn = 'Not this file' if $$item{DataReferenceIndex}; # (can only extract from "this file")
|
|
9045
9081
|
unless (($$item{Extents} and @{$$item{Extents}}) or $warn) {
|
|
@@ -9050,7 +9086,7 @@ sub HandleItemInfo($)
|
|
|
9050
9086
|
$et->VPrint(0, "$$et{INDENT} [not extracted] ($warn)\n") if $verbose > 2;
|
|
9051
9087
|
next;
|
|
9052
9088
|
}
|
|
9053
|
-
my $base = $$item{BaseOffset} || 0;
|
|
9089
|
+
my $base = ($$item{BaseOffset} || 0) + ($constMeth ? $$et{MediaDataInfo}[0] : 0);
|
|
9054
9090
|
if ($verbose > 2) {
|
|
9055
9091
|
# do verbose hex dump
|
|
9056
9092
|
my $len = 0;
|
|
@@ -9189,6 +9225,7 @@ sub HandleItemInfo($)
|
|
|
9189
9225
|
delete $$et{DOC_NUM};
|
|
9190
9226
|
}
|
|
9191
9227
|
delete $$et{ItemInfo};
|
|
9228
|
+
delete $$et{MediaDataInfo};
|
|
9192
9229
|
}
|
|
9193
9230
|
|
|
9194
9231
|
#------------------------------------------------------------------------------
|
|
@@ -9771,8 +9808,10 @@ sub ProcessMOV($$;$)
|
|
|
9771
9808
|
# save required tag sizes
|
|
9772
9809
|
if ($$tagTablePtr{"$tag-size"}) {
|
|
9773
9810
|
$et->HandleTag($tagTablePtr, "$tag-size", $size);
|
|
9774
|
-
$et->HandleTag($tagTablePtr, "$tag-offset", $raf->Tell()) if $$tagTablePtr{"$tag-offset"};
|
|
9811
|
+
$et->HandleTag($tagTablePtr, "$tag-offset", $raf->Tell()+$dirBase) if $$tagTablePtr{"$tag-offset"};
|
|
9775
9812
|
}
|
|
9813
|
+
# save position/size of 'idat'
|
|
9814
|
+
$$et{MediaDataInfo} = [ $raf->Tell() + $dirBase, $size ] if $tag eq 'idat';
|
|
9776
9815
|
# stop processing at mdat/idat if -fast2 is used
|
|
9777
9816
|
last if $fast > 1 and ($tag eq 'mdat' or ($tag eq 'idat' and $$et{FileType} ne 'HEIC'));
|
|
9778
9817
|
# load values only if associated with a tag (or verbose) and not too big
|
|
@@ -3261,6 +3261,7 @@ my %tagLookup = (
|
|
|
3261
3261
|
'fujiflashmode' => { 133 => 0x1010 },
|
|
3262
3262
|
'fujimodel' => { 133 => 0x1447 },
|
|
3263
3263
|
'fujimodel2' => { 133 => 0x1448 },
|
|
3264
|
+
'fullframerateplaybackintent' => { 409 => 'full-frame-rate-playback-intent' },
|
|
3264
3265
|
'fullhdhighspeedrec' => { 133 => 0x3824 },
|
|
3265
3266
|
'fullimagesize' => { 456 => 0xb02b },
|
|
3266
3267
|
'fullpanoheightpixels' => { 507 => 'FullPanoHeightPixels', 508 => 'FullPanoHeightPixels' },
|
|
@@ -9862,6 +9863,7 @@ my %tagExists = (
|
|
|
9862
9863
|
'hasxfa' => 1,
|
|
9863
9864
|
'hcusage' => 1,
|
|
9864
9865
|
'hdcontent' => 1,
|
|
9866
|
+
'hdgainmapinfo' => 1,
|
|
9865
9867
|
'hdmibitdepth' => 1,
|
|
9866
9868
|
'hdmiexternalrecorder' => 1,
|
|
9867
9869
|
'hdmioutputhdr' => 1,
|
|
@@ -12813,6 +12815,7 @@ my %tagExists = (
|
|
|
12813
12815
|
'unknown02' => 1,
|
|
12814
12816
|
'unknown03' => 1,
|
|
12815
12817
|
'unknown_cndb' => 1,
|
|
12818
|
+
'unknown_grpl' => 1,
|
|
12816
12819
|
'unknown_h' => 1,
|
|
12817
12820
|
'unknown_m' => 1,
|
|
12818
12821
|
'unknown_slmt' => 1,
|
|
@@ -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
|
|
15
|
+
They contain a total of 28224 tags, with 17515 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
|
|
@@ -8643,6 +8643,7 @@ specification.
|
|
|
8643
8643
|
'cept' ColorEncodingParams no
|
|
8644
8644
|
'chad' ChromaticAdaptation no
|
|
8645
8645
|
'chrm' Chromaticity ICC_Profile Chromaticity
|
|
8646
|
+
'cicp' ColorRepresentation ICC_Profile ColorRep
|
|
8646
8647
|
'ciis' ColorimetricIntentImageState no
|
|
8647
8648
|
'clio' ColorantInfoOut no
|
|
8648
8649
|
'cloo' ColorantOrderOut no
|
|
@@ -8681,6 +8682,7 @@ specification.
|
|
|
8681
8682
|
'gdb1' GamutBoundaryDescription1 no
|
|
8682
8683
|
'gdb2' GamutBoundaryDescription2 no
|
|
8683
8684
|
'gdb3' GamutBoundaryDescription3 no
|
|
8685
|
+
'hdgm' HDGainMapInfo no
|
|
8684
8686
|
'kTRC' GrayTRC no
|
|
8685
8687
|
'lumi' Luminance no
|
|
8686
8688
|
'mcta' MultiplexTypeArray no
|
|
@@ -8762,6 +8764,15 @@ specification.
|
|
|
8762
8764
|
28 ChromaticityChannel3 no
|
|
8763
8765
|
36 ChromaticityChannel4 no
|
|
8764
8766
|
|
|
8767
|
+
=head3 ICC_Profile ColorRep Tags
|
|
8768
|
+
|
|
8769
|
+
Index1 Tag Name Writable
|
|
8770
|
+
------ -------- --------
|
|
8771
|
+
8 ColorPrimaries no
|
|
8772
|
+
9 TransferCharacteristics no
|
|
8773
|
+
10 MatrixCoefficients no
|
|
8774
|
+
11 VideoFullRangeFlag no
|
|
8775
|
+
|
|
8765
8776
|
=head3 ICC_Profile ColorantTable Tags
|
|
8766
8777
|
|
|
8767
8778
|
Index1 Tag Name Writable
|
|
@@ -8968,6 +8979,8 @@ access to this information.
|
|
|
8968
8979
|
|
|
8969
8980
|
=head3 Photoshop ChannelOptions Tags
|
|
8970
8981
|
|
|
8982
|
+
These tags relate only to the appearance of a channel.
|
|
8983
|
+
|
|
8971
8984
|
Index1 Tag Name Writable
|
|
8972
8985
|
------ -------- --------
|
|
8973
8986
|
0 ChannelColorSpace no
|
|
@@ -30273,6 +30286,8 @@ changed via the config file.
|
|
|
30273
30286
|
'director' Director yes
|
|
30274
30287
|
'displayname' DisplayName yes
|
|
30275
30288
|
'encoder' Encoder yes
|
|
30289
|
+
'full-frame-rate-playback-intent'
|
|
30290
|
+
FullFrameRatePlaybackIntent yes
|
|
30276
30291
|
'genre' Genre yes
|
|
30277
30292
|
'information' Information yes
|
|
30278
30293
|
'keywords' Keywords yes
|
|
@@ -30405,6 +30420,7 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
|
|
|
30405
30420
|
'bxml' BinaryXML? no
|
|
30406
30421
|
'dinf' DataInfo QuickTime DataInfo
|
|
30407
30422
|
'free' Free? no
|
|
30423
|
+
'grpl' Unknown_grpl QuickTime grpl
|
|
30408
30424
|
'hdlr' Handler QuickTime Handler
|
|
30409
30425
|
'idat' MetaImageSize no
|
|
30410
30426
|
'iinf' ItemInformation QuickTime ItemInfo
|
|
@@ -30439,6 +30455,12 @@ MP4 data reference box.
|
|
|
30439
30455
|
'url ' URL no
|
|
30440
30456
|
'urn ' URN no
|
|
30441
30457
|
|
|
30458
|
+
=head3 QuickTime grpl Tags
|
|
30459
|
+
|
|
30460
|
+
Tag ID Tag Name Writable
|
|
30461
|
+
------ -------- --------
|
|
30462
|
+
[no tags known]
|
|
30463
|
+
|
|
30442
30464
|
=head3 QuickTime Handler Tags
|
|
30443
30465
|
|
|
30444
30466
|
Index1 Tag Name Writable
|
|
@@ -482,23 +482,26 @@ sub WriteKeys($$$)
|
|
|
482
482
|
sub WriteItemInfo($$$)
|
|
483
483
|
{
|
|
484
484
|
my ($et, $dirInfo, $outfile) = @_;
|
|
485
|
-
my $boxPos = $$dirInfo{BoxPos};
|
|
485
|
+
my $boxPos = $$dirInfo{BoxPos}; # hash of [position,length,irefVer(iref only)] for box in $outfile
|
|
486
486
|
my $raf = $$et{RAF};
|
|
487
487
|
my $items = $$et{ItemInfo};
|
|
488
|
-
my (%did, @mdatEdit, $name);
|
|
488
|
+
my (%did, @mdatEdit, $name, $tmap);
|
|
489
489
|
|
|
490
490
|
return () unless $items and $raf;
|
|
491
491
|
|
|
492
492
|
# extract information from EXIF/XMP metadata items
|
|
493
493
|
my $primary = $$et{PrimaryItem};
|
|
494
494
|
my $curPos = $raf->Tell();
|
|
495
|
+
my $lastID = 0;
|
|
495
496
|
my $id;
|
|
496
497
|
foreach $id (sort { $a <=> $b } keys %$items) {
|
|
498
|
+
$lastID = $id;
|
|
497
499
|
$primary = $id unless defined $primary; # assume primary is lowest-number item if pitm missing
|
|
498
500
|
my $item = $$items{$id};
|
|
499
501
|
# only edit primary EXIF/XMP metadata
|
|
500
502
|
next unless $$item{RefersTo} and $$item{RefersTo}{$primary};
|
|
501
503
|
my $type = $$item{ContentType} || $$item{Type} || next;
|
|
504
|
+
$tmap = $id if $type eq 'tmap'; # save ID of primary 'tmap' item (tone-mapped image)
|
|
502
505
|
# get ExifTool name for this item
|
|
503
506
|
$name = { Exif => 'EXIF', 'application/rdf+xml' => 'XMP' }->{$type};
|
|
504
507
|
next unless $name; # only care about EXIF and XMP
|
|
@@ -700,8 +703,10 @@ sub WriteItemInfo($$$)
|
|
|
700
703
|
$type = "Exif\0";
|
|
701
704
|
$mime = '';
|
|
702
705
|
}
|
|
703
|
-
my $id =
|
|
704
|
-
|
|
706
|
+
my $id = ++$lastID; # use next highest available ID (so ID's in iinf are in order)
|
|
707
|
+
#[retracted] # create new item information hash to save infe box in case we need it for sorting
|
|
708
|
+
#[retracted] my $item = $$items{$id} = { };
|
|
709
|
+
# add new infe entry to iinf box
|
|
705
710
|
my $n = length($type) + length($mime) + length($enc) + 16;
|
|
706
711
|
if ($id < 0x10000) {
|
|
707
712
|
$add{iinf} .= pack('Na4CCCCnn', $n, 'infe', 2, 0, 0, 1, $id, 0) . $type . $mime . $enc;
|
|
@@ -709,11 +714,14 @@ sub WriteItemInfo($$$)
|
|
|
709
714
|
$n += 2;
|
|
710
715
|
$add{iinf} .= pack('Na4CCCCNn', $n, 'infe', 3, 0, 0, 1, $id, 0) . $type . $mime . $enc;
|
|
711
716
|
}
|
|
712
|
-
# add
|
|
717
|
+
#[retracted] $add{iinf} .= $$item{infe};
|
|
718
|
+
# add new cdsc to iref (also refer to primary 'tmap' if it exists)
|
|
713
719
|
if ($irefVer) {
|
|
714
|
-
$
|
|
720
|
+
my ($fmt, $siz, $num) = defined $tmap ? ('N', 22, 2) : ('', 18, 1);
|
|
721
|
+
$add{iref} .= pack('Na4NnN'.$fmt, $siz, 'cdsc', $id, $num, $primary, $tmap);
|
|
715
722
|
} else {
|
|
716
|
-
$
|
|
723
|
+
my ($fmt, $siz, $num) = defined $tmap ? ('n', 16, 2) : ('', 14, 1);
|
|
724
|
+
$add{iref} .= pack('Na4nnn'.$fmt, $siz, 'cdsc', $id, $num, $primary, $tmap);
|
|
717
725
|
}
|
|
718
726
|
# add new entry to iloc table (see ISO14496-12:2015 pg.79)
|
|
719
727
|
my $ilocVer = Get8u($outfile, $$boxPos{iloc}[0] + 8);
|
|
@@ -778,8 +786,9 @@ sub WriteItemInfo($$$)
|
|
|
778
786
|
my $added = 0;
|
|
779
787
|
my $tag;
|
|
780
788
|
foreach $tag (sort { $$boxPos{$a}[0] <=> $$boxPos{$b}[0] } keys %$boxPos) {
|
|
789
|
+
$$boxPos{$tag}[0] += $added;
|
|
781
790
|
next unless $add{$tag};
|
|
782
|
-
my $pos = $$boxPos{$tag}[0]
|
|
791
|
+
my $pos = $$boxPos{$tag}[0];
|
|
783
792
|
unless ($$boxPos{$tag}[1]) {
|
|
784
793
|
$tag eq 'iref' or $et->Error('Internal error adding iref box'), last;
|
|
785
794
|
# create new iref box
|
|
@@ -826,9 +835,34 @@ sub WriteItemInfo($$$)
|
|
|
826
835
|
}
|
|
827
836
|
# add new entries to this box (or add pitm after hdlr)
|
|
828
837
|
substr($$outfile, $pos + $$boxPos{$tag}[1], 0) = $add{$tag};
|
|
838
|
+
$$boxPos{$tag}[1] += length $add{$tag};
|
|
829
839
|
$added += length $add{$tag}; # positions are shifted by length of new entries
|
|
830
840
|
}
|
|
831
841
|
}
|
|
842
|
+
#[This sorting idea was retracted because just sorting 'iinf' wasn't sufficient to
|
|
843
|
+
# repair the problem where an out-of-order ID was added -- Apple Preview still
|
|
844
|
+
# ignores the gain-map image. It looks like either or both 'iref' and 'iloc' must
|
|
845
|
+
# also be sorted by ID, although the spec doesn't mention this]
|
|
846
|
+
#[retracted] # sort infe entries in iinf box if necessary
|
|
847
|
+
#[retracted] if ($$et{ItemsNotSorted}) {
|
|
848
|
+
#[retracted] if ($$boxPos{iinf}) {
|
|
849
|
+
#[retracted] my $iinfVer = Get8u($outfile, $$boxPos{iinf}[0] + 8);
|
|
850
|
+
#[retracted] my $off = $iinfVer == 0 ? 14 : 16; # offset to first infe item
|
|
851
|
+
#[retracted] my $sorted = ''; # sorted iinf payload
|
|
852
|
+
#[retracted] $sorted .= $$items{$_}{infe} || '' foreach sort { $a <=> $b } keys %$items;
|
|
853
|
+
#[retracted] if (length $sorted == $$boxPos{iinf}[1]-$off) {
|
|
854
|
+
#[retracted] # replace with sorted infe entries
|
|
855
|
+
#[retracted] substr($$outfile, $$boxPos{iinf}[0] + $off, length $sorted) = $sorted;
|
|
856
|
+
#[retracted] $et->Warn('Item info entries are out of order. Fixed.');
|
|
857
|
+
#[retracted] ++$$et{CHANGED};
|
|
858
|
+
#[retracted] } else {
|
|
859
|
+
#[retracted] $et->Warn('Error sorting item info entries');
|
|
860
|
+
#[retracted] }
|
|
861
|
+
#[retracted] } else {
|
|
862
|
+
#[retracted] $et->Warn('Item info entries are out of order');
|
|
863
|
+
#[retracted] }
|
|
864
|
+
#[retracted] delete $$et{ItemsNotSorted};
|
|
865
|
+
#[retracted] }
|
|
832
866
|
delete $$et{ItemInfo};
|
|
833
867
|
return @mdatEdit ? \@mdatEdit : undef;
|
|
834
868
|
}
|
|
@@ -1129,7 +1163,7 @@ sub WriteQuickTime($$$)
|
|
|
1129
1163
|
next;
|
|
1130
1164
|
}
|
|
1131
1165
|
}
|
|
1132
|
-
undef $tagInfo if $tagInfo and $$tagInfo{
|
|
1166
|
+
undef $tagInfo if $tagInfo and $$tagInfo{AddedUnknown};
|
|
1133
1167
|
|
|
1134
1168
|
if ($tagInfo and (not defined $$tagInfo{Writable} or $$tagInfo{Writable})) {
|
|
1135
1169
|
my $subdir = $$tagInfo{SubDirectory};
|
|
@@ -4993,7 +4993,7 @@ my $strptimeLib; # strptime library name if available
|
|
|
4993
4993
|
sub InverseDateTime($$;$$)
|
|
4994
4994
|
{
|
|
4995
4995
|
my ($self, $val, $tzFlag, $dateOnly) = @_;
|
|
4996
|
-
my ($rtnVal, $tz);
|
|
4996
|
+
my ($rtnVal, $tz, $fs);
|
|
4997
4997
|
my $fmt = $$self{OPTIONS}{DateFormat};
|
|
4998
4998
|
# strip off timezone first if it exists
|
|
4999
4999
|
if (not $fmt and $val =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) {
|
|
@@ -5019,8 +5019,17 @@ sub InverseDateTime($$;$$)
|
|
|
5019
5019
|
$strptimeLib = '';
|
|
5020
5020
|
}
|
|
5021
5021
|
}
|
|
5022
|
-
# handle
|
|
5023
|
-
|
|
5022
|
+
# handle fractional seconds (%f) and time zone (%z)
|
|
5023
|
+
($fs, $tz) = ('', '');
|
|
5024
|
+
if ($fmt =~ /%(f|:?z)/) {
|
|
5025
|
+
if ($fmt =~ s/(.*[^%])%f/$1/) {
|
|
5026
|
+
$fs = $2 if $val =~ s/(.*)(\.\d+)/$1/; # (take last .### as fractional seconds)
|
|
5027
|
+
}
|
|
5028
|
+
if ($fmt =~ s/(.*[^%])%(:?)z/$1/) {
|
|
5029
|
+
my $colon = $2;
|
|
5030
|
+
$tz = "$2:$3" if $val =~ s/(.*)([-+]\d{2})$colon(\d{2})/$1/;
|
|
5031
|
+
}
|
|
5032
|
+
}
|
|
5024
5033
|
my ($lib, $wrn, @a);
|
|
5025
5034
|
TryLib: for ($lib=$strptimeLib; ; $lib='') {
|
|
5026
5035
|
# handle %s format ourself (not supported in Fedora, see forum15032)
|
|
@@ -5065,7 +5074,7 @@ TryLib: for ($lib=$strptimeLib; ; $lib='') {
|
|
|
5065
5074
|
$a[$i] = "0$a[$i]"; # pad to 2 digits if necessary
|
|
5066
5075
|
}
|
|
5067
5076
|
}
|
|
5068
|
-
$val = join(':', @a[5,4,3]) . ' ' . join(':', @a[2,1,0]) . $fs;
|
|
5077
|
+
$val = join(':', @a[5,4,3]) . ' ' . join(':', @a[2,1,0]) . $fs . $tz;
|
|
5069
5078
|
last;
|
|
5070
5079
|
}
|
|
5071
5080
|
}
|
|
@@ -5077,7 +5086,9 @@ TryLib: for ($lib=$strptimeLib; ; $lib='') {
|
|
|
5077
5086
|
my $ss = $a[4]; # get SS
|
|
5078
5087
|
push @a, '00' while @a < 5; # add MM, SS if not given
|
|
5079
5088
|
# get sub-seconds if they exist (must be after SS, and have leading ".")
|
|
5080
|
-
|
|
5089
|
+
unless ($fmt) {
|
|
5090
|
+
$fs = (@a > 5 and $val =~ /(\.\d+)\s*$/) ? $1 : '';
|
|
5091
|
+
}
|
|
5081
5092
|
# add/remove timezone if necessary
|
|
5082
5093
|
if ($tzFlag) {
|
|
5083
5094
|
if (not $tz) {
|
data/bin/lib/Image/ExifTool.pm
CHANGED
|
@@ -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 $advFmtSelf);
|
|
31
31
|
|
|
32
|
-
$VERSION = '13.
|
|
32
|
+
$VERSION = '13.10';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -6551,11 +6551,13 @@ sub ConvertDateTime($$)
|
|
|
6551
6551
|
$fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
|
|
6552
6552
|
}
|
|
6553
6553
|
# parse %z and %s ourself (to handle time zones properly)
|
|
6554
|
-
if ($fmt =~
|
|
6554
|
+
if ($fmt =~ /%:?[sz]/) {
|
|
6555
6555
|
# use system time zone unless otherwise specified
|
|
6556
6556
|
$tz = TimeZoneString(\@a, TimeLocal(@a)) if not $tz and eval { require Time::Local };
|
|
6557
6557
|
# remove colon, setting to UTC if time zone is not numeric
|
|
6558
|
-
$tz =
|
|
6558
|
+
$tz = '+00:00' unless $tz and $tz=~/^[-+]\d{2}:\d{2}$/;
|
|
6559
|
+
$fmt =~ s/(^|[^%])((%%)*)%:z/$1$2$tz/g; # convert '%:z' format codes
|
|
6560
|
+
$tz =~ s/://;
|
|
6559
6561
|
$fmt =~ s/(^|[^%])((%%)*)%z/$1$2$tz/g; # convert '%z' format codes
|
|
6560
6562
|
if ($fmt =~ /%s/ and eval { require Time::Local }) {
|
|
6561
6563
|
# calculate seconds since the Epoch, UTC
|
|
@@ -8961,8 +8963,9 @@ sub GetTagInfo($$$;$$$)
|
|
|
8961
8963
|
next;
|
|
8962
8964
|
}
|
|
8963
8965
|
}
|
|
8964
|
-
# don't return Unknown tags unless that option is set (also see forum13716)
|
|
8965
|
-
if ($$tagInfo{Unknown} and not $$options{Unknown} and
|
|
8966
|
+
# don't return Unknown tags unless that option is set or we are writing (also see forum13716)
|
|
8967
|
+
if ($$tagInfo{Unknown} and not $$options{Unknown} and
|
|
8968
|
+
(not $$self{IsWriting} or $$tagInfo{AddedUnknown}) and not
|
|
8966
8969
|
($$options{Verbose} or $$self{HTML_DUMP} or
|
|
8967
8970
|
($$options{Validate} and not $$tagInfo{AddedUnknown})))
|
|
8968
8971
|
{
|
data/bin/lib/Image/ExifTool.pod
CHANGED
|
@@ -613,8 +613,10 @@ different when copying tags with L</SetNewValuesFromFile>.
|
|
|
613
613
|
Format for printing date/time values. See C<strftime> in the L<POSIX>
|
|
614
614
|
package and L<https://exiftool.org/filename.html#codes> for details about
|
|
615
615
|
the format string. If the date can not be converted, the value is left
|
|
616
|
-
unchanged unless the StrictDate option is set.
|
|
617
|
-
|
|
616
|
+
unchanged unless the StrictDate option is set. ExifTool adds a few
|
|
617
|
+
additional format specifiers (C<%f>, C<%s> and C<%z>), see
|
|
618
|
+
L<https://exiftool.org/filename.html#codes> for more details. The inverse
|
|
619
|
+
conversion (ie. when calling L</SetNewValue>) is performed only if
|
|
618
620
|
POSIX::strptime or Time::Piece is installed. The default setting of undef
|
|
619
621
|
causes date/time values to remain in standard EXIF format (similar to a
|
|
620
622
|
DateFormat of "%Y:%m:%d %H:%M:%S").
|
|
@@ -2559,39 +2561,39 @@ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
|
|
2559
2561
|
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
|
|
2560
2562
|
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
|
2561
2563
|
HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
|
2562
|
-
ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
|
|
2563
|
-
ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
|
|
2564
|
-
IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
|
|
2565
|
-
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
|
|
2566
|
-
KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
|
|
2567
|
-
LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
|
|
2568
|
-
MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
|
|
2569
|
-
MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
|
|
2570
|
-
MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
|
|
2571
|
-
MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
|
|
2572
|
-
Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
|
|
2573
|
-
Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
|
|
2574
|
-
NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
|
|
2575
|
-
PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
|
|
2576
|
-
Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
|
|
2577
|
-
PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
|
|
2578
|
-
RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
|
|
2579
|
-
Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
|
|
2580
|
-
SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
|
|
2581
|
-
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
|
|
2582
|
-
Track#, UserData, VCalendar, VCard, VNote,
|
|
2583
|
-
|
|
2584
|
-
XMP-
|
|
2585
|
-
XMP-
|
|
2586
|
-
XMP-
|
|
2587
|
-
XMP-
|
|
2588
|
-
XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
|
2589
|
-
XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
|
2590
|
-
XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
|
2591
|
-
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
|
2592
|
-
XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
|
2593
|
-
XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
|
2594
|
-
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
|
2564
|
+
ICC-chrm, ICC-cicp, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
|
|
2565
|
+
ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
|
|
2566
|
+
IFD0, IFD1, IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
|
|
2567
|
+
JFIF, JFXX, JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
|
|
2568
|
+
Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
|
|
2569
|
+
Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
|
|
2570
|
+
MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
|
|
2571
|
+
MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
|
|
2572
|
+
MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
|
|
2573
|
+
MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
|
|
2574
|
+
MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
|
|
2575
|
+
MinoltaRaw, Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
|
|
2576
|
+
NikonScan, NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
|
|
2577
|
+
Opus, PDF, PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
|
|
2578
|
+
PanasonicRaw, Parrot, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
|
|
2579
|
+
PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
|
|
2580
|
+
QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
|
|
2581
|
+
Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
|
|
2582
|
+
Reconyx, Red, Ricoh, SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
|
|
2583
|
+
Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
|
|
2584
|
+
System, Theora, Torrent, Track#, UserData, VCalendar, VCard, VNote,
|
|
2585
|
+
Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
|
|
2586
|
+
XMP-GCamera, XMP-GContainer, XMP-GCreations, XMP-GDepth, XMP-GFocus,
|
|
2587
|
+
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
|
|
2588
|
+
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi,
|
|
2589
|
+
XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
|
|
2590
|
+
XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
|
2591
|
+
XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
|
2592
|
+
XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
|
2593
|
+
XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
|
2594
|
+
XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
|
2595
|
+
XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
|
2596
|
+
XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
|
2595
2597
|
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
|
2596
2598
|
|
|
2597
2599
|
=item Family 2 (Category):
|
|
@@ -2832,6 +2834,10 @@ for the system. In Windows this also has the effect of activating Unicode
|
|
|
2832
2834
|
filename support via the special Windows wide-character i/o routines if
|
|
2833
2835
|
Win32API::File is available.
|
|
2834
2836
|
|
|
2837
|
+
Note that setting the L</WindowsWideFile> or L</WindowsLongPath> option
|
|
2838
|
+
causes L</CharsetFileName> to default to 'UTF8' in Windows if not defined,
|
|
2839
|
+
and L</WindowsLongPath> is set by default in ExifTool 13.07 and later.
|
|
2840
|
+
|
|
2835
2841
|
=item Internal Character Sets:
|
|
2836
2842
|
|
|
2837
2843
|
The encodings used to store strings in the various metadata formats. These
|
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: 13.
|
|
4
|
+
version: 13.10.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: 2024-12-
|
|
12
|
+
date: 2024-12-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: exiftool
|