exiftool_vendored 12.16.0 → 12.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +137 -1
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +44 -43
- data/bin/config_files/acdsee.config +193 -6
- data/bin/config_files/cuepointlist.config +70 -0
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +139 -98
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +158 -49
- data/bin/lib/Image/ExifTool.pod +94 -75
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -14
- data/bin/lib/Image/ExifTool/Canon.pm +28 -3
- data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
- data/bin/lib/Image/ExifTool/Exif.pm +50 -22
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
- data/bin/lib/Image/ExifTool/GPS.pm +24 -13
- data/bin/lib/Image/ExifTool/H264.pm +20 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- data/bin/lib/Image/ExifTool/JSON.pm +24 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +361 -16
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/MRC.pm +341 -0
- data/bin/lib/Image/ExifTool/MWG.pm +3 -3
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +25 -16
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/PNG.pm +2 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +14 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +148 -68
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +94 -34
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +84 -12
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +157 -49
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4079 -3987
- data/bin/lib/Image/ExifTool/TagNames.pod +642 -273
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +44 -17
- data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -8
- data/bin/lib/Image/ExifTool/Writer.pl +50 -14
- data/bin/lib/Image/ExifTool/XMP.pm +50 -11
- data/bin/perl-Image-ExifTool.spec +42 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +52 -12
@@ -65,8 +65,9 @@ my @dateMax = ( 24, 59, 59, 2200, 12, 31 );
|
|
65
65
|
my $gpsBlockSize = 0x8000;
|
66
66
|
|
67
67
|
# conversion factors
|
68
|
-
my $knotsToKph = 1.852;
|
69
|
-
my $mpsToKph = 3.6;
|
68
|
+
my $knotsToKph = 1.852; # knots --> km/h
|
69
|
+
my $mpsToKph = 3.6; # m/s --> km/h
|
70
|
+
my $mphToKph = 1.60934; # mph --> km/h
|
70
71
|
|
71
72
|
# handler types to process based on MetaFormat/OtherFormat
|
72
73
|
my %processByMetaFormat = (
|
@@ -96,7 +97,7 @@ my %insvLimit = (
|
|
96
97
|
NOTES => q{
|
97
98
|
Timed metadata extracted from QuickTime media data and some AVI videos when
|
98
99
|
the ExtractEmbedded option is used. Although most of these tags are
|
99
|
-
combined into the single table below, ExifTool currently reads
|
100
|
+
combined into the single table below, ExifTool currently reads 51 different
|
100
101
|
formats of timed GPS metadata from video files.
|
101
102
|
},
|
102
103
|
VARS => { NO_ID => 1 },
|
@@ -139,6 +140,7 @@ my %insvLimit = (
|
|
139
140
|
SampleTime => { Groups => { 2 => 'Video' }, PrintConv => 'ConvertDuration($val)', Notes => 'sample decoding time' },
|
140
141
|
SampleDuration=>{ Groups => { 2 => 'Video' }, PrintConv => 'ConvertDuration($val)' },
|
141
142
|
UserLabel => { Groups => { 2 => 'Other' } },
|
143
|
+
KiloCalories => { Groups => { 2 => 'Other' } },
|
142
144
|
SampleDateTime => {
|
143
145
|
Groups => { 2 => 'Time' },
|
144
146
|
ValueConv => q{
|
@@ -1249,8 +1251,8 @@ sub ProcessSamples($)
|
|
1249
1251
|
next if length($buff) < 20 + $n;
|
1250
1252
|
$et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12+$n) * 180/0x80000000);
|
1251
1253
|
$et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16+$n) * 180/0x80000000);
|
1252
|
-
$et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n));
|
1253
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => '
|
1254
|
+
$et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n) * $mphToKph);
|
1255
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
1254
1256
|
SetGPSDateTime($et, $tagTbl, $time[$i]);
|
1255
1257
|
next; # all done (don't store/process as text)
|
1256
1258
|
}
|
@@ -2272,39 +2274,97 @@ sub ProcessNMEA($$$)
|
|
2272
2274
|
{
|
2273
2275
|
my ($et, $dirInfo, $tagTbl) = @_;
|
2274
2276
|
my $dataPt = $$dirInfo{DataPt};
|
2275
|
-
|
2276
|
-
|
2277
|
-
|
2278
|
-
my ($
|
2279
|
-
|
2280
|
-
|
2281
|
-
my ($spd, $trk);
|
2282
|
-
$spd = $10 * $knotsToKph if length $10;
|
2283
|
-
$trk = $11 if length $11;
|
2284
|
-
# lat/long are in DDDMM.MMMM format
|
2285
|
-
my $deg = int($lat / 100);
|
2286
|
-
$lat = $deg + ($lat - $deg * 100) / 60;
|
2287
|
-
$deg = int($lon / 100);
|
2288
|
-
$lon = $deg + ($lon - $deg * 100) / 60;
|
2289
|
-
$sec = '0' . $sec unless $sec =~ /^\d{2}/; # pad integer part of seconds to 2 digits
|
2290
|
-
my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%sZ',$yr,$mon,$day,$hr,$min,$sec);
|
2291
|
-
my $sampleTime;
|
2292
|
-
$sampleTime = ($tc - $$et{StartTime}) / 1000 if $tc and $$et{StartTime};
|
2293
|
-
FoundSomething($et, $tagTbl, $sampleTime);
|
2294
|
-
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
2295
|
-
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
|
2296
|
-
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
|
2297
|
-
if (defined $spd) {
|
2298
|
-
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
2299
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
2277
|
+
my ($rtnVal, %fix);
|
2278
|
+
# parse only RMC and GGA sentence [with leading timecode] for now
|
2279
|
+
for (;;) {
|
2280
|
+
my ($tc, $type, $tim);
|
2281
|
+
if ($$dataPt =~ /(?:\[(\d+)\])?\$[A-Z]{2}(RMC|GGA),(\d{2}\d{2}\d+(\.\d*)?),/g) {
|
2282
|
+
($tc, $type, $tim) = ($1, $2, $3);
|
2300
2283
|
}
|
2301
|
-
|
2302
|
-
|
2303
|
-
|
2284
|
+
# write out last fix now if complete
|
2285
|
+
# (use the GPS timestamps because they may be different for the same timecode)
|
2286
|
+
if ($fix{tim} and (not $tim or $fix{tim} != $tim)) {
|
2287
|
+
if ($fix{dat} and defined $fix{lat} and defined $fix{lon}) {
|
2288
|
+
my $sampleTime;
|
2289
|
+
$sampleTime = ($fix{tc} - $$et{StartTime}) / 1000 if $fix{tc} and $$et{StartTime};
|
2290
|
+
FoundSomething($et, $tagTbl, $sampleTime);
|
2291
|
+
$et->HandleTag($tagTbl, GPSDateTime => $fix{dat});
|
2292
|
+
$et->HandleTag($tagTbl, GPSLatitude => $fix{lat});
|
2293
|
+
$et->HandleTag($tagTbl, GPSLongitude => $fix{lon});
|
2294
|
+
if (defined $fix{spd}) {
|
2295
|
+
$et->HandleTag($tagTbl, GPSSpeed => $fix{spd} * $knotsToKph);
|
2296
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
2297
|
+
}
|
2298
|
+
if (defined $fix{trk}) {
|
2299
|
+
$et->HandleTag($tagTbl, GPSTrack => $fix{trk});
|
2300
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
2301
|
+
}
|
2302
|
+
$et->HandleTag($tagTbl, GPSAltitude => $fix{alt}) if defined $fix{alt};
|
2303
|
+
$et->HandleTag($tagTbl, GPSSatellites => $fix{nsats}+0) if defined $fix{nsats};
|
2304
|
+
$et->HandleTag($tagTbl, GPSDOP => $fix{hdop}) if defined $fix{hdop};
|
2305
|
+
}
|
2306
|
+
undef %fix;
|
2307
|
+
}
|
2308
|
+
$fix{tim} = $tim or last;
|
2309
|
+
my $pos = pos($$dataPt);
|
2310
|
+
pos($$dataPt) = $pos - length($tim) - 1; # rewind to re-parse time
|
2311
|
+
# (parsing of NMEA strings copied from Geotag.pm)
|
2312
|
+
if ($type eq 'RMC' and
|
2313
|
+
$$dataPt =~ /\G(\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+)/g)
|
2314
|
+
{
|
2315
|
+
my $year = $15 + ($15 >= 70 ? 1900 : 2000);
|
2316
|
+
$fix{tc} = $tc; # use timecode of RMC sentence
|
2317
|
+
$fix{dat} = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%sZ',$year,$14,$13,$1,$2,$3);
|
2318
|
+
$fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
|
2319
|
+
$fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
|
2320
|
+
$fix{spd} = $11 if length $11;
|
2321
|
+
$fix{trk} = $12 if length $12;
|
2322
|
+
} elsif ($type eq 'GGA' and
|
2323
|
+
$$dataPt =~ /\G(\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?/g)
|
2324
|
+
{
|
2325
|
+
$fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
|
2326
|
+
$fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
|
2327
|
+
@fix{qw(nsats hdop alt)} = ($11,$12,$13);
|
2328
|
+
} else {
|
2329
|
+
pos($$dataPt) = $pos; # continue searching from our last match
|
2304
2330
|
}
|
2305
2331
|
}
|
2306
2332
|
delete $$et{DOC_NUM};
|
2307
|
-
return
|
2333
|
+
return $rtnVal;
|
2334
|
+
}
|
2335
|
+
|
2336
|
+
#------------------------------------------------------------------------------
|
2337
|
+
# Process 'gps ' or 'udat' atom possibly containing NMEA (ref PH)
|
2338
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
2339
|
+
# Returns: 1 on success
|
2340
|
+
sub ProcessGPSLog($$$)
|
2341
|
+
{
|
2342
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
2343
|
+
my $dataPt = $$dirInfo{DataPt};
|
2344
|
+
my ($rtnVal, @a);
|
2345
|
+
|
2346
|
+
# try NMEA format first
|
2347
|
+
return 1 if ProcessNMEA($et,$dirInfo,$tagTbl);
|
2348
|
+
|
2349
|
+
# DENVER ACG-8050WMK2 format looks like this:
|
2350
|
+
# 210318073213[1][N][52200970][E][006362321][+00152][100][00140][C000000]+000+000+000+000+000+000+000+000+000+000+000+000+000+000+000+000+000+000
|
2351
|
+
# YYMMDDHHMMSS A? NS lat EW lon alt kph dir kCal accel
|
2352
|
+
while ($$dataPt =~ /\b(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\[1\]\[([NS])\]\[(\d{8})\]\[([EW])\]\[(\d{9})\]\[([-+]?\d*)\]\[(\d*)\]\[(\d*)\]\[C?(\d*)\](([-+]\d{3})+)/g) {
|
2353
|
+
my $lat = substr( $8,0,2) + substr( $8,2) / 600000;
|
2354
|
+
my $lon = substr($10,0,3) + substr($10,3) / 600000;
|
2355
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2356
|
+
$et->HandleTag($tagTbl, GPSDateTime => "20$1:$2:$3 $4:$5:$6Z");
|
2357
|
+
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($7 eq 'S' ? -1 : 1));
|
2358
|
+
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($9 eq 'W' ? -1 : 1));
|
2359
|
+
$et->HandleTag($tagTbl, GPSAltitude => $11 / 10) if length $11;
|
2360
|
+
$et->HandleTag($tagTbl, GPSSpeed => $12 + 0) if length $12;
|
2361
|
+
$et->HandleTag($tagTbl, GPSTrack => $13 + 0) if length $13;
|
2362
|
+
$et->HandleTag($tagTbl, KiloCalories => $14 / 10) if length $14;
|
2363
|
+
$et->HandleTag($tagTbl, Accelerometer=> $15) if length $15;
|
2364
|
+
$rtnVal = 1;
|
2365
|
+
}
|
2366
|
+
delete $$et{DOC_NUM};
|
2367
|
+
return $rtnVal;
|
2308
2368
|
}
|
2309
2369
|
|
2310
2370
|
#------------------------------------------------------------------------------
|
@@ -62,10 +62,11 @@ key:
|
|
62
62
|
information about the source directory for tags to be copied to the output.
|
63
63
|
|
64
64
|
CHECK_PROC : Reference to a function which validates Raw values for writing.
|
65
|
-
The function takes
|
66
|
-
reference, 2) value reference, and
|
67
|
-
the input value) if successful, or an error
|
68
|
-
problem. May set ExifTool CHECK_WARN datamember
|
65
|
+
The function takes 3-4 arguments: 0) ExifTool object reference, 1) tagInfo
|
66
|
+
reference, 2) value reference, and 3) [optional] conversion type. It returns
|
67
|
+
undefined (and possibly modifies the input value) if successful, or an error
|
68
|
+
message if there was a format problem. May set ExifTool CHECK_WARN datamember
|
69
|
+
for success with a warning.
|
69
70
|
|
70
71
|
INIT_TABLE : Routine called to do any necessary initialization before the
|
71
72
|
first time the table is loaded. Argument is a reference to the table.
|
@@ -21,6 +21,7 @@
|
|
21
21
|
# 13) http://tech.ebu.ch/docs/tech/tech3285.pdf
|
22
22
|
# 14) https://developers.google.com/speed/webp/docs/riff_container
|
23
23
|
# 15) https://tech.ebu.ch/docs/tech/tech3306-2009.pdf
|
24
|
+
# 16) https://sites.google.com/site/musicgapi/technical-documents/wav-file-format
|
24
25
|
#------------------------------------------------------------------------------
|
25
26
|
|
26
27
|
package Image::ExifTool::RIFF;
|
@@ -29,7 +30,7 @@ use strict;
|
|
29
30
|
use vars qw($VERSION);
|
30
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
31
32
|
|
32
|
-
$VERSION = '1.
|
33
|
+
$VERSION = '1.58';
|
33
34
|
|
34
35
|
sub ConvertTimecode($);
|
35
36
|
sub ProcessSGLT($$$);
|
@@ -354,9 +355,35 @@ my %code2charset = (
|
|
354
355
|
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::DS64' },
|
355
356
|
},
|
356
357
|
list => 'ListType', #15
|
357
|
-
labl => { #
|
358
|
-
Name => '
|
359
|
-
|
358
|
+
labl => { #16 (in 'adtl' chunk)
|
359
|
+
Name => 'CuePointLabel',
|
360
|
+
Priority => 0, # (so they are stored in sequence)
|
361
|
+
ValueConv => 'my $str=substr($val,4); $str=~s/\0+$//; unpack("V",$val) . " " . $str',
|
362
|
+
},
|
363
|
+
note => { #16 (in 'adtl' chunk)
|
364
|
+
Name => 'CuePointNote',
|
365
|
+
Priority => 0, # (so they are stored in sequence)
|
366
|
+
ValueConv => 'my $str=substr($val,4); $str=~s/\0+$//; unpack("V",$val) . " " . $str',
|
367
|
+
},
|
368
|
+
ltxt => { #16 (in 'adtl' chunk)
|
369
|
+
Name => 'LabeledText',
|
370
|
+
Notes => 'CuePointID Length Purpose Country Language Dialect Codepage Text',
|
371
|
+
Priority => 0, # (so they are stored in sequence)
|
372
|
+
ValueConv => q{
|
373
|
+
my @a = unpack('VVa4vvvv', $val);
|
374
|
+
$a[2] = "'$a[2]'";
|
375
|
+
my $txt = substr($val, 18);
|
376
|
+
$txt =~ s/\0+$//; # remove null terminator
|
377
|
+
return join(' ', @a, $txt);
|
378
|
+
},
|
379
|
+
},
|
380
|
+
smpl => { #16
|
381
|
+
Name => 'Sampler',
|
382
|
+
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Sampler' },
|
383
|
+
},
|
384
|
+
inst => { #16
|
385
|
+
Name => 'Instrument',
|
386
|
+
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Instrument' },
|
360
387
|
},
|
361
388
|
LIST_INFO => {
|
362
389
|
Name => 'Info',
|
@@ -396,6 +423,10 @@ my %code2charset = (
|
|
396
423
|
ProcessProc => \&Image::ExifTool::RIFF::ProcessChunks,
|
397
424
|
},
|
398
425
|
},
|
426
|
+
LIST_adtl => { #PH (ref 16, forum12387)
|
427
|
+
Name => 'AssociatedDataList',
|
428
|
+
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Main' },
|
429
|
+
},
|
399
430
|
# seen LIST_JUNK
|
400
431
|
JUNK => [
|
401
432
|
{
|
@@ -466,10 +497,15 @@ my %code2charset = (
|
|
466
497
|
Name => 'NumberOfSamples',
|
467
498
|
RawConv => 'Get32u(\$val, 0)',
|
468
499
|
},
|
469
|
-
'cue '
|
500
|
+
'cue '=> {
|
470
501
|
Name => 'CuePoints',
|
471
502
|
Binary => 1,
|
503
|
+
Notes => q{
|
504
|
+
config_files/cutepointlist.config from full distribution will decode this
|
505
|
+
and generate a list of cue points with labels
|
506
|
+
},
|
472
507
|
},
|
508
|
+
plst => { Name => 'Playlist', Binary => 1 }, #16
|
473
509
|
afsp => { },
|
474
510
|
IDIT => {
|
475
511
|
Name => 'DateTimeOriginal',
|
@@ -704,16 +740,52 @@ my %code2charset = (
|
|
704
740
|
# very unlikely, support for these is not yet implemented)
|
705
741
|
);
|
706
742
|
|
707
|
-
#
|
708
|
-
%Image::ExifTool::RIFF::
|
743
|
+
# Sampler chunk (ref 16)
|
744
|
+
%Image::ExifTool::RIFF::Sampler = (
|
709
745
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
710
746
|
GROUPS => { 2 => 'Audio' },
|
711
747
|
FORMAT => 'int32u',
|
712
|
-
0 => '
|
713
|
-
1 =>
|
714
|
-
|
715
|
-
|
748
|
+
0 => 'Manufacturer',
|
749
|
+
1 => 'Product',
|
750
|
+
2 => 'SamplePeriod',
|
751
|
+
3 => 'MIDIUnityNote',
|
752
|
+
4 => 'MIDIPitchFraction',
|
753
|
+
5 => {
|
754
|
+
Name => 'SMPTEFormat',
|
755
|
+
PrintConv => {
|
756
|
+
0 => 'none',
|
757
|
+
24 => '24 fps',
|
758
|
+
25 => '25 fps',
|
759
|
+
29 => '29 fps',
|
760
|
+
30 => '30 fps',
|
761
|
+
},
|
716
762
|
},
|
763
|
+
6 => {
|
764
|
+
Name => 'SMPTEOffset',
|
765
|
+
Notes => 'HH:MM:SS:FF',
|
766
|
+
ValueConv => q{
|
767
|
+
my $str = sprintf('%.8x', $val);
|
768
|
+
$str =~ s/(..)(..)(..)(..)/$1:$2:$3:$4/;
|
769
|
+
return $str;
|
770
|
+
},
|
771
|
+
},
|
772
|
+
7 => 'NumSampleLoops',
|
773
|
+
8 => 'SamplerDataLen',
|
774
|
+
9 => { Name => 'SamplerData', Format => 'undef[$size-40]', Binary => 1 },
|
775
|
+
);
|
776
|
+
|
777
|
+
# Instrument chunk (ref 16)
|
778
|
+
%Image::ExifTool::RIFF::Instrument = (
|
779
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
780
|
+
GROUPS => { 2 => 'Audio' },
|
781
|
+
FORMAT => 'int8s',
|
782
|
+
0 => 'UnshiftedNote',
|
783
|
+
1 => 'FineTune',
|
784
|
+
2 => 'Gain',
|
785
|
+
3 => 'LowNote',
|
786
|
+
4 => 'HighNote',
|
787
|
+
5 => 'LowVelocity',
|
788
|
+
6 => 'HighVelocity',
|
717
789
|
);
|
718
790
|
|
719
791
|
# Sub chunks of INFO LIST chunk
|
@@ -1892,7 +1964,7 @@ sub ProcessRIFF($$)
|
|
1892
1964
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
1893
1965
|
}
|
1894
1966
|
my $tagInfo = $$tagTbl{$tag};
|
1895
|
-
if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF)$/)) {
|
1967
|
+
if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF|\d{2}(db|dc|wb))$/)) {
|
1896
1968
|
$raf->Read($buff, $len2) == $len2 or $err=1, last;
|
1897
1969
|
my $setGroups;
|
1898
1970
|
if ($tagInfo and ref $tagInfo eq 'HASH' and $$tagInfo{SetGroups}) {
|
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
23
23
|
use Image::ExifTool::Exif;
|
24
24
|
|
25
|
-
$VERSION = '1.
|
25
|
+
$VERSION = '1.49';
|
26
26
|
|
27
27
|
sub WriteSTMN($$$);
|
28
28
|
sub ProcessINFO($$$);
|
@@ -940,6 +940,7 @@ my %formatMinMax = (
|
|
940
940
|
%Image::ExifTool::Samsung::Trailer = (
|
941
941
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Other' },
|
942
942
|
VARS => { NO_ID => 1, HEX_ID => 0 },
|
943
|
+
PRIORITY => 0, # (first one takes priority so DepthMapWidth/Height match first DepthMapData)
|
943
944
|
NOTES => q{
|
944
945
|
Tags extracted from the trailer of JPEG images written when using certain
|
945
946
|
features (such as "Sound & Shot" or "Shot & More") from Samsung models such
|
@@ -265,6 +265,15 @@ $VERSION = '1.65';
|
|
265
265
|
'XMP',
|
266
266
|
'ZoomedPreviewImage',
|
267
267
|
],
|
268
|
+
'ls-l' => [
|
269
|
+
'FilePermissions',
|
270
|
+
'FileHardLinks',
|
271
|
+
'FileUserID',
|
272
|
+
'FileGroupID',
|
273
|
+
'FileSize#',
|
274
|
+
'FileModifyDate',
|
275
|
+
'FileName',
|
276
|
+
],
|
268
277
|
);
|
269
278
|
|
270
279
|
#------------------------------------------------------------------------------
|
@@ -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.41';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -71,8 +71,8 @@ sub PrintInvLensSpec($;$$);
|
|
71
71
|
'0.12' => 'Zeiss Loxia 35mm F2', # (firmware Ver.01)
|
72
72
|
1 => 'Sony LA-EA1 or Sigma MC-11 Adapter', # MC-11 with not-supported lenses
|
73
73
|
2 => 'Sony LA-EA2 Adapter',
|
74
|
-
3 => 'Sony LA-EA3 Adapter',
|
75
|
-
6 => 'Sony LA-EA4 Adapter',
|
74
|
+
3 => 'Sony LA-EA3 Adapter',
|
75
|
+
6 => 'Sony LA-EA4 Adapter',
|
76
76
|
7 => 'Sony LA-EA5 Adapter', #JR
|
77
77
|
# 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
|
78
78
|
44 => 'Metabones Canon EF Smart Adapter', #JR
|
@@ -80,6 +80,7 @@ sub PrintInvLensSpec($;$$);
|
|
80
80
|
184 => 'Metabones Canon EF Speed Booster Ultra', #JR ('Green' mode, LensMount reported as A-mount)
|
81
81
|
234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR (LensMount reported as A-mount)
|
82
82
|
239 => 'Metabones Canon EF Speed Booster', #JR
|
83
|
+
24593 => 'LA-EA4r MonsterAdapter',
|
83
84
|
# Sony VX product code: (http://www.mi-fo.de/forum/index.php?s=7df1c8d3b1cd675f2abf4f4442e19cf2&showtopic=35035&view=findpost&p=303746)
|
84
85
|
32784 => 'Sony E 16mm F2.8', # VX9100
|
85
86
|
32785 => 'Sony E 18-55mm F3.5-5.6 OSS', # VX9101
|
@@ -142,11 +143,17 @@ sub PrintInvLensSpec($;$$);
|
|
142
143
|
32852 => 'Sony FE 600mm F4 GM OSS', #IB
|
143
144
|
32853 => 'Sony E 16-55mm F2.8 G', #IB/JR
|
144
145
|
32854 => 'Sony E 70-350mm F4.5-6.3 G OSS', #IB/JR
|
146
|
+
32855 => 'Sony FE C 16-35mm T3.1 G', #JR (SELC1635G) (max aperture is 2.8)
|
145
147
|
32858 => 'Sony FE 35mm F1.8', #JR/IB
|
146
148
|
32859 => 'Sony FE 20mm F1.8 G', #IB/JR
|
147
149
|
32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
|
150
|
+
32862 => 'Sony FE 50mm F1.2 GM', #IB/JR
|
151
|
+
32863 => 'Sony FE 14mm F1.8 GM', #IB
|
148
152
|
32864 => 'Sony FE 28-60mm F4-5.6', #JR
|
149
153
|
32865 => 'Sony FE 35mm F1.4 GM', #IB/JR
|
154
|
+
32866 => 'Sony FE 24mm F2.8 G', #IB
|
155
|
+
32867 => 'Sony FE 40mm F2.5 G', #IB
|
156
|
+
32868 => 'Sony FE 50mm F2.5 G', #IB
|
150
157
|
|
151
158
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
152
159
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
@@ -187,7 +194,9 @@ sub PrintInvLensSpec($;$$);
|
|
187
194
|
49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
|
188
195
|
49464 => 'Tamron 70-300mm F4.5-6.3 Di III RXD', #JR (Model A047)
|
189
196
|
49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
|
190
|
-
49473 => 'Tokina atx-m 85mm F1.8 FE', #JR
|
197
|
+
49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
|
198
|
+
49473.1 => 'Viltrox 23mm F1.4 E', #JR
|
199
|
+
49473.2 => 'Viltrox 56mm F1.4 E', #JR
|
191
200
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
192
201
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
193
202
|
|
@@ -221,6 +230,8 @@ sub PrintInvLensSpec($;$$);
|
|
221
230
|
50522 => 'Sigma 105mm F2.8 DG DN MACRO | A', #JR (020)
|
222
231
|
50523 => 'Sigma 65mm F2 DG DN | C', #IB (020)
|
223
232
|
50524 => 'Sigma 35mm F2 DG DN | C', #IB (020)
|
233
|
+
50525 => 'Sigma 24mm F3.5 DG DN | C', #JR (021)
|
234
|
+
50526 => 'Sigma 28-70mm F2.8 DG DN | C', #JR (021)
|
224
235
|
|
225
236
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
226
237
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
@@ -623,9 +634,10 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
623
634
|
3 => 'Standard',
|
624
635
|
4 => 'Economy',
|
625
636
|
5 => 'Extra Fine',
|
626
|
-
6 => 'RAW + JPEG',
|
637
|
+
6 => 'RAW + JPEG/HEIF',
|
627
638
|
7 => 'Compressed RAW',
|
628
639
|
8 => 'Compressed RAW + JPEG',
|
640
|
+
9 => 'Light', #JR
|
629
641
|
0xffffffff => 'n/a', #PH (SLT-A57 panorama)
|
630
642
|
},
|
631
643
|
},
|
@@ -1118,7 +1130,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1118
1130
|
},
|
1119
1131
|
},{
|
1120
1132
|
Name => 'AFAreaModeSetting',
|
1121
|
-
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/',
|
1133
|
+
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/',
|
1122
1134
|
Notes => 'NEX, ILCE and some DSC models',
|
1123
1135
|
RawConv => '$$self{AFAreaILCE} = $val',
|
1124
1136
|
DataMember => 'AFAreaILCE',
|
@@ -1154,7 +1166,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1154
1166
|
# observed values in range (0 0) to (640 480), with center (320 240) often seen
|
1155
1167
|
# for NEX-5R/6, positions appear to be in an 11x9 grid
|
1156
1168
|
Name => 'FlexibleSpotPosition',
|
1157
|
-
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/',
|
1169
|
+
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/',
|
1158
1170
|
Writable => 'int16u',
|
1159
1171
|
Count => 2,
|
1160
1172
|
Notes => q{
|
@@ -1169,7 +1181,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1169
1181
|
# doesn't seem to apply to DSC models (always 0)
|
1170
1182
|
Name => 'AFPointSelected',
|
1171
1183
|
Condition => q{
|
1172
|
-
($$self{Model} =~ /^(SLT-|HV)/) or ($$self{Model} =~ /^ILCE
|
1184
|
+
($$self{Model} =~ /^(SLT-|HV)/) or ($$self{Model} =~ /^(ILCE-|ILME-)/ and
|
1173
1185
|
defined $$self{AFAreaILCE} and $$self{AFAreaILCE} == 4)
|
1174
1186
|
},
|
1175
1187
|
Notes => 'SLT models or ILCE with LA-EA2/EA4',
|
@@ -1247,7 +1259,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1247
1259
|
Name => 'AFPointSelected',
|
1248
1260
|
# non-zero only when AFAreaMode is 'Zone', and 'Expanded-Flexible-Spot' for ILCE-6300/7RM2/7SM2
|
1249
1261
|
# each Zone has 3x3 AF Areas --> 9 positions within 5x5 total Contrast AF Areas
|
1250
|
-
Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/',
|
1262
|
+
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-)/',
|
1251
1263
|
Notes => 'NEX and ILCE models',
|
1252
1264
|
Writable => 'int8u',
|
1253
1265
|
PrintConv => {
|
@@ -1404,6 +1416,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1404
1416
|
PrintConv => {
|
1405
1417
|
0 => 'Compressed RAW',
|
1406
1418
|
1 => 'Uncompressed RAW',
|
1419
|
+
2 => 'Lossless Compressed RAW', #JR (NC) seen for ILCE-1
|
1407
1420
|
65535 => 'n/a', # seen for ILCE-7SM3 JPEG-only
|
1408
1421
|
},
|
1409
1422
|
},
|
@@ -1451,13 +1464,15 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1451
1464
|
Count => 2,
|
1452
1465
|
PrintConv => {
|
1453
1466
|
'0 0' => 'n/a',
|
1454
|
-
'0 1' => 'Standard
|
1455
|
-
'0 2' => 'Fine
|
1456
|
-
'0 3' => 'Extra Fine
|
1467
|
+
'0 1' => 'Standard',
|
1468
|
+
'0 2' => 'Fine',
|
1469
|
+
'0 3' => 'Extra Fine',
|
1470
|
+
'0 4' => 'Light', #JR
|
1457
1471
|
'1 0' => 'RAW',
|
1458
|
-
'1 1' => 'RAW + Standard
|
1459
|
-
'1 2' => 'RAW + Fine
|
1460
|
-
'1 3' => 'RAW + Extra Fine
|
1472
|
+
'1 1' => 'RAW + Standard',
|
1473
|
+
'1 2' => 'RAW + Fine',
|
1474
|
+
'1 3' => 'RAW + Extra Fine',
|
1475
|
+
'1 4' => 'RAW + Light', #JR
|
1461
1476
|
},
|
1462
1477
|
},
|
1463
1478
|
0x202f => { #JR (ILCE-7RM3)
|
@@ -1503,13 +1518,57 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1503
1518
|
PrintConv => 'sprintf("%.8d",$val)',
|
1504
1519
|
PrintConvInv => '$val',
|
1505
1520
|
},
|
1506
|
-
# 0x2032 -
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1521
|
+
# 0x2032 - 0x2039: from July 2020 for ILCE-7SM3, ILCE-1, ILME-FX3 and newer
|
1522
|
+
0x2032 => {
|
1523
|
+
Name => 'Shadows',
|
1524
|
+
Writable => 'int32s',
|
1525
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
1526
|
+
PrintConvInv => '$val',
|
1527
|
+
},
|
1528
|
+
0x2033 => {
|
1529
|
+
Name => 'Highlights',
|
1530
|
+
Writable => 'int32s',
|
1531
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
1532
|
+
PrintConvInv => '$val',
|
1533
|
+
},
|
1534
|
+
0x2034 => {
|
1535
|
+
Name => 'Fade',
|
1536
|
+
Writable => 'int32s',
|
1537
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
1538
|
+
PrintConvInv => '$val',
|
1539
|
+
},
|
1540
|
+
0x2035 => {
|
1541
|
+
Name => 'SharpnessRange',
|
1542
|
+
Writable => 'int32s',
|
1543
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
1544
|
+
PrintConvInv => '$val',
|
1545
|
+
},
|
1546
|
+
0x2036 => {
|
1547
|
+
Name => 'Clarity',
|
1548
|
+
Writable => 'int32s',
|
1549
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
1550
|
+
PrintConvInv => '$val',
|
1551
|
+
},
|
1552
|
+
0x2037 => {
|
1553
|
+
Name => 'FocusFrameSize',
|
1554
|
+
Format => 'int16u',
|
1555
|
+
Count => '3',
|
1556
|
+
Notes => 'width and height of FocusFrame, centered on FocusLocation',
|
1557
|
+
PrintConv => q{
|
1558
|
+
my @a = split ' ', $val;
|
1559
|
+
return $a[2] ? sprintf('%3dx%3d', $a[0], $a[1]) : 'n/a';
|
1560
|
+
},
|
1561
|
+
PrintConvInv => '$val =~ /(\d+)x(\d+)/ ? "$1 $2 257" : "0 0 0"',
|
1562
|
+
},
|
1563
|
+
0x2039 => { #JR
|
1564
|
+
Name => 'JPEG-HEIFSwitch', # (name used in camera menus)
|
1565
|
+
Writable => 'int16u',
|
1566
|
+
PrintConv => {
|
1567
|
+
0 => 'JPEG',
|
1568
|
+
1 => 'HEIF',
|
1569
|
+
65535 => 'n/a',
|
1570
|
+
},
|
1571
|
+
},
|
1513
1572
|
0x3000 => {
|
1514
1573
|
Name => 'ShotInfo',
|
1515
1574
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
|
@@ -1538,7 +1597,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1538
1597
|
# from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
|
1539
1598
|
{
|
1540
1599
|
Name => 'Tag9050a',
|
1541
|
-
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
|
1600
|
+
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
|
1542
1601
|
SubDirectory => {
|
1543
1602
|
TagTable => 'Image::ExifTool::Sony::Tag9050a',
|
1544
1603
|
ByteOrder => 'LittleEndian',
|
@@ -1552,7 +1611,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1552
1611
|
},
|
1553
1612
|
},{
|
1554
1613
|
Name => 'Tag9050c',
|
1555
|
-
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
1614
|
+
Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)/',
|
1556
1615
|
SubDirectory => {
|
1557
1616
|
TagTable => 'Image::ExifTool::Sony::Tag9050c',
|
1558
1617
|
ByteOrder => 'LittleEndian',
|
@@ -1572,8 +1631,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1572
1631
|
# 0x24 (e) for ILCA-99M2,ILCE-5100/6300/6500/7M2/7RM2/7S/7SM2/QX1, DSC-HX80/HX90V/QX30/RX0/RX100M3/RX100M4/RX100M5/RX10M2/RX10M3/RX1RM2/WX500
|
1573
1632
|
# 0x26 (e) for ILCE-6100/6400/6600/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
|
1574
1633
|
# 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1
|
1575
|
-
# 0x31 (e) for ILCE-7SM3
|
1576
|
-
# first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28 respectively
|
1634
|
+
# 0x31 (e) for ILCE-1/7SM3, ILME-FX3
|
1635
|
+
# first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28, 106 respectively
|
1577
1636
|
{
|
1578
1637
|
Name => 'Tag9400a',
|
1579
1638
|
Condition => q{
|
@@ -1800,7 +1859,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1800
1859
|
},
|
1801
1860
|
0x940c => [{
|
1802
1861
|
Name => 'Tag940c',
|
1803
|
-
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|Lunar)\b/',
|
1862
|
+
Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|Lunar)\b/',
|
1804
1863
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag940c' },
|
1805
1864
|
},{
|
1806
1865
|
Name => 'Sony_0x940c',
|
@@ -1957,6 +2016,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1957
2016
|
380 => 'ZV-1', #JR
|
1958
2017
|
381 => 'ILCE-7C', #JR
|
1959
2018
|
383 => 'ILCE-7SM3',
|
2019
|
+
384 => 'ILCE-1', #PH
|
2020
|
+
385 => 'ILME-FX3', #JR
|
1960
2021
|
},
|
1961
2022
|
},
|
1962
2023
|
0xb020 => { #2
|
@@ -6067,6 +6128,10 @@ my %pictureProfile2010 = (
|
|
6067
6128
|
31 => 'Gamma S-Log3 (PP8 or PP9)', #14
|
6068
6129
|
33 => 'Gamma HLG2 (PP10)', #14
|
6069
6130
|
34 => 'Gamma HLG3', #IB
|
6131
|
+
37 => 'FL',
|
6132
|
+
38 => 'VV2',
|
6133
|
+
39 => 'IN',
|
6134
|
+
40 => 'SH',
|
6070
6135
|
},
|
6071
6136
|
);
|
6072
6137
|
my %isoSetting2010 = (
|
@@ -7788,7 +7853,7 @@ my %isoSetting2010 = (
|
|
7788
7853
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7789
7854
|
FORMAT => 'int8u',
|
7790
7855
|
NOTES => q{
|
7791
|
-
Valid from July 2020 for ILCE-7SM3.
|
7856
|
+
Valid from July 2020 for ILCE-1/7SM3, ILME-FX3.
|
7792
7857
|
},
|
7793
7858
|
WRITABLE => 1,
|
7794
7859
|
FIRST_ENTRY => 0,
|
@@ -7849,13 +7914,12 @@ my %isoSetting2010 = (
|
|
7849
7914
|
},
|
7850
7915
|
0x0050 => {
|
7851
7916
|
Name => 'ShutterCount2',
|
7852
|
-
Condition => '(
|
7917
|
+
Condition => '($$self{FlashFired} & 0x01) != 1',
|
7853
7918
|
Format => 'int32u',
|
7854
7919
|
RawConv => '$val & 0x00ffffff',
|
7855
7920
|
},
|
7856
7921
|
0x0066 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
7857
7922
|
Name => 'SonyExposureTime',
|
7858
|
-
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7859
7923
|
Format => 'int16u',
|
7860
7924
|
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
7861
7925
|
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
@@ -7864,7 +7928,6 @@ my %isoSetting2010 = (
|
|
7864
7928
|
},
|
7865
7929
|
0x0068 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
7866
7930
|
Name => 'SonyFNumber',
|
7867
|
-
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7868
7931
|
Format => 'int16u',
|
7869
7932
|
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
7870
7933
|
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
@@ -7873,11 +7936,17 @@ my %isoSetting2010 = (
|
|
7873
7936
|
},
|
7874
7937
|
0x006b => {
|
7875
7938
|
Name => 'ReleaseMode2',
|
7876
|
-
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7877
7939
|
%releaseMode2,
|
7878
7940
|
},
|
7879
7941
|
0x0088 => {
|
7880
7942
|
Name => 'InternalSerialNumber', #(NC)
|
7943
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3|ILME-FX3)/',
|
7944
|
+
Format => 'int8u[6]',
|
7945
|
+
PrintConv => 'unpack "H*", pack "C*", split " ", $val',
|
7946
|
+
},
|
7947
|
+
0x008a => {
|
7948
|
+
Name => 'InternalSerialNumber', #(NC)
|
7949
|
+
Condition => '$$self{Model} =~ /^(ILCE-1)/',
|
7881
7950
|
Format => 'int8u[6]',
|
7882
7951
|
PrintConv => 'unpack "H*", pack "C*", split " ", $val',
|
7883
7952
|
},
|
@@ -8052,7 +8121,7 @@ my %isoSetting2010 = (
|
|
8052
8121
|
NOTES => q{
|
8053
8122
|
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
|
8054
8123
|
RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/
|
8055
|
-
WX350/WX500, ILCE-7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
|
8124
|
+
WX350/WX500, ILCE-1/7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
|
8056
8125
|
5100/6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
|
8057
8126
|
},
|
8058
8127
|
FIRST_ENTRY => 0,
|
@@ -8107,25 +8176,35 @@ my %isoSetting2010 = (
|
|
8107
8176
|
8 => 'Rotate 270 CW',
|
8108
8177
|
},
|
8109
8178
|
},
|
8110
|
-
0x002a => {
|
8179
|
+
0x002a => [{
|
8111
8180
|
Name => 'Quality2',
|
8112
|
-
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
8181
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8113
8182
|
PrintConv => {
|
8114
8183
|
0 => 'JPEG',
|
8115
8184
|
1 => 'RAW',
|
8116
8185
|
2 => 'RAW + JPEG',
|
8117
8186
|
3 => 'JPEG + MPO', # 3D images
|
8118
8187
|
},
|
8119
|
-
},
|
8188
|
+
},{
|
8189
|
+
Name => 'Quality2',
|
8190
|
+
Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8191
|
+
PrintConv => {
|
8192
|
+
1 => 'JPEG',
|
8193
|
+
2 => 'RAW',
|
8194
|
+
3 => 'RAW + JPEG',
|
8195
|
+
4 => 'HEIF',
|
8196
|
+
6 => 'RAW + HEIF',
|
8197
|
+
},
|
8198
|
+
}],
|
8120
8199
|
0x0047 => {
|
8121
8200
|
Name => 'SonyImageHeight',
|
8122
|
-
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
8201
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8123
8202
|
Format => 'int16u',
|
8124
8203
|
PrintConv => '$val > 0 ? 8*$val : "n.a."',
|
8125
8204
|
},
|
8126
8205
|
0x0053 => {
|
8127
8206
|
Name => 'ModelReleaseYear',
|
8128
|
-
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
8207
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8129
8208
|
Format => 'int8u',
|
8130
8209
|
PrintConv => 'sprintf("20%.2d", $val)',
|
8131
8210
|
},
|
@@ -8144,7 +8223,7 @@ my %isoSetting2010 = (
|
|
8144
8223
|
0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
8145
8224
|
|
8146
8225
|
0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8147
|
-
0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401}
|
8226
|
+
0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(160|164)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8148
8227
|
0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8149
8228
|
0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8150
8229
|
0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
@@ -8785,7 +8864,7 @@ my %isoSetting2010 = (
|
|
8785
8864
|
FIRST_ENTRY => 0,
|
8786
8865
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
8787
8866
|
DATAMEMBER => [ 0x0008 ],
|
8788
|
-
NOTES => '
|
8867
|
+
NOTES => 'E-mount cameras only.',
|
8789
8868
|
|
8790
8869
|
# 0x0001 - 0 for all NEX and ILCE-3000/3500, 20 for all other ILCE (17 for ILCE samples from Sony.net)
|
8791
8870
|
# 0x0008 - LensMount, but different values from Tag9405-0x0105 and Tag9050-0x0604.
|
@@ -8902,6 +8981,7 @@ my %isoSetting2010 = (
|
|
8902
8981
|
# 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
|
8903
8982
|
# 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
|
8904
8983
|
# 9 . . . for ILCE-7SM3
|
8984
|
+
# 11 . . . for ILCE-1
|
8905
8985
|
# 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
|
8906
8986
|
# 2 0 0 0 seen for a few NEX-5N images
|
8907
8987
|
# 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
|
@@ -9411,7 +9491,7 @@ my %isoSetting2010 = (
|
|
9411
9491
|
WRITE_PROC => \&WriteEnciphered,
|
9412
9492
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
9413
9493
|
FORMAT => 'int8u',
|
9414
|
-
NOTES => 'Valid for the ILCE-7SM3.',
|
9494
|
+
NOTES => 'Valid for the ILCE-1/7SM3, ILME-FX3.',
|
9415
9495
|
FIRST_ENTRY => 0,
|
9416
9496
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9417
9497
|
0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
|
@@ -10038,17 +10118,34 @@ my %isoSetting2010 = (
|
|
10038
10118
|
0x3210 => { Name => 'Sony_rtmd_0x3210', Format => 'int8u', %hidUnk },
|
10039
10119
|
0x3219 => { Name => 'Sony_rtmd_0x3219', Format => 'int8u', %hidUnk },
|
10040
10120
|
0x321a => { Name => 'Sony_rtmd_0x321a', Format => 'int8u', %hidUnk },
|
10041
|
-
0x8000 => {
|
10121
|
+
0x8000 => { #forum12218
|
10122
|
+
Name => 'FNumber',
|
10123
|
+
Format => 'int16u',
|
10124
|
+
ValueConv => '2 ** (8-$val/8192)',
|
10125
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
10126
|
+
},
|
10042
10127
|
0x8001 => { Name => 'Sony_rtmd_0x8001', Format => 'int16u', %hidUnk },
|
10043
10128
|
# 0x8100 - 16 bytes starting with 0x060e2b340401
|
10044
10129
|
0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
|
10045
10130
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
|
10046
10131
|
0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1"
|
10047
|
-
0x8109 => {
|
10048
|
-
|
10049
|
-
|
10050
|
-
|
10051
|
-
|
10132
|
+
0x8109 => { #forum12218
|
10133
|
+
Name => 'ExposureTime',
|
10134
|
+
Format => 'rational64u',
|
10135
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
10136
|
+
},
|
10137
|
+
0x810a => { #PH (NC, based on samples from forum12218)
|
10138
|
+
Name => 'MasterGainAdjustment',
|
10139
|
+
Format => 'int16u',
|
10140
|
+
ValueConv => '$val / 100',
|
10141
|
+
PrintConv => 'sprintf("%.2f dB", $val)',
|
10142
|
+
},
|
10143
|
+
0x810b => { Name => 'ISO', Format => 'int16u' }, #forum12218
|
10144
|
+
0x810c => { #PH (NC, based on samples from forum12218)
|
10145
|
+
Name => 'ElectricalExtenderMagnification',
|
10146
|
+
Format => 'int16u',
|
10147
|
+
},
|
10148
|
+
0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 0,1
|
10052
10149
|
0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100
|
10053
10150
|
# 0x8300 - container for other tags in this format
|
10054
10151
|
0x8500 => {
|
@@ -10127,9 +10224,20 @@ my %isoSetting2010 = (
|
|
10127
10224
|
},
|
10128
10225
|
0xe000 => { Name => 'Sony_rtmd_0xe000', Format => 'int8u', %hidUnk }, # (16 bytes)
|
10129
10226
|
0xe300 => { Name => 'Sony_rtmd_0xe300', Format => 'int8u', %hidUnk }, # seen: 0,1
|
10130
|
-
0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100
|
10227
|
+
0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100,1600
|
10131
10228
|
0xe302 => { Name => 'Sony_rtmd_0xe302', Format => 'int8u', %hidUnk }, # seen: 1
|
10132
|
-
0xe303 => {
|
10229
|
+
0xe303 => { #forum12218
|
10230
|
+
Name => 'WhiteBalance',
|
10231
|
+
Format => 'int8u',
|
10232
|
+
PrintConv => {
|
10233
|
+
1 => 'Incandescent',
|
10234
|
+
2 => 'Fluorescent',
|
10235
|
+
4 => 'Daylight',
|
10236
|
+
5 => 'Cloudy',
|
10237
|
+
6 => 'Custom', # ("Shade" uses this value too)
|
10238
|
+
255 => 'Preset',
|
10239
|
+
},
|
10240
|
+
},
|
10133
10241
|
0xe304 => {
|
10134
10242
|
Name => 'DateTime',
|
10135
10243
|
Groups => { 2 => 'Time' },
|