summaryrefslogtreecommitdiff
path: root/lib/Image/ExifTool
diff options
context:
space:
mode:
authorexiftool <exiftool@users.sourceforge.net>2018-04-13 10:50:48 -0400
committerexiftool <exiftool@users.sourceforge.net>2018-04-13 10:50:48 -0400
commit8f6cf716ee5a755408ffbbfb3ee38ddf46e2bd1b (patch)
tree101dc1d912fd75395e660e4ad5e4fb55d62f64c0 /lib/Image/ExifTool
parentd64051eb020080fd0d68357e58bb9e65debf1530 (diff)
Update to 10.93
Diffstat (limited to 'lib/Image/ExifTool')
-rw-r--r--lib/Image/ExifTool/Canon.pm11
-rw-r--r--lib/Image/ExifTool/Exif.pm40
-rw-r--r--lib/Image/ExifTool/Geotag.pm17
-rw-r--r--lib/Image/ExifTool/MIE.pm8
-rw-r--r--lib/Image/ExifTool/PDF.pm4
-rw-r--r--lib/Image/ExifTool/Pentax.pm3
-rw-r--r--lib/Image/ExifTool/PostScript.pm31
-rw-r--r--lib/Image/ExifTool/QuickTime.pm4
-rw-r--r--lib/Image/ExifTool/QuickTimeStream.pl35
-rw-r--r--lib/Image/ExifTool/TagLookup.pm19
-rw-r--r--lib/Image/ExifTool/TagNames.pod130
-rw-r--r--lib/Image/ExifTool/ZIP.pm6
12 files changed, 209 insertions, 99 deletions
diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm
index ea101e31..7dc72c5a 100644
--- a/lib/Image/ExifTool/Canon.pm
+++ b/lib/Image/ExifTool/Canon.pm
@@ -87,7 +87,7 @@ sub ProcessCTMD($$$);
sub ProcessExifInfo($$$);
sub SwapWords($);
-$VERSION = '3.89';
+$VERSION = '3.90';
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -822,6 +822,7 @@ my %canonQuality = (
3 => 'Fine',
4 => 'RAW',
5 => 'Superfine',
+ 7 => 'CRAW', #42
130 => 'Normal Movie', #22
131 => 'Movie (2)', #PH (7DmkII 1920x1080)
);
@@ -8350,7 +8351,11 @@ my %filterConv = (
Groups => { 2 => 'Preview' },
RawConv => 'substr($val, 16)',
Binary => 1,
- }
+ },
+ CNOP => { #PH (M50)
+ Name => 'CanonCNOP',
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNOP' },
+ },
);
%Image::ExifTool::Canon::UnknownIFD = (
@@ -8489,7 +8494,7 @@ my %filterConv = (
# Canon CNOP atoms (ref PH)
%Image::ExifTool::Canon::CNOP = (
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
- # CNFB - 52 bytes (7DmkII)
+ # CNFB - 52 bytes (7DmkII,M50)
);
# 'skip' atom of Canon MOV videos (ref PH)
diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm
index 04ac77ef..5b684c27 100644
--- a/lib/Image/ExifTool/Exif.pm
+++ b/lib/Image/ExifTool/Exif.pm
@@ -1395,7 +1395,18 @@ my %sampleFormat = (
},
# 0x7011 - int16u[4] (in SubIFD of Sony ARW images) - values: "0 4912 8212 12287","4000 7200 10050 12075"
# 0x7020 - int32u[1] (in SubIFD of Sony ARW images) - values: 0,3
- # 0x7031 - int16u[1] (in SubIFD of Sony ARW images) - values: 256,257
+ 0x7031 => {
+ Name => 'VignettingCorrection',
+ Notes => 'found in Sony ARW images',
+ Protected => 1,
+ Writable => 'int16s',
+ WriteGroup => 'SubIFD',
+ PrintConv => {
+ 256 => 'Off',
+ 257 => 'Auto',
+ 511 => 'No correction params available',
+ },
+ },
0x7032 => {
Name => 'VignettingCorrParams', #forum7640
Notes => 'found in Sony ARW images',
@@ -1404,7 +1415,18 @@ my %sampleFormat = (
WriteGroup => 'SubIFD',
Count => 17,
},
- # 0x7034 - int16u[1] (in SubIFD of Sony ARW images) - values: 1
+ 0x7034 => {
+ Name => 'ChromaticAberrationCorrection',
+ Notes => 'found in Sony ARW images',
+ Protected => 1,
+ Writable => 'int16s',
+ WriteGroup => 'SubIFD',
+ PrintConv => {
+ 0 => 'Off',
+ 1 => 'Auto',
+ 255 => 'No correction params available',
+ },
+ },
0x7035 => {
Name => 'ChromaticAberrationCorrParams', #forum6509
Notes => 'found in Sony ARW images',
@@ -1413,7 +1435,19 @@ my %sampleFormat = (
WriteGroup => 'SubIFD',
Count => 33,
},
- # 0x7036 - int16u[1] (in SubIFD of Sony ARW images) - values: 0,1,17
+ 0x7036 => {
+ Name => 'DistortionCorrection',
+ Notes => 'found in Sony ARW images',
+ Protected => 1,
+ Writable => 'int16s',
+ WriteGroup => 'SubIFD',
+ PrintConv => {
+ 0 => 'Off',
+ 1 => 'Auto',
+ 17 => 'Auto fixed by lens',
+ 255 => 'No correction params available',
+ },
+ },
0x7037 => {
Name => 'DistortionCorrParams', #forum6509
Notes => 'found in Sony ARW images',
diff --git a/lib/Image/ExifTool/Geotag.pm b/lib/Image/ExifTool/Geotag.pm
index 7c69bcfd..5ca8b758 100644
--- a/lib/Image/ExifTool/Geotag.pm
+++ b/lib/Image/ExifTool/Geotag.pm
@@ -24,7 +24,7 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:Public);
-$VERSION = '1.54';
+$VERSION = '1.55';
sub JITTER() { return 2 } # maximum time jitter
@@ -195,7 +195,7 @@ sub LoadTrackLog($$;$)
$format = 'XML';
# check for NMEA sentence
# (must ONLY start with ones that have timestamps! eg. not GSA or PTNTHPR!)
- } elsif (/^\$(GP(RMC|GGA|GLL|ZDA)|PMGNTRK),/) {
+ } elsif (/^\$([A-Z]{2}(RMC|GGA|GLL|ZDA)|PMGNTRK),/) {
$format = 'NMEA';
$nmeaStart = $2 || $1; # save type of first sentence
} elsif (/^A(FLA|XSY|FIL)/) {
@@ -370,7 +370,8 @@ DoneFix: $isDate = 1;
my (%fix, $secs, $date, $nmea);
if ($format eq 'NMEA') {
# ignore unrecognized NMEA sentences
- next unless /^\$(GP(RMC|GGA|GLL|GSA|ZDA)|PMGNTRK|PTNTHPR),/;
+ # (first 2 characters: GP=GPS, GL=GLONASS, GA=Gallileo, GN=combined, BD=Beidou)
+ next unless /^\$([A-Z]{2}(RMC|GGA|GLL|GSA|ZDA)|PMGNTRK|PTNTHPR),/;
$nmea = $2 || $1;
}
#
@@ -399,7 +400,7 @@ DoneFix: $isDate = 1;
# $GPRMC,092204.999,A,4250.5589,S,14718.5084,E,0.00,89.68,211200,,*25
# $GPRMC,093657.007,,3652.835020,N,01053.104094,E,1.642,,290913,,,A*0F
# $GPRMC,hhmmss.sss,A/V,ddmm.mmmm,N/S,ddmmm.mmmm,E/W,spd(knots),dir(deg),DDMMYY,,*cs
- /^\$GPRMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/ or next;
+ /^\$[A-Z]{2}RMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/ or next;
next if $13 > 31 or $14 > 12 or $15 > 99; # validate day/month/year
$fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
$fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
@@ -415,7 +416,7 @@ DoneFix: $isDate = 1;
# $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
# $GPGGA,093657.000,3652.835020,N,01053.104094,E,,8,,166.924,M,40.9,M,,*77
# $GPGGA,hhmmss.sss,ddmm.mmmm,N/S,dddmm.mmmm,E/W,0=invalid,sats,hdop,alt,M,...
- /^\$GPGGA,(\d{2})(\d{2})(\d+(\.\d*)?),(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),[1-6]?,(\d+)?,(\.\d+|\d+\.?\d*)?,(-?\d+\.?\d*)?,M?/ or next;
+ /^\$[A-Z]{2}GGA,(\d{2})(\d{2})(\d+(\.\d*)?),(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),[1-6]?,(\d+)?,(\.\d+|\d+\.?\d*)?,(-?\d+\.?\d*)?,M?/ or next;
$fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
$fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
@fix{qw(nsats hdop alt)} = ($11,$12,$13);
@@ -427,7 +428,7 @@ DoneFix: $isDate = 1;
} elsif ($nmea eq 'GLL') {
# $GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
# $GPGLL,ddmm.mmmm,N/S,dddmm.mmmm,E/W,hhmmss.sss,A/V*cs
- /^\$GPGLL,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d{2})(\d{2})(\d+(\.\d*)?),A/ or next;
+ /^\$[A-Z]{2}GLL,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d{2})(\d{2})(\d+(\.\d*)?),A/ or next;
$fix{lat} = (($1 || 0) + $2/60) * ($3 eq 'N' ? 1 : -1);
$fix{lon} = (($4 || 0) + $5/60) * ($6 eq 'E' ? 1 : -1);
$secs = (($7 * 60) + $8) * 60 + $9;
@@ -436,7 +437,7 @@ DoneFix: $isDate = 1;
#
} elsif ($nmea eq 'GSA') {
# $GPGSA,A,3,04,05,,,,,,,,,,,pdop,hdop,vdop*HH
- /^\$GPGSA,[AM],([23]),((?:\d*,){11}(?:\d*)),(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?\*/ or next;
+ /^\$[A-Z]{2}GSA,[AM],([23]),((?:\d*,){11}(?:\d*)),(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?\*/ or next;
@fix{qw(fixtype sats pdop hdop vdop)} = ($1.'d',$2,$3,$4,$5);
# count the number of acquired satellites
my @a = ($fix{sats} =~ /\d+/g);
@@ -448,7 +449,7 @@ DoneFix: $isDate = 1;
} elsif ($nmea eq 'ZDA') {
# $GPZDA,093655.000,29,09,2013,,*58
# $GPZDA,hhmmss.ss,DD,MM,YYYY,tzh,tzm (hhmmss in UTC)
- /^\$GPZDA,(\d{2})(\d{2})(\d{2}(\.\d*)?),(\d+),(\d+),(\d+)/ or next;
+ /^\$[A-Z]{2}ZDA,(\d{2})(\d{2})(\d{2}(\.\d*)?),(\d+),(\d+),(\d+)/ or next;
$secs = (($1 * 60) + $2) * 60 + $3;
$date = Time::Local::timegm(0,0,0,$5,$6-1,$7-1900);
#
diff --git a/lib/Image/ExifTool/MIE.pm b/lib/Image/ExifTool/MIE.pm
index e6af0314..c6e72042 100644
--- a/lib/Image/ExifTool/MIE.pm
+++ b/lib/Image/ExifTool/MIE.pm
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
-$VERSION = '1.46';
+$VERSION = '1.47';
sub ProcessMIE($$);
sub ProcessMIEGroup($$$);
@@ -152,6 +152,9 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
(eg. C<55(mi/h)>). If no units are specified, the default units are
written.
+ 4) ExifTool writes compressed metadata to MIE files if the Compress (-z)
+ option is used and Compress::Zlib is available.
+
See L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> for the
official MIE specification.
},
@@ -1122,6 +1125,7 @@ sub WriteMIEGroup($$$)
eval { require Compress::Zlib })
{
$subdirInfo{Compact} = 1;
+ $subdirInfo{ReadOnly} = 1; # because XMP is not writable in place
}
}
$subdirInfo{Parent} = $dirName;
@@ -1603,7 +1607,7 @@ sub ProcessMIEGroup($$$)
}
$et->VerboseInfo($lastTag, $tagInfo,
DataPt => \$value,
- DataPos => $raf->Tell() - $valLen,
+ DataPos => $wasCompressed ? undef : $raf->Tell() - $valLen,
Size => $valLen,
Format => $formatStr,
Value => $val,
diff --git a/lib/Image/ExifTool/PDF.pm b/lib/Image/ExifTool/PDF.pm
index 8cf57a2d..2dd97200 100644
--- a/lib/Image/ExifTool/PDF.pm
+++ b/lib/Image/ExifTool/PDF.pm
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
use Image::ExifTool qw(:DataAccess :Utils);
require Exporter;
-$VERSION = '1.45';
+$VERSION = '1.46';
sub FetchObject($$$$);
sub ExtractObject($$;$$);
@@ -2086,7 +2086,7 @@ sub ReadPDF($$)
# (linearization dictionary must be in the first 1024 bytes of the file)
$raf->Read($buff, 1024) >= 8 or return 0;
$buff =~ /^(\s*)%PDF-(\d+\.\d+)/ or return 0;
- $$et{PDFBase} = length $1;
+ $$et{PDFBase} = length $1 and $et->Warn('PDF header is not at start of file',1);
$pdfVer = $2;
$et->SetFileType(); # set the FileType tag
$et->Warn("May not be able to read a PDF version $pdfVer file") if $pdfVer >= 2.0;
diff --git a/lib/Image/ExifTool/Pentax.pm b/lib/Image/ExifTool/Pentax.pm
index d3385976..52dd876f 100644
--- a/lib/Image/ExifTool/Pentax.pm
+++ b/lib/Image/ExifTool/Pentax.pm
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
use Image::ExifTool::HP;
-$VERSION = '3.21';
+$VERSION = '3.22';
sub CryptShutterCount($$);
sub PrintFilter($$$);
@@ -947,6 +947,7 @@ my %binaryDataAttrs = (
4 => 'RAW', #5
5 => 'Premium', #PH (K20D)
7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
+ 8 => 'Dynamic Pixel Shift', #IB
65535 => 'n/a', #PH (Q MOV video)
},
},
diff --git a/lib/Image/ExifTool/PostScript.pm b/lib/Image/ExifTool/PostScript.pm
index 13aa2a54..ea4ee5c2 100644
--- a/lib/Image/ExifTool/PostScript.pm
+++ b/lib/Image/ExifTool/PostScript.pm
@@ -16,7 +16,7 @@ use strict;
use vars qw($VERSION $AUTOLOAD);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.41';
+$VERSION = '1.42';
sub WritePS($$);
sub ProcessPS($$;$);
@@ -97,6 +97,31 @@ sub ProcessPS($$;$);
Extracted with document metadata when ExtractEmbedded option is used
},
},
+ # AI metadata (most with a single leading '%')
+ AI9_ColorModel => {
+ Name => 'AIColorModel',
+ PrintConv => {
+ 1 => 'sRGB',
+ 2 => 'CMYK',
+ },
+ },
+ AI3_ColorUsage => { Name => 'AIColorUsage' },
+ AI5_RulerUnits => {
+ Name => 'AIRulerUnits',
+ PrintConv => {
+ 0 => 'Inches',
+ 1 => 'Millimeters',
+ 2 => 'Points',
+ 3 => 'Picas',
+ 4 => 'Centimeters',
+ 6 => 'Pixels',
+ },
+ },
+ AI5_TargetResolution => { Name => 'AITargetResolution' },
+ AI5_NumLayers => { Name => 'AINumLayers' },
+ AI5_FileFormat => { Name => 'AIFileFormat' },
+ AI8_CreatorVersion => { Name => 'AICreatorVersion' }, # (double leading '%')
+ AI12_BuildNumber => { Name => 'AIBuildNumber' },
);
# composite tags
@@ -543,8 +568,8 @@ sub ProcessPS($$;$)
next unless $data =~ m{<\?xpacket end=.(w|r).\?>($/|$)};
} elsif ($data =~ /^%%?(\w+): ?(.*)/s and $$tagTablePtr{$1}) {
my ($tag, $val) = ($1, $2);
- # only allow 'ImageData' to have single leading '%'
- next unless $data =~ /^%%/ or $1 eq 'ImageData';
+ # only allow 'ImageData' and AI tags to have single leading '%'
+ next unless $data =~ /^%(%|AI\d+_)/ or $tag eq 'ImageData';
# decode comment string (reading continuation lines if necessary)
$val = DecodeComment($val, $raf, \@lines);
$et->HandleTag($tagTablePtr, $tag, $val);
diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm
index cfc4c780..8ac2b6f7 100644
--- a/lib/Image/ExifTool/QuickTime.pm
+++ b/lib/Image/ExifTool/QuickTime.pm
@@ -578,6 +578,10 @@ my %eeBox = (
return \$str;
},
},
+ udat => { #PH (GPS NMEA-format log written by Datakam Player software)
+ Name => 'GPSLog',
+ Binary => 1, # (actually ASCII, but very lengthy)
+ },
# meta - proprietary XML information written by some Flip cameras - PH
);
diff --git a/lib/Image/ExifTool/QuickTimeStream.pl b/lib/Image/ExifTool/QuickTimeStream.pl
index c9b268bb..78c974e7 100644
--- a/lib/Image/ExifTool/QuickTimeStream.pl
+++ b/lib/Image/ExifTool/QuickTimeStream.pl
@@ -59,9 +59,10 @@ my $mpsToKph = 3.6; # m/s --> km/h
%Image::ExifTool::QuickTime::Stream = (
GROUPS => { 2 => 'Location' },
NOTES => q{
- Timed metadata extracted from QuickTime movie data and BikeBro AVI videos
- when the ExtractEmbedded option is used.
+ Timed metadata extracted from QuickTime movie data and some AVI videos when
+ the ExtractEmbedded option is used.
},
+ VARS => { NO_ID => 1 },
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")' },
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
@@ -109,18 +110,18 @@ my $mpsToKph = 3.6; # m/s --> km/h
Name => 'CTMD',
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CTMD' },
},
- RVMI => [{ # data "OtherFormat" written by E-PRANCE B47FS editing app
- Name => 'RVMI_g',
+ RVMI => [{ # data "OtherFormat" written by unknown software
+ Name => 'RVMI_gReV',
Condition => '$$valPt =~ /^gReV/', # GPS data
SubDirectory => {
- TagTable => 'Image::ExifTool::QuickTime::RVMI_g',
+ TagTable => 'Image::ExifTool::QuickTime::RVMI_gReV',
ByteOrder => 'Little-endian',
},
},{
- Name => 'RVMI_s',
- Condition => '$$valPt =~ /^sReV/', # sensor data?
+ Name => 'RVMI_sReV',
+ Condition => '$$valPt =~ /^sReV/', # sensor data
SubDirectory => {
- TagTable => 'Image::ExifTool::QuickTime::RVMI_s',
+ TagTable => 'Image::ExifTool::QuickTime::RVMI_sReV',
ByteOrder => 'Little-endian',
},
# (there is also "tReV" data that hasn't been decoded yet)
@@ -146,8 +147,8 @@ my $mpsToKph = 3.6; # m/s --> km/h
GROUPS => { 2 => 'Location' },
FIRST_ENTRY => 0,
NOTES => q{
- These tags are extracted from record type 6 of the 'camm' timed metadata of
- MP4 videos from the Insta360.
+ Tags extracted from record type 6 of the 'camm' timed metadata of MP4 videos
+ from cameras such as the Insta360.
},
# 0x0c - int32u, seen: 3 (GPSMeasureMode?)
0x10 => {
@@ -171,10 +172,13 @@ my $mpsToKph = 3.6; # m/s --> km/h
);
# tags found in 'RVMI' 'gReV' timed metadata (ref PH)
-%Image::ExifTool::QuickTime::RVMI_g = (
+%Image::ExifTool::QuickTime::RVMI_gReV = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Location' },
FIRST_ENTRY => 0,
+ NOTES => q{
+ GPS information extracted from the RVMI box of MOV videos.
+ },
4 => {
Name => 'GPSLatitude',
Format => 'int32s',
@@ -201,10 +205,13 @@ my $mpsToKph = 3.6; # m/s --> km/h
);
# tags found in 'RVMI' 'sReV' timed metadata (ref PH)
-%Image::ExifTool::QuickTime::RVMI_s = (
+%Image::ExifTool::QuickTime::RVMI_sReV = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Location' },
FIRST_ENTRY => 0,
+ NOTES => q{
+ G-sensor information extracted from the RVMI box of MOV videos.
+ },
4 => {
Name => 'GSensor',
Format => 'int16s[3]', # X Y Z
@@ -445,7 +452,7 @@ sub ProcessSamples($)
# based on known value of 4th-last char = '*'
my $dif = ord('*') - ord(substr($buff, -4, 1));
my $tmp = pack 'C*',map { $_=($_+$dif)&0xff } unpack 'C*',substr $buff,1,-1;
- if ($tmp =~ /^(.*?)(\$GPRMC.*)/s) {
+ if ($tmp =~ /^(.*?)(\$[A-Z]{2}RMC.*)/s) {
($val, $buff) = ($1, $2);
$val =~ tr/\t/ /;
$et->HandleTag($tagTbl, RawGSensor => $val) if length $val;
@@ -458,7 +465,7 @@ sub ProcessSamples($)
}
while ($buff =~ /\$(\w+)([^\$]*)/g) {
my ($tag, $dat) = ($1, $2);
- if ($tag eq 'GPRMC' and $dat =~ /^,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/) {
+ if ($tag =~ /^[A-Z]{2}RMC$/ and $dat =~ /^,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/) {
$et->HandleTag($tagTbl, GPSLatitude => (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1));
$et->HandleTag($tagTbl, GPSLongitude => (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1));
if (length $11) {
diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm
index ec98d56e..b54c2d10 100644
--- a/lib/Image/ExifTool/TagLookup.pm
+++ b/lib/Image/ExifTool/TagLookup.pm
@@ -1189,7 +1189,7 @@ my %tagLookup = (
'chromaticaberrationb' => { 432 => 'ChromaticAberrationB' },
'chromaticaberrationblue' => { 97 => 0x20708, 103 => 0x6b },
'chromaticaberrationcorr' => { 74 => [0x4,0x5] },
- 'chromaticaberrationcorrection' => { 313 => 0x1 },
+ 'chromaticaberrationcorrection' => { 113 => 0x7034, 313 => 0x1 },
'chromaticaberrationcorrparams' => { 113 => 0x7035, 407 => 0x66a, 408 => [0x37c,0x384,0x39c,0x3b0,0x3b8] },
'chromaticaberrationon' => { 97 => '0x20703.0', 103 => 0x62 },
'chromaticaberrationr' => { 432 => 'ChromaticAberrationR' },
@@ -1876,7 +1876,7 @@ my %tagLookup = (
'distance4' => { 129 => 0x34 },
'distortion' => { 356 => 0xa050 },
'distortioncontrol' => { 213 => 0x10 },
- 'distortioncorrection' => { 97 => 0x20705, 103 => 0x67, 268 => 0x50b, 292 => '7.1', 313 => 0x0, 407 => 0x601, 408 => 0x5b },
+ 'distortioncorrection' => { 97 => 0x20705, 103 => 0x67, 113 => 0x7036, 268 => 0x50b, 292 => '7.1', 313 => 0x0, 407 => 0x601, 408 => 0x5b },
'distortioncorrection2' => { 272 => 0x1011 },
'distortioncorrectionalreadyapplied' => { 428 => 'DistortionCorrectionAlreadyApplied' },
'distortioncorrectionon' => { 97 => '0x20705.0', 103 => 0x63 },
@@ -5191,7 +5191,7 @@ my %tagLookup = (
'vignettecorrectionalreadyapplied' => { 428 => 'VignetteCorrectionAlreadyApplied' },
'vignettemidpoint' => { 432 => 'VignetteMidpoint' },
'vignetting' => { 349 => 0x1011, 356 => 0xa052 },
- 'vignettingcorrection' => { 356 => 0xa053, 379 => 0x2011 },
+ 'vignettingcorrection' => { 113 => 0x7031, 356 => 0xa053, 379 => 0x2011 },
'vignettingcorrparams' => { 113 => 0x7032, 407 => 0x64a, 408 => [0x34a,0x350,0x35c,0x368] },
'vignettingsetting' => { 356 => 0xa054 },
'visualcolor' => { 442 => 'VisualColour' },
@@ -5533,9 +5533,17 @@ my %tagExists = (
'afstatus19' => 1,
'afstatus79' => 1,
'aftune' => 1,
+ 'aibuildnumber' => 1,
+ 'aicolormodel' => 1,
+ 'aicolorusage' => 1,
+ 'aicreatorversion' => 1,
+ 'aifileformat' => 1,
'aimetadata' => 1,
+ 'ainumlayers' => 1,
'aipdfprivatedata' => 1,
'aiprivatedata' => 1,
+ 'airulerunits' => 1,
+ 'aitargetresolution' => 1,
'album2' => 1,
'albumartist' => 1,
'albumartistsortorder' => 1,
@@ -7047,6 +7055,7 @@ my %tagExists = (
'gpsdatetimeraw' => 1,
'gpsinfo' => 1,
'gpslatituderaw' => 1,
+ 'gpslog' => 1,
'gpslongituderaw' => 1,
'gpspos' => 1,
'gpsposition' => 1,
@@ -8646,8 +8655,8 @@ my %tagExists = (
'runtimesincepowerup' => 1,
'runtimevalue' => 1,
'runwindow' => 1,
- 'rvmi_g' => 1,
- 'rvmi_s' => 1,
+ 'rvmi_grev' => 1,
+ 'rvmi_srev' => 1,
's2n' => 1,
'sampledegradationpriority' => 1,
'sampleduration' => 1,
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index ee0ed5dd..0925ae18 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -445,8 +445,11 @@ official EXIF 2.31 specification.
0x4749 RatingPercent IFD0 int16u/
0x7000 SonyRawFileType - no
0x7010 SonyToneCurve - no
+ 0x7031 VignettingCorrection SubIFD int16s!
0x7032 VignettingCorrParams SubIFD int16s[17]!
+ 0x7034 ChromaticAberrationCorrection SubIFD int16s!
0x7035 ChromaticAberrationCorrParams SubIFD int16s[33]!
+ 0x7036 DistortionCorrection SubIFD int16s!
0x7037 DistortionCorrParams SubIFD int16s[17]!
0x800d ImageID - no
0x80a3 WangTag1 - no
@@ -6980,6 +6983,7 @@ SX280, and CR3 images from cameras such as the EOS M50.
'CMT3' MakerNoteCanon Canon
'CMT4' GPSInfo GPS
'CNCV' CompressorVersion no
+ 'CNOP' CanonCNOP Canon CNOP
'CNTH' CanonCNTH Canon CNTH
'THMB' ThumbnailImage no
@@ -20047,6 +20051,9 @@ these tags, units may be added in brackets immediately following the value
(eg. C<55(mi/h)>). If no units are specified, the default units are
written.
+4) ExifTool writes compressed metadata to MIE files if the Compress (-z)
+option is used and Compress::Zlib is available.
+
See L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> for the
official MIE specification.
@@ -21749,28 +21756,36 @@ Additional document permissions imposed by digital signatures.
=head2 PostScript Tags
- Tag ID Tag Name Writable
- ------ -------- --------
- 'Author' Author string
- 'BeginDocument' EmbeddedFile PostScript
- 'BeginICCProfile' ICC_Profile ICC_Profile
- 'BeginPhotoshop' PhotoshopData Photoshop
- 'BoundingBox' BoundingBox no
- 'Copyright' Copyright string
- 'CreationDate' CreateDate string
- 'Creator' Creator string
- 'EmbeddedFileName' EmbeddedFileName no
- 'For' For string
- 'ImageData' ImageData no
- 'Keywords' Keywords string
- 'ModDate' ModifyDate string
- 'Pages' Pages no
- 'Routing' Routing string
- 'Subject' Subject string
- 'TIFFPreview' TIFFPreview no
- 'Title' Title string
- 'Version' Version string
- 'begin_xml_packet' XMP XMP
+ Tag ID Tag Name Writable
+ ------ -------- --------
+ 'AI12_BuildNumber' AIBuildNumber no
+ 'AI3_ColorUsage' AIColorUsage no
+ 'AI5_FileFormat' AIFileFormat no
+ 'AI5_NumLayers' AINumLayers no
+ 'AI5_RulerUnits' AIRulerUnits no
+ 'AI5_TargetResolution' AITargetResolution no
+ 'AI8_CreatorVersion' AICreatorVersion no
+ 'AI9_ColorModel' AIColorModel no
+ 'Author' Author string
+ 'BeginDocument' EmbeddedFile PostScript
+ 'BeginICCProfile' ICC_Profile ICC_Profile
+ 'BeginPhotoshop' PhotoshopData Photoshop
+ 'BoundingBox' BoundingBox no
+ 'Copyright' Copyright string
+ 'CreationDate' CreateDate string
+ 'Creator' Creator string
+ 'EmbeddedFileName' EmbeddedFileName no
+ 'For' For string
+ 'ImageData' ImageData no
+ 'Keywords' Keywords string
+ 'ModDate' ModifyDate string
+ 'Pages' Pages no
+ 'Routing' Routing string
+ 'Subject' Subject string
+ 'TIFFPreview' TIFFPreview no
+ 'Title' Title string
+ 'Version' Version string
+ 'begin_xml_packet' XMP XMP
=head2 ID3 Tags
@@ -22647,6 +22662,7 @@ for the official specification.
'skip' CanonSkip Canon Skip
Skip? no
'thum' ThumbnailImage no
+ 'udat' GPSLog no
'udta' UserData FLIR UserData
'uuid' XMP XMP
UUID-PROF QuickTime Profile
@@ -23720,37 +23736,39 @@ Tags used in QTIF QuickTime Image Files.
=head3 QuickTime Stream Tags
-Timed metadata extracted from QuickTime movie data and BikeBro AVI videos
-when the ExtractEmbedded option is used.
+Timed metadata extracted from QuickTime movie data and some AVI videos when
+the ExtractEmbedded option is used.
- Tag ID Tag Name Writable
- ------ -------- --------
- 'Accelerometer' Accelerometer no
- 'CTMD' CTMD Canon CTMD
- 'FrameNumber' FrameNumber no
- 'GPSAltitude' GPSAltitude no
- 'GPSDateTime' GPSDateTime no
- 'GPSLatitude' GPSLatitude no
- 'GPSLongitude' GPSLongitude no
- 'GPSSpeed' GPSSpeed no
- 'GPSSpeedRef' GPSSpeedRef no
- 'GPSTrack' GPSTrack no
- 'GPSTrackRef' GPSTrackRef no
- 'JPEG' JpgFromRaw no
- 'RVMI' RVMI_g QuickTime RVMI_g
- RVMI_s QuickTime RVMI_s
- 'RawGSensor' RawGSensor no
- 'SampleDuration' SampleDuration no
- 'SampleTime' SampleTime no
- 'Text' Text no
- 'TimeCode' TimeCode no
- 'camm' camm6 QuickTime camm6
- 'fdsc' fdsc GoPro fdsc
- 'gpmd' gpmd GoPro GPMF
- 'mebx' mebx QuickTime Keys
- 'rtmd' rtmd Sony rtmd
-
-=head3 QuickTime RVMI_g Tags
+ Tag Name Writable
+ -------- --------
+ Accelerometer no
+ CTMD Canon CTMD
+ FrameNumber no
+ GPSAltitude no
+ GPSDateTime no
+ GPSLatitude no
+ GPSLongitude no
+ GPSSpeed no
+ GPSSpeedRef no
+ GPSTrack no
+ GPSTrackRef no
+ JpgFromRaw no
+ RVMI_gReV QuickTime RVMI_gReV
+ RVMI_sReV QuickTime RVMI_sReV
+ RawGSensor no
+ SampleDuration no
+ SampleTime no
+ Text no
+ TimeCode no
+ camm6 QuickTime camm6
+ fdsc GoPro fdsc
+ gpmd GoPro GPMF
+ mebx QuickTime Keys
+ rtmd Sony rtmd
+
+=head3 QuickTime RVMI_gReV Tags
+
+GPS information extracted from the RVMI box of MOV videos.
Index1 Tag Name Writable
------ -------- --------
@@ -23759,7 +23777,9 @@ when the ExtractEmbedded option is used.
16 GPSSpeed no
18 GPSTrack no
-=head3 QuickTime RVMI_s Tags
+=head3 QuickTime RVMI_sReV Tags
+
+G-sensor information extracted from the RVMI box of MOV videos.
Index1 Tag Name Writable
------ -------- --------
@@ -23767,8 +23787,8 @@ when the ExtractEmbedded option is used.
=head3 QuickTime camm6 Tags
-These tags are extracted from record type 6 of the 'camm' timed metadata of
-MP4 videos from the Insta360.
+Tags extracted from record type 6 of the 'camm' timed metadata of MP4 videos
+from cameras such as the Insta360.
Index1 Tag Name Writable
------ -------- --------
diff --git a/lib/Image/ExifTool/ZIP.pm b/lib/Image/ExifTool/ZIP.pm
index fec60a2a..63083536 100644
--- a/lib/Image/ExifTool/ZIP.pm
+++ b/lib/Image/ExifTool/ZIP.pm
@@ -19,7 +19,7 @@ use strict;
use vars qw($VERSION $warnString);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.19';
+$VERSION = '1.20';
sub WarnProc($) { $warnString = $_[0]; }
@@ -92,7 +92,7 @@ my %openDocType = (
($val >> 16) & 0x1f, # day
($val >> 11) & 0x1f, # hour
($val >> 5) & 0x3f, # minute
- $val & 0x1f # second
+ ($val & 0x1f) * 2 # second
);
},
PrintConv => '$self->ConvertDateTime($val)',
@@ -210,7 +210,7 @@ my %openDocType = (
($val >> 16) & 0x1f, # day
($val >> 11) & 0x1f, # hour
($val >> 5) & 0x3f, # minute
- $val & 0x1f # second
+ ($val & 0x1f) * 2 # second
);
},
PrintConv => '$self->ConvertDateTime($val)',