exiftool-vendored.exe 12.31.0 → 12.33.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.
- package/bin/exiftool_files/Changes +36 -4
- package/bin/exiftool_files/README +2 -2
- package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
- package/bin/exiftool_files/exiftool.pl +33 -21
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +16 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +97 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +47 -14
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +86 -78
- package/bin/exiftool_files/lib/Image/ExifTool/README +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +31 -2
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +59 -8
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +7 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +8867 -8864
- package/bin/exiftool_files/lib/Image/ExifTool.pod +3 -3
- package/package.json +2 -2
|
@@ -25,6 +25,7 @@ sub Process_mebx($$$);
|
|
|
25
25
|
sub ProcessFreeGPS($$$);
|
|
26
26
|
sub ProcessFreeGPS2($$$);
|
|
27
27
|
sub Process360Fly($$$);
|
|
28
|
+
sub ProcessFMAS($$$);
|
|
28
29
|
|
|
29
30
|
# QuickTime data types that have ExifTool equivalents
|
|
30
31
|
# (ref https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35)
|
|
@@ -98,15 +99,15 @@ my %insvLimit = (
|
|
|
98
99
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
99
100
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
100
101
|
most of these tags are combined into the single table below, ExifTool
|
|
101
|
-
currently reads
|
|
102
|
+
currently reads 57 different formats of timed GPS metadata from video files.
|
|
102
103
|
},
|
|
103
104
|
VARS => { NO_ID => 1 },
|
|
104
105
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
105
106
|
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
|
106
107
|
GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
|
|
107
|
-
GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0'
|
|
108
|
+
GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
|
|
108
109
|
GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
|
|
109
|
-
GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0'
|
|
110
|
+
GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'relative to true north unless GPSTrackRef says otherwise' },
|
|
110
111
|
GPSTrackRef => { PrintConv => { M => 'Magnetic North', T => 'True North' } },
|
|
111
112
|
GPSDateTime => {
|
|
112
113
|
Groups => { 2 => 'Time' },
|
|
@@ -181,6 +182,13 @@ my %insvLimit = (
|
|
|
181
182
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
182
183
|
ProcessProc => \&Process_text,
|
|
183
184
|
},
|
|
185
|
+
},{
|
|
186
|
+
Name => 'gpmd_FMAS', # Vantrue N2S binary format
|
|
187
|
+
Condition => '$$valPt =~ /^FMAS\0\0\0\0/',
|
|
188
|
+
SubDirectory => {
|
|
189
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
190
|
+
ProcessProc => \&ProcessFMAS,
|
|
191
|
+
},
|
|
184
192
|
},{
|
|
185
193
|
Name => 'gpmd_GoPro',
|
|
186
194
|
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPMF' },
|
|
@@ -901,14 +909,8 @@ sub Process_text($$$)
|
|
|
901
909
|
$tags{GPSDateTime} = $dateTime;
|
|
902
910
|
$tags{GPSLatitude} = (($4 || 0) + $5/60) * ($6 eq 'N' ? 1 : -1);
|
|
903
911
|
$tags{GPSLongitude} = (($7 || 0) + $8/60) * ($9 eq 'E' ? 1 : -1);
|
|
904
|
-
if
|
|
905
|
-
|
|
906
|
-
$tags{GPSSpeedRef} = 'K';
|
|
907
|
-
}
|
|
908
|
-
if (length $11) {
|
|
909
|
-
$tags{GPSTrack} = $11;
|
|
910
|
-
$tags{GPSTrackRef} = 'T';
|
|
911
|
-
}
|
|
912
|
+
$tags{GPSSpeed} = $10 * $knotsToKph if length $10;
|
|
913
|
+
$tags{GPSTrack} = $11 if length $11;
|
|
912
914
|
} elsif ($tag =~ /^[A-Z]{2}GGA$/ and $dat =~ /^,(\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?/s) {
|
|
913
915
|
my $time = "$1:$2:$3";
|
|
914
916
|
if ($$et{LastTime}) {
|
|
@@ -988,10 +990,7 @@ sub Process_text($$$)
|
|
|
988
990
|
$val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$dataPt, 0x39, 5)));
|
|
989
991
|
$tags{GPSAltitude} = $val + 0 if $val =~ /^[-+]\d+$/;
|
|
990
992
|
$val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$dataPt, 0x3e, 3)));
|
|
991
|
-
if
|
|
992
|
-
$tags{GPSSpeed} = $val + 0;
|
|
993
|
-
$tags{GPSSpeedRef} = 'K';
|
|
994
|
-
}
|
|
993
|
+
$tags{GPSSpeed} = $val + 0 if $val =~ /^\d+$/;
|
|
995
994
|
if ($$dataPt =~ /^\0\0..\xaa\xaa/s) { # (BlueSkySea)
|
|
996
995
|
$val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$dataPt, 0xad, 12)));
|
|
997
996
|
# the first X,Y,Z accelerometer readings from the AccelerometerData
|
|
@@ -1022,10 +1021,7 @@ sub Process_text($$$)
|
|
|
1022
1021
|
$tags{GPSLatitude} = $2;
|
|
1023
1022
|
$tags{GPSLongitude} = $1;
|
|
1024
1023
|
$tags{GPSAltitude} = $1 if $$dataPt =~ /,\s*H\s+([-+]?\d+\.?\d*)m/;
|
|
1025
|
-
if
|
|
1026
|
-
$tags{GPSSpeed} = $1 * $mpsToKph;
|
|
1027
|
-
$tags{GPSSpeedRef} = 'K';
|
|
1028
|
-
}
|
|
1024
|
+
$tags{GPSSpeed} = $1 * $mpsToKph if $$dataPt =~ /,\s*H.S\s+([-+]?\d+\.?\d*)/;
|
|
1029
1025
|
$tags{Distance} = $1 * $mpsToKph if $$dataPt =~ /,\s*D\s+(\d+\.?\d*)m/;
|
|
1030
1026
|
$tags{VerticalSpeed} = $1 if $$dataPt =~ /,\s*V.S\s+([-+]?\d+\.?\d*)/;
|
|
1031
1027
|
$tags{FNumber} = $1 if $$dataPt =~ /\bF\/(\d+\.?\d*)/;
|
|
@@ -1086,14 +1082,8 @@ sub Process_text($$$)
|
|
|
1086
1082
|
$tags{GPSDateTime} = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ', $year, $14, $13, $1, $2, $3);
|
|
1087
1083
|
$tags{GPSLatitude} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
|
|
1088
1084
|
$tags{GPSLongitude} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
|
|
1089
|
-
if
|
|
1090
|
-
|
|
1091
|
-
$tags{GPSSpeedRef} = 'K';
|
|
1092
|
-
}
|
|
1093
|
-
if (length $12) {
|
|
1094
|
-
$tags{GPSTrack} = $12;
|
|
1095
|
-
$tags{GPSTrackRef} = 'T';
|
|
1096
|
-
}
|
|
1085
|
+
$tags{GPSSpeed} = $11 * $knotsToKph if length $11;
|
|
1086
|
+
$tags{GPSTrack} = $12 if length $12;
|
|
1097
1087
|
}
|
|
1098
1088
|
$tags{GSensor} = $1 if $$dataPt =~ /\bgsensori,(.*?)(;|$)/;
|
|
1099
1089
|
$tags{Car} = $1 if $$dataPt =~ /\bCAR,(.*?)(;|$)/;
|
|
@@ -1268,8 +1258,7 @@ sub ProcessSamples($)
|
|
|
1268
1258
|
next if length($buff) < 20 + $n;
|
|
1269
1259
|
$et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12+$n) * 180/0x80000000);
|
|
1270
1260
|
$et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16+$n) * 180/0x80000000);
|
|
1271
|
-
$et->HandleTag($tagTbl, GPSSpeed
|
|
1272
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1261
|
+
$et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n) * $mphToKph);
|
|
1273
1262
|
SetGPSDateTime($et, $tagTbl, $time[$i]);
|
|
1274
1263
|
next; # all done (don't store/process as text)
|
|
1275
1264
|
}
|
|
@@ -1521,6 +1510,23 @@ sub ProcessFreeGPS($$$)
|
|
|
1521
1510
|
$trk -= 360 if $trk >= 360;
|
|
1522
1511
|
SetByteOrder('MM');
|
|
1523
1512
|
|
|
1513
|
+
} elsif ($$dataPt =~ /^.{60}4W`b]S</s and length($$dataPt) >= 140) {
|
|
1514
|
+
|
|
1515
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 01 00 00 [..@.freeGPS ....]
|
|
1516
|
+
# 0010: 5a 58 53 42 4e 58 59 53 00 00 00 00 00 00 00 00 [ZXSBNXYS........]
|
|
1517
|
+
# 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
1518
|
+
# 0030: 00 00 00 00 00 00 00 00 00 00 00 00 34 57 60 62 [............4W`b]
|
|
1519
|
+
# 0040: 5d 53 3c 41 44 45 41 41 42 3e 40 40 3c 51 3c 45 []S<ADEAAB>@@<Q<E]
|
|
1520
|
+
# 0050: 41 40 43 3e 41 47 49 48 44 3c 5e 3c 40 41 46 43 [A@C>AGIHD<^<@AFC]
|
|
1521
|
+
# 0060: 42 3e 49 49 40 42 45 3c 55 3c 45 47 3e 45 43 41 [B>II@BE<U<EG>ECA]
|
|
1522
|
+
# decipher $GPRMC by subtracting 16 from each character value
|
|
1523
|
+
$_ = pack 'C*', map { $_>=16 and $_-=16 } unpack('x60C80', $$dataPt);
|
|
1524
|
+
return 0 unless /[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+)/;
|
|
1525
|
+
($yr,$mon,$day,$hr,$min,$sec,$lat,$latRef,$lon,$lonRef) = ($13,$12,$11,$1,$2,$3,$5,$6,$7,$8);
|
|
1526
|
+
$yr += ($yr >= 70 ? 1900 : 2000);
|
|
1527
|
+
$spd = $9 * $knotsToKph if length $9;
|
|
1528
|
+
$trk = $10 if length $10;
|
|
1529
|
+
|
|
1524
1530
|
} elsif ($$dataPt =~ /^.{16}YndAkasoCar/s) {
|
|
1525
1531
|
|
|
1526
1532
|
# Akaso V1 dascham
|
|
@@ -1625,14 +1631,8 @@ sub ProcessFreeGPS($$$)
|
|
|
1625
1631
|
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
|
|
1626
1632
|
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
|
|
1627
1633
|
$et->HandleTag($tagTbl, GPSAltitude => $alt) if defined $alt;
|
|
1628
|
-
if
|
|
1629
|
-
|
|
1630
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1631
|
-
}
|
|
1632
|
-
if (defined $trk) {
|
|
1633
|
-
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
1634
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
1635
|
-
}
|
|
1634
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd) if defined $spd;
|
|
1635
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk) if defined $trk;
|
|
1636
1636
|
while (@xtra) {
|
|
1637
1637
|
my $tag = shift @xtra;
|
|
1638
1638
|
$et->HandleTag($tagTbl, $tag => shift @xtra);
|
|
@@ -1751,9 +1751,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1751
1751
|
$et->HandleTag($tagTbl, GPSLatitude => Get32s(\$b, 0x10) / 1e7);
|
|
1752
1752
|
$et->HandleTag($tagTbl, GPSLongitude => Get32s(\$b, 0x18) / 1e7);
|
|
1753
1753
|
$et->HandleTag($tagTbl, GPSSpeed => Get32s(\$b, 0x20) / 100 * $mpsToKph);
|
|
1754
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1755
1754
|
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
1756
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
1757
1755
|
$et->HandleTag($tagTbl, GPSAltitude => Get32s(\$b, 0x28) / 1000);
|
|
1758
1756
|
$lastRecPos = $recPos;
|
|
1759
1757
|
$foundNew = 1;
|
|
@@ -1879,9 +1877,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1879
1877
|
$et->HandleTag($tagTbl, GPSLatitude => $lat * (substr($dat,1,1) eq 'S' ? -1 : 1));
|
|
1880
1878
|
$et->HandleTag($tagTbl, GPSLongitude => $lon * (substr($dat,2,1) eq 'W' ? -1 : 1));
|
|
1881
1879
|
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
|
1882
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1883
1880
|
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
1884
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
1885
1881
|
$et->HandleTag($tagTbl, Accelerometer => "@acc");
|
|
1886
1882
|
}
|
|
1887
1883
|
return 1;
|
|
@@ -1927,9 +1923,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1927
1923
|
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
1928
1924
|
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
1929
1925
|
$et->HandleTag($tagTbl, GPSSpeed => $spd / 100 * $mpsToKph);
|
|
1930
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1931
1926
|
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
1932
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
1933
1927
|
last if $pos += 0x20 > length($$dataPt) - 0x1e;
|
|
1934
1928
|
}
|
|
1935
1929
|
return $$et{DOC_NUM} ? 1 : 0; # return 0 if nothing extracted
|
|
@@ -1946,14 +1940,8 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
1946
1940
|
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
|
1947
1941
|
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
|
|
1948
1942
|
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
|
|
1949
|
-
if
|
|
1950
|
-
|
|
1951
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
1952
|
-
}
|
|
1953
|
-
if (defined $trk) {
|
|
1954
|
-
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
1955
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
1956
|
-
}
|
|
1943
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd) if defined $spd; # (now in km/h)
|
|
1944
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk) if defined $trk;
|
|
1957
1945
|
if (defined $alt) {
|
|
1958
1946
|
$et->HandleTag($tagTbl, GPSAltitude => $alt);
|
|
1959
1947
|
}
|
|
@@ -2051,8 +2039,7 @@ sub ParseTag($$$)
|
|
|
2051
2039
|
$lon = -abs($lon) if $a[6] eq 'W';
|
|
2052
2040
|
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
2053
2041
|
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
2054
|
-
$et->HandleTag($tagTbl, GPSSpeed
|
|
2055
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
2042
|
+
$et->HandleTag($tagTbl, GPSSpeed => $a[3] / 1e3);
|
|
2056
2043
|
$pos += 36;
|
|
2057
2044
|
}
|
|
2058
2045
|
SetByteOrder('MM');
|
|
@@ -2201,9 +2188,7 @@ sub Process_gps0($$$)
|
|
|
2201
2188
|
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
2202
2189
|
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
2203
2190
|
$et->HandleTag($tagTbl, GPSSpeed => Get16u($dataPt, $pos+0x14));
|
|
2204
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
2205
2191
|
$et->HandleTag($tagTbl, GPSTrack => Get8u($dataPt, $pos+0x1c) * 2); # (NC)
|
|
2206
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
2207
2192
|
$et->HandleTag($tagTbl, GPSAltitude => Get32s($dataPt, $pos + 0x10));
|
|
2208
2193
|
# yet to be decoded:
|
|
2209
2194
|
# 0x1d - int8u[3] seen: "1 1 0"
|
|
@@ -2302,9 +2287,7 @@ sub ProcessRIFFTrailer($$$)
|
|
|
2302
2287
|
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
2303
2288
|
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
2304
2289
|
$et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, $pos+0x18) * $knotsToKph);
|
|
2305
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
2306
2290
|
$et->HandleTag($tagTbl, GPSTrack => Get8u(\$buff, $pos+0x20) * 2);
|
|
2307
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
2308
2291
|
}
|
|
2309
2292
|
} elsif ($tag eq 'gsen') {
|
|
2310
2293
|
# (similar to record decoded in Process_gsen)
|
|
@@ -2358,17 +2341,11 @@ sub ProcessNMEA($$$)
|
|
|
2358
2341
|
$et->HandleTag($tagTbl, GPSDateTime => $fix{dat});
|
|
2359
2342
|
$et->HandleTag($tagTbl, GPSLatitude => $fix{lat});
|
|
2360
2343
|
$et->HandleTag($tagTbl, GPSLongitude => $fix{lon});
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
}
|
|
2365
|
-
|
|
2366
|
-
$et->HandleTag($tagTbl, GPSTrack => $fix{trk});
|
|
2367
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
2368
|
-
}
|
|
2369
|
-
$et->HandleTag($tagTbl, GPSAltitude => $fix{alt}) if defined $fix{alt};
|
|
2370
|
-
$et->HandleTag($tagTbl, GPSSatellites => $fix{nsats}+0) if defined $fix{nsats};
|
|
2371
|
-
$et->HandleTag($tagTbl, GPSDOP => $fix{hdop}) if defined $fix{hdop};
|
|
2344
|
+
$et->HandleTag($tagTbl, GPSSpeed => $fix{spd} * $knotsToKph) if defined $fix{spd};
|
|
2345
|
+
$et->HandleTag($tagTbl, GPSTrack => $fix{trk}) if defined $fix{trk};
|
|
2346
|
+
$et->HandleTag($tagTbl, GPSAltitude => $fix{alt}) if defined $fix{alt};
|
|
2347
|
+
$et->HandleTag($tagTbl, GPSSatellites=> $fix{nsats}+0) if defined $fix{nsats};
|
|
2348
|
+
$et->HandleTag($tagTbl, GPSDOP => $fix{hdop}) if defined $fix{hdop};
|
|
2372
2349
|
}
|
|
2373
2350
|
undef %fix;
|
|
2374
2351
|
}
|
|
@@ -2522,9 +2499,7 @@ sub ProcessTTAD($$$)
|
|
|
2522
2499
|
$et->HandleTag($tagTbl, GPSLongitude => GetDouble($dataPt, $pos+0x24));
|
|
2523
2500
|
$et->HandleTag($tagTbl, GPSAltitude => GetDouble($dataPt, $pos+0x14));
|
|
2524
2501
|
$et->HandleTag($tagTbl, GPSSpeed => GetDouble($dataPt, $pos+0x0c) * $mpsToKph);
|
|
2525
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
2526
2502
|
$et->HandleTag($tagTbl, GPSTrack => GetDouble($dataPt, $pos+0x30));
|
|
2527
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
2528
2503
|
if ($unknown) {
|
|
2529
2504
|
my @a = map { GetDouble($dataPt, $pos+0x38+8*$_) } 0..2;
|
|
2530
2505
|
$et->HandleTag($tagTbl, Unknown03 => "@a");
|
|
@@ -2657,15 +2632,13 @@ sub ProcessInsta360($;$)
|
|
|
2657
2632
|
$a[$_] = GetDouble(\$a[$_], 0) foreach 4,6,8,9,10;
|
|
2658
2633
|
$a[4] = -abs($a[4]) if $a[5] eq 'S'; # (abs just in case it was already signed)
|
|
2659
2634
|
$a[6] = -abs($a[6]) if $a[7] ne 'E';
|
|
2660
|
-
$et->HandleTag($tagTbl, GPSDateTime
|
|
2661
|
-
$et->HandleTag($tagTbl, GPSLatitude
|
|
2635
|
+
$et->HandleTag($tagTbl, GPSDateTime => Image::ExifTool::ConvertUnixTime($a[0]) . 'Z');
|
|
2636
|
+
$et->HandleTag($tagTbl, GPSLatitude => $a[4]);
|
|
2662
2637
|
$et->HandleTag($tagTbl, GPSLongitude => $a[6]);
|
|
2663
|
-
$et->HandleTag($tagTbl, GPSSpeed
|
|
2664
|
-
$et->HandleTag($tagTbl,
|
|
2665
|
-
$et->HandleTag($tagTbl,
|
|
2666
|
-
$et->HandleTag($tagTbl,
|
|
2667
|
-
$et->HandleTag($tagTbl, GPSAltitude => $a[10]);
|
|
2668
|
-
$et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown; # millisecond counter (https://exiftool.org/forum/index.php?topic=9884.msg65143#msg65143)
|
|
2638
|
+
$et->HandleTag($tagTbl, GPSSpeed => $a[8] * $mpsToKph);
|
|
2639
|
+
$et->HandleTag($tagTbl, GPSTrack => $a[9]);
|
|
2640
|
+
$et->HandleTag($tagTbl, GPSAltitude => $a[10]);
|
|
2641
|
+
$et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown; # millisecond counter (https://exiftool.org/forum/index.php?topic=9884.msg65143#msg65143)
|
|
2669
2642
|
}
|
|
2670
2643
|
}
|
|
2671
2644
|
} elsif ($id == 0x101) {
|
|
@@ -2721,6 +2694,41 @@ sub Process360Fly($$$)
|
|
|
2721
2694
|
return 1;
|
|
2722
2695
|
}
|
|
2723
2696
|
|
|
2697
|
+
#------------------------------------------------------------------------------
|
|
2698
|
+
# Process GPS from Vantrue N2S dashcam
|
|
2699
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
2700
|
+
# Returns: 1 on success
|
|
2701
|
+
sub ProcessFMAS($$$)
|
|
2702
|
+
{
|
|
2703
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
2704
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
2705
|
+
return 0 unless $$dataPt =~ /^FMAS\0\0\0\0.{72}SAMM.{36}A/s and length($$dataPt) >= 160;
|
|
2706
|
+
$et->VerboseDir('FMAS', undef, length($$dataPt));
|
|
2707
|
+
# 0000: 46 4d 41 53 00 00 00 00 00 00 00 00 00 00 00 00 [FMAS............]
|
|
2708
|
+
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
2709
|
+
# 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
2710
|
+
# 0030: 02 08 01 08 06 08 02 04 07 02 06 00 00 00 00 00 [................]
|
|
2711
|
+
# 0040: 00 00 00 00 00 00 00 00 4f 46 4e 49 4d 4d 41 53 [........OFNIMMAS]
|
|
2712
|
+
# 0050: 53 41 4d 4d 01 00 00 00 00 00 00 00 00 00 00 00 [SAMM............]
|
|
2713
|
+
# 0060: e5 07 09 18 08 00 22 00 02 00 00 00 a1 82 8a bf [......".........]
|
|
2714
|
+
# 0070: 89 23 8e bd 0b 2c 30 bc 41 57 4e 51 16 00 a1 01 [.#...,0.AWNQ....]
|
|
2715
|
+
# 0080: 29 26 27 0c 4b 00 49 00 00 00 00 00 00 00 00 00 [)&'.K.I.........]
|
|
2716
|
+
# 0090: 00 00 00 00 00 00 00 00 00 52 00 00 00 00 00 00 [.........R......]
|
|
2717
|
+
my @a = unpack('x96vCCCCCCx16AAACCCvCCvvv',$$dataPt);
|
|
2718
|
+
SetByteOrder('II');
|
|
2719
|
+
my $acc = ReadValue($dataPt, 0x6c, 'float', 3); # (looks like Z comes first in my sample)
|
|
2720
|
+
my $lon = $a[10] + ($a[11] + $a[13]/6000) / 60; # (why zero byte at $a[12]?)
|
|
2721
|
+
my $lat = $a[14] + ($a[15] + $a[16]/6000) / 60;
|
|
2722
|
+
$et->HandleTag($tagTbl, GPSDateTime => sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a[0..5]));
|
|
2723
|
+
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($a[9] eq 'S' ? -1 : 1));
|
|
2724
|
+
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($a[8] eq 'W' ? -1 : 1));
|
|
2725
|
+
$et->HandleTag($tagTbl, GPSSpeed => $a[17] * $mphToKph); # convert mph -> kph
|
|
2726
|
+
$et->HandleTag($tagTbl, GPSTrack => $a[18]);
|
|
2727
|
+
$et->HandleTag($tagTbl, Accelerometer=> $acc);
|
|
2728
|
+
SetByteOrder('MM');
|
|
2729
|
+
return 1;
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2724
2732
|
#------------------------------------------------------------------------------
|
|
2725
2733
|
# Scan media data for "freeGPS" metadata if not found already (ref PH)
|
|
2726
2734
|
# Inputs: 0) ExifTool ref
|
|
@@ -408,6 +408,9 @@ numerical, and generated automatically otherwise.
|
|
|
408
408
|
to be evaluated. Expression may access $val and $et,
|
|
409
409
|
and is evaluated only when reading.
|
|
410
410
|
|
|
411
|
+
'iTXt' - [PNG TextualData tags only] flag to write tag as PNG
|
|
412
|
+
iTXt chunk even if it contains no special characters.
|
|
413
|
+
|
|
411
414
|
'List' - flag indicating that duplicate entries of this tag
|
|
412
415
|
are allowed, and will be accumulated in a list. Note that for
|
|
413
416
|
XMP information, 3 different types of lists are supported and
|
|
@@ -471,9 +474,9 @@ numerical, and generated automatically otherwise.
|
|
|
471
474
|
tags in IFD1 of JPEG images which default to priority 0.
|
|
472
475
|
|
|
473
476
|
'Protected' - bit mask to protect tags from writing:
|
|
474
|
-
Bit 0x01 indicates an '
|
|
477
|
+
Bit 0x01 indicates an 'Unsafe' tag, which is not set via
|
|
475
478
|
SetNewValuesFromFile() unless specified explicitly.
|
|
476
|
-
Bit 0x02 indicates a '
|
|
479
|
+
Bit 0x02 indicates a 'Protected' tag, which should not be set
|
|
477
480
|
directly by the user.
|
|
478
481
|
|
|
479
482
|
'PutFirst' - [EXIF only] flag to place this value before IFD0
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.46';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
154
154
|
32866 => 'Sony FE 24mm F2.8 G', #IB
|
|
155
155
|
32867 => 'Sony FE 40mm F2.5 G', #IB
|
|
156
156
|
32868 => 'Sony FE 50mm F2.5 G', #IB
|
|
157
|
+
32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
|
|
157
158
|
|
|
158
159
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
159
160
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -196,6 +197,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
196
197
|
49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
|
|
197
198
|
49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
|
|
198
199
|
49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
|
|
200
|
+
49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
|
|
199
201
|
|
|
200
202
|
49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
|
|
201
203
|
49473.1 => 'Viltrox 23mm F1.4 E', #JR
|
|
@@ -8373,8 +8375,8 @@ my %isoSetting2010 = (
|
|
|
8373
8375
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
8374
8376
|
DATAMEMBER => [ 0x04 ],
|
|
8375
8377
|
0x04 => {
|
|
8376
|
-
# seen values 0,2,3,18,32,49,50,83,148
|
|
8377
|
-
# CameraTemperature is valid for all values except 0
|
|
8378
|
+
# seen values 0,2,3,18,19,32,49,50,83,130,132,148,213,229,255
|
|
8379
|
+
# CameraTemperature is valid for all values above except ==0 and >=130
|
|
8378
8380
|
Name => 'TempTest2',
|
|
8379
8381
|
DataMember => 'TempTest2',
|
|
8380
8382
|
Hidden => 1,
|
|
@@ -892,6 +892,7 @@ my %tagLookup = (
|
|
|
892
892
|
'alternatetitletext' => { 484 => [\'alternateTitle','alternateTitleText'] },
|
|
893
893
|
'altitude' => { 192 => 0x6 },
|
|
894
894
|
'alttapename' => { 494 => 'altTapeName' },
|
|
895
|
+
'alttextaccessibility' => { 479 => 'AltTextAccessibility' },
|
|
895
896
|
'alttimecode' => { 494 => 'altTimecode' },
|
|
896
897
|
'alttimecodetimeformat' => { 494 => [\'altTimecode','altTimecodeTimeFormat'] },
|
|
897
898
|
'alttimecodetimevalue' => { 494 => [\'altTimecode','altTimecodeTimeValue'] },
|
|
@@ -1180,6 +1181,7 @@ my %tagLookup = (
|
|
|
1180
1181
|
'calibrationhistory' => { 135 => 0x9c9 },
|
|
1181
1182
|
'calibrationilluminant1' => { 117 => 0xc65a },
|
|
1182
1183
|
'calibrationilluminant2' => { 117 => 0xc65b },
|
|
1184
|
+
'calibrationilluminant3' => { 117 => 0xcd31 },
|
|
1183
1185
|
'calibrationversion' => { 135 => 0x9c6 },
|
|
1184
1186
|
'callforimage' => { 458 => 'CallForImage' },
|
|
1185
1187
|
'camera' => { 448 => [\'Cameras','CamerasCamera'] },
|
|
@@ -1192,6 +1194,7 @@ my %tagLookup = (
|
|
|
1192
1194
|
'cameracalibration' => { 388 => 0x11f },
|
|
1193
1195
|
'cameracalibration1' => { 117 => 0xc623 },
|
|
1194
1196
|
'cameracalibration2' => { 117 => 0xc624 },
|
|
1197
|
+
'cameracalibration3' => { 117 => 0xcd32 },
|
|
1195
1198
|
'cameracalibrationsig' => { 117 => 0xc6f3 },
|
|
1196
1199
|
'cameracolorcalibration01' => { 36 => 0x0, 37 => 0x0 },
|
|
1197
1200
|
'cameracolorcalibration02' => { 36 => 0x4, 37 => 0x5 },
|
|
@@ -1542,6 +1545,7 @@ my %tagLookup = (
|
|
|
1542
1545
|
'colormatrix' => { 292 => 0x200, 293 => 0x1011, 385 => 0xa030 },
|
|
1543
1546
|
'colormatrix1' => { 117 => 0xc621, 355 => 0x106 },
|
|
1544
1547
|
'colormatrix2' => { 117 => 0xc622, 296 => 0x200, 355 => 0x226 },
|
|
1548
|
+
'colormatrix3' => { 117 => 0xcd33 },
|
|
1545
1549
|
'colormatrixa' => { 346 => 0x203 },
|
|
1546
1550
|
'colormatrixa2' => { 346 => 0x21c },
|
|
1547
1551
|
'colormatrixadobergb' => { 385 => 0xa032 },
|
|
@@ -2341,7 +2345,7 @@ my %tagLookup = (
|
|
|
2341
2345
|
'eventfieldnotes' => { 116 => [\'Event','EventFieldNotes'] },
|
|
2342
2346
|
'eventfieldnumber' => { 116 => [\'Event','EventFieldNumber'] },
|
|
2343
2347
|
'eventhabitat' => { 116 => [\'Event','EventHabitat'] },
|
|
2344
|
-
'eventid' => { 116 => [\'Event','EventEventID'] },
|
|
2348
|
+
'eventid' => { 116 => [\'Event','EventEventID'], 480 => 'EventID' },
|
|
2345
2349
|
'eventlatestdate' => { 116 => [\'Event','EventLatestDate'] },
|
|
2346
2350
|
'eventmonth' => { 116 => [\'Event','EventMonth'] },
|
|
2347
2351
|
'eventnumber' => { 372 => 0x9, 373 => 0x37, 374 => 0x3a },
|
|
@@ -2416,6 +2420,7 @@ my %tagLookup = (
|
|
|
2416
2420
|
'exposurewarning' => { 125 => 0x1302 },
|
|
2417
2421
|
'exrauto' => { 125 => 0x1033 },
|
|
2418
2422
|
'exrmode' => { 125 => 0x1034 },
|
|
2423
|
+
'extdescraccessibility' => { 479 => 'ExtDescrAccessibility' },
|
|
2419
2424
|
'extendedwbdetect' => { 288 => 0x902 },
|
|
2420
2425
|
'extender' => { 289 => 0x301 },
|
|
2421
2426
|
'extenderfirmwareversion' => { 289 => 0x304 },
|
|
@@ -2788,6 +2793,7 @@ my %tagLookup = (
|
|
|
2788
2793
|
'forwardlock' => { 489 => 'forwardlock' },
|
|
2789
2794
|
'forwardmatrix1' => { 117 => 0xc714 },
|
|
2790
2795
|
'forwardmatrix2' => { 117 => 0xc715 },
|
|
2796
|
+
'forwardmatrix3' => { 117 => 0xcd34 },
|
|
2791
2797
|
'fossilspecimen' => { 116 => 'FossilSpecimen' },
|
|
2792
2798
|
'fossilspecimenmaterialsampleid' => { 116 => [\'FossilSpecimen','FossilSpecimenMaterialSampleID'] },
|
|
2793
2799
|
'framecount' => { 65 => [0x2,0x4] },
|
|
@@ -3140,6 +3146,9 @@ my %tagLookup = (
|
|
|
3140
3146
|
'identifiedby' => { 116 => [\'Identification','IdentificationIdentifiedBy'] },
|
|
3141
3147
|
'identifier' => { 471 => 'identifier', 492 => 'Identifier' },
|
|
3142
3148
|
'ifcameramodel' => { 135 => 0x9c8 },
|
|
3149
|
+
'illuminantdata1' => { 117 => 0xcd35 },
|
|
3150
|
+
'illuminantdata2' => { 117 => 0xcd36 },
|
|
3151
|
+
'illuminantdata3' => { 117 => 0xcd37 },
|
|
3143
3152
|
'illumination' => { 282 => '0.5', 373 => 0x48 },
|
|
3144
3153
|
'imageabsolutex' => { 135 => 0x3fe },
|
|
3145
3154
|
'imageabsolutey' => { 135 => 0x3ff },
|
|
@@ -3681,6 +3690,9 @@ my %tagLookup = (
|
|
|
3681
3690
|
'lookparameterslooktable' => { 468 => [\'Look','LookParametersLookTable'], 470 => [\'Look','LookParametersLookTable'] },
|
|
3682
3691
|
'lookparametersprocessversion' => { 468 => [\'Look','LookParametersProcessVersion'], 470 => [\'Look','LookParametersProcessVersion'] },
|
|
3683
3692
|
'lookparameterstonecurvepv2012' => { 468 => [\'Look','LookParametersToneCurvePV2012'], 470 => [\'Look','LookParametersToneCurvePV2012'] },
|
|
3693
|
+
'lookparameterstonecurvepv2012blue' => { 468 => [\'Look','LookParametersToneCurvePV2012Blue'], 470 => [\'Look','LookParametersToneCurvePV2012Blue'] },
|
|
3694
|
+
'lookparameterstonecurvepv2012green' => { 468 => [\'Look','LookParametersToneCurvePV2012Green'], 470 => [\'Look','LookParametersToneCurvePV2012Green'] },
|
|
3695
|
+
'lookparameterstonecurvepv2012red' => { 468 => [\'Look','LookParametersToneCurvePV2012Red'], 470 => [\'Look','LookParametersToneCurvePV2012Red'] },
|
|
3684
3696
|
'lookparametersversion' => { 468 => [\'Look','LookParametersVersion'], 470 => [\'Look','LookParametersVersion'] },
|
|
3685
3697
|
'looksupportsamount' => { 468 => [\'Look','LookSupportsAmount'], 470 => [\'Look','LookSupportsAmount'] },
|
|
3686
3698
|
'looksupportsmonochrome' => { 468 => [\'Look','LookSupportsMonochrome'], 470 => [\'Look','LookSupportsMonochrome'] },
|
|
@@ -4825,8 +4837,10 @@ my %tagLookup = (
|
|
|
4825
4837
|
'profilecameraindices' => { 448 => [\'Profiles','ProfilesProfileCameraIndices'] },
|
|
4826
4838
|
'profilecopyright' => { 117 => 0xc6fe },
|
|
4827
4839
|
'profileembedpolicy' => { 117 => 0xc6fd },
|
|
4840
|
+
'profilegaintablemap' => { 117 => 0xcd2d },
|
|
4828
4841
|
'profilehuesatmapdata1' => { 117 => 0xc6fa },
|
|
4829
4842
|
'profilehuesatmapdata2' => { 117 => 0xc6fb },
|
|
4843
|
+
'profilehuesatmapdata3' => { 117 => 0xcd39 },
|
|
4830
4844
|
'profilehuesatmapdims' => { 117 => 0xc6f9 },
|
|
4831
4845
|
'profilehuesatmapencoding' => { 117 => 0xc7a3 },
|
|
4832
4846
|
'profilelooktabledata' => { 117 => 0xc726 },
|
|
@@ -5018,6 +5032,7 @@ my %tagLookup = (
|
|
|
5018
5032
|
'redsaturation' => { 468 => 'RedSaturation', 470 => 'RedSaturation' },
|
|
5019
5033
|
'reductionmatrix1' => { 117 => 0xc625 },
|
|
5020
5034
|
'reductionmatrix2' => { 117 => 0xc626 },
|
|
5035
|
+
'reductionmatrix3' => { 117 => 0xcd3a },
|
|
5021
5036
|
'reelname' => { 117 => 0xc789, 371 => 'reel' },
|
|
5022
5037
|
'reference1' => { 478 => [\'TagStructure','TagStructureReference'] },
|
|
5023
5038
|
'reference2' => { 478 => [\'TagStructure','TagStructureSubLabelsReference'] },
|
|
@@ -5197,6 +5212,7 @@ my %tagLookup = (
|
|
|
5197
5212
|
'rflenstype' => { 56 => 0x3d },
|
|
5198
5213
|
'rgbcurvelimits' => { 106 => 0x238 },
|
|
5199
5214
|
'rgbcurvepoints' => { 105 => 0x7, 106 => 0x20e },
|
|
5215
|
+
'rgbtables' => { 117 => 0xcd3b },
|
|
5200
5216
|
'richtextcomment' => { 477 => 'RichTextComment' },
|
|
5201
5217
|
'ricohdate' => { 377 => 0x6 },
|
|
5202
5218
|
'ricohimageheight' => { 377 => 0x2 },
|
|
@@ -5430,7 +5446,7 @@ my %tagLookup = (
|
|
|
5430
5446
|
'shuttercount2' => { 429 => 0x4c, 430 => [0x50,0x52,0x58], 431 => 0x50 },
|
|
5431
5447
|
'shuttercount3' => { 429 => [0x1a0,0x1aa,0x1bd], 430 => [0x19f,0x1cb,0x1cd] },
|
|
5432
5448
|
'shuttercurtainsync' => { 80 => 0xf, 81 => 0xf, 82 => 0x305, 83 => 0xe, 84 => 0xf, 85 => 0x8, 86 => 0x8, 87 => 0xf, 88 => 0x8 },
|
|
5433
|
-
'shuttermode' => { 137 => 0x1b, 222 => 0x34 },
|
|
5449
|
+
'shuttermode' => { 56 => 0x17, 137 => 0x1b, 222 => 0x34 },
|
|
5434
5450
|
'shutterreleasebuttonae-l' => { 271 => '17.7', 272 => '18.4', 274 => '78.4', 275 => '78.4', 276 => '16.1', 277 => '17.1', 278 => '17.1', 279 => '17.1', 280 => '7.1', 281 => '17.5', 284 => '18.4', 285 => '78.4', 286 => '18.2' },
|
|
5435
5451
|
'shutterreleasemethod' => { 95 => 0x1010 },
|
|
5436
5452
|
'shutterreleasenocfcard' => { 80 => 0x2, 81 => 0x2, 88 => 0xf },
|
|
@@ -6712,8 +6728,10 @@ my %tagExists = (
|
|
|
6712
6728
|
'audiozeroframespadded' => 1,
|
|
6713
6729
|
'authenticationtime' => 1,
|
|
6714
6730
|
'authenticationtype' => 1,
|
|
6731
|
+
'authoridentifier' => 1,
|
|
6715
6732
|
'authoringsoftwarerelease' => 1,
|
|
6716
6733
|
'authorlen' => 1,
|
|
6734
|
+
'authorname' => 1,
|
|
6717
6735
|
'authorship' => 1,
|
|
6718
6736
|
'authorsortorder' => 1,
|
|
6719
6737
|
'autoareaafstartingpoint' => 1,
|
|
@@ -6796,6 +6814,8 @@ my %tagExists = (
|
|
|
6796
6814
|
'bikebroaccel' => 1,
|
|
6797
6815
|
'bikebrogps' => 1,
|
|
6798
6816
|
'billinginformation' => 1,
|
|
6817
|
+
'binarydata' => 1,
|
|
6818
|
+
'binarydatatype' => 1,
|
|
6799
6819
|
'binaryfilter' => 1,
|
|
6800
6820
|
'binaryxml' => 1,
|
|
6801
6821
|
'binning' => 1,
|
|
@@ -7069,6 +7089,7 @@ my %tagExists = (
|
|
|
7069
7089
|
'casioqvmi' => 1,
|
|
7070
7090
|
'cast' => 1,
|
|
7071
7091
|
'catalognumber' => 1,
|
|
7092
|
+
'cbordata' => 1,
|
|
7072
7093
|
'cc' => 1,
|
|
7073
7094
|
'ccaddresses' => 1,
|
|
7074
7095
|
'ccdrect' => 1,
|
|
@@ -8293,6 +8314,7 @@ my %tagExists = (
|
|
|
8293
8314
|
'gopro' => 1,
|
|
8294
8315
|
'goprogpmf' => 1,
|
|
8295
8316
|
'gpano' => 1,
|
|
8317
|
+
'gpmd_fmas' => 1,
|
|
8296
8318
|
'gpmd_gopro' => 1,
|
|
8297
8319
|
'gpmd_kingslim' => 1,
|
|
8298
8320
|
'gpmd_rove' => 1,
|
|
@@ -9047,6 +9069,7 @@ my %tagExists = (
|
|
|
9047
9069
|
'markerid' => 1,
|
|
9048
9070
|
'markinfo' => 1,
|
|
9049
9071
|
'marl' => 1,
|
|
9072
|
+
'masksubarea' => 1,
|
|
9050
9073
|
'mastergainadjustment' => 1,
|
|
9051
9074
|
'matrixworldtocamera' => 1,
|
|
9052
9075
|
'matrixworldtoscreen' => 1,
|
|
@@ -10181,6 +10204,7 @@ my %tagExists = (
|
|
|
10181
10204
|
'regionxformtackpoint' => 1,
|
|
10182
10205
|
'registerreadtiming' => 1,
|
|
10183
10206
|
'relatedimagefile' => 1,
|
|
10207
|
+
'relationship' => 1,
|
|
10184
10208
|
'relativeexposure' => 1,
|
|
10185
10209
|
'relativehumidity' => 1,
|
|
10186
10210
|
'relativelocation' => 1,
|
|
@@ -10433,6 +10457,8 @@ my %tagExists = (
|
|
|
10433
10457
|
'selobjname' => 1,
|
|
10434
10458
|
'selobjtype' => 1,
|
|
10435
10459
|
'selobjversion' => 1,
|
|
10460
|
+
'semanticinstanceifd' => 1,
|
|
10461
|
+
'semanticname' => 1,
|
|
10436
10462
|
'sendduration' => 1,
|
|
10437
10463
|
'senderaddress' => 1,
|
|
10438
10464
|
'sendername' => 1,
|
|
@@ -10869,9 +10895,11 @@ my %tagExists = (
|
|
|
10869
10895
|
'thumbnailclip' => 1,
|
|
10870
10896
|
'thumbnailcompressiontable' => 1,
|
|
10871
10897
|
'thumbnailexpansiontable' => 1,
|
|
10898
|
+
'thumbnailhash' => 1,
|
|
10872
10899
|
'thumbnailref' => 1,
|
|
10873
10900
|
'thumbnailresizeratio' => 1,
|
|
10874
10901
|
'thumbnailtiff' => 1,
|
|
10902
|
+
'thumbnailurl' => 1,
|
|
10875
10903
|
'tickspersecond' => 1,
|
|
10876
10904
|
'tiff' => 1,
|
|
10877
10905
|
'tiff-epstandardid' => 1,
|
|
@@ -11102,6 +11130,7 @@ my %tagExists = (
|
|
|
11102
11130
|
'usptomiscellaneous' => 1,
|
|
11103
11131
|
'usptooriginalcontenttype' => 1,
|
|
11104
11132
|
'utm' => 1,
|
|
11133
|
+
'uuid-c2paclaimsignature' => 1,
|
|
11105
11134
|
'uuid-canon' => 1,
|
|
11106
11135
|
'uuid-canon2' => 1,
|
|
11107
11136
|
'uuid-exif' => 1,
|