summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorexiftool <phil@u88.n24.queensu.ca>2014-12-13 07:44:59 -0500
committerexiftool <phil@u88.n24.queensu.ca>2014-12-13 07:44:59 -0500
commitaabef0bfcd73ed78e4fa690f5905c9b712cdd429 (patch)
treeda5821f1ec7b36c9eb75ab52d379efd6c48ed9f9 /lib
parent28da2693263b0168ef22a6cc3d95d7f14621e1e6 (diff)
Update to 9.78
Diffstat (limited to 'lib')
-rw-r--r--lib/Image/ExifTool.pm4
-rw-r--r--lib/Image/ExifTool/Canon.pm10
-rw-r--r--lib/Image/ExifTool/Nikon.pm3
-rw-r--r--lib/Image/ExifTool/QuickTime.pm8
-rw-r--r--lib/Image/ExifTool/Samsung.pm209
-rw-r--r--lib/Image/ExifTool/Sony.pm357
-rw-r--r--lib/Image/ExifTool/TagLookup.pm52
-rw-r--r--lib/Image/ExifTool/TagNames.pod84
-rw-r--r--lib/Image/ExifTool/WriteExif.pl14
-rw-r--r--lib/Image/ExifTool/WriteQuickTime.pl20
-rw-r--r--lib/Image/ExifTool/XMPStruct.pl8
-rw-r--r--lib/Image/ExifTool/ZIP.pm12
12 files changed, 603 insertions, 178 deletions
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm
index 019787ba..9ad582b5 100644
--- a/lib/Image/ExifTool.pm
+++ b/lib/Image/ExifTool.pm
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
%jpegMarker %specialTags);
-$VERSION = '9.77';
+$VERSION = '9.78';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
@@ -1769,7 +1769,7 @@ sub ExtractInfo($;@)
($$self{TAGS_FROM_FILE} and not $$self{EXCL_TAG_LOOKUP}{filepath}))
{
local $SIG{'__WARN__'} = \&SetWarning;
- if (eval {require Cwd}) {
+ if (eval { require Cwd }) {
my $path = eval { Cwd::abs_path($filename) };
$self->FoundTag('FilePath', $path) if defined $path;
} elsif ($$self{REQ_TAG_LOOKUP}{filepath}) {
diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm
index 91a17308..01aef2bd 100644
--- a/lib/Image/ExifTool/Canon.pm
+++ b/lib/Image/ExifTool/Canon.pm
@@ -83,7 +83,7 @@ sub ProcessSerialData($$$);
sub ProcessFilters($$$);
sub SwapWords($);
-$VERSION = '3.38';
+$VERSION = '3.39';
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -307,6 +307,7 @@ $VERSION = '3.38';
183 => 'Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens',
183.1 => 'Sigma 150mm f/2.8 EX DG OS HSM APO Macro', #50
183.2 => 'Sigma 105mm f/2.8 EX DG OS HSM Macro', #50
+ 183.3 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #52
184 => 'Canon EF 400mm f/2.8L + 2x', #15
185 => 'Canon EF 600mm f/4L IS', #32
186 => 'Canon EF 70-200mm f/4L', #9
@@ -695,6 +696,7 @@ my %canonQuality = (
4 => 'RAW',
5 => 'Superfine',
130 => 'Normal Movie', #22
+ 131 => 'Movie (2)', #PH (7DmkII 1920x1080)
);
my %canonImageSize = (
-1 => 'n/a',
@@ -7327,6 +7329,12 @@ my %filterConv = (
},
);
+# Canon CNOP atoms (ref PH)
+%Image::ExifTool::Canon::CNOP = (
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
+ # CNFB - 52 bytes (7DmkII)
+);
+
# 'skip' atom of Canon MOV videos (ref PH)
%Image::ExifTool::Canon::Skip = (
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
diff --git a/lib/Image/ExifTool/Nikon.pm b/lib/Image/ExifTool/Nikon.pm
index 8d5d4b9b..824a6c3c 100644
--- a/lib/Image/ExifTool/Nikon.pm
+++ b/lib/Image/ExifTool/Nikon.pm
@@ -58,7 +58,7 @@ use vars qw($VERSION %nikonLensIDs %nikonTextEncoding);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
-$VERSION = '2.95';
+$VERSION = '2.96';
sub LensIDConv($$$);
sub ProcessNikonAVI($$$);
@@ -565,6 +565,7 @@ sub GetAFPointGrid($$;$);
'00 54 50 50 18 18 00 00' => 'Carl Zeiss Makro-Planar T* 2/50 ZF.2',
'00 54 62 62 0C 0C 00 00' => 'Carl Zeiss Planar T* 1.4/85 ZF.2',
'00 54 68 68 18 18 00 00' => 'Carl Zeiss Makro-Planar T* 2/100 ZF.2',
+ '00 54 53 53 0C 0C 00 00' => 'Zeiss 55mm f/1.4 Otus Distagon T*', #33
#
'00 54 56 56 30 30 00 00' => 'Coastal Optical Systems 60mm 1:4 UV-VIS-IR Macro Apo',
#
diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm
index 50d721ab..9c021980 100644
--- a/lib/Image/ExifTool/QuickTime.pm
+++ b/lib/Image/ExifTool/QuickTime.pm
@@ -40,7 +40,7 @@ use vars qw($VERSION $AUTOLOAD);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
-$VERSION = '1.86';
+$VERSION = '1.87';
sub FixWrongFormat($);
sub ProcessMOV($$;$);
@@ -1339,6 +1339,10 @@ my %graphicsMode = (
Name => 'CanonCNTH',
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNTH' },
},
+ CNOP => { #PH (7DmkII)
+ Name => 'CanonCNOP',
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNOP' },
+ },
# CNDB - 2112 bytes (550D)
# CNDM - 4 bytes - 0xff,0xd8,0xff,0xd9 (S95)
# CNDG - 10232 bytes, mostly zeros (N100)
@@ -4236,7 +4240,7 @@ my %graphicsMode = (
21 => 'Podcast', #15
},
},
- rate => 'Rating', #PH
+ rate => 'RatingPercent', #PH
titl => 'Title',
tven => 'TVEpisodeID', #7
tves => { #7/10
diff --git a/lib/Image/ExifTool/Samsung.pm b/lib/Image/ExifTool/Samsung.pm
index 0f43d5ea..217adaf7 100644
--- a/lib/Image/ExifTool/Samsung.pm
+++ b/lib/Image/ExifTool/Samsung.pm
@@ -20,7 +20,7 @@ use vars qw($VERSION %samsungLensTypes);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
-$VERSION = '1.27';
+$VERSION = '1.28';
sub WriteSTMN($$$);
sub ProcessINFO($$$);
@@ -129,12 +129,111 @@ my %formatMinMax = (
Writable => 'undef',
Count => 4,
},
+ 0x0002 => {
+ Name => 'DeviceType',
+ Writable => 'int32u',
+ PrintHex => 1,
+ PrintConv => {
+ 0x1000 => 'Compact Digital Camera',
+ 0x2000 => 'High-end NX Camera',
+ 0x3000 => 'HXM Video Camera',
+ 0x12000 => 'Cell Phone',
+ 0x300000 => 'SMX Video Camera',
+ },
+ },
+ 0x0003 => {
+ Name => 'SamsungModelID',
+ Writable => 'int32u',
+ PrintHex => 1,
+ PrintConv => {
+ 0x100101c => 'NX10',
+ 0x1001226 => 'HMX-S10BP',
+ 0x1001226 => 'HMX-S15BP',
+ 0x1001233 => 'HMX-Q10',
+ 0x1001234 => 'HMX-H300',
+ 0x1001234 => 'HMX-H304',
+ 0x100130c => 'NX100',
+ 0x1001327 => 'NX11',
+ 0x170104e => 'ES70, ES71 / VLUU ES70, ES71 / SL600',
+ 0x1701052 => 'ES73 / VLUU ES73 / SL605',
+ 0x1701300 => 'ES28 / VLUU ES28',
+ 0x1701303 => 'ES74,ES75,ES78 / VLUU ES75,ES78',
+ 0x2001046 => 'PL150 / VLUU PL150 / TL210 / PL151',
+ 0x2001311 => 'PL120,PL121 / VLUU PL120,PL121',
+ 0x2001315 => 'PL170,PL171 / VLUUPL170,PL171',
+ 0x200131e => 'PL210, PL211 / VLUU PL210, PL211',
+ 0x2701317 => 'PL20,PL21 / VLUU PL20,PL21',
+ 0x2a0001b => 'WP10 / VLUU WP10 / AQ100',
+ 0x3000000 => 'DV150F / DV151F / DV155F',
+ 0x3000000 => 'NX mini',
+ 0x3000000 => 'NX3000',
+ 0x3000000 => 'ST150F / ST151F / ST152F',
+ 0x3000000 => 'WB250F / WB251F / WB252F',
+ 0x3000000 => 'WB30F / WB31F / WB32F',
+ 0x3000000 => 'WB350F / WB351F / WB352F',
+ 0x3000000 => 'WB800F',
+ 0x3a00018 => 'ES30 / VLUU ES30',
+ 0x3a00018 => 'ES80 / ES81',
+ 0x3a00018 => 'PL200 / VLUU PL200',
+ 0x3a00018 => 'PL80 / VLUU PL80 / SL630 / PL81',
+ 0x3a00018 => 'PL90 / VLUU PL90',
+ 0x3a00018 => 'WB1100F / WB1101F / WB1102F',
+ 0x3a00018 => 'WB2200F',
+ 0x400101f => 'ST1000 / ST1100 / VLUU ST1000 / CL65',
+ 0x4001022 => 'ST550 / VLUU ST550 / TL225',
+ 0x4001025 => 'DV300 / DV300F / DV305F',
+ 0x4001025 => 'ST500 / VLUU ST500 / TL220',
+ 0x4001025 => 'ST200 / ST200F / ST201 / ST201F / ST205F',
+ 0x400103e => 'VLUU ST5500, ST5500, CL80',
+ 0x4001041 => 'VLUU ST5000, ST5000, TL240',
+ 0x4001043 => 'ST70 / VLUU ST70 / ST71',
+ 0x400130a => 'VLUU ST100, ST100',
+ 0x400130a => 'VLUU ST600, ST600',
+ 0x400130a => 'VLUU ST80, ST80',
+ 0x400130e => 'ST90,ST91 / VLUU ST90,ST91',
+ 0x4001313 => 'VLUU ST95, ST95',
+ 0x4a00015 => 'VLUU ST60',
+ 0x4a0135b => 'ST30',
+ 0x4a0135b => 'ST65 / VLUU ST65 / ST67',
+ 0x5000000 => 'EX2F',
+ 0x5000000 => 'NX1000',
+ 0x5000000 => 'NX20',
+ 0x5000000 => 'NX200',
+ 0x5000000 => 'NX210',
+ 0x5000000 => 'ST96',
+ 0x5000000 => 'WB750',
+ 0x5000000 => 'ST700',
+ 0x5001038 => 'EK-GN120',
+ 0x5001038 => 'HMX-E10',
+ 0x5001038 => 'NX1',
+ 0x5001038 => 'NX2000',
+ 0x5001038 => 'NX30',
+ 0x5001038 => 'NX300',
+ 0x5001038 => 'WB2000',
+ 0x500103a => 'WB650 / VLUU WB650 / WB660',
+ 0x500103c => 'WB600 / VLUU WB600 / WB610',
+ 0x500133e => 'WB150 / WB150F / WB152 / WB152F / WB151',
+ 0x5a0000f => 'WB5000 / HZ25W',
+ 0x6001036 => 'EX1',
+ 0x700131c => 'VLUU SH100, SH100',
+ 0x27127002 => 'SMX-C20N',
+ },
+ },
+ # 0x0004 - undef[x] (SamsungContentsID?)
+ # 0x000a - int32u (ContinuousShotMode?)
+ # 0x000b - int16u (BestPhotoMode?)
+ # 0x000e - int32u[2] (SoundMultiPicture?)
+ # 0x0020 - int16u[2] (ColorInfoDCM?)
0x0021 => { #1
Name => 'PictureWizard',
Writable => 'int16u',
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PictureWizard' },
},
- # 0x0023 - string: "0123456789" (PH)
+ # 0x0022 - int32u (CaptureMode?)
+ # 0x0023 - string: "0123456789" (PH) (placeholder for SerialNumber?)
+ # 0x0025 - int32u (ImageCount?)
+ # 0x002a - undef[4] (SNSDirectShare?)
+ # 0x002f - string (GPSInfo01?)
0x0030 => { #1 (NX100 with GPS)
Name => 'LocalLocationName',
Writable => 'string',
@@ -148,6 +247,9 @@ my %formatMinMax = (
Name => 'LocationName',
Writable => 'string',
},
+ # 0x0032 - string (GPSInfo03)
+ # 0x0033 - string (GPSInfo04)
+ # 0x0034 - string (GPSInfo05)
0x0035 => {
Name => 'PreviewIFD',
Condition => '$$self{TIFF_TYPE} eq "SRW"', # (not an IFD in JPEG images)
@@ -159,6 +261,13 @@ my %formatMinMax = (
Start => '$val',
},
},
+ # 0x003a - int16u[2] (SmartLensInfo?)
+ # 0x003b - int16u[2] (PhotoStyleSelectInfo?)
+ # 0x003c - int16u (SmartRange?)
+ # 0x003d - int16u[5] (SmartCropInfo?)
+ # 0x003e - int32u (DualCapture?)
+ # 0x003f - int16u[2] (SGIFInfo?)
+ # 0x0040 - int32u (FavoriteTagging?)
0x0043 => { #1 (NC)
Name => 'CameraTemperature',
Groups => { 2 => 'Camera' },
@@ -167,19 +276,46 @@ my %formatMinMax = (
PrintConv => '"$val C"',
PrintConvInv => '$val=~s/ ?C//; $val',
},
- # 0x00a0 - undef[8192]: white balance information (ref 1):
+ 0x0045 => { Name => 'RawCompressionMode', Writable => 'int32u' },
+ # 0x004a - int32u[7] (ImageVerification?)
+ # 0x004b - int32u[2] (RewindInfo?)
+ # 0x0050 - int32u (ColorSpace? - inconsistent)
+ # 0x0054 - int16u[2] (WeatherInfo?)
+ # 0x0060 - undef (AEInfo?)
+ # 0x0080 - undef (AFInfo?)
+ # 0x00a0 - undef[8192] (AWBInfo1): white balance information (ref 1):
# At byte 5788, the WBAdjust: "Adjust\0\X\0\Y\0\Z\xee\xea\xce\xab", where
# Y = BA adjust (0=Blue7, 7=0, 14=Amber7), Z = MG (0=Magenta7, 7=0, 14=Green7)
+ # 0x00a1 - undef (AWBInfo2?)
+ # 0x00c0 - undef (IPCInfo?)
+ # 0x00c7 - undef (SmartFunctionInfo?)
+ # 0x00e0 - int16u (SceneResult?)
+ # 0x00e1 - int16u[8] (SADebugInfo01?)
+ # 0x00e1 - int16u[x] (SADebugInfo02?)
+ 0x0100 => {
+ Name => 'FaceDetect',
+ Writable => 'int16u',
+ PrintConv => { 0 => 'Off', 1 => 'On' }, # (NC)
+ },
+ # 0x0101 - int16u[6] (FaceDetectInfo?)
+ # 0x0102 - int16u[x] (FaceDetectInfo?)
+ 0x0120 => {
+ Name => 'FaceRecognition',
+ Writable => 'int32u',
+ PrintConv => { 0 => 'Off', 1 => 'On' }, # (NC)
+ },
+ 0x0123 => { Name => 'FaceName', Writable => 'string' },
+ # 0x140 - undef (LensInfo?)
#
# the following tags found only in SRW images
#
- # 0xa000 - rational64u: 1 or 1.1 (ref PH)
+ # 0xa000 - rational64u: 1 or 1.1 (ref PH) (MakerNoteVersion?)
0xa001 => { #1
Name => 'FirmwareName',
Groups => { 2 => 'Camera' },
Writable => 'string',
},
- # 0xa002 - string[30]: '0' or 'DY049P000000' (ref PH)
+ # 0xa002 - string[30]: '0' or 'DY049P000000' (ref PH) (BodySerialNumber?)
0xa003 => { #1 (SRW images only)
Name => 'LensType',
Groups => { 2 => 'Camera' },
@@ -192,7 +328,10 @@ my %formatMinMax = (
Groups => { 2 => 'Camera' },
Writable => 'string',
},
- # 0xa005 - string[30]: constant for a given lens? Not the printed serial number (ref 1)
+ 0xa005 => {
+ Name => 'InternalLensSerialNumber', # Not the printed serial number (ref 1)
+ Writable => 'string',
+ },
0xa010 => { #1
Name => 'SensorAreas',
Groups => { 2 => 'Camera' },
@@ -244,6 +383,8 @@ my %formatMinMax = (
PrintConv => '"$val mm"',
PrintConvInv => '$val=~s/\s*mm$//;$val',
},
+ # 0xa01b - int32u (ImageCount?)
+ # 0xa01b - int16u (LDCLens?)
0xa020 => { #1
Name => 'EncryptionKey',
Writable => 'int32u',
@@ -284,7 +425,7 @@ my %formatMinMax = (
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,1)',
},
#this doesn't seem correct
- #0xa025 => { #PH/1
+ #0xa025 => { #PH/1 (PostAEGain?)
# Name => 'ColorTemperatureAuto',
# Writable => 'int32u',
# RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,6)',
@@ -319,43 +460,35 @@ my %formatMinMax = (
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")',
},
0xa033 => { #1
- Name => 'Samsung_Type2_0xa033',
- Unknown => 1,
- Hidden => 1,
+ Name => 'CbCrMatrixDefault',
Writable => 'int32s',
Count => 4,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")',
},
0xa034 => { #1
- Name => 'Samsung_Type2_0xa034',
- Unknown => 1,
- Hidden => 1,
+ Name => 'CbCrMatrix',
Writable => 'int32s',
Count => 4,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,4)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-4)',
},
0xa035 => { #1
- Name => 'Samsung_Type2_0xa035',
- Unknown => 1,
- Hidden => 1,
+ Name => 'CbCrGainDefault',
Writable => 'int32u',
Count => 2,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)',
},
0xa036 => { #1
- Name => 'Samsung_Type2_0xa036',
- Unknown => 1,
- Hidden => 1,
+ Name => 'CbCrGain',
Writable => 'int32u',
Count => 2,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-2)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,2)',
},
0xa040 => { #1
- Name => 'ToneCurve1',
+ Name => 'ToneCurveSRGBDefault',
Writable => 'int32u',
Count => 23,
Notes => q{
@@ -366,82 +499,76 @@ my %formatMinMax = (
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa041 => { #1
- Name => 'ToneCurve2',
+ Name => 'ToneCurveAdobeRGBDefault',
Writable => 'int32u',
Count => 23,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa042 => { #1
- Name => 'ToneCurve3',
+ Name => 'ToneCurveSRGB',
Writable => 'int32u',
Count => 23,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa043 => { #1
- Name => 'ToneCurve4',
+ Name => 'ToneCurveAdobeRGB',
Writable => 'int32u',
Count => 23,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa048 => { #1
- Name => 'Samsung_Type2_0xa048',
+ Name => 'RawData',
Unknown => 1,
- Hidden => 1,
Writable => 'int32s',
Count => 12,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")',
},
- 0xa050 => { #1 (vignette curve?)
- Name => 'Samsung_Type2_0xa050',
+ 0xa050 => { #1
+ Name => 'Distortion',
Unknown => 1,
- Hidden => 1,
Writable => 'int32s',
Count => 8,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")',
},
0xa051 => { #1
- Name => 'Samsung_Type2_0xa051',
+ Name => 'Chromatic Aberration',
Unknown => 1,
- Hidden => 1,
Writable => 'int16u',
Count => 22,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",-7,-3)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,7,3)',
},
- 0xa052 => { #1 (vignette curve?)
- Name => 'Samsung_Type2_0xa052',
+ 0xa052 => { #1
+ Name => 'Vignetting',
Unknown => 1,
- Hidden => 1,
Writable => 'int16u',
Count => 15,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa053 => { #1
- Name => 'Samsung_Type2_0xa053',
+ Name => 'VignettingCorrection',
Unknown => 1,
- Hidden => 1,
Writable => 'int16u',
Count => 15,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa054 => { #1
- Name => 'Samsung_Type2_0xa054',
+ Name => 'VignettingSetting',
Unknown => 1,
- Hidden => 1,
Writable => 'int16u',
Count => 15,
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)',
},
0xa055 => { #1
- Name => 'Samsung_Type2_0xa055',
+ Name => 'Samsung_Type2_0xa055', # (DistortionCamera1st?)
Unknown => 1,
Hidden => 1,
Writable => 'int32s',
@@ -450,7 +577,7 @@ my %formatMinMax = (
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-8)',
},
0xa056 => { #1
- Name => 'Samsung_Type2_0xa056',
+ Name => 'Samsung_Type2_0xa056', # (DistortionCamera2nd?)
Unknown => 1,
Hidden => 1,
Writable => 'int32s',
@@ -459,7 +586,7 @@ my %formatMinMax = (
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-5)',
},
0xa057 => { #1
- Name => 'Samsung_Type2_0xa057',
+ Name => 'Samsung_Type2_0xa057', # (DistortionCameraSetting?)
Unknown => 1,
Hidden => 1,
Writable => 'int32s',
@@ -467,6 +594,8 @@ my %formatMinMax = (
RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,2)',
RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-2)',
},
+ # 0xa060 - rational64u (CISTemperature?)
+ # 0xa061 - int16u (Compression?)
);
# Picture Wizard information (ref 1)
diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm
index 4122f66d..6facac1f 100644
--- a/lib/Image/ExifTool/Sony.pm
+++ b/lib/Image/ExifTool/Sony.pm
@@ -31,7 +31,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::Minolta;
-$VERSION = '2.15';
+$VERSION = '2.16';
sub ProcessSRF($$$);
sub ProcessSR2($$$);
@@ -714,7 +714,7 @@ my %meterInfo2 = (
# a3 c3 - NEX-6, DSC-HX300, HX50V
# a4 c3 - NEX-3N/5R/5T, ILCE-3000/3500
# unknown offsets or values for DSC-TX20/TX55/RX100M2/RX100M3/QX10/QX30/QX100/RX10/HX60V/HX400V/WX220/WX350,
- # ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2
+ # ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2
{
Name => 'Tag2010a', # ad
Condition => '$$self{Model} =~ /^NEX-5N$/',
@@ -747,7 +747,7 @@ my %meterInfo2 = (
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010f' },
},{
Name => 'Tag2010g', # ?
- Condition => '$$self{Model} =~ /^(DSC-(QX30|RX10|RX100M3|HX60V|HX400V|WX220|WX350)|ILCE-(7[RS]?|[56]000|5100|QX1)|ILCA-77M2)\b/',
+ Condition => '$$self{Model} =~ /^(DSC-(QX30|RX10|RX100M3|HX60V|HX400V|WX220|WX350)|ILCE-(7(R|S|M2)?|[56]000|5100|QX1)|ILCA-77M2)\b/',
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010g' },
},{
Name => 'Tag_0x2010',
@@ -946,8 +946,8 @@ my %meterInfo2 = (
# 0x0a (e) for SLT-A37/A57/A65V/A77V/A99V, NEX-F3/5N/5R/5T/6/7/VG20E, DSC-RX100/RX1/RX1R/HX10V/HX20V/HX30V/HX200V/TX200V/TX300V/TX66/WX50/WX100/WX150, Lunar/Stellar/HV
# 0x0c (e) for ILCE-3000/3500, NEX-3N, SLT-A58, DSC-HX50V/HX300/RX100M2/TX30/WX60/WX80/WX200/WX300, DSC-QX10/QX100
# 0xd0 (e) H90, W650, W690: tag9400 decoding appears not valid/different
- # 0x23 (e) for DSC-QX30/RX10/HX60V/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-77M2
- # 0x24 (e) for ILCE-7S/5100/QX1, DSC-RX100M3
+ # 0x23 (e) for DSC-RX10/HX60V/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-77M2
+ # 0x24 (e) for ILCE-7S/7M2/5100/QX1, DSC-QX30/RX100M3
# first byte decoded: 40, 204, 202, 27, 58, 62, 48 respectively
{
Name => 'Tag9400a',
@@ -996,9 +996,10 @@ my %meterInfo2 = (
# 3a 20 47 0e 0x0a01 (m) DSC-RX100M2
# 43 00 66 0e 0x0a1b (n) ILCE-7/7R/5000, DSC-RX10
# 43 10 66 0e 0x0a1b (n) ILCE-7/7R
- # 44 00 9c 0e 0x0a39 (o) ILCE-6000, DSC-HX60V/HX400V/QX30/WX220/WX350
- # 49 00 b0 0e 0x0a3b (p) ILCA-77M2, DSC-RX100M3 samples from sony.net
- # 4a 00 b3 0e 0x0a3d (q) ILCE-7S/5100/QX1, DSC-RX100M3
+ # 44 00 9c 0e 0x0a39 (o) ILCE-6000, DSC-HX60V/HX400V/WX220/WX350 (also DSC-QX30 samples from sony.net)
+ # 49 00 b0 0e 0x0a3b (p) ILCA-77M2 (also DSC-RX100M3 samples from sony.net)
+ # 4a 00 b3 0e 0x0a3d (q) ILCE-7S/5100/QX1, DSC-QX30/RX100M3
+ # 4e 01 d0 0e 0x0a5a (r) ILCE-7M2
#
# 0x0004 - (RX100: 0 or 1. subsequent data valid only if 1 - PH)
# 0x0007 => {
@@ -1029,8 +1030,8 @@ my %meterInfo2 = (
# 0x13 0x01 ILCE-5000/7/7R, DSC-RX10, but also seen:
# 0x12 0x01 for ILCE-7/7R and DSC-RX10 samples from Sony.net ...
# 0x15 0x01 for a few ILCE-7/7R ...
- # 0x14 0x01 ILCE-6000, DSC-HX60V/HX400V/QX30/WX220/WX350
- # 0x17 0x01 ILCE-7S/5100/QX1, DSC-RX100M3
+ # 0x14 0x01 ILCE-6000, DSC-HX60V/HX400V/WX220/WX350
+ # 0x17 0x01 ILCE-7S/7M2/5100/QX1, DSC-QX30/RX100M3
# var var SLT-A58/A99V, HV, ILCA-77M2
# only valid when first byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17 (enciphered 0x8a, 0x70, 0xb6, 0x69, 0x88, 0x20, 0x30, 0xd7)
Condition => '$$self{DoubleCipher} ? $$valPt =~ /^[\x7e\x46\x1d\x18\x3a\x95\x24\x26]\x01/ : $$valPt =~ /^[\x8a\x70\xb6\x69\x88\x20\x30\xd7]\x01/',
@@ -1054,7 +1055,7 @@ my %meterInfo2 = (
# 9 0 38 2 2 SLT-A37/A57/A99V, NEX-5R/5T/6/F3/VG30E/VG900, DSC-RX1/RX1R/RX100, Stellar
# 12 0 8 2 2 SLT-A58, NEX-3N, ILCE-3000/3500, DSC-HX300/HX50V/WX60/WX80/WX300/TX30...
# 13 0 9 2 2 DSC-QX10/QX100/RX100M2
- # 15 0 35 2 2 ILCA-77M2, ILCE-5000/5100/6000/7/7R/7S/QX1, DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350
+ # 15 0 35 2 2 ILCA-77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350
# other values for Panorama images and several other models
0x9404 => [{
Name => 'Tag9404a',
@@ -1076,9 +1077,10 @@ my %meterInfo2 = (
# 3 0 (0x1b = 27 0 enc.) SLT, NEX, ILCE-3000/3500, DSC-RX100/RX1 + other DSC of same generation, also QX10 and QX100
# 4 0 (0x40 = 64 0 enc.) DSC-RX1R
# 5 0 (0x7d = 125 0 enc.) DSC-RX100M2
- # 136 var (0x3a = 58 var enc.) ILCE-7/7R/5000/6000, DSC-HX400V/HX60V/QX30/RX10/WX220/WX350
- # 137 255 (0xb3 = 179 255 enc.) ILCA-77M2, DSC-RX100M3 - appears to go with 136
- # 138 255 (0x7e = 126 255 enc.) ILCE-7S/5100/QX1 - appears to go with 136
+ # 136 var (0x3a = 58 var enc.) ILCE-7/7R/5000/6000, DSC-HX400V/HX60V/RX10/WX220/WX350
+ # 137 var (0xb3 = 179 var enc.) ILCA-77M2, DSC-RX100M3 - appears to go with 136
+ # 138 var (0x7e = 126 var enc.) ILCE-7S/5100/QX1, DSC-QX30 - appears to go with 136
+ # 139 var (0x9a = 154 var enc.) ILCE-7M2
0x9405 => [{
Name => 'Tag9405a',
# first byte must be 0x1b or 0x40 or 0x7d
@@ -1086,8 +1088,8 @@ my %meterInfo2 = (
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405a' },
},{
Name => 'Tag9405b',
- # first byte must be 0x3a or 0xb3 or 0x7e
- Condition => '$$valPt =~ /^[\x3a\xb3\x7e]/',
+ # first byte must be 0x3a, 0xb3, 0x7e or 0x9a
+ Condition => '$$valPt =~ /^[\x3a\xb3\x7e\x9a]/',
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405b' },
},{
Name => 'Sony_0x9405',
@@ -1243,6 +1245,7 @@ my %meterInfo2 = (
318 => 'ILCE-7S', #12
319 => 'ILCA-77M2', #14
339 => 'ILCE-5100', #12
+ 340 => 'ILCE-7M2', #12
346 => 'ILCE-QX1', #14
},
},
@@ -2650,33 +2653,53 @@ my %meterInfo2 = (
# matches "0x7313 WB_RGGBLevels" when WB set to "Custom", except factor of 4
Format => 'int16uRev[2]',
},
- 0x1e => {
+ # From here different and overlapping offsets for 3 groups of cameras:
+ # 1) DSLR-A450/A500/A550
+ # 2) NEX-3/5/5C
+ # 3) DSLR-A560/A580, NEX-C3/VG10/VG10E, SLT-A33/A35/A55V
+ 0x1e => [{
+ Name => 'BrightnessValue',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ ValueConv => '($val-106)/8',
+ ValueConvInv => '$val * 8 + 106',
+ },{
Name => 'ExposureCompensationSet',
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
+ Notes => 'other models',
ValueConv => '($val - 128) / 24', #PH
ValueConvInv => 'int($val * 24 + 128.5)',
PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
+ }],
0x1f => [{
+ Name => 'ISO',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
+ ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
+ PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
+ PrintConvInv => '$val =~ /auto/i ? 0 : $val',
+ },{
Name => 'FlashExposureCompSet',
+ Notes => 'other models',
Description => 'Flash Exposure Comp. Setting',
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
ValueConv => '($val - 128) / 24', #PH
ValueConvInv => 'int($val * 24 + 128.5)',
PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },{
- Name => 'ISO',
- Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/',
- ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
- ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
- PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
- PrintConvInv => '$val =~ /auto/i ? 0 : $val',
}],
- 0x20 => {
+ 0x20 => [{
+ Name => 'FNumber',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ ValueConv => '2 ** (($val/8 - 1) / 2)',
+ ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
+ PrintConvInv => '$val',
+ },{
Name => 'LiveViewAFMethod',
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/',
+ Notes => 'other models except the NEX-3/5/5C',
PrintConv => {
0 => 'n/a',
1 => 'Phase-detect AF',
@@ -2685,96 +2708,221 @@ my %meterInfo2 = (
# NOT in Quick AF LV, and is automatically set when mounting SSM/SAM lens
# - changes into Phase-AF when switching to Quick AF LV.
},
- },
- 0x21 => {
+ }],
+ 0x21 => [{
+ Name => 'ExposureTime',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
+ ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
+ PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
+ PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
+ },{
Name => 'ISO',
- Condition => '$$self{Model} =~ /^NEX-(3|5|5C)$/',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C',
ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
PrintConvInv => '$val =~ /auto/i ? 0 : $val',
+ }],
+ 0x22 => {
+ Name => 'FNumber',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C only',
+ ValueConv => '2 ** (($val/8 - 1) / 2)',
+ ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
+ PrintConvInv => '$val',
},
- 0x25 => {
+ 0x23 => [{
+ Name => 'FocalLength2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ ValueConv => '10 * 2 ** (($val-28)/16)',
+ ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0',
+ PrintConv => 'sprintf("%.1f mm",$val)',
+ PrintConvInv => '$val=~s/\s*mm$//; $val',
+ },{
+ Name => 'ExposureTime',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C',
+ ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
+ ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
+ PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
+ PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
+ }],
+ 0x24 => {
+ Name => 'ExposureCompensation2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ Format => 'int16s',
+ ValueConv => '$val / 8',
+ ValueConvInv => '$val * 8',
+ PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
+ PrintConvInv => '$val',
+ },
+ 0x25 => [{
+ Name => 'FocalLength2',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C',
+ ValueConv => '10 * 2 ** (($val-28)/16)',
+ ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0',
+ PrintConv => 'sprintf("%.1f mm",$val)',
+ PrintConvInv => '$val=~s/\s*mm$//; $val',
+ },{
Name => 'ISO',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'other models except the A450, A500 and A550',
ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
PrintConvInv => '$val =~ /auto/i ? 0 : $val',
- },
- 0x26 => { # (this is not in CameraSettings3)
+ }],
+ 0x26 => [{
+ Name => 'FlashExposureCompSet2',
+ Description => 'Flash Exposure Comp. Setting 2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ Format => 'int16s',
+ ValueConv => '$val / 8',
+ ValueConvInv => '$val * 8',
+ PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
+ PrintConvInv => '$val',
+ },{
+ Name => 'ExposureCompensation2',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C',
+ Format => 'int16s',
+ ValueConv => '$val / 8',
+ ValueConvInv => '$val * 8',
+ PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
+ PrintConvInv => '$val',
+ },{
Name => 'FNumber',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Notes => 'other models',
ValueConv => '2 ** (($val/8 - 1) / 2)',
ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
PrintConvInv => '$val',
- },
- 0x27 => { # (this is not in CameraSettings3)
+ }],
+ 0x27 => {
Name => 'ExposureTime',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/',
+ Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C',
ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
},
- 0x29 => [{ # value increase of 16 corresponds to doubling of FocalLength
+ 0x28 => {
+ Name => 'Orientation2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ PrintConv => {
+ 1 => 'Horizontal (normal)',
+ 2 => 'Rotate 180',
+ 6 => 'Rotate 90 CW',
+ 8 => 'Rotate 270 CW',
+ },
+ },
+ 0x29 => [{
+ # FocusPosition for A450/A500/A550
+ # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below
+ Name => 'FocusPosition2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ },{
+ # value increase of 16 corresponds to doubling of FocalLength
Name => 'FocalLength2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/',
+ Notes => 'other models except the NEX-3/5/5C',
ValueConv => '10 * 2 ** (($val-28)/16)',
ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0',
PrintConv => 'sprintf("%.1f mm",$val)',
PrintConvInv => '$val=~s/\s*mm$//; $val',
- },{
- # FocusPosition for A450/A500/A550
- # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below
- Name => 'FocusPosition2',
- Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/',
}],
- 0x2a => {
+ 0x2a => [{
+ Name => 'FlashAction2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ PrintConv => {
+ 0 => 'Did not fire',
+ 1 => 'Fired',
+ },
+ },{
Name => 'ExposureCompensation2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/',
+ Notes => 'other models except the NEX-3/5/5C',
Format => 'int16s',
ValueConv => '$val / 8',
ValueConvInv => '$val * 8',
PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
PrintConvInv => '$val',
- },
+ }],
0x2b => {
# FocusPosition for NEX-3/5/5C
# seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below
Name => 'FocusPosition2',
- Condition => '$$self{Model} =~ /^NEX-(3|5|5C)$/',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C only',
},
- 0x2c => {
+ 0x2c => [{
+ Name => 'FocusMode2',
+ Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'A450, A500 and A550',
+ PrintConv => {
+ 0 => 'AF',
+ 1 => 'MF',
+ },
+ },{
+ Name => 'FlashAction2',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C FlashAction2',
+ PrintConv => {
+ 0 => 'Did not fire',
+ 1 => 'Fired',
+ },
+ },{
Name => 'FlashExposureCompSet2',
Description => 'Flash Exposure Comp. Setting 2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Notes => 'other models FlashExposureCompSet2',
Format => 'int16s',
ValueConv => '$val / 8',
ValueConvInv => '$val * 8',
PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
PrintConvInv => '$val',
- },
- 0x2e => { # seen some A55 images where this does not match the other Orientation tags
- Name => 'Orientation2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ }],
+ 0x2e => [{
+ Name => 'FocusMode2',
+ Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/',
+ Notes => 'NEX-3/5/5C',
+ PrintConv => {
+ 0 => 'AF',
+ 1 => 'MF',
+ },
+ },{
+ Name => 'Orientation2', # seen some A55 images where this does not match the other Orientation tags
+ Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/',
+ Notes => 'other models except the A450, A500 and A550',
PrintConv => {
1 => 'Horizontal (normal)',
2 => 'Rotate 180',
6 => 'Rotate 90 CW',
8 => 'Rotate 270 CW',
},
- },
+ }],
0x2f => {
- # FocusPosition for A560/A580/A33/A35/A55V and NEX-C3/VG10E
+ # FocusPosition for A560/A580/A33/A35/A55V and NEX-C3/VG10/VG10E
# seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below
Name => 'FocusPosition2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5|5C)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/',
+ Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C',
},
0x30 => {
Name => 'FlashAction2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/',
+ Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C',
PrintConv => {
0 => 'Did not fire',
1 => 'Fired',
@@ -2782,7 +2930,8 @@ my %meterInfo2 = (
},
0x32 => {
Name => 'FocusMode2',
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
+ Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/',
+ Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C',
PrintConv => {
0 => 'AF',
1 => 'MF',
@@ -4239,6 +4388,21 @@ my %faceInfo = (
PrintConv => 'sprintf("%.3d",$val)',
PrintConvInv => '$val',
},
+ 0x03f0 => {
+ Name => 'E-mountVersionLens',
+ Format => 'int16u',
+ Condition => '($$self{Model} =~ /^NEX-/)',
+ PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
+ PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
+ },
+ 0x03f3 => {
+ Name => 'E-mountVersionCamera',
+ Format => 'int16u',
+ Condition => '($$self{Model} =~ /^NEX-/)',
+ PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
+ PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
+ # seen values 1.00, 1.01, 1.02, 1.03 and 1.04 for NEX-3/5/5C/C3/VG10/VG10E with various Firmware versions.
+ },
0x3f7 => { #12
Name => 'LensType2',
Condition => '($$self{Model} =~ /^NEX-/) and ($$self{LensMount} != 1)',
@@ -5279,7 +5443,7 @@ my %exposureProgram2010 = (
FORMAT => 'int8u',
NOTES => q{
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
- ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
},
WRITABLE => 1,
FIRST_ENTRY => 0,
@@ -5555,16 +5719,21 @@ my %exposureProgram2010 = (
PrintConv => 'sprintf("%.1f",$val)',
PrintConvInv => '$val',
},
- 0x004c => { # only ILCE-7/7R/7S/5000/5100/6000/QX1 - but appears not valid when flash is used ...
+ 0x003f => {
+ Name => 'ReleaseMode2',
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar)/',
+ %releaseMode2,
+ },
+ 0x004c => { # only ILCE-7/7R/7S/7M2/5000/5100/6000/QX1 - but appears not valid when flash is used ...
Name => 'ImageCount2',
- Condition => '($$self{Model} =~ /^(ILCE-(7[RS]?|[56]000|5100|QX1))\b/) and (($$self{FlashFired} & 0x01) != 1)',
+ Condition => '($$self{Model} =~ /^(ILCE-(7(R|S|M2)?|[56]000|5100|QX1))\b/) and (($$self{FlashFired} & 0x01) != 1)',
Format => 'int32u',
RawConv => '$val & 0x00ffffff',
},
- 0x0051 => { # only ILCE-7/7R/7S/5000/5100/6000/QX1, but hours usually different from SonyDateTime - UTC?
+ 0x0051 => { # only ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, but hours usually different from SonyDateTime - UTC?
# appears not valid (all '0') when flash is used, panorama, hdr modes ...
Name => 'SonyDateTime2',
- Condition => '$$self{Model} =~ /^(ILCE-(7[RS]?|[56]000|5100|QX1))\b/',
+ Condition => '$$self{Model} =~ /^(ILCE-(7(R|S|M2)?|[56]000|5100|QX1))\b/',
Groups => { 2 => 'Time' },
Shift => 'Time',
Format => 'undef[6]',
@@ -5674,7 +5843,7 @@ my %exposureProgram2010 = (
Name => 'ImageCount3',
Format => 'int32u',
RawConv => '$val == 0 ? undef : $val',
- Condition => '$$self{Model} =~ /^(ILCE-(7S|5100|QX1)|ILCA-77M2)/',
+ Condition => '$$self{Model} =~ /^(ILCE-(7S|7M2|5100|QX1)|ILCA-77M2)/',
},
0x01aa => {
Name => 'ImageCount3',
@@ -5873,7 +6042,7 @@ my %exposureProgram2010 = (
WRITABLE => 1,
NOTES => q{
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
- ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
},
FIRST_ENTRY => 0,
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
@@ -6183,7 +6352,7 @@ my %exposureProgram2010 = (
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
NOTES => q{
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
- ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
},
0x0004 => {
Name => 'SonyISO',
@@ -6445,6 +6614,7 @@ my %exposureProgram2010 = (
DATAMEMBER => [ 0x0008 ],
NOTES => 'NEX and ILCE models only.',
+ # 0x0001 - 0 for all NEX and ILCE-3000/3500, 20 for all other ILCE (17 for ILCE samples from Sony.net)
# 0x0008 - LensMount, but different values from Tag9405-0x0105 and Tag9050-0x0604.
# don't know what difference is between values '1' and '5' ...
0x0008 => {
@@ -6458,21 +6628,48 @@ my %exposureProgram2010 = (
},
},
# 0x0009 - LensType2:
- # This LensType2 tag gives values '1' and '2' for LA-EA1 and LA-EA2 respectively.
- # Presumably similar to CameraSettings3-0x03f7, where value '1' for A-mount lenses was observed.
- # Tag9405-0x0605 and Tag9050-0x0107 always give value '0' for A-mount lenses.
- # When LA-EA2 is used, Tag940e AFInfo gives sequential info blocks NEX (Phase-detect AF).
- # Also seen values '3' and '6' for A-lens on ILCE-7/7R, probably relating to LA-EA3 and LA-EA4 (NC).
- # - this is the only tag that appears to indicate adapter info
- # - when normal E-mount lenses are used, there are at least 2 other LensType2's with the correct lens
- # - so limit outputting this tag ONLY for adapter info (with the RawConv below)
- 0x0009 => { #12
+ # This tag appears to also indicate adapter info, similar to CameraSettings3-0x03f7 for the original NEX-3/5.
+ # (Tag9405-0x0605 and Tag9050-0x0107 LensType2 always give '0' for adapters/A-mount lenses.)
+ # - seen a few instances of 0x0009 indicating an E-mount lens, but 0xb027 LensType indicating an A-mount lens:
+ # possibly due to adapter info not being read/reset correctly ?
+ 0x0009 => {
Name => 'LensType2',
- RawConv => '($val > 0 and $val < 32784) ? $val : undef',
+ RawConv => '(($$self{LensMount} != 0) or ($val > 0 and $val < 32784)) ? $val : undef',
Format => 'int16u',
SeparateTable => 1,
PrintConv => \%sonyLensTypes2,
},
+ 0x000b => {
+ Name => 'E-mountVersionCamera',
+ Format => 'int16u',
+ PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
+ PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
+ # camera Firmware versions:
+ # 1.14: NEX-5N/5R/6/7/F3 v1.00
+ # 1.20: NEX-3N v1.00, NEX-6 v1.01, NEX-7 v1.02, ILCE-3000 v1.00, ILCE-3500 v1.01
+ # 1.30: NEX-5T v1.00, NEX-6 v1.02, NEX-7 v1.03
+ # 1.31: ILCE-5000 v1.00, ILCE-7/7R v1.00 and v1.01
+ # 1.40: ILCE-5100/6000/7S/QX1 v1.00, ILCE-7/7R v1.02
+ # 1.50: ILCE-7M2 v1.00
+ },
+ 0x000d => {
+ Name => 'E-mountVersionLens',
+ Format => 'int16u',
+ PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
+ PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
+ # lens models:
+ # 0.00: Unknown lenses/adapters
+ # 1.00: Sigma DN, Tamron DiIII, Zeiss Touit, SEL18200LE
+ # 1.07 (Ver.01): Original E-lenses
+ # 1.08: LA-EA1, Metabones Smart
+ # 1.14: LA-EA2
+ # 1.20 (Ver.02): Newer or firmware-updated E-lenses, LA-EA3
+ # 1.30: LA-EA4
+ # 1.31: Original FE-lenses, SEL1850
+ # 1.35: SEL70200G
+ # 1.40: SEL1635Z, SELP28135G, Zeiss Loxia
+ },
+ # 0x0016 - 0x003f: non-0 data present when: 0x0001>0 AND 0x0008=4(E-mount) AND 0x000f<255
);
diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm
index e8a17328..b6288810 100644
--- a/lib/Image/ExifTool/TagLookup.pm
+++ b/lib/Image/ExifTool/TagLookup.pm
@@ -830,7 +830,7 @@ my %tagLookup = (
'bracketvalue' => { 46 => 0x4 },
'brightness' => { 95 => 0xfe53, 125 => 'Brightness', 147 => 0x2c, 184 => 0x34, 306 => 0x25, 327 => 0x22, 339 => 0x2007, 380 => 'Brightness' },
'brightnessadj' => { 86 => 0x114, 209 => 0x0, 219 => 0x2d, 366 => 0x8018 },
- 'brightnessvalue' => { 95 => 0x9203, 153 => [0x691,0x49c3], 240 => 0x1003, 346 => 0x1140, 347 => 0x1140, 348 => 0x111c, 349 => 0x1198, 350 => 0x1174, 351 => 0x102c, 352 => 0x224, 384 => 'BrightnessValue' },
+ 'brightnessvalue' => { 95 => 0x9203, 153 => [0x691,0x49c3], 240 => 0x1003, 343 => 0x1e, 346 => 0x1140, 347 => 0x1140, 348 => 0x111c, 349 => 0x1198, 350 => 0x1174, 351 => 0x102c, 352 => 0x224, 384 => 'BrightnessValue' },
'bulbduration' => { 62 => 0x18 },
'burstmode' => { 111 => 0xa, 255 => 0x2a },
'burstmode2' => { 111 => 0x18 },
@@ -907,6 +907,10 @@ my %tagLookup = (
'catalogsets' => { 103 => 0xff, 369 => 'CatalogSets', 373 => 'CatalogSets' },
'categories' => { 51 => 0x23, 375 => 'categories' },
'category' => { 103 => 0xf, 234 => 0x30, 392 => 'Category' },
+ 'cbcrgain' => { 316 => 0xa036 },
+ 'cbcrgaindefault' => { 316 => 0xa035 },
+ 'cbcrmatrix' => { 316 => 0xa034 },
+ 'cbcrmatrixdefault' => { 316 => 0xa033 },
'ccdboardversion' => { 251 => 0x331 },
'ccdscanmode' => { 240 => 0x1039 },
'ccdsensitivity' => { 206 => 0x6 },
@@ -933,6 +937,7 @@ my %tagLookup = (
'childfontfiles' => { 408 => [\'Fonts','FontsChildFontFiles'] },
'chmodeshootingspeed' => { 223 => '10.3', 224 => '11.2' },
'chromablurradius' => { 95 => 0xc631 },
+ 'chromatic aberration' => { 316 => 0xa051 },
'chromaticaberration' => { 87 => 0x66 },
'chromaticaberrationb' => { 380 => 'ChromaticAberrationB' },
'chromaticaberrationblue' => { 87 => 0x6b },
@@ -1483,6 +1488,7 @@ my %tagLookup = (
'devicesettingdescriptioncolumns' => { 384 => [\'DeviceSettingDescription','DeviceSettingDescriptionColumns'] },
'devicesettingdescriptionrows' => { 384 => [\'DeviceSettingDescription','DeviceSettingDescriptionRows'] },
'devicesettingdescriptionsettings' => { 384 => [\'DeviceSettingDescription','DeviceSettingDescriptionSettings'] },
+ 'devicetype' => { 316 => 0x2 },
'dialdirectiontvav' => { 68 => 0x706 },
'digitalcreationdate' => { 103 => 0x3e },
'digitalcreationtime' => { 103 => 0x3f },
@@ -1536,6 +1542,7 @@ my %tagLookup = (
'distance2' => { 111 => 0x2c },
'distance3' => { 111 => 0x30 },
'distance4' => { 111 => 0x34 },
+ 'distortion' => { 316 => 0xa050 },
'distortioncontrol' => { 188 => 0x10 },
'distortioncorrection' => { 87 => 0x67, 235 => 0x50b, 258 => '7.1', 278 => 0x0, 361 => 0x601, 362 => 0x5b },
'distortioncorrection2' => { 239 => 0x1011 },
@@ -1591,6 +1598,8 @@ my %tagLookup = (
'dynamicrangeoptimizersetting' => { 150 => 0x27, 329 => 0xc, 343 => 0x4 },
'dynamicrangesetting' => { 100 => 0x1402 },
'e-dialinprogram' => { 269 => '1.3' },
+ 'e-mountversioncamera' => { 329 => 0x3f3, 365 => 0xb },
+ 'e-mountversionlens' => { 329 => 0x3f0, 365 => 0xd },
'earliestageorloweststage' => { 94 => [\'GeologicalContext','GeologicalContextEarliestAgeOrLowestStage'] },
'earliesteonorlowesteonothem' => { 94 => [\'GeologicalContext','GeologicalContextEarliestEonOrLowestEonothem'] },
'earliestepochorlowestseries' => { 94 => [\'GeologicalContext','GeologicalContextEarliestEpochOrLowestSeries'] },
@@ -1674,7 +1683,7 @@ my %tagLookup = (
'exposurebracketstepsize' => { 269 => 0x8 },
'exposurebracketvalue' => { 182 => 0x19 },
'exposurecompensation' => { 62 => 0x6, 77 => 0x0, 95 => 0x9204, 111 => 0x24, 125 => 'ExposureComp', 147 => 0xd, 148 => 0x53, 149 => 0x1e, 153 => 0x49c0, 240 => 0x1006, 288 => 0x16, 316 => 0xa013, 319 => [0xc,0x35,0x4d], 346 => 0x114c, 347 => 0x114c, 348 => 0x1128, 350 => 0x1180, 351 => 0x1038, 352 => 0x230, 384 => 'ExposureBiasValue' },
- 'exposurecompensation2' => { 343 => 0x2a },
+ 'exposurecompensation2' => { 343 => [0x24,0x26,0x2a] },
'exposurecompensationmode' => { 150 => 0x47, 153 => 0x2a },
'exposurecompensationset' => { 329 => 0x3, 343 => 0x1e },
'exposurecompensationsetting' => { 150 => 0x1 },
@@ -1692,7 +1701,7 @@ my %tagLookup = (
'exposuremodeinmanual' => { 68 => 0x10b },
'exposureprogram' => { 95 => 0x8822, 310 => 0x1001, 320 => 0x17e, 327 => 0x3c, 328 => 0x3c, 329 => 0x5, 333 => 0x14, 338 => 0x3f, 343 => 0x2, 346 => 0x1175, 347 => 0x1179, 348 => 0x1155, 349 => 0x11d1, 350 => 0x11ad, 351 => 0x1065, 352 => 0x25d, 362 => 0x48, 384 => 'ExposureProgram' },
'exposureshift' => { 235 => 0x203 },
- 'exposuretime' => { 5 => 0x4, 6 => 0x4, 7 => 0x4, 8 => 0x4, 9 => 0x4, 10 => 0x4, 11 => 0x4, 12 => 0x4, 13 => 0x4, 14 => 0x4, 15 => 0x4, 16 => 0x4, 17 => 0x4, 18 => 0x4, 19 => 0x4, 20 => 0x4, 21 => 0x4, 22 => 0x4, 23 => 0x4, 24 => 0x4, 25 => 0x4, 26 => 0x6, 27 => 0x7, 62 => 0x16, 95 => 0x829a, 108 => 0xfd05, 111 => 0x20, 113 => 0xfa24, 115 => 0xf104, 118 => 0x12, 120 => 0x38, 123 => 0x10, 125 => 'ExposureTime', 147 => 0x9, 148 => 0x35, 149 => 0x48, 150 => 0x8, 153 => 0x49b8, 288 => 0x12, 316 => 0xa018, 319 => [0x32,0x4a], 327 => 0x0, 328 => 0x0, 343 => 0x27, 362 => 0x10, 384 => 'ExposureTime' },
+ 'exposuretime' => { 5 => 0x4, 6 => 0x4, 7 => 0x4, 8 => 0x4, 9 => 0x4, 10 => 0x4, 11 => 0x4, 12 => 0x4, 13 => 0x4, 14 => 0x4, 15 => 0x4, 16 => 0x4, 17 => 0x4, 18 => 0x4, 19 => 0x4, 20 => 0x4, 21 => 0x4, 22 => 0x4, 23 => 0x4, 24 => 0x4, 25 => 0x4, 26 => 0x6, 27 => 0x7, 62 => 0x16, 95 => 0x829a, 108 => 0xfd05, 111 => 0x20, 113 => 0xfa24, 115 => 0xf104, 118 => 0x12, 120 => 0x38, 123 => 0x10, 125 => 'ExposureTime', 147 => 0x9, 148 => 0x35, 149 => 0x48, 150 => 0x8, 153 => 0x49b8, 288 => 0x12, 316 => 0xa018, 319 => [0x32,0x4a], 327 => 0x0, 328 => 0x0, 343 => [0x21,0x23,0x27], 362 => 0x10, 384 => 'ExposureTime' },
'exposuretime2' => { 319 => [0x33,0x4b] },
'exposuretuning' => { 182 => 0x1c },
'exposurevalue' => { 109 => 0x3 },
@@ -1787,16 +1796,18 @@ my %tagLookup = (
'face8size' => { 274 => 0xe },
'face9position' => { 43 => 0x18, 88 => 0x385, 89 => 0x1b8, 169 => 0x24, 273 => 0x10 },
'face9size' => { 274 => 0x10 },
- 'facedetect' => { 288 => 0x76 },
+ 'facedetect' => { 288 => 0x76, 316 => 0x100 },
'facedetectarea' => { 239 => 0x1201 },
'facedetectframecrop' => { 239 => 0x1207 },
'facedetectframesize' => { 43 => 0x3, 88 => 0x1, 89 => 0x4, 169 => 0x1, 239 => 0x1203, 288 => 0x77, 307 => 0xb6 },
'facedetection' => { 329 => 0x30, 343 => 0x19 },
'faceid' => { 376 => 'FaceID' },
'faceinfounknown' => { 91 => 0x2089 },
+ 'facename' => { 316 => 0x123 },
'faceorientation' => { 89 => 0x8 },
'faceposition' => { 272 => 0x2, 317 => 0x4 },
'facepositions' => { 100 => 0x4103 },
+ 'facerecognition' => { 316 => 0x120 },
'facesdetected' => { 43 => 0x2, 44 => 0x2, 45 => 0x3, 88 => 0x0, 89 => 0x2, 91 => 0x211c, 100 => 0x4100, 169 => 0x3, 239 => 0x1200, 255 => 0x3f, 272 => 0x0, 307 => 0xb5, 317 => 0x0, 334 => 0x0, 337 => 0x3, 345 => 0x30 },
'facesrecognized' => { 250 => 0x0 },
'facewidth' => { 44 => 0x1 },
@@ -1863,7 +1874,7 @@ my %tagLookup = (
'fixtureidentifier' => { 103 => 0x16 },
'flash' => { 92 => 'Flash', 95 => 0x9209, 148 => 0x1f, 149 => 0x15, 384 => 'Flash' },
'flashaction' => { 329 => [0x87,0x287] },
- 'flashaction2' => { 343 => 0x30 },
+ 'flashaction2' => { 343 => [0x2a,0x2c,0x30] },
'flashactivity' => { 29 => 0x1c },
'flashbatterylevel' => { 35 => 0x249 },
'flashbias' => { 255 => 0x24 },
@@ -1888,7 +1899,7 @@ my %tagLookup = (
'flashexposurecomp4' => { 173 => 0x27 },
'flashexposurecomparea' => { 224 => '38.4' },
'flashexposurecompset' => { 150 => 0x10, 262 => 0xe, 329 => 0x23, 343 => 0x1f },
- 'flashexposurecompset2' => { 343 => 0x2c },
+ 'flashexposurecompset2' => { 343 => [0x26,0x2c] },
'flashexposureindicator' => { 150 => 0x54 },
'flashexposureindicatorlast' => { 150 => 0x56 },
'flashexposureindicatornext' => { 150 => 0x55 },
@@ -1938,9 +1949,9 @@ my %tagLookup = (
'flexiblespotposition' => { 339 => 0x201d },
'flickerreduce' => { 318 => 0x218 },
'fliphorizontal' => { 216 => 0x76a43206 },
- 'fnumber' => { 5 => 0x3, 7 => 0x3, 9 => 0x3, 11 => 0x3, 12 => 0x3, 13 => 0x3, 14 => 0x3, 15 => 0x3, 16 => 0x3, 17 => 0x3, 18 => 0x3, 19 => 0x3, 20 => 0x3, 21 => 0x3, 22 => 0x3, 23 => 0x3, 24 => 0x3, 25 => 0x3, 26 => 0x5, 27 => 0x6, 62 => 0x15, 95 => 0x829d, 108 => 0xfd04, 111 => 0x1e, 113 => 0xfa23, 115 => 0xf103, 118 => 0x13, 120 => 0x3c, 123 => 0xc, 132 => 'FNumber', 147 => 0xa, 148 => 0x36, 149 => 0x47, 150 => 0x9, 153 => 0x49c7, 288 => 0x13, 316 => 0xa019, 319 => [0x31,0x49], 327 => 0x1, 328 => 0x1, 343 => 0x26, 384 => 'FNumber' },
+ 'fnumber' => { 5 => 0x3, 7 => 0x3, 9 => 0x3, 11 => 0x3, 12 => 0x3, 13 => 0x3, 14 => 0x3, 15 => 0x3, 16 => 0x3, 17 => 0x3, 18 => 0x3, 19 => 0x3, 20 => 0x3, 21 => 0x3, 22 => 0x3, 23 => 0x3, 24 => 0x3, 25 => 0x3, 26 => 0x5, 27 => 0x6, 62 => 0x15, 95 => 0x829d, 108 => 0xfd04, 111 => 0x1e, 113 => 0xfa23, 115 => 0xf103, 118 => 0x13, 120 => 0x3c, 123 => 0xc, 132 => 'FNumber', 147 => 0xa, 148 => 0x36, 149 => 0x47, 150 => 0x9, 153 => 0x49c7, 288 => 0x13, 316 => 0xa019, 319 => [0x31,0x49], 327 => 0x1, 328 => 0x1, 343 => [0x20,0x22,0x26], 384 => 'FNumber' },
'focallength' => { 5 => 0x1d, 6 => 0xa, 7 => 0x23, 8 => 0x9, 9 => 0x1d, 10 => 0x9, 11 => 0x1e, 12 => 0x1d, 13 => 0x1d, 14 => 0x1e, 15 => 0x1e, 16 => 0x1e, 17 => 0x28, 18 => 0x1e, 19 => 0x23, 20 => 0x1e, 21 => 0x1e, 22 => 0x23, 23 => 0x23, 24 => 0x23, 25 => 0x1e, 48 => 0x1, 91 => 0x1d, 95 => 0x920a, 118 => 0x1d, 132 => 'FocalLength', 147 => 0x12, 178 => 0xa, 179 => 0xb, 279 => 0x9, 288 => 0x1d, 310 => 0x1500, 326 => 0xe, 350 => 0x1278, 351 => 0x1134, 352 => 0x32c, 384 => 'FocalLength' },
- 'focallength2' => { 343 => 0x29 },
+ 'focallength2' => { 343 => [0x23,0x25,0x29] },
'focallengthin35mmformat' => { 95 => 0xa405, 316 => 0xa01a, 384 => 'FocalLengthIn35mmFilm' },
'focallengthtelezoom' => { 326 => 0x10 },
'focalplanediagonal' => { 236 => 0x103, 240 => 0x205 },
@@ -1966,7 +1977,7 @@ my %tagLookup = (
'focusingscreen' => { 67 => 0x0, 68 => 0x80b, 73 => 0x0 },
'focuslocked' => { 146 => 0x14 },
'focusmode' => { 29 => 0x7, 90 => 0x3, 91 => [0x3003,0xd], 100 => 0x1021, 111 => 0x38, 125 => 'FocusMode', 147 => 0x30, 149 => 0xe, 150 => 0xc, 182 => 0x7, 235 => 0x301, 240 => 0x100b, 255 => 0x7, 288 => 0xd, 294 => 0x3, 310 => 0x1006, 320 => [0xb,0x5], 326 => [0x15,0x1d], 327 => 0x4d, 328 => 0x4d, 339 => [0xb042,0xb04e,0x201b], 343 => 0x13, 357 => 0x16 },
- 'focusmode2' => { 269 => '3.1', 343 => 0x32 },
+ 'focusmode2' => { 269 => '3.1', 343 => [0x2c,0x2e,0x32] },
'focusmodesetting' => { 225 => '10.1', 324 => 0x14, 325 => 0x15, 327 => 0x10, 328 => 0xf, 329 => 0x6 },
'focusmodeswitch' => { 150 => 0x58, 327 => 0x2e },
'focuspixel' => { 100 => 0x1023 },
@@ -2344,6 +2355,7 @@ my %tagLookup = (
'internalflashmode' => { 276 => 0x1 },
'internalflashstrength' => { 276 => 0x3 },
'internalflashtable' => { 240 => 0x1024 },
+ 'internallensserialnumber' => { 316 => 0xa005 },
'internalndfilter' => { 255 => 0x9d },
'internalserialnumber' => { 51 => 0x96, 61 => 0x9, 100 => 0x10, 153 => 0x49dc, 234 => 0x18, 236 => 0x102, 255 => 0x25, 268 => 0x4, 310 => 0x5, 353 => [0x7c,0xf0] },
'interopindex' => { 95 => 0x1, 385 => 'InteroperabilityIndex' },
@@ -3071,7 +3083,7 @@ my %tagLookup = (
'organisationinimagename' => { 390 => 'OrganisationInImageName' },
'organization' => { 394 => 'organization' },
'orientation' => { 95 => 0x112, 259 => 0x112, 399 => 'Orientation' },
- 'orientation2' => { 343 => 0x2e },
+ 'orientation2' => { 343 => [0x28,0x2e] },
'orientationlinkedafpoint' => { 68 => 0x516 },
'originalbestqualitysize' => { 95 => 0xc792 },
'originaldecisiondata' => { 92 => 'OriginalDecisionData' },
@@ -3477,12 +3489,14 @@ my %tagLookup = (
'rawandjpgrecording' => { 66 => 0x8, 152 => 0x109, 269 => 0xd },
'rawbrightnessadj' => { 86 => 0x38 },
'rawcoloradj' => { 86 => 0x2e },
+ 'rawcompressionmode' => { 316 => 0x45 },
'rawcropbottom' => { 296 => 0xd4 },
'rawcropleft' => { 296 => 0xd1 },
'rawcropright' => { 296 => 0xd3 },
'rawcroptop' => { 296 => 0xd2 },
'rawcustomsaturation' => { 86 => 0x30 },
'rawcustomtone' => { 86 => 0x34 },
+ 'rawdata' => { 316 => 0xa048 },
'rawdatauniqueid' => { 95 => 0xc65d },
'rawdepth' => { 154 => 0x10 },
'rawdevartfilter' => { 242 => 0x121 },
@@ -3632,7 +3646,7 @@ my %tagLookup = (
'releasebuttontousedial' => { 223 => '17.8', 224 => '18.5', 229 => '33.8', 230 => '17.6' },
'releasedate' => { 103 => 0x1e, 403 => 'releaseDate' },
'releasemode' => { 91 => 0x3001, 339 => 0xb049 },
- 'releasemode2' => { 346 => 0x112c, 347 => [0x112c,0x8], 348 => [0x1108,0x8], 349 => [0x1184,0x8], 350 => [0x1160,0x8], 351 => [0x4,0x1018], 352 => [0x4,0x210], 354 => 0x10, 355 => 0x10, 356 => 0x9, 362 => 0x34 },
+ 'releasemode2' => { 346 => 0x112c, 347 => [0x112c,0x8], 348 => [0x1108,0x8], 349 => [0x1184,0x8], 350 => [0x1160,0x8], 351 => [0x4,0x1018], 352 => [0x4,0x210], 353 => 0x3f, 354 => 0x10, 355 => 0x10, 356 => 0x9, 362 => 0x34 },
'releasemode3' => { 346 => 0x1128, 347 => 0x1128, 348 => 0x1104, 349 => 0x1180, 350 => 0x115c, 351 => 0x1014, 352 => 0x20c },
'releasesetting' => { 81 => 0x1016 },
'releasetime' => { 103 => 0x23 },
@@ -3747,6 +3761,7 @@ my %tagLookup = (
'samplerate' => { 124 => 'SampleRate' },
'samplesperpixel' => { 95 => 0x115, 399 => 'SamplesPerPixel' },
'samplestructure' => { 105 => 0x5a },
+ 'samsungmodelid' => { 316 => 0x3 },
'sanyoquality' => { 318 => 0x201 },
'sanyothumbnail' => { 318 => 0x100 },
'saturation' => { 8 => 0x6e, 10 => 0x76, 29 => 0xe, 40 => 0x1, 90 => 0xd, 91 => [0x3013,0x1f], 95 => [0xa409,0xfe55], 100 => 0x1003, 125 => 'Saturation', 147 => 0x1f, 148 => 0x32, 149 => 0x28, 150 => 0x1a, 155 => 0x1, 182 => [0x94,0xaa], 184 => 0x35, 255 => 0x40, 257 => 0x300d, 288 => 0x1f, 294 => 0xd, 306 => 0x27, 309 => 0x28, 310 => 0x1013, 319 => 0x10, 327 => 0x1e, 328 => 0x1b, 339 => 0x2005, 380 => 'Saturation', 384 => 'Saturation' },
@@ -4126,11 +4141,9 @@ my %tagLookup = (
'title' => { 126 => 'Title', 244 => 'Title', 247 => 'Title', 255 => 0x65, 301 => 'Title', 381 => 'title', 391 => 'Title', 401 => 'Title' },
'tonecomp' => { 182 => 0x81 },
'tonecurve' => { 60 => 0x1, 288 => 0x402, 380 => 'ToneCurve' },
- 'tonecurve1' => { 316 => 0xa040 },
- 'tonecurve2' => { 316 => 0xa041 },
- 'tonecurve3' => { 316 => 0xa042 },
- 'tonecurve4' => { 316 => 0xa043 },
'tonecurveactive' => { 86 => 0x110 },
+ 'tonecurveadobergb' => { 316 => 0xa043 },
+ 'tonecurveadobergbdefault' => { 316 => 0xa041 },
'tonecurveblue' => { 380 => 'ToneCurveBlue' },
'tonecurvebluex' => { 366 => 0x9003 },
'tonecurvebluey' => { 366 => 0x9007 },
@@ -4153,6 +4166,8 @@ my %tagLookup = (
'tonecurveredx' => { 366 => 0x9001 },
'tonecurveredy' => { 366 => 0x9005 },
'tonecurves' => { 288 => 0x403 },
+ 'tonecurvesrgb' => { 316 => 0xa042 },
+ 'tonecurvesrgbdefault' => { 316 => 0xa040 },
'tonelevel' => { 235 => 0x52e },
'toningeffect' => { 46 => 0xf, 182 => 0xb3, 184 => 0x38, 310 => 0x1015 },
'toningeffectauto' => { 57 => 0xa4 },
@@ -4349,8 +4364,9 @@ my %tagLookup = (
'vignettecontrol' => { 182 => 0x2a, 216 => 0x76a43205 },
'vignettecontrolintensity' => { 216 => 0xac6bd5c0 },
'vignettemidpoint' => { 380 => 'VignetteMidpoint' },
- 'vignetting' => { 310 => 0x1011 },
- 'vignettingcorrection' => { 278 => 0x2, 339 => 0x2011 },
+ 'vignetting' => { 310 => 0x1011, 316 => 0xa052 },
+ 'vignettingcorrection' => { 278 => 0x2, 316 => 0xa053, 339 => 0x2011 },
+ 'vignettingsetting' => { 316 => 0xa054 },
'voicememo' => { 318 => 0x216 },
'volume' => { 394 => 'volume' },
'vr_0x66' => { 188 => 0x66 },
@@ -5048,6 +5064,7 @@ my %tagExists = (
'canoncamerainfounknown16' => 1,
'canoncamerainfounknown32' => 1,
'canoncamerasettings' => 1,
+ 'canoncnop' => 1,
'canoncnth' => 1,
'canoncolorinfo1' => 1,
'canoncolorinfo2' => 1,
@@ -7312,7 +7329,6 @@ my %tagExists = (
'ratingorg' => 1,
'ratioimage' => 1,
'rawcodecversion' => 1,
- 'rawdata' => 1,
'rawdatalength' => 1,
'rawdataoffset' => 1,
'rawdatarotation' => 1,
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index da4f977d..4c0d3b5a 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -832,7 +832,7 @@ EXIF 2.3 specification.
0xc7a1 CameraLabel IFD0 string
0xc7a3 ProfileHueSatMapEncoding IFD0 int32u!
0xc7a4 ProfileLookTableEncoding IFD0 int32u!
- 0xc7a5 BaselineExposureOffset IFD0 rational64u!
+ 0xc7a5 BaselineExposureOffset IFD0 rational64s!
0xc7a6 DefaultBlackRender IFD0 int32u!
0xc7a7 NewRawImageDigest IFD0 int8u[16]!
0xc7a8 RawToPreviewGain IFD0 double!
@@ -5527,6 +5527,12 @@ Information about creative filter settings.
0x0601 PaintingFilter N
0x0701 WatercolorFilter N
+=head3 Canon CNOP Tags
+
+ Tag ID Tag Name Writable
+ ------ -------- --------
+ [no tags known]
+
=head3 Canon CNTH Tags
Canon-specific QuickTime tags found in the CNTH atom of MOV videos from some
@@ -11883,14 +11889,21 @@ Tags found in the EXIF-format maker notes of newer Samsung models.
Tag ID Tag Name Writable
------ -------- --------
0x0001 MakerNoteVersion undef[4]
+ 0x0002 DeviceType int32u
+ 0x0003 SamsungModelID int32u
0x0021 PictureWizard Samsung PictureWizard
0x0030 LocalLocationName string
0x0031 LocationName string
0x0035 PreviewIFD Nikon PreviewIFD
0x0043 CameraTemperature rational64s
+ 0x0045 RawCompressionMode int32u
+ 0x0100 FaceDetect int16u
+ 0x0120 FaceRecognition int32u
+ 0x0123 FaceName string
0xa001 FirmwareName string
0xa003 LensType int16u[n]
0xa004 LensFirmware string
+ 0xa005 InternalLensSerialNumber string
0xa010 SensorAreas int32u[8]
0xa011 ColorSpace int16u
0xa012 SmartRange int16u
@@ -11908,10 +11921,20 @@ Tags found in the EXIF-format maker notes of newer Samsung models.
0xa030 ColorMatrix int32s[9]
0xa031 ColorMatrixSRGB int32s[9]
0xa032 ColorMatrixAdobeRGB int32s[9]
- 0xa040 ToneCurve1 int32u[23]
- 0xa041 ToneCurve2 int32u[23]
- 0xa042 ToneCurve3 int32u[23]
- 0xa043 ToneCurve4 int32u[23]
+ 0xa033 CbCrMatrixDefault int32s[4]
+ 0xa034 CbCrMatrix int32s[4]
+ 0xa035 CbCrGainDefault int32u[2]
+ 0xa036 CbCrGain int32u[2]
+ 0xa040 ToneCurveSRGBDefault int32u[23]
+ 0xa041 ToneCurveAdobeRGBDefault int32u[23]
+ 0xa042 ToneCurveSRGB int32u[23]
+ 0xa043 ToneCurveAdobeRGB int32u[23]
+ 0xa048 RawData? int32s[12]
+ 0xa050 Distortion? int32s[8]
+ 0xa051 Chromatic Aberration? int16u[22]
+ 0xa052 Vignetting? int16u[15]
+ 0xa053 VignettingCorrection? int16u[15]
+ 0xa054 VignettingSetting? int16u[15]
=head3 Samsung PictureWizard Tags
@@ -12552,20 +12575,35 @@ A580, A33, A35, A55, NEX-3/5/C3 and VG10E.
24 ViewingMode int8u
25 FaceDetection int8u
26 CustomWB_RBLevels int16uRev[2]
- 30 ExposureCompensationSet int8u
- 31 FlashExposureCompSet int8u
+ 30 BrightnessValue int8u
+ ExposureCompensationSet int8u
+ 31 ISO int8u
+ FlashExposureCompSet int8u
+ 32 FNumber int8u
+ LiveViewAFMethod int8u
+ 33 ExposureTime int8u
+ ISO int8u
+ 34 FNumber int8u
+ 35 FocalLength2 int8u
+ ExposureTime int8u
+ 36 ExposureCompensation2 int16s
+ 37 FocalLength2 int8u
ISO int8u
- 32 LiveViewAFMethod int8u
- 33 ISO int8u
- 37 ISO int8u
- 38 FNumber int8u
+ 38 FlashExposureCompSet2 int16s
+ ExposureCompensation2 int16s
+ FNumber int8u
39 ExposureTime int8u
- 41 FocalLength2 int8u
- FocusPosition2 int8u
- 42 ExposureCompensation2 int16s
+ 40 Orientation2 int8u
+ 41 FocusPosition2 int8u
+ FocalLength2 int8u
+ 42 FlashAction2 int8u
+ ExposureCompensation2 int16s
43 FocusPosition2 int8u
- 44 FlashExposureCompSet2 int16s
- 46 Orientation2 int8u
+ 44 FocusMode2 int8u
+ FlashAction2 int8u
+ FlashExposureCompSet2 int16s
+ 46 FocusMode2 int8u
+ Orientation2 int8u
47 FocusPosition2 int8u
48 FlashAction2 int8u
50 FocusMode2 int8u
@@ -12773,6 +12811,8 @@ A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E.
780 SequenceNumber int8u
788 ImageNumber int16u & 0x3fff
790 FolderNumber int16u & 0x3ff
+ 1008 E-mountVersionLens int16u
+ 1011 E-mountVersionCamera int16u
1015 LensType2 int16u
1024 ImageNumber int16u & 0x3fff
1026 FolderNumber int16u & 0x3ff
@@ -13036,7 +13076,7 @@ Valid for DSC-RX100M2, DSC-QX10/QX100.
=head3 Sony Tag2010g Tags
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
-ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
Tag ID Tag Name Writable
------ -------- --------
@@ -13132,6 +13172,7 @@ substitution cipher, but the deciphered values are listed below.
0x0032 ImageCount int32u
0x003a SonyExposureTime int16u
0x003c SonyFNumber int16u
+ 0x003f ReleaseMode2 int8u
0x004c ImageCount2 int32u
0x0051 SonyDateTime2 undef[6]
0x007c InternalSerialNumber int8u[4]~
@@ -13184,7 +13225,7 @@ DSC-HX50V, DSC-QX10/QX100.
=head3 Sony Tag9400c Tags
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
-ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
Tag ID Tag Name Writable
------ -------- --------
@@ -13242,7 +13283,7 @@ Valid for SLT, NEX, ILCE-3000/3500 and several DSC models.
=head3 Sony Tag9405b Tags
Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
-ILCE-7/7R/7S/5000/5100/6000/QX1, ILCA-77M2.
+ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.
Tag ID Tag Name Writable
------ -------- --------
@@ -13294,6 +13335,8 @@ NEX and ILCE models only.
------ -------- --------
0x0008 LensMount int8u
0x0009 LensType2 int16u
+ 0x000b E-mountVersionCamera int16u
+ 0x000d E-mountVersionLens int16u
=head3 Sony AFInfo Tags
@@ -19421,7 +19464,7 @@ added dynamically to this table after processing the Meta Keys information.
'plID' PlayListID N
'purd' PurchaseDate N
'purl' PodcastURL N
- 'rate' Rating N
+ 'rate' RatingPercent N
'rtng' Rating N
'sfID' AppleStoreCountry N
'soaa' SortAlbumArtist N
@@ -19906,6 +19949,7 @@ multi-language user data tags found, even if they don't exist in this table.
'CNCV' CompressorVersion N
'CNFV' FirmwareVersion N
'CNMN' Model N
+ 'CNOP' CanonCNOP Canon CNOP
'CNTH' CanonCNTH Canon CNTH
'DcMD' KodakDcMD Kodak DcMD
'FFMV' FujiFilmFFMV FujiFilm FFMV
diff --git a/lib/Image/ExifTool/WriteExif.pl b/lib/Image/ExifTool/WriteExif.pl
index b689cf4e..450760bd 100644
--- a/lib/Image/ExifTool/WriteExif.pl
+++ b/lib/Image/ExifTool/WriteExif.pl
@@ -1148,7 +1148,7 @@ my %writeTable = (
Protected => 1,
},
0xc7a5 => { # BaselineExposureOffset
- Writable => 'rational64u',
+ Writable => 'rational64s', # (incorrectly "RATIONAL" in DNG 1.4 spec)
WriteGroup => 'IFD0',
Protected => 1,
},
@@ -3180,9 +3180,15 @@ NoOverwrite: next if $isNew > 0;
$entryBasedFixup->ApplyFixup(\$dirBuff);
undef $entryBasedFixup;
}
+ # initialize next IFD pointer to zero
+ my $nextIFD = Set32u(0);
+ # some cameras use a different amount of padding after the makernote IFD
+ if ($dirName eq 'MakerNotes' and $$dirInfo{Parent} =~ /^(ExifIFD|IFD0)$/) {
+ my ($rel, $pad) = Image::ExifTool::MakerNotes::GetMakerNoteOffset($et);
+ $nextIFD = "\0" x $pad if defined $pad and ($pad==0 or ($pad>4 and $pad<=32));
+ }
# add directory entry count to start of IFD and next IFD pointer to end
- # (temporarily set next IFD pointer to zero)
- $newData .= Set16u($newEntries) . $dirBuff . Set32u(0);
+ $newData .= Set16u($newEntries) . $dirBuff . $nextIFD;
# get position of value data in newData
my $valPos = length($newData);
# go back now and set next IFD pointer if this isn't the first IFD
@@ -3192,7 +3198,7 @@ NoOverwrite: next if $isNew > 0;
$fixup->AddFixup($nextIfdPos,'NextIFD'); # add fixup for this offset in newData
}
# remember position of 'next IFD' pointer so we can set it next time around
- $nextIfdPos = $valPos - 4;
+ $nextIfdPos = length($nextIFD) ? $valPos - length($nextIFD) : undef;
# add value data after IFD
$newData .= $valBuff;
#
diff --git a/lib/Image/ExifTool/WriteQuickTime.pl b/lib/Image/ExifTool/WriteQuickTime.pl
index e502622b..22582859 100644
--- a/lib/Image/ExifTool/WriteQuickTime.pl
+++ b/lib/Image/ExifTool/WriteQuickTime.pl
@@ -145,9 +145,13 @@ sub WriteQuickTime($$$)
my $start = $$subdir{Start} || 0;
my $base = ($$dirInfo{Base} || 0) + $raf->Tell() - $size;
my $dPos = 0;
+ my $hdrLen = $start;
if ($$subdir{Base}) {
- $dPos -= eval $$subdir{Base};
+ my $localBase = eval $$subdir{Base};
+ $dPos -= $localBase;
$base -= $dPos;
+ # get length of header before base offset
+ $hdrLen -= $localBase if $localBase <= $hdrLen;
}
my %subdirInfo = (
Parent => $dirName,
@@ -162,6 +166,12 @@ sub WriteQuickTime($$$)
Multi => $$subdir{Multi}, # necessary?
OutFile => $outfile,
);
+ # pass the header pointer if necessary (for EXIF IFD's
+ # where the Base offset is at the end of the header)
+ if ($hdrLen and $hdrLen < $size) {
+ my $header = substr($buff,0,$hdrLen);
+ $subdirInfo{HeaderPtr} = \$header;
+ }
SetByteOrder('II') if $$subdir{ByteOrder} and $$subdir{ByteOrder} =~ /^Little/;
my $oldWriteGroup = $$et{CUR_WRITE_GROUP};
if ($subName eq 'Track') {
@@ -171,17 +181,19 @@ sub WriteQuickTime($$$)
my $subTable = GetTagTable($$subdir{TagTable});
# demote non-QuickTime errors to warnings
$$et{DemoteErrors} = 1 unless $$subTable{GROUPS}{0} eq 'QuickTime';
+ my $oldChanged = $$et{CHANGED};
$newData = $et->WriteDirectory(\%subdirInfo, $subTable);
if ($$et{DemoteErrors}) {
# just copy existing subdirectory a non-quicktime error occurred
- undef $newData if $$et{DemoteErrors} > 1;
+ $$et{CHANGED} = $oldChanged if $$et{DemoteErrors} > 1;
delete $$et{DemoteErrors};
}
+ undef $newData if $$et{CHANGED} == $oldChanged; # don't change unless necessary
$$et{CUR_WRITE_GROUP} = $oldWriteGroup;
SetByteOrder('MM');
# add back header if necessary
- if ($$subdir{Start} and defined $newData and length $newData) {
- $newData = substr($buff,0,$$subdir{Start}) . $newData;
+ if ($start and defined $newData and length $newData) {
+ $newData = substr($buff,0,$start) . $newData;
}
# the directory exists, so we don't need to add it
delete $$addDirs{$subName} if IsCurPath($et, $subName);
diff --git a/lib/Image/ExifTool/XMPStruct.pl b/lib/Image/ExifTool/XMPStruct.pl
index 4320f53e..5297fe67 100644
--- a/lib/Image/ExifTool/XMPStruct.pl
+++ b/lib/Image/ExifTool/XMPStruct.pl
@@ -623,7 +623,7 @@ sub RestoreStruct($;$)
# this could happen for invalid XMP containing mixed lists
# (or for something like this -- what should we do here?:
# <meta:user-defined meta:name="License">test</meta:user-defined>)
- $et->Warn("$$strInfo{Name} is not a structure!");
+ $et->Warn("$$strInfo{Name} is not a structure!") unless $$et{NO_STRUCT_WARN};
next;
}
} else {
@@ -734,8 +734,10 @@ sub RestoreStruct($;$)
if ($err) {
# this may happen if we have a structural error in the XMP
# (like an improperly contained list for example)
- my $ns = $$tagInfo{Namespace} || $$tagInfo{Table}{NAMESPACE} || '';
- $et->Warn("Error $err placing $ns:$$tagInfo{TagID} in structure or list", 1);
+ unless ($$et{NO_STRUCT_WARN}) {
+ my $ns = $$tagInfo{Namespace} || $$tagInfo{Table}{NAMESPACE} || '';
+ $et->Warn("Error $err placing $ns:$$tagInfo{TagID} in structure or list", 1);
+ }
delete $structs{$strInfo} unless $oldStruct;
} elsif ($tagInfo eq $strInfo) {
# just a regular list tag
diff --git a/lib/Image/ExifTool/ZIP.pm b/lib/Image/ExifTool/ZIP.pm
index a0fb6407..ac34ec1f 100644
--- a/lib/Image/ExifTool/ZIP.pm
+++ b/lib/Image/ExifTool/ZIP.pm
@@ -19,7 +19,7 @@ use strict;
use vars qw($VERSION $warnString);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.17';
+$VERSION = '1.18';
sub WarnProc($) { $warnString = $_[0]; }
@@ -488,9 +488,12 @@ sub ProcessZIP($$)
DataPt => \$buff,
DirLen => length $buff,
DataLen => length $buff,
- NoStruct => 1, # (avoid structure warnings when copying)
);
+ # (avoid structure warnings when copying from XML)
+ my $oldWarn = $$et{NO_STRUCT_WARN};
+ $$et{NO_STRUCT_WARN} = 1;
$et->ProcessDirectory(\%dirInfo, GetTagTable('Image::ExifTool::XMP::Main'));
+ $$et{NO_STRUCT_WARN} = $oldWarn;
}
}
# process rootfile of EPUB container if applicable
@@ -520,10 +523,13 @@ sub ProcessZIP($$)
DataPt => \$buff,
DirLen => length $buff,
DataLen => length $buff,
- NoStruct => 1,
IgnoreProp => { 'package' => 1, metadata => 1 },
);
+ # (avoid structure warnings when copying from XML)
+ my $oldWarn = $$et{NO_STRUCT_WARN};
+ $$et{NO_STRUCT_WARN} = 1;
$et->ProcessDirectory(\%dirInfo, GetTagTable('Image::ExifTool::XMP::XML'));
+ $$et{NO_STRUCT_WARN} = $oldWarn;
last;
}
if ($openDocType{$mime} or $meta) {