exiftool_vendored 13.16.0 → 13.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +28 -0
- data/bin/MANIFEST +2 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -1
- data/bin/exiftool +13 -9
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
- data/bin/lib/Image/ExifTool/Canon.pm +3 -2
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +58 -48
- data/bin/lib/Image/ExifTool/JPEG.pm +7 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +116 -192
- data/bin/lib/Image/ExifTool/NikonCustom.pm +4 -4
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +257 -252
- data/bin/lib/Image/ExifTool/Samsung.pm +4 -0
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +41 -2
- data/bin/lib/Image/ExifTool/TagNames.pod +10770 -10696
- data/bin/lib/Image/ExifTool/Trailer.pm +318 -0
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -1
- data/bin/lib/Image/ExifTool/Writer.pl +5 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +5 -2
- data/bin/lib/Image/ExifTool.pm +141 -75
- data/bin/lib/Image/ExifTool.pod +38 -38
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -3
- data/bin/lib/Image/ExifTool/Vivo.pm +0 -124
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
48
48
|
use Image::ExifTool::Exif;
|
49
49
|
use Image::ExifTool::GPS;
|
50
50
|
|
51
|
-
$VERSION = '3.
|
51
|
+
$VERSION = '3.12';
|
52
52
|
|
53
53
|
sub ProcessMOV($$;$);
|
54
54
|
sub ProcessKeys($$$);
|
@@ -510,7 +510,7 @@ my %hashBox = ( vide => { %eeStd }, soun => { %eeStd } );
|
|
510
510
|
# used, but others have been checked against all available sample files and may be
|
511
511
|
# useful in the future if the names are used for different boxes on other locations)
|
512
512
|
my %eeBox = (
|
513
|
-
# (note: vide is only processed if specific atoms exist in the
|
513
|
+
# (note: vide is only processed if specific atoms exist in the VisualSampleDesc)
|
514
514
|
vide => { %eeStd, JPEG => 'stsd' },
|
515
515
|
text => { %eeStd },
|
516
516
|
meta => { %eeStd },
|
@@ -1005,7 +1005,7 @@ my %userDefined = (
|
|
1005
1005
|
NOTES => 'Tags used in QTIF QuickTime Image Files.',
|
1006
1006
|
idsc => {
|
1007
1007
|
Name => 'ImageDescription',
|
1008
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::
|
1008
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::VisualSampleDesc' },
|
1009
1009
|
},
|
1010
1010
|
idat => {
|
1011
1011
|
Name => 'ImageData',
|
@@ -1017,158 +1017,6 @@ my %userDefined = (
|
|
1017
1017
|
},
|
1018
1018
|
);
|
1019
1019
|
|
1020
|
-
# image description data block
|
1021
|
-
%Image::ExifTool::QuickTime::ImageDesc = (
|
1022
|
-
PROCESS_PROC => \&ProcessHybrid,
|
1023
|
-
VARS => { ID_LABEL => 'ID/Index' },
|
1024
|
-
GROUPS => { 2 => 'Image' },
|
1025
|
-
FORMAT => 'int16u',
|
1026
|
-
2 => {
|
1027
|
-
Name => 'CompressorID',
|
1028
|
-
Format => 'string[4]',
|
1029
|
-
# not very useful since this isn't a complete list and name is given below
|
1030
|
-
# # ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
|
1031
|
-
# PrintConv => {
|
1032
|
-
# cvid => 'Cinepak',
|
1033
|
-
# jpeg => 'JPEG',
|
1034
|
-
# 'smc '=> 'Graphics',
|
1035
|
-
# 'rle '=> 'Animation',
|
1036
|
-
# rpza => 'Apple Video',
|
1037
|
-
# kpcd => 'Kodak Photo CD',
|
1038
|
-
# 'png '=> 'Portable Network Graphics',
|
1039
|
-
# mjpa => 'Motion-JPEG (format A)',
|
1040
|
-
# mjpb => 'Motion-JPEG (format B)',
|
1041
|
-
# SVQ1 => 'Sorenson video, version 1',
|
1042
|
-
# SVQ3 => 'Sorenson video, version 3',
|
1043
|
-
# mp4v => 'MPEG-4 video',
|
1044
|
-
# 'dvc '=> 'NTSC DV-25 video',
|
1045
|
-
# dvcp => 'PAL DV-25 video',
|
1046
|
-
# 'gif '=> 'Compuserve Graphics Interchange Format',
|
1047
|
-
# h263 => 'H.263 video',
|
1048
|
-
# tiff => 'Tagged Image File Format',
|
1049
|
-
# 'raw '=> 'Uncompressed RGB',
|
1050
|
-
# '2vuY'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (2vuY)",
|
1051
|
-
# 'yuv2'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (yuv2)",
|
1052
|
-
# v308 => "Uncompressed Y'CbCr, 8-bit 4:4:4",
|
1053
|
-
# v408 => "Uncompressed Y'CbCr, 8-bit 4:4:4:4",
|
1054
|
-
# v216 => "Uncompressed Y'CbCr, 10, 12, 14, or 16-bit 4:2:2",
|
1055
|
-
# v410 => "Uncompressed Y'CbCr, 10-bit 4:4:4",
|
1056
|
-
# v210 => "Uncompressed Y'CbCr, 10-bit 4:2:2",
|
1057
|
-
# hvc1 => 'HEVC', #PH
|
1058
|
-
# },
|
1059
|
-
},
|
1060
|
-
10 => {
|
1061
|
-
Name => 'VendorID',
|
1062
|
-
Format => 'string[4]',
|
1063
|
-
RawConv => 'length $val ? $val : undef',
|
1064
|
-
PrintConv => \%vendorID,
|
1065
|
-
SeparateTable => 'VendorID',
|
1066
|
-
},
|
1067
|
-
# 14 - ("Quality" in QuickTime docs) ??
|
1068
|
-
16 => 'SourceImageWidth',
|
1069
|
-
17 => 'SourceImageHeight',
|
1070
|
-
18 => { Name => 'XResolution', Format => 'fixed32u' },
|
1071
|
-
20 => { Name => 'YResolution', Format => 'fixed32u' },
|
1072
|
-
# 24 => 'FrameCount', # always 1 (what good is this?)
|
1073
|
-
25 => {
|
1074
|
-
Name => 'CompressorName',
|
1075
|
-
Format => 'string[32]',
|
1076
|
-
# (sometimes this is a Pascal string, and sometimes it is a C string)
|
1077
|
-
RawConv => q{
|
1078
|
-
$val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val);
|
1079
|
-
length $val ? $val : undef;
|
1080
|
-
},
|
1081
|
-
},
|
1082
|
-
41 => 'BitDepth',
|
1083
|
-
#
|
1084
|
-
# Observed offsets for child atoms of various CompressorID types:
|
1085
|
-
#
|
1086
|
-
# CompressorID Offset Child atoms
|
1087
|
-
# ----------- ------ ----------------
|
1088
|
-
# avc1 86 avcC, btrt, colr, pasp, fiel, clap, svcC
|
1089
|
-
# mp4v 86 esds, pasp
|
1090
|
-
# s263 86 d263
|
1091
|
-
#
|
1092
|
-
btrt => {
|
1093
|
-
Name => 'BitrateInfo',
|
1094
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
1095
|
-
},
|
1096
|
-
# Reference for fiel, colr, pasp, clap:
|
1097
|
-
# https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9
|
1098
|
-
fiel => {
|
1099
|
-
Name => 'VideoFieldOrder',
|
1100
|
-
ValueConv => 'join(" ", unpack("C*",$val))',
|
1101
|
-
PrintConv => [{
|
1102
|
-
1 => 'Progressive',
|
1103
|
-
2 => '2:1 Interlaced',
|
1104
|
-
}],
|
1105
|
-
},
|
1106
|
-
colr => {
|
1107
|
-
Name => 'ColorRepresentation',
|
1108
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ColorRep' },
|
1109
|
-
},
|
1110
|
-
pasp => {
|
1111
|
-
Name => 'PixelAspectRatio',
|
1112
|
-
ValueConv => 'join(":", unpack("N*",$val))',
|
1113
|
-
},
|
1114
|
-
clap => {
|
1115
|
-
Name => 'CleanAperture',
|
1116
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CleanAperture' },
|
1117
|
-
},
|
1118
|
-
avcC => {
|
1119
|
-
# (see http://thompsonng.blogspot.ca/2010/11/mp4-file-format-part-2.html)
|
1120
|
-
Name => 'AVCConfiguration',
|
1121
|
-
Unknown => 1,
|
1122
|
-
Binary => 1,
|
1123
|
-
},
|
1124
|
-
JPEG => { # (found in CR3 images; used as a flag to identify JpgFromRaw 'vide' stream)
|
1125
|
-
Name => 'JPEGInfo',
|
1126
|
-
# (4 bytes all zero)
|
1127
|
-
Unknown => 1,
|
1128
|
-
Binary => 1,
|
1129
|
-
},
|
1130
|
-
# hvcC - HEVC configuration
|
1131
|
-
# svcC - 7 bytes: 00 00 00 00 ff e0 00
|
1132
|
-
# esds - elementary stream descriptor
|
1133
|
-
# d263
|
1134
|
-
gama => { Name => 'Gamma', Format => 'fixed32u' },
|
1135
|
-
# mjqt - default quantization table for MJPEG
|
1136
|
-
# mjht - default Huffman table for MJPEG
|
1137
|
-
# csgm ? (seen in hevc video)
|
1138
|
-
CMP1 => { # Canon CR3
|
1139
|
-
Name => 'CMP1',
|
1140
|
-
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CMP1' },
|
1141
|
-
},
|
1142
|
-
CDI1 => { # Canon CR3
|
1143
|
-
Name => 'CDI1',
|
1144
|
-
SubDirectory => {
|
1145
|
-
TagTable => 'Image::ExifTool::Canon::CDI1',
|
1146
|
-
Start => 4,
|
1147
|
-
},
|
1148
|
-
},
|
1149
|
-
# JPEG - 4 bytes all 0 (Canon CR3)
|
1150
|
-
# free - (Canon CR3)
|
1151
|
-
#
|
1152
|
-
# spherical video v2 stuff (untested)
|
1153
|
-
#
|
1154
|
-
st3d => {
|
1155
|
-
Name => 'Stereoscopic3D',
|
1156
|
-
Format => 'int8u',
|
1157
|
-
ValueConv => '$val =~ s/.* //; $val', # (remove leading version/flags bytes?)
|
1158
|
-
PrintConv => {
|
1159
|
-
0 => 'Monoscopic',
|
1160
|
-
1 => 'Stereoscopic Top-Bottom',
|
1161
|
-
2 => 'Stereoscopic Left-Right',
|
1162
|
-
3 => 'Stereoscopic Stereo-Custom',
|
1163
|
-
4 => 'Stereoscopic Right-Left',
|
1164
|
-
},
|
1165
|
-
},
|
1166
|
-
sv3d => {
|
1167
|
-
Name => 'SphericalVideo',
|
1168
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::sv3d' },
|
1169
|
-
},
|
1170
|
-
);
|
1171
|
-
|
1172
1020
|
# 'sv3d' atom information (ref https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md)
|
1173
1021
|
%Image::ExifTool::QuickTime::sv3d = (
|
1174
1022
|
PROCESS_PROC => \&ProcessMOV,
|
@@ -2227,7 +2075,7 @@ my %userDefined = (
|
|
2227
2075
|
ValueConvInv => 'pack("H*",$val)',
|
2228
2076
|
},
|
2229
2077
|
# SETT? 12 bytes (Hero4)
|
2230
|
-
|
2078
|
+
MUID => { Name => 'MediaUID', ValueConv => 'unpack("H*", $val)' },
|
2231
2079
|
# HMMT? 404 bytes (Hero4, all zero)
|
2232
2080
|
# BCID? 26 bytes (Hero5, all zero), 36 bytes GoPro Max
|
2233
2081
|
# GUMI? 16 bytes (Hero5)
|
@@ -3001,7 +2849,9 @@ my %userDefined = (
|
|
3001
2849
|
colr => [{
|
3002
2850
|
Name => 'ICC_Profile',
|
3003
2851
|
Condition => '$$valPt =~ /^(prof|rICC)/',
|
3004
|
-
|
2852
|
+
# (don't do this because Apple Preview won't display an HEIC with a 0-length profile)
|
2853
|
+
# Permanent => 0, # (in QuickTime, this writes a zero-length box instead of deleting)
|
2854
|
+
Permanent => 1,
|
3005
2855
|
SubDirectory => {
|
3006
2856
|
TagTable => 'Image::ExifTool::ICC_Profile::Main',
|
3007
2857
|
Start => 4,
|
@@ -7324,10 +7174,10 @@ my %userDefined = (
|
|
7324
7174
|
ProcessProc => \&ProcessSampleDesc,
|
7325
7175
|
},
|
7326
7176
|
},{
|
7327
|
-
Name => '
|
7177
|
+
Name => 'VisualSampleDesc',
|
7328
7178
|
Condition => '$$self{HandlerType} and $$self{HandlerType} eq "vide"',
|
7329
7179
|
SubDirectory => {
|
7330
|
-
TagTable => 'Image::ExifTool::QuickTime::
|
7180
|
+
TagTable => 'Image::ExifTool::QuickTime::VisualSampleDesc',
|
7331
7181
|
ProcessProc => \&ProcessSampleDesc,
|
7332
7182
|
},
|
7333
7183
|
},{
|
@@ -7463,6 +7313,7 @@ my %userDefined = (
|
|
7463
7313
|
# see this link for print conversions (not complete):
|
7464
7314
|
# https://github.com/yannickcr/brooser/blob/master/php/librairies/getid3/module.audio-video.quicktime.php
|
7465
7315
|
},
|
7316
|
+
# 14 - int16u DataReferenceIndex
|
7466
7317
|
20 => { #PH
|
7467
7318
|
Name => 'AudioVendorID',
|
7468
7319
|
Condition => '$$self{AudioFormat} ne "mp4s"',
|
@@ -7527,6 +7378,252 @@ my %userDefined = (
|
|
7527
7378
|
# dapa - ? 203 bytes
|
7528
7379
|
);
|
7529
7380
|
|
7381
|
+
# video and image sample description data block
|
7382
|
+
%Image::ExifTool::QuickTime::VisualSampleDesc = (
|
7383
|
+
PROCESS_PROC => \&ProcessHybrid,
|
7384
|
+
VARS => { ID_LABEL => 'ID/Index' },
|
7385
|
+
GROUPS => { 2 => 'Image' },
|
7386
|
+
FORMAT => 'int16u',
|
7387
|
+
2 => {
|
7388
|
+
Name => 'CompressorID',
|
7389
|
+
Format => 'string[4]',
|
7390
|
+
# not very useful since this isn't a complete list and name is given below
|
7391
|
+
# # ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
|
7392
|
+
# PrintConv => {
|
7393
|
+
# cvid => 'Cinepak',
|
7394
|
+
# jpeg => 'JPEG',
|
7395
|
+
# 'smc '=> 'Graphics',
|
7396
|
+
# 'rle '=> 'Animation',
|
7397
|
+
# rpza => 'Apple Video',
|
7398
|
+
# kpcd => 'Kodak Photo CD',
|
7399
|
+
# 'png '=> 'Portable Network Graphics',
|
7400
|
+
# mjpa => 'Motion-JPEG (format A)',
|
7401
|
+
# mjpb => 'Motion-JPEG (format B)',
|
7402
|
+
# SVQ1 => 'Sorenson video, version 1',
|
7403
|
+
# SVQ3 => 'Sorenson video, version 3',
|
7404
|
+
# mp4v => 'MPEG-4 video',
|
7405
|
+
# 'dvc '=> 'NTSC DV-25 video',
|
7406
|
+
# dvcp => 'PAL DV-25 video',
|
7407
|
+
# 'gif '=> 'Compuserve Graphics Interchange Format',
|
7408
|
+
# h263 => 'H.263 video',
|
7409
|
+
# tiff => 'Tagged Image File Format',
|
7410
|
+
# 'raw '=> 'Uncompressed RGB',
|
7411
|
+
# '2vuY'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (2vuY)",
|
7412
|
+
# 'yuv2'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (yuv2)",
|
7413
|
+
# v308 => "Uncompressed Y'CbCr, 8-bit 4:4:4",
|
7414
|
+
# v408 => "Uncompressed Y'CbCr, 8-bit 4:4:4:4",
|
7415
|
+
# v216 => "Uncompressed Y'CbCr, 10, 12, 14, or 16-bit 4:2:2",
|
7416
|
+
# v410 => "Uncompressed Y'CbCr, 10-bit 4:4:4",
|
7417
|
+
# v210 => "Uncompressed Y'CbCr, 10-bit 4:2:2",
|
7418
|
+
# hvc1 => 'HEVC', #PH
|
7419
|
+
# },
|
7420
|
+
},
|
7421
|
+
# 7 - int16u DataReferenceIndex
|
7422
|
+
10 => {
|
7423
|
+
Name => 'VendorID',
|
7424
|
+
Format => 'string[4]',
|
7425
|
+
RawConv => 'length $val ? $val : undef',
|
7426
|
+
PrintConv => \%vendorID,
|
7427
|
+
SeparateTable => 'VendorID',
|
7428
|
+
},
|
7429
|
+
# 14 - ("Quality" in QuickTime docs) ??
|
7430
|
+
16 => 'SourceImageWidth',
|
7431
|
+
17 => 'SourceImageHeight',
|
7432
|
+
18 => { Name => 'XResolution', Format => 'fixed32u' },
|
7433
|
+
20 => { Name => 'YResolution', Format => 'fixed32u' },
|
7434
|
+
# 24 => 'FrameCount', # always 1 (what good is this?)
|
7435
|
+
25 => {
|
7436
|
+
Name => 'CompressorName',
|
7437
|
+
Format => 'string[32]',
|
7438
|
+
# (sometimes this is a Pascal string, and sometimes it is a C string)
|
7439
|
+
RawConv => q{
|
7440
|
+
$val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val);
|
7441
|
+
length $val ? $val : undef;
|
7442
|
+
},
|
7443
|
+
},
|
7444
|
+
41 => 'BitDepth',
|
7445
|
+
#
|
7446
|
+
# Observed offsets for child atoms of various CompressorID types:
|
7447
|
+
#
|
7448
|
+
# CompressorID Offset Child atoms
|
7449
|
+
# ----------- ------ ----------------
|
7450
|
+
# avc1 86 avcC, btrt, colr, pasp, fiel, clap, svcC
|
7451
|
+
# mp4v 86 esds, pasp
|
7452
|
+
# s263 86 d263
|
7453
|
+
#
|
7454
|
+
btrt => {
|
7455
|
+
Name => 'BitrateInfo',
|
7456
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
7457
|
+
},
|
7458
|
+
# Reference for fiel, colr, pasp, clap:
|
7459
|
+
# https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9
|
7460
|
+
fiel => {
|
7461
|
+
Name => 'VideoFieldOrder',
|
7462
|
+
ValueConv => 'join(" ", unpack("C*",$val))',
|
7463
|
+
PrintConv => [{
|
7464
|
+
1 => 'Progressive',
|
7465
|
+
2 => '2:1 Interlaced',
|
7466
|
+
}],
|
7467
|
+
},
|
7468
|
+
colr => {
|
7469
|
+
Name => 'ColorRepresentation',
|
7470
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ColorRep' },
|
7471
|
+
},
|
7472
|
+
pasp => {
|
7473
|
+
Name => 'PixelAspectRatio',
|
7474
|
+
ValueConv => 'join(":", unpack("N*",$val))',
|
7475
|
+
},
|
7476
|
+
clap => {
|
7477
|
+
Name => 'CleanAperture',
|
7478
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CleanAperture' },
|
7479
|
+
},
|
7480
|
+
avcC => {
|
7481
|
+
# (see http://thompsonng.blogspot.ca/2010/11/mp4-file-format-part-2.html)
|
7482
|
+
Name => 'AVCConfiguration',
|
7483
|
+
Unknown => 1,
|
7484
|
+
Binary => 1,
|
7485
|
+
},
|
7486
|
+
JPEG => { # (found in CR3 images; used as a flag to identify JpgFromRaw 'vide' stream)
|
7487
|
+
Name => 'JPEGInfo',
|
7488
|
+
# (4 bytes all zero)
|
7489
|
+
Unknown => 1,
|
7490
|
+
Binary => 1,
|
7491
|
+
},
|
7492
|
+
# hvcC - HEVC configuration
|
7493
|
+
# svcC - 7 bytes: 00 00 00 00 ff e0 00
|
7494
|
+
# esds - elementary stream descriptor
|
7495
|
+
# d263
|
7496
|
+
gama => { Name => 'Gamma', Format => 'fixed32u' },
|
7497
|
+
# mjqt - default quantization table for MJPEG
|
7498
|
+
# mjht - default Huffman table for MJPEG
|
7499
|
+
# csgm ? (seen in hevc video)
|
7500
|
+
CMP1 => { # Canon CR3
|
7501
|
+
Name => 'CMP1',
|
7502
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CMP1' },
|
7503
|
+
},
|
7504
|
+
CDI1 => { # Canon CR3
|
7505
|
+
Name => 'CDI1',
|
7506
|
+
SubDirectory => {
|
7507
|
+
TagTable => 'Image::ExifTool::Canon::CDI1',
|
7508
|
+
Start => 4,
|
7509
|
+
},
|
7510
|
+
},
|
7511
|
+
# JPEG - 4 bytes all 0 (Canon CR3)
|
7512
|
+
# free - (Canon CR3)
|
7513
|
+
#
|
7514
|
+
# spherical video v2 stuff (untested)
|
7515
|
+
#
|
7516
|
+
st3d => {
|
7517
|
+
Name => 'Stereoscopic3D',
|
7518
|
+
Format => 'int8u',
|
7519
|
+
ValueConv => '$val =~ s/.* //; $val', # (remove leading version/flags bytes?)
|
7520
|
+
PrintConv => {
|
7521
|
+
0 => 'Monoscopic',
|
7522
|
+
1 => 'Stereoscopic Top-Bottom',
|
7523
|
+
2 => 'Stereoscopic Left-Right',
|
7524
|
+
3 => 'Stereoscopic Stereo-Custom',
|
7525
|
+
4 => 'Stereoscopic Right-Left',
|
7526
|
+
},
|
7527
|
+
},
|
7528
|
+
sv3d => {
|
7529
|
+
Name => 'SphericalVideo',
|
7530
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::sv3d' },
|
7531
|
+
},
|
7532
|
+
);
|
7533
|
+
|
7534
|
+
# MP4 hint sample description box (ref 5)
|
7535
|
+
# (ref https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW1)
|
7536
|
+
%Image::ExifTool::QuickTime::HintSampleDesc = (
|
7537
|
+
PROCESS_PROC => \&ProcessHybrid,
|
7538
|
+
VARS => { ID_LABEL => 'ID/Index' },
|
7539
|
+
NOTES => 'MP4 hint sample description.',
|
7540
|
+
4 => { Name => 'HintFormat', Format => 'undef[4]' },
|
7541
|
+
# 14 - int16u DataReferenceIndex
|
7542
|
+
16 => { Name => 'HintTrackVersion', Format => 'int16u' },
|
7543
|
+
# 18 - int16u LastCompatibleHintTrackVersion
|
7544
|
+
20 => { Name => 'MaxPacketSize', Format => 'int32u' },
|
7545
|
+
#
|
7546
|
+
# Observed offsets for child atoms of various HintFormat types:
|
7547
|
+
#
|
7548
|
+
# HintFormat Offset Child atoms
|
7549
|
+
# ----------- ------ ----------------
|
7550
|
+
# "rtp " 24 tims
|
7551
|
+
#
|
7552
|
+
tims => { Name => 'RTPTimeScale', Format => 'int32u' },
|
7553
|
+
tsro => { Name => 'TimestampRandomOffset', Format => 'int32u' },
|
7554
|
+
snro => { Name => 'SequenceNumberRandomOffset', Format => 'int32u' },
|
7555
|
+
);
|
7556
|
+
|
7557
|
+
# MP4 metadata sample description box
|
7558
|
+
%Image::ExifTool::QuickTime::MetaSampleDesc = (
|
7559
|
+
PROCESS_PROC => \&ProcessHybrid,
|
7560
|
+
NOTES => 'MP4 metadata sample description.',
|
7561
|
+
4 => {
|
7562
|
+
Name => 'MetaFormat',
|
7563
|
+
Format => 'undef[4]',
|
7564
|
+
RawConv => '$$self{MetaFormat} = $val',
|
7565
|
+
},
|
7566
|
+
8 => { # starts at 8 for MetaFormat eq 'camm', and 17 for 'mett'
|
7567
|
+
Name => 'MetaType',
|
7568
|
+
Format => 'undef[$size-8]',
|
7569
|
+
# may start at various locations!
|
7570
|
+
RawConv => '$$self{MetaType} = ($val=~/(application[^\0]+)/ ? $1 : undef)',
|
7571
|
+
},
|
7572
|
+
#
|
7573
|
+
# Observed offsets for child atoms of various MetaFormat types:
|
7574
|
+
#
|
7575
|
+
# MetaFormat Offset Child atoms
|
7576
|
+
# ----------- ------ ----------------
|
7577
|
+
# mebx 24 keys,btrt,lidp,lidl
|
7578
|
+
# fdsc - -
|
7579
|
+
# gpmd - -
|
7580
|
+
# rtmd - -
|
7581
|
+
# CTMD - -
|
7582
|
+
#
|
7583
|
+
'keys' => { #PH (iPhone7+ hevc)
|
7584
|
+
Name => 'Keys',
|
7585
|
+
SubDirectory => {
|
7586
|
+
TagTable => 'Image::ExifTool::QuickTime::Keys',
|
7587
|
+
ProcessProc => \&ProcessMetaKeys,
|
7588
|
+
},
|
7589
|
+
},
|
7590
|
+
btrt => {
|
7591
|
+
Name => 'BitrateInfo',
|
7592
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
7593
|
+
},
|
7594
|
+
);
|
7595
|
+
|
7596
|
+
# MP4 generic sample description box
|
7597
|
+
%Image::ExifTool::QuickTime::OtherSampleDesc = (
|
7598
|
+
PROCESS_PROC => \&ProcessHybrid,
|
7599
|
+
4 => {
|
7600
|
+
Name => 'OtherFormat',
|
7601
|
+
Format => 'undef[4]',
|
7602
|
+
RawConv => '$$self{MetaFormat} = $val', # (yes, use MetaFormat for this too)
|
7603
|
+
},
|
7604
|
+
24 => {
|
7605
|
+
Condition => '$$self{MetaFormat} eq "tmcd"',
|
7606
|
+
Name => 'PlaybackFrameRate', # (may differ from recorded FrameRate eg. ../pics/FujiFilmX-H1.mov)
|
7607
|
+
Format => 'rational64u',
|
7608
|
+
},
|
7609
|
+
#
|
7610
|
+
# Observed offsets for child atoms of various OtherFormat types:
|
7611
|
+
#
|
7612
|
+
# OtherFormat Offset Child atoms
|
7613
|
+
# ----------- ------ ----------------
|
7614
|
+
# avc1 86 avcC
|
7615
|
+
# mp4a 36 esds
|
7616
|
+
# mp4s 16 esds
|
7617
|
+
# tmcd 34 name
|
7618
|
+
# data - -
|
7619
|
+
#
|
7620
|
+
ftab => { Name => 'FontTable', Format => 'undef', ValueConv => 'substr($val, 5)' },
|
7621
|
+
name => { Name => 'OtherName', Format => 'undef', ValueConv => 'substr($val, 4)' },
|
7622
|
+
mrlh => { Name => 'MarlinHeader', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlh' } },
|
7623
|
+
mrlv => { Name => 'MarlinValues', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlv' } },
|
7624
|
+
mrld => { Name => 'MarlinDictionary',SubDirectory => { TagTable => 'Image::ExifTool::GM::mrld' } },
|
7625
|
+
);
|
7626
|
+
|
7530
7627
|
# AMR decode config box (ref 3)
|
7531
7628
|
%Image::ExifTool::QuickTime::DecodeConfig = (
|
7532
7629
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
@@ -7950,99 +8047,6 @@ my %userDefined = (
|
|
7950
8047
|
# hi32 - seen "00 00 00 04"
|
7951
8048
|
);
|
7952
8049
|
|
7953
|
-
# MP4 hint sample description box (ref 5)
|
7954
|
-
# (ref https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW1)
|
7955
|
-
%Image::ExifTool::QuickTime::HintSampleDesc = (
|
7956
|
-
PROCESS_PROC => \&ProcessHybrid,
|
7957
|
-
VARS => { ID_LABEL => 'ID/Index' },
|
7958
|
-
NOTES => 'MP4 hint sample description.',
|
7959
|
-
4 => { Name => 'HintFormat', Format => 'undef[4]' },
|
7960
|
-
# 14 - int16u DataReferenceIndex
|
7961
|
-
16 => { Name => 'HintTrackVersion', Format => 'int16u' },
|
7962
|
-
# 18 - int16u LastCompatibleHintTrackVersion
|
7963
|
-
20 => { Name => 'MaxPacketSize', Format => 'int32u' },
|
7964
|
-
#
|
7965
|
-
# Observed offsets for child atoms of various HintFormat types:
|
7966
|
-
#
|
7967
|
-
# HintFormat Offset Child atoms
|
7968
|
-
# ----------- ------ ----------------
|
7969
|
-
# "rtp " 24 tims
|
7970
|
-
#
|
7971
|
-
tims => { Name => 'RTPTimeScale', Format => 'int32u' },
|
7972
|
-
tsro => { Name => 'TimestampRandomOffset', Format => 'int32u' },
|
7973
|
-
snro => { Name => 'SequenceNumberRandomOffset', Format => 'int32u' },
|
7974
|
-
);
|
7975
|
-
|
7976
|
-
# MP4 metadata sample description box
|
7977
|
-
%Image::ExifTool::QuickTime::MetaSampleDesc = (
|
7978
|
-
PROCESS_PROC => \&ProcessHybrid,
|
7979
|
-
NOTES => 'MP4 metadata sample description.',
|
7980
|
-
4 => {
|
7981
|
-
Name => 'MetaFormat',
|
7982
|
-
Format => 'undef[4]',
|
7983
|
-
RawConv => '$$self{MetaFormat} = $val',
|
7984
|
-
},
|
7985
|
-
8 => { # starts at 8 for MetaFormat eq 'camm', and 17 for 'mett'
|
7986
|
-
Name => 'MetaType',
|
7987
|
-
Format => 'undef[$size-8]',
|
7988
|
-
# may start at various locations!
|
7989
|
-
RawConv => '$$self{MetaType} = ($val=~/(application[^\0]+)/ ? $1 : undef)',
|
7990
|
-
},
|
7991
|
-
#
|
7992
|
-
# Observed offsets for child atoms of various MetaFormat types:
|
7993
|
-
#
|
7994
|
-
# MetaFormat Offset Child atoms
|
7995
|
-
# ----------- ------ ----------------
|
7996
|
-
# mebx 24 keys,btrt,lidp,lidl
|
7997
|
-
# fdsc - -
|
7998
|
-
# gpmd - -
|
7999
|
-
# rtmd - -
|
8000
|
-
# CTMD - -
|
8001
|
-
#
|
8002
|
-
'keys' => { #PH (iPhone7+ hevc)
|
8003
|
-
Name => 'Keys',
|
8004
|
-
SubDirectory => {
|
8005
|
-
TagTable => 'Image::ExifTool::QuickTime::Keys',
|
8006
|
-
ProcessProc => \&ProcessMetaKeys,
|
8007
|
-
},
|
8008
|
-
},
|
8009
|
-
btrt => {
|
8010
|
-
Name => 'BitrateInfo',
|
8011
|
-
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
8012
|
-
},
|
8013
|
-
);
|
8014
|
-
|
8015
|
-
# MP4 generic sample description box
|
8016
|
-
%Image::ExifTool::QuickTime::OtherSampleDesc = (
|
8017
|
-
PROCESS_PROC => \&ProcessHybrid,
|
8018
|
-
4 => {
|
8019
|
-
Name => 'OtherFormat',
|
8020
|
-
Format => 'undef[4]',
|
8021
|
-
RawConv => '$$self{MetaFormat} = $val', # (yes, use MetaFormat for this too)
|
8022
|
-
},
|
8023
|
-
24 => {
|
8024
|
-
Condition => '$$self{MetaFormat} eq "tmcd"',
|
8025
|
-
Name => 'PlaybackFrameRate', # (may differ from recorded FrameRate eg. ../pics/FujiFilmX-H1.mov)
|
8026
|
-
Format => 'rational64u',
|
8027
|
-
},
|
8028
|
-
#
|
8029
|
-
# Observed offsets for child atoms of various OtherFormat types:
|
8030
|
-
#
|
8031
|
-
# OtherFormat Offset Child atoms
|
8032
|
-
# ----------- ------ ----------------
|
8033
|
-
# avc1 86 avcC
|
8034
|
-
# mp4a 36 esds
|
8035
|
-
# mp4s 16 esds
|
8036
|
-
# tmcd 34 name
|
8037
|
-
# data - -
|
8038
|
-
#
|
8039
|
-
ftab => { Name => 'FontTable', Format => 'undef', ValueConv => 'substr($val, 5)' },
|
8040
|
-
name => { Name => 'OtherName', Format => 'undef', ValueConv => 'substr($val, 4)' },
|
8041
|
-
mrlh => { Name => 'MarlinHeader', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlh' } },
|
8042
|
-
mrlv => { Name => 'MarlinValues', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlv' } },
|
8043
|
-
mrld => { Name => 'MarlinDictionary',SubDirectory => { TagTable => 'Image::ExifTool::GM::mrld' } },
|
8044
|
-
);
|
8045
|
-
|
8046
8050
|
# MP4 data information box (ref 5)
|
8047
8051
|
%Image::ExifTool::QuickTime::DataInfo = (
|
8048
8052
|
PROCESS_PROC => \&ProcessMOV,
|
@@ -9856,6 +9860,7 @@ sub ProcessMOV($$;$)
|
|
9856
9860
|
$size -= 8;
|
9857
9861
|
}
|
9858
9862
|
if ($validate) {
|
9863
|
+
$et->Warn("Invalid 'wide' atom size") if $tag eq 'wide' and $size;
|
9859
9864
|
$$et{ValidatePath} or $$et{ValidatePath} = { };
|
9860
9865
|
my $path = join('-', @{$$et{PATH}}, $tag);
|
9861
9866
|
$path =~ s/-Track-/-$$et{SET_GROUP1}-/ if $$et{SET_GROUP1};
|
@@ -1002,6 +1002,10 @@ my %formatMinMax = (
|
|
1002
1002
|
'0x0a20-name' => 'DualCameraImageName', # ("FlipPhoto_002")
|
1003
1003
|
'0x0a20' => { Name => 'DualCameraImage', Groups => { 2 => 'Preview' }, Binary => 1 },
|
1004
1004
|
'0x0a30-name' => 'EmbeddedVideoType', # ("MotionPhoto_Data")
|
1005
|
+
# Note: A duplicate of this video may be extracted as MotionPhotoVideo from
|
1006
|
+
# the Google trailer, but keep this copy named as EmbeddedVideoFile
|
1007
|
+
# for backward compatibility and to avoid confusion due to extracting
|
1008
|
+
# multiple tags with the same name
|
1005
1009
|
'0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
|
1006
1010
|
# 0x0a41-name - seen 'BackupRestore_Data' #forum16086
|
1007
1011
|
# 0x0aa1-name - seen 'MCC_Data'
|
@@ -1719,7 +1719,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1719
1719
|
},
|
1720
1720
|
},{
|
1721
1721
|
Name => 'Tag9050c',
|
1722
|
-
Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7RM5|7SM3)|ILME-FX3)/',
|
1722
|
+
Condition => '$$self{Model} =~ /^(ILCE-(1\b|7M4|7RM5|7SM3)|ILME-FX3)/',
|
1723
1723
|
SubDirectory => {
|
1724
1724
|
TagTable => 'Image::ExifTool::Sony::Tag9050c',
|
1725
1725
|
ByteOrder => 'LittleEndian',
|