From 71286f34ae1a8d7dca028996bd9ac88de62df110 Mon Sep 17 00:00:00 2001 From: exiftool Date: Sat, 25 Apr 2015 10:58:19 -0400 Subject: Update to 9.93 --- lib/Image/ExifTool.pm | 39 +- lib/Image/ExifTool.pod | 6 +- lib/Image/ExifTool/AIFF.pm | 7 +- lib/Image/ExifTool/BuildTagLookup.pm | 5 +- lib/Image/ExifTool/Canon.pm | 13 +- lib/Image/ExifTool/EXE.pm | 45 ++- lib/Image/ExifTool/Exif.pm | 9 +- lib/Image/ExifTool/Font.pm | 6 +- lib/Image/ExifTool/MOI.pm | 3 +- lib/Image/ExifTool/MWG.pm | 5 +- lib/Image/ExifTool/Minolta.pm | 198 +++++----- lib/Image/ExifTool/Olympus.pm | 3 +- lib/Image/ExifTool/PostScript.pm | 3 +- lib/Image/ExifTool/Radiance.pm | 2 +- lib/Image/ExifTool/Rawzor.pm | 5 +- lib/Image/ExifTool/Real.pm | 5 +- lib/Image/ExifTool/Sony.pm | 730 +++++++++++++++++------------------ lib/Image/ExifTool/TagLookup.pm | 12 + lib/Image/ExifTool/TagNames.pod | 85 ++-- lib/Image/ExifTool/VCard.pm | 111 ++++-- lib/Image/ExifTool/WriteXMP.pl | 25 +- lib/Image/ExifTool/Writer.pl | 4 +- lib/Image/ExifTool/XMP.pm | 4 +- lib/Image/ExifTool/XMP2.pl | 10 +- 24 files changed, 740 insertions(+), 595 deletions(-) (limited to 'lib') diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm index 7e7ed883..c24e4a13 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.92'; +$VERSION = '9.93'; $RELEASE = ''; @ISA = qw(Exporter); %EXPORT_TAGS = ( @@ -472,6 +472,20 @@ my %fileTypeLookup = ( ZIP => ['ZIP', 'ZIP archive'], ); +# typical extension for each file type (if different than lowercase FileType) +my %fileTypeExt = ( + 'Canon 1D RAW' => 'tif', + DICOM => 'dcm', + FLIR => 'fff', + GZIP => 'gz', + JPEG => 'jpg', + M2TS => 'mts', + MPEG => 'mpg', + TIFF => 'tif', + Torrent => 'torrent', + VCard => 'vcf', +); + # descriptions for file types not found in above file extension lookup my %fileDescription = ( DICOM => 'Digital Imaging and Communications in Medicine', @@ -582,13 +596,14 @@ my %fileDescription = ( ORF => 'image/x-olympus-orf', OTF => 'application/x-font-otf', PBM => 'image/x-portable-bitmap', + PCD => 'image/x-photo-cd', PDB => 'application/vnd.palm', PDF => 'application/pdf', PEF => 'image/x-pentax-pef', + PFA => 'application/x-font-type1', # (needed if handled by PostScript module) PGF => 'image/pgf', PGM => 'image/x-portable-graymap', PHP => 'application/x-httpd-php', - PCD => 'image/x-photo-cd', PICT => 'image/pict', PLIST=> 'application/xml', # (binary PLIST format is 'application/x-plist', recognized at run time) PNG => 'image/png', @@ -803,7 +818,7 @@ my %moduleName = ( my %weakMagic = ( MP3 => 1 ); # file types that are determined by the process proc when FastScan == 3 -my %processType = ( JPEG => 1, TIFF => 1, XMP => 1 ); +my %processType = ( JPEG=>1, TIFF=>1, XMP=>1, AIFF=>1, EXE=>1, Font=>1, PS=>1, Real=>1 ); # lookup for valid character set names (keys are all lower case) %charsetName = ( @@ -987,6 +1002,7 @@ sub DummyWriteProc { return 1; } extension commonly used for the file, but there are exceptions to this rule }, }, + FileTypeExtension => { Notes => 'usual lowercase extension for this file type' }, FileModifyDate => { Description => 'File Modification Date/Time', Notes => q{ @@ -1905,7 +1921,9 @@ sub ExtractInfo($;@) $dirInfo{Parent} = ($type eq 'TIFF') ? $tiffType : $type; # don't process the file when FastScan == 3 if ($fast and $fast == 3 and not $processType{$type}) { - $self->SetFileType($dirInfo{Parent}); # (uc for Torrent) + unless ($weakMagic{$type} and (not $ext or $ext ne $type)) { + $self->SetFileType($dirInfo{Parent}); + } last; } my $module = $moduleName{$type}; @@ -6798,10 +6816,11 @@ sub DoEscape($$) # Inputs: 0) ExifTool object reference # 1) Optional file type (uses FILE_TYPE if not specified) # 2) Optional MIME type (uses our lookup if not specified) +# 3) Optional recommended extension (converted to lower case; uses FileType if undef) # Notes: Will NOT set file type twice (subsequent calls ignored) -sub SetFileType($;$$) +sub SetFileType($;$$$) { - my ($self, $fileType, $mimeType) = @_; + my ($self, $fileType, $mimeType, $normExt) = @_; unless ($$self{VALUE}{FileType} and not $$self{DOC_NUM}) { my $baseType = $$self{FILE_TYPE}; my $ext = $$self{FILE_EXT}; @@ -6817,7 +6836,12 @@ sub SetFileType($;$$) $mimeType or $mimeType = $mimeType{$fileType}; # use base file type if necessary (except if 'TIFF', which is a special case) $mimeType = $mimeType{$baseType} unless $mimeType or $baseType eq 'TIFF'; + unless (defined $normExt) { + $normExt = $fileTypeExt{$fileType}; + $normExt = $fileType unless defined $normExt; + } $self->FoundTag('FileType', $fileType); + $self->FoundTag('FileTypeExtension', lc $normExt); $self->FoundTag('MIMEType', $mimeType || 'application/unknown'); } } @@ -6831,6 +6855,9 @@ sub OverrideFileType($$) my ($self, $fileType) = @_; if (defined $$self{VALUE}{FileType} and $fileType ne $$self{VALUE}{FileType}) { $$self{VALUE}{FileType} = $fileType; + my $normExt = $fileTypeExt{$fileType}; + $normExt = $fileType unless defined $normExt; + $$self{VALUE}{FileTypeExtension} = lc $normExt; # only override MIME type if unique for the derived file type $$self{VALUE}{MIMEType} = $mimeType{$fileType} if $mimeType{$fileType}; if ($$self{OPTIONS}{Verbose}) { diff --git a/lib/Image/ExifTool.pod b/lib/Image/ExifTool.pod index 4832d557..970cef4d 100644 --- a/lib/Image/ExifTool.pod +++ b/lib/Image/ExifTool.pod @@ -472,9 +472,9 @@ for more information about the handling of special characters. =item CharsetEXIF -Internal encoding to use for stored EXIF "ASCII" string values. Unlike -other Charset options, CharsetEXIF may also be set to undef to pass through -all string values without recoding. Default is undef. +Internal encoding to use for stored EXIF "ASCII" string values. May also be +set to undef to pass through EXIF "ASCII" values without recoding. Set to +"UTF8" to conform with the MWG recommendation. Default is undef. =item CharsetFileName diff --git a/lib/Image/ExifTool/AIFF.pm b/lib/Image/ExifTool/AIFF.pm index 6624dc86..044f0673 100644 --- a/lib/Image/ExifTool/AIFF.pm +++ b/lib/Image/ExifTool/AIFF.pm @@ -18,7 +18,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::ID3; -$VERSION = '1.06'; +$VERSION = '1.07'; # information for time/date-based tags (time zero is Jan 1, 1904) my %timeInfo = ( @@ -181,6 +181,7 @@ sub ProcessAIFF($$) # verify this is a valid AIFF file return 0 unless $raf->Read($buff, 12) == 12; + my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; my $pos = 12; # check for DjVu image if ($buff =~ /^AT&TFORM/) { @@ -190,14 +191,16 @@ sub ProcessAIFF($$) return 0 unless $raf->Read($buf2, 4) == 4 and $buf2 =~ /^(DJVU|DJVM)/; $pos += 4; $buff = substr($buff, 4) . $buf2; - $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main'); $et->SetFileType('DJVU'); + return 1 if $fast3; + $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main'); # modifiy FileType to indicate a multi-page document $$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM'; $type = 'DjVu'; } else { return 0 unless $buff =~ /^FORM....(AIF(F|C))/s; $et->SetFileType($1); + return 1 if $fast3; $tagTablePtr = GetTagTable('Image::ExifTool::AIFF::Main'); $type = 'AIFF'; } diff --git a/lib/Image/ExifTool/BuildTagLookup.pm b/lib/Image/ExifTool/BuildTagLookup.pm index bd2d0fc3..e49e2793 100644 --- a/lib/Image/ExifTool/BuildTagLookup.pm +++ b/lib/Image/ExifTool/BuildTagLookup.pm @@ -32,7 +32,7 @@ use Image::ExifTool::XMP; use Image::ExifTool::Canon; use Image::ExifTool::Nikon; -$VERSION = '2.83'; +$VERSION = '2.84'; @ISA = qw(Exporter); sub NumbersFirst; @@ -2330,6 +2330,9 @@ sub WriteTagNames($$) # assume XMP module for this struct unless otherwise specified unshift @names, 'XMP' unless / /; push @structs, $_; # list this later + # hack to put Area Struct in with XMP tags, + # even though it is only used by the MWG module + push @structs, 'Area' if $_ eq 'Dimensions'; $suffix = ' Struct'; } $url = (shift @names) . '.html'; diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm index fa949799..719ba199 100644 --- a/lib/Image/ExifTool/Canon.pm +++ b/lib/Image/ExifTool/Canon.pm @@ -67,8 +67,8 @@ # 51) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4110.0.html # 52) Iliah Borg private communication (LibRaw) # 53) Niels Kristian Bech Jensen private communication -# 54) Jos Roost private communication # JD) Jens Duttke private communication +# JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Canon; @@ -83,7 +83,7 @@ sub ProcessSerialData($$$); sub ProcessFilters($$$); sub SwapWords($); -$VERSION = '3.47'; +$VERSION = '3.48'; # Note: Removed 'USM' from 'L' lenses since it is redundant - PH # (or is it? Ref 32 shows 5 non-USM L-type lenses) @@ -168,7 +168,7 @@ $VERSION = '3.47'; '33.11' => 'Carl Zeiss Planar T* 50mm f/1.4 ZE', #52 '33.12' => 'Carl Zeiss Makro-Planar T* 50mm f/2 ZE', #52 '33.13' => 'Carl Zeiss Makro-Planar T* 100mm f/2 ZE', #52 - '33.14' => 'Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE', #54 + '33.14' => 'Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE', #JR 35 => 'Canon EF 35-80mm f/4-5.6', #32 36 => 'Canon EF 38-76mm f/4.5-5.6', #32 37 => 'Canon EF 35-80mm f/4-5.6 or Tamron Lens', #32 @@ -331,8 +331,8 @@ $VERSION = '3.47'; 196 => 'Canon EF 75-300mm f/4-5.6 USM', #15/32 197 => 'Canon EF 75-300mm f/4-5.6 IS USM', 198 => 'Canon EF 50mm f/1.4 USM or Zeiss Lens', - 198.1 => 'Zeiss Otus 55mm f/1.4 ZE', #54 (seen only on Sony camera) - 198.2 => 'Zeiss Otus 85mm f/1.4 ZE', #54 (NC) + 198.1 => 'Zeiss Otus 55mm f/1.4 ZE', #JR (seen only on Sony camera) + 198.2 => 'Zeiss Otus 85mm f/1.4 ZE', #JR (NC) 199 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32 200 => 'Canon EF 75-300mm f/4-5.6 USM', #32 201 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32 @@ -621,9 +621,12 @@ $VERSION = '3.47'; 0x3760000 => 'PowerShot SX520 HS', #52 0x3770000 => 'PowerShot SX400 IS', 0x3780000 => 'PowerShot G7 X', #52 + 0x3790000 => 'PowerShot N2', 0x3800000 => 'PowerShot SX530 HS', 0x3820000 => 'PowerShot SX710 HS', 0x3830000 => 'PowerShot SX610 HS', + 0x3870000 => 'PowerShot ELPH 160 / IXUS 160', + 0x3890000 => 'PowerShot ELPH 170 IS / IXUS 170', 0x3910000 => 'PowerShot SX410 IS', 0x4040000 => 'PowerShot G1', 0x6040000 => 'PowerShot S100 / Digital IXUS / IXY Digital', diff --git a/lib/Image/ExifTool/EXE.pm b/lib/Image/ExifTool/EXE.pm index 9798b8c0..6ec3cd26 100644 --- a/lib/Image/ExifTool/EXE.pm +++ b/lib/Image/ExifTool/EXE.pm @@ -21,7 +21,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.08'; +$VERSION = '1.09'; sub ProcessPEResources($$); sub ProcessPEVersion($$); @@ -957,9 +957,10 @@ sub ProcessEXE($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; - my ($buff, $buf2, $type, $mime, $tagTablePtr, %dirInfo); + my ($buff, $buf2, $type, $mime, $ext, $tagTablePtr, %dirInfo); my $size = $raf->Read($buff, 0x40) or return 0; + my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; # # DOS and Windows EXE # @@ -999,7 +1000,8 @@ sub ProcessEXE($$) if ($size >= 0x40) { # NE header is 64 bytes (ref 2) # check for DLL my $appFlags = Get16u(\$buff, 0x0c); - $type = 'Win16 ' . ($appFlags & 0x80 ? 'DLL' : 'EXE'); + $ext = $appFlags & 0x80 ? 'DLL' : 'EXE'; + $type = "Win16 $ext"; # offset 0x02 is 2 bytes with linker version and revision numbers # offset 0x36 is executable type (2 = Windows) } @@ -1016,7 +1018,9 @@ sub ProcessEXE($$) my $machine = $Image::ExifTool::EXE::Main{0}{PrintConv}{Get16u(\$buff, 4)} || ''; my $winType = $machine =~ /64/ ? 'Win64' : 'Win32'; my $flags = Get16u(\$buff, 22); - $et->SetFileType($winType . ' ' . ($flags & 0x2000 ? 'DLL' : 'EXE')); + $ext = $flags & 0x2000 ? 'DLL' : 'EXE'; + $et->SetFileType("$winType $ext", undef, $ext); + return 1 if $fast3; # read the rest of the optional header if necessary my $optSize = Get16u(\$buff, 20); my $more = $optSize + 24 - $size; @@ -1057,9 +1061,11 @@ sub ProcessEXE($$) } } else { $type = 'Virtual Device Driver'; + $ext = 'exe'; #? } } else { $type = 'DOS EXE'; + $ext = 'exe'; } # # Mach-O (Mac OS X) @@ -1070,7 +1076,8 @@ sub ProcessEXE($$) $tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO'); if ($1 eq "\xca\xfe\xba\xbe") { SetByteOrder('MM'); - $et->SetFileType('Mach-O fat binary executable'); + $et->SetFileType('Mach-O fat binary executable', undef, ''); + return 1 if $fast3; my $count = Get32u(\$buff, 4); # get architecture count my $more = $count * 20 - ($size - 8); if ($more > 0) { @@ -1106,7 +1113,8 @@ sub ProcessEXE($$) $et->Warn('Error reading file'); } } elsif ($size >= 16) { - $et->SetFileType('Mach-O executable'); + $et->SetFileType('Mach-O executable', undef, ''); + return 1 if $fast3; my $info = { "\xfe\xed\xfa\xce" => ['32 bit', 'Big endian'], "\xce\xfa\xed\xfe" => ['32 bit', 'Little endian'], @@ -1130,7 +1138,8 @@ sub ProcessEXE($$) # } elsif ($buff =~ /^Joy!peff/ and $size > 12) { # ref http://developer.apple.com/documentation/mac/pdf/MacOS_RT_Architectures.pdf - $et->SetFileType('Classic MacOS executable'); + $et->SetFileType('Classic MacOS executable', undef, ''); + return 1 if $fast3; SetByteOrder('MM'); $tagTablePtr = GetTagTable('Image::ExifTool::EXE::PEF'); %dirInfo = ( @@ -1146,7 +1155,8 @@ sub ProcessEXE($$) # ELF (Unix) # } elsif ($buff =~ /^\x7fELF/ and $size >= 16) { - $et->SetFileType("ELF executable"); + $et->SetFileType('ELF executable', undef, ''); + return 1 if $fast3; SetByteOrder(Get8u(\$buff,5) == 1 ? 'II' : 'MM'); $tagTablePtr = GetTagTable('Image::ExifTool::EXE::ELF'); %dirInfo = ( @@ -1162,16 +1172,27 @@ sub ProcessEXE($$) # various scripts (perl, sh, etc...) # } elsif ($buff =~ m{^#!\s*/\S*bin/(\w+)}) { - $type = "$1 script"; - $mime = "text/x-$1"; + my $prog = $1; + $prog = $1 if $prog eq 'env' and $buff =~ /\b(perl|python|ruby|php)\b/; + $type = "$prog script"; + $mime = "text/x-$prog"; + $ext = { + perl => 'pl', + python => 'py', + ruby => 'rb', + php => 'php', + }->{$1}; + # use '.sh' for extension of all shell scripts + $ext = $prog =~ /sh$/ ? 'sh' : '' unless defined $ext; # # .a libraries # } elsif ($buff =~ /^!\x0a/) { - $type = 'Static library', + $type = 'Static library'; + $ext = 'a'; } return 0 unless $type; - $et->SetFileType($type, $mime); + $et->SetFileType($type, $mime, $ext); return 1; } diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm index 7b61b2a8..030452f3 100644 --- a/lib/Image/ExifTool/Exif.pm +++ b/lib/Image/ExifTool/Exif.pm @@ -52,7 +52,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::MakerNotes; -$VERSION = '3.69'; +$VERSION = '3.70'; sub ProcessExif($$$); sub WriteExif($$$); @@ -2710,7 +2710,8 @@ my %sampleFormat = ( ValueConv => q{ return "$val[2]x$val[3]" if $val[2] and $val[3] and $$self{TIFF_TYPE} =~ /^(CR2|Canon 1D RAW|IIQ|EIP)$/; - return "$val[0]x$val[1]"; + return "$val[0]x$val[1]" if IsFloat($val[0]) and IsFloat($val[1]); + return undef; }, }, Megapixels => { @@ -2825,7 +2826,7 @@ my %sampleFormat = ( 3 => 'FocusDistance', # focus distance in metres (0 is infinity) 4 => 'SubjectDistance', 5 => 'ObjectDistance', - 6 => 'AverageFocusDistance', + 6 => 'ApproximateFocusDistance ', 7 => 'FocusDistanceLower', 8 => 'FocusDistanceUpper', }, @@ -3637,7 +3638,7 @@ sub PrintLensID($$@) abs($lf - $lf0) > 0.5 or abs($la - $la0) > 0.15; # the basic parameters match, but also check against additional lens features # for Sony E lenses -- the full LensSpec string should match with end of LensType - $lensSpecPrt and $lens =~ /\Q$lensSpecPrt\E$/ and @best = ( $lens ), last; + $lensSpecPrt and $lens =~ /\Q$lensSpecPrt\E( \(|$)/ and @best = ( $lens ), last; # exactly-matching Sony E lens should have been found above, so skip # any not-exactly-matching Sony E-lenses next if $lens =~ /^Sony E /; diff --git a/lib/Image/ExifTool/Font.pm b/lib/Image/ExifTool/Font.pm index 7fa31a3a..c00f769c 100644 --- a/lib/Image/ExifTool/Font.pm +++ b/lib/Image/ExifTool/Font.pm @@ -19,7 +19,7 @@ use strict; use vars qw($VERSION %ttLang); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.07'; +$VERSION = '1.08'; sub ProcessOTF($$); @@ -346,6 +346,7 @@ sub ProcessTTC($$) # might as well put a limit on the number of fonts we will parse (< 256) return 0 unless $num < 0x100 and $raf->Read($buff, $num * 4) == $num * 4; $et->SetFileType('TTC'); + return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Main'); $et->HandleTag($tagTablePtr, 'numfonts', $num); # loop through all fonts in the collection @@ -376,6 +377,7 @@ sub ProcessOTF($$) return 0 unless $buff =~ /^(\0\x01\0\0|OTTO|true|typ1|\xa5(kbd|lst))[\0\x01]/; $et->SetFileType($1 eq 'OTTO' ? 'OTF' : 'TTF'); + return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; SetByteOrder('MM'); my $numTables = Get16u(\$buff, 4); return 0 unless $numTables > 0 and $numTables < 0x200; @@ -513,6 +515,7 @@ sub ProcessAFM($$) return 0 unless $buff =~ /^Start(Comp|Master)?FontMetrics\s+\d+/; my $ftyp = $1 ? ($1 eq 'Comp' ? 'ACFM' : 'AMFM') : 'AFM'; $et->SetFileType($ftyp, 'application/x-font-afm'); + return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; my $tagTablePtr = GetTagTable('Image::ExifTool::Font::AFM'); for (;;) { @@ -572,6 +575,7 @@ sub ProcessFont($$) $raf->Read($buf2, 11) == 11 and lc($buf2) eq "postscript\0") { $et->SetFileType('PFM'); + return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Main'); # process the PFM header diff --git a/lib/Image/ExifTool/MOI.pm b/lib/Image/ExifTool/MOI.pm index c6b62108..801773ef 100644 --- a/lib/Image/ExifTool/MOI.pm +++ b/lib/Image/ExifTool/MOI.pm @@ -14,7 +14,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.01'; +$VERSION = '1.02'; # MOI tags (ref 1) %Image::ExifTool::MOI::Main = ( @@ -111,6 +111,7 @@ sub ProcessMOI($$) my $size = unpack('x2N', $buff); $size == $$et{VALUE}{FileSize} or return 0; } + $et->SetFileType(); SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::MOI::Main'); return $et->ProcessBinaryData({ DataPt => \$buff }, $tagTablePtr); diff --git a/lib/Image/ExifTool/MWG.pm b/lib/Image/ExifTool/MWG.pm index de7774b4..da52d7ea 100644 --- a/lib/Image/ExifTool/MWG.pm +++ b/lib/Image/ExifTool/MWG.pm @@ -16,7 +16,7 @@ use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::XMP; -$VERSION = '1.14'; +$VERSION = '1.15'; sub RecoverTruncatedIPTC($$$); sub ListToString($); @@ -58,7 +58,8 @@ my $mwgLoaded; # flag set if we alreaded Load()ed the MWG tags Contrary to the EXIF specification, the MWG recommends that EXIF "ASCII" string values be stored as UTF-8. To honour this, the exiftool application sets the default internal EXIF string encoding to "UTF8" when the MWG module - is loaded (but this setting does not change automatically via the API). + is loaded, but via the API this must be done manually by setting the + CharsetEXIF option. A complication of the MWG specification is that although the MWG:Creator property may consist of multiple values, the associated EXIF tag diff --git a/lib/Image/ExifTool/Minolta.pm b/lib/Image/ExifTool/Minolta.pm index e2f552d0..83c29017 100644 --- a/lib/Image/ExifTool/Minolta.pm +++ b/lib/Image/ExifTool/Minolta.pm @@ -32,17 +32,13 @@ # 22) http://www.mi-fo.de/forum/index.php?act=attach&type=post&id=6024 # 23) Marcin Krol private communication # 24) http://cpanforum.com/threads/12291 -# 25) Jos Roost private communication, from one or more of -# - A100 brochure, 2006-07 -# - Alpha Lenses Accessories brochure, 2007-09 (JP) -# - Alpha Lenses brochure, 2010-09 -# - A77 brochure, 2011-08 # 26) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3521.0.html # 27) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.0.html # 28) Michael Reitinger private communication (RX100) # 29) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4086.0.html # 30) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication +# JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Minolta; @@ -53,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '2.22'; +$VERSION = '2.23'; # Full list of product codes for Sony-compatible Minolta lenses # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570) @@ -220,11 +216,11 @@ my %metabonesID = ( 18 => 'Minolta AF 28-80mm F3.5-5.6 II', 19 => 'Minolta AF 35mm F1.4 G', # G added (ref 18), but not New as per ref 13 20 => 'Minolta/Sony 135mm F2.8 [T4.5] STF', - # 20 => 'Sony 135mm F2.8 [T4.5] STF (SAL135F28)', (ref 25) + # 20 => 'Sony 135mm F2.8 [T4.5] STF (SAL135F28)', (ref JR) 22 => 'Minolta AF 35-80mm F4-5.6 II', # II added (ref 13) 23 => 'Minolta AF 200mm F4 Macro APO G', 24 => 'Minolta/Sony AF 24-105mm F3.5-4.5 (D) or Sigma or Tamron Lens', - # 24 => 'Sony 24-105mm F3.5-4.5 (SAL24105)', (ref 25) + # 24 => 'Sony 24-105mm F3.5-4.5 (SAL24105)', (ref JR) 24.1 => 'Sigma 18-50mm F2.8', 24.2 => 'Sigma 17-70mm F2.8-4.5 (D)', 24.3 => 'Sigma 20-40mm F2.8 EX DG Aspherical IF', #JD/22 @@ -240,73 +236,77 @@ my %metabonesID = ( 25.5 => 'Sigma 24mm F1.8 EX DG ASP Macro', #Florian Knorn 27 => 'Minolta AF 85mm F1.4 G (D)', # added (D) (ref 13) 28 => 'Minolta/Sony AF 100mm F2.8 Macro (D) or Tamron Lens', - # 28 => 'Sony 100mm F2.8 Macro (SAL100M28)', (ref 18/25) + # 28 => 'Sony 100mm F2.8 Macro (SAL100M28)', (ref 18/JR) 28.1 => 'Tamron SP AF 90mm F2.8 Di Macro', #JD (Model 272E) - 28.2 => 'Tamron SP AF 180mm F3.5 Di LD [IF] Macro', #27 (Model B01) ("SP" moved - ref 25) + 28.2 => 'Tamron SP AF 180mm F3.5 Di LD [IF] Macro', #27 (Model B01) ("SP" moved - ref JR) 29 => 'Minolta/Sony AF 75-300mm F4.5-5.6 (D)', # Sony added (ref 13) - # 29 => 'Sony 75-300mm F4.5-5.6 (SAL75300)', (ref 25) + # 29 => 'Sony 75-300mm F4.5-5.6 (SAL75300)', (ref JR) 30 => 'Minolta AF 28-80mm F3.5-5.6 (D) or Sigma Lens', 30.1 => 'Sigma AF 10-20mm F4-5.6 EX DC', #JD 30.2 => 'Sigma AF 12-24mm F4.5-5.6 EX DG', 30.3 => 'Sigma 28-70mm EX DG F2.8', #16 30.4 => 'Sigma 55-200mm F4-5.6 DC', #JD 31 => 'Minolta/Sony AF 50mm F2.8 Macro (D) or F3.5', - # 31 => 'Sony 50mm F2.8 Macro (SAL50M28)', (ref 25) + # 31 => 'Sony 50mm F2.8 Macro (SAL50M28)', (ref JR) 31.1 => 'Minolta/Sony AF 50mm F3.5 Macro', 32 => 'Minolta/Sony AF 300mm F2.8 G or 1.5x Teleconverter', #13/18 # 32 => 'Minolta AF 300mm F2.8 G (D) SSM', (ref 13) - # 32 => 'Sony 300mm F2.8 G (SAL300F28G)', (ref 18/25) + # 32 => 'Sony 300mm F2.8 G (SAL300F28G)', (ref 18/JR) 33 => 'Minolta/Sony AF 70-200mm F2.8 G', - # 33 => 'Sony 70-200mm F2.8 G (SAL70200G)', (ref 25) + # 33 => 'Sony 70-200mm F2.8 G (SAL70200G)', (ref JR) # 33 => 'Minolta AF 70-200mm F2.8 G (D) SSM' (ref 13) 35 => 'Minolta AF 85mm F1.4 G (D) Limited', 36 => 'Minolta AF 28-100mm F3.5-5.6 (D)', 38 => 'Minolta AF 17-35mm F2.8-4 (D)', # (Konica Minolta, ref 13) 39 => 'Minolta AF 28-75mm F2.8 (D)', # (Konica Minolta, ref 13) 40 => 'Minolta/Sony AF DT 18-70mm F3.5-5.6 (D)', # (Konica Minolta, ref 13) - # 40 => 'Sony DT 18-70mm F3.5-5.6 (SAL1870)', (ref 25) + # 40 => 'Sony DT 18-70mm F3.5-5.6 (SAL1870)', (ref JR) #40.1 => 'Sony AF DT 18-200mm F3.5-6.3', #11 (anomaly? - PH) 41 => 'Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) or Tamron Lens', # (Konica Minolta, ref 13) - # 41 => 'Sony DT 11-18mm F4.5-5.6 (SAL1118)', (ref 25) + # 41 => 'Sony DT 11-18mm F4.5-5.6 (SAL1118)', (ref JR) 41.1 => 'Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF', #JD (Model A13) 42 => 'Minolta/Sony AF DT 18-200mm F3.5-6.3 (D)', # Sony added (ref 13) (Konica Minolta, ref 13) - # 42 => 'Sony DT 18-200mm F3.5-6.3 (SAL18200)', (ref 25) - 43 => 'Sony 35mm F1.4 G (SAL35F14G)', # changed from Minolta to Sony (ref 13/18/25) (but ref 11 shows both!) - 44 => 'Sony 50mm F1.4 (SAL50F14)', # changed from Minolta to Sony (ref 13/18/25) - 45 => 'Carl Zeiss Planar T* 85mm F1.4 ZA (SAL85F14Z)', #25 - 46 => 'Carl Zeiss Vario-Sonnar T* DT 16-80mm F3.5-4.5 ZA (SAL1680Z)', #25 - 47 => 'Carl Zeiss Sonnar T* 135mm F1.8 ZA (SAL135F18Z)', #25 - 48 => 'Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM (SAL2470Z)', #11/25 - 49 => 'Sony DT 55-200mm F4-5.6 (SAL55200)', #JD/25 - 50 => 'Sony DT 18-250mm F3.5-6.3 (SAL18250)', #11/25 - 51 => 'Sony DT 16-105mm F3.5-5.6 (SAL16105)', #11/25 + # 42 => 'Sony DT 18-200mm F3.5-6.3 (SAL18200)', (ref JR) + 43 => 'Sony 35mm F1.4 G (SAL35F14G)', # changed from Minolta to Sony (ref 13/18/JR) (but ref 11 shows both!) + 44 => 'Sony 50mm F1.4 (SAL50F14)', # changed from Minolta to Sony (ref 13/18/JR) + 45 => 'Carl Zeiss Planar T* 85mm F1.4 ZA (SAL85F14Z)', #JR + 46 => 'Carl Zeiss Vario-Sonnar T* DT 16-80mm F3.5-4.5 ZA (SAL1680Z)', #JR + 47 => 'Carl Zeiss Sonnar T* 135mm F1.8 ZA (SAL135F18Z)', #JR + 48 => 'Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM (SAL2470Z) or ZA SSM II', #11/JR + 48.1 => 'Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM II (SAL2470Z2)', #JR + 49 => 'Sony DT 55-200mm F4-5.6 (SAL55200)', #JD/JR + 50 => 'Sony DT 18-250mm F3.5-6.3 (SAL18250)', #11/JR + 51 => 'Sony DT 16-105mm F3.5-5.6 (SAL16105)', #11/JR #51.1 => 'Sony AF DT 55-200mm F4-5.5', #11 (anomaly? - PH) - 52 => 'Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) or Tamron Lens', #JD/25 - 52.1 => 'Tamron SP 70-300mm F4-5.6 Di USD', #25,4 (Model A005) - 53 => 'Sony 70-400mm F4-5.6 G SSM (SAL70400G)', #17(/w correction by Stephen Bishop)/25 - 54 => 'Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z)', #17/25 - 55 => 'Sony DT 18-55mm F3.5-5.6 SAM [II] (SAL1855)', #PH/25 - 56 => 'Sony DT 55-200mm F4-5.6 SAM (SAL55200-2)', #22/25 - 57 => 'Sony DT 50mm F1.8 SAM (SAL50F18) or Tamron Lens', #22/25 + 52 => 'Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) or G SSM II or Tamron Lens', #JD + 52.1 => 'Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2)', #JR + 52.2 => 'Tamron SP 70-300mm F4-5.6 Di USD', #JR,4 (Model A005) + 53 => 'Sony 70-400mm F4-5.6 G SSM (SAL70400G)', #17(/w correction by Stephen Bishop)/JR + 54 => 'Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z) or ZA SSM II', #17/JR + 54.1 => 'Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM II (SAL1635Z2)', #JR + 55 => 'Sony DT 18-55mm F3.5-5.6 SAM (SAL1855) or SAM II', #PH + 55.1 => 'Sony DT 18-55mm F3.5-5.6 SAM II (SAL18552)', #JR + 56 => 'Sony DT 55-200mm F4-5.6 SAM (SAL55200-2)', #22/JR + 57 => 'Sony DT 50mm F1.8 SAM (SAL50F18) or Tamron Lens', #22/JR 57.1 => 'Tamron SP AF 60mm F2 Di II LD [IF] Macro 1:1', # (Model G005) (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3858.0.html) 57.2 => 'Tamron 18-270mm F3.5-6.3 Di II PZD', #27 (Model B008) - 58 => 'Sony DT 30mm F2.8 Macro SAM (SAL30M28)', #22/25 - 59 => 'Sony 28-75mm F2.8 SAM (SAL2875)', #21/25 - 60 => 'Carl Zeiss Distagon T* 24mm F2 ZA SSM (SAL24F20Z)', #17/25 - 61 => 'Sony 85mm F2.8 SAM (SAL85F28)', #17/25 - 62 => 'Sony DT 35mm F1.8 SAM (SAL35F18)', #PH/25 - 63 => 'Sony DT 16-50mm F2.8 SSM (SAL1650)', #17/25 - 64 => 'Sony 500mm F4.0 G SSM (SAL500F40G)', #29 - 65 => 'Sony DT 18-135mm F3.5-5.6 SAM (SAL18135)', #25 + 58 => 'Sony DT 30mm F2.8 Macro SAM (SAL30M28)', #22/JR + 59 => 'Sony 28-75mm F2.8 SAM (SAL2875)', #21/JR + 60 => 'Carl Zeiss Distagon T* 24mm F2 ZA SSM (SAL24F20Z)', #17/JR + 61 => 'Sony 85mm F2.8 SAM (SAL85F28)', #17/JR + 62 => 'Sony DT 35mm F1.8 SAM (SAL35F18)', #PH/JR + 63 => 'Sony DT 16-50mm F2.8 SSM (SAL1650)', #17/JR + 64 => 'Sony 500mm F4 G SSM (SAL500F40G)', #29 + 65 => 'Sony DT 18-135mm F3.5-5.6 SAM (SAL18135)', #JR 66 => 'Sony 300mm F2.8 G SSM II (SAL300F28G2)', #29 - 67 => 'Sony 70-200mm F2.8 G SSM II (SAL70200G2)', #25 + 67 => 'Sony 70-200mm F2.8 G SSM II (SAL70200G2)', #JR 68 => 'Sony DT 55-300mm F4.5-5.6 SAM (SAL55300)', #29 - 69 => 'Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)', #25 - 70 => 'Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SAL50F14Z)', #25 + 69 => 'Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)', #JR + 70 => 'Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SAL50F14Z)', #JR 128 => 'Tamron or Sigma Lens (128)', - 128.1 => 'Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro', #25 (Model A14) + 128.1 => 'Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro', #JR (Model A14) # was 128.1 => 'Tamron 18-200mm F3.5-6.3', - 128.2 => 'Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro', #25 (Model A061) + 128.2 => 'Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro', #JR (Model A061) # was 128.2 => 'Tamron 28-300mm F3.5-6.3', 128.3 => 'Tamron 80-300mm F3.5-6.3', 128.4 => 'Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] Macro', #JD (Model A031) @@ -323,7 +323,7 @@ my %metabonesID = ( '128.12' => 'Sigma 24-70mm F2.8 IF EX DG HSM', #27 '128.13' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', #27 '128.14' => 'Sigma 17-50mm F2.8 EX DC HSM', #Exiv2 - '128.15' => 'Sigma 17-70mm F2.8-4 DC Macro HSM', #25 + '128.15' => 'Sigma 17-70mm F2.8-4 DC Macro HSM', #JR '128.16' => 'Sigma 150mm F2.8 EX DG OS HSM APO Macro', #Marcus Holland-Moritz '128.17' => 'Sigma 150-500mm F5-6.3 APO DG OS HSM', #30 '128.18' => 'Tamron AF 28-105mm F4-5.6 [IF]', #30 (Model 179D) @@ -339,14 +339,14 @@ my %metabonesID = ( 142 => 'Voigtlander 70-300mm F4.5-5.6', #JD 146 => 'Voigtlander Macro APO-Lanthar 125mm F2.5 SL', #JD 194 => 'Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical [IF]', #23 (Model A16) - 203 => 'Tamron SP 70-200mm F2.8 Di USD', #25 (Model A009) - 204 => 'Tamron SP 24-70mm F2.8 Di USD', #25 (Model A007) - 214 => 'Tamron SP 150-600mm F5-6.3 Di USD', #25 (Model A011) - 224 => 'Tamron SP 90mm F2.8 Di Macro 1:1 USD', #25 (Model F004) + 203 => 'Tamron SP 70-200mm F2.8 Di USD', #JR (Model A009) + 204 => 'Tamron SP 24-70mm F2.8 Di USD', #JR (Model A007) + 214 => 'Tamron SP 150-600mm F5-6.3 Di USD', #JR (Model A011) + 224 => 'Tamron SP 90mm F2.8 Di Macro 1:1 USD', #JR (Model F004) 255 => 'Tamron Lens (255)', 255.1 => 'Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical', # (Model A16) 255.2 => 'Tamron AF 18-250mm F3.5-6.3 XR Di II LD', #JD (Model A18?) - #? 225.2 => 'Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro', #25 (Model A18) + #? 225.2 => 'Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro', #JR (Model A18) 255.3 => 'Tamron AF 55-200mm F4-5.6 Di II LD Macro', # (Model A15) (added "LD Macro", ref 23) 255.4 => 'Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2', # (Model A17) 255.5 => 'Tamron SP AF 200-500mm F5.0-6.3 Di LD IF', # (Model A08) @@ -374,7 +374,7 @@ my %metabonesID = ( 25531 => 'Minolta AF 28-135mm F4-4.5 or Sigma Lens', 25531.1 => 'Sigma ZOOM-alpha 35-135mm F3.5-4.5', #16 25531.2 => 'Sigma 28-105mm F2.8-4 Aspherical', #JD - 25531.3 => 'Sigma 28-105mm F4-5.6 UC', #25 + 25531.3 => 'Sigma 28-105mm F4-5.6 UC', #JR 25541 => 'Minolta AF 35-105mm F3.5-4.5', #13 25551 => 'Minolta AF 70-210mm F4 Macro or Sigma Lens', 25551.1 => 'Sigma 70-210mm F4-5.6 APO', #7 @@ -382,11 +382,11 @@ my %metabonesID = ( 25551.3 => 'Sigma 75-200mm F2.8-3.5', #22 25561 => 'Minolta AF 135mm F2.8', 25571 => 'Minolta/Sony AF 28mm F2.8', # Sony added (ref 18) - # 25571 => 'Sony 28mm F2.8 (SAL28F28)', (ref 18/25) + # 25571 => 'Sony 28mm F2.8 (SAL28F28)', (ref 18/JR) 25581 => 'Minolta AF 24-50mm F4', 25601 => 'Minolta AF 100-200mm F4.5', 25611 => 'Minolta AF 75-300mm F4.5-5.6 or Sigma Lens', #13 - 25611.1 => 'Sigma 70-300mm F4-5.6 DL Macro', #12 (also DG version ref 27, and APO version ref 25) + 25611.1 => 'Sigma 70-300mm F4-5.6 DL Macro', #12 (also DG version ref 27, and APO version ref JR) 25611.2 => 'Sigma 300mm F4 APO Macro', #3/7 25611.3 => 'Sigma AF 500mm F4.5 APO', #JD 25611.4 => 'Sigma AF 170-500mm F5-6.3 APO Aspherical', #JD @@ -407,14 +407,14 @@ my %metabonesID = ( 25661 => 'Minolta AF 24mm F2.8 or Sigma Lens', 25661.1 => 'Sigma 17-35mm F2.8-4 EX Aspherical', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3789.msg17679.html#msg17679 25721 => 'Minolta/Sony AF 500mm F8 Reflex', - # 25721 => 'Sony 500mm F8 Reflex (SAL500F80)', (ref 25) + # 25721 => 'Sony 500mm F8 Reflex (SAL500F80)', (ref JR) 25781 => 'Minolta/Sony AF 16mm F2.8 Fisheye or Sigma Lens', # Sony added (ref 13/18) - # 25781 => 'Sony 16mm F2.8 Fisheye (SAL16F28)', (ref 18/25) + # 25781 => 'Sony 16mm F2.8 Fisheye (SAL16F28)', (ref 18/JR) 25781.1 => 'Sigma 8mm F4 EX [DG] Fisheye', 25781.2 => 'Sigma 14mm F3.5', 25781.3 => 'Sigma 15mm F2.8 Fisheye', #JD (writes 16mm to EXIF) 25791 => 'Minolta/Sony AF 20mm F2.8 or Tokina Lens', # Sony added (ref 11) - # 25791 => 'Sony 20mm F2.8 (SAL20F28)', (ref 25) + # 25791 => 'Sony 20mm F2.8 (SAL20F28)', (ref JR) 25791.1 => 'Tokina AT-X Pro DX 11-16mm F2.8', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3593.0.html 25811 => 'Minolta AF 100mm F2.8 Macro [New] or Sigma or Tamron Lens', # not Sony (ref 13/18) 25811.1 => 'Sigma AF 90mm F2.8 Macro', #JD @@ -485,12 +485,12 @@ my %metabonesID = ( 45861 => 'Tamron SP AF 35-105mm F2.8 LD Aspherical IF', #Fredrik Agert 45871 => 'Tamron AF 70-210mm F2.8 SP LD', #Fabio Suprani # 61184: older firmware versions of both the Speed Booster and the Smart Adapter - # report type 61184 (=0xef00), and add only the lower byte of the Canon LensType (ref 25). + # report type 61184 (=0xef00), and add only the lower byte of the Canon LensType (ref JR). # For newer firmware versions this is only used by the Smart Adapter, and # the full Canon LensType code is added - PH - 61184 => 'Metabones Canon EF Adapter', #25 + 61184 => 'Metabones Canon EF Adapter', #JR # all M42-type lenses give a value of 65535 (and FocalLength=0, FNumber=1) - 65535 => 'E-Mount, T-Mount, Other Lens or no lens', #JD/25 + 65535 => 'E-Mount, T-Mount, Other Lens or no lens', #JD/JR # # Sony E-type lenses (NOTE: these should be kept in sync with %sonyLensTypes2 of Sony.pm) # @@ -498,43 +498,43 @@ my %metabonesID = ( 65535.2 => 'Sony E 18-55mm F3.5-5.6 OSS', #PH (32785 - SEL1855) 65535.3 => 'Sony E 55-210mm F4.5-6.3 OSS', #PH (32786 - SEL55210) 65535.4 => 'Sony E 18-200mm F3.5-6.3 OSS', #PH (32787 - SEL18200) - 65535.5 => 'Sony E 30mm F3.5 Macro', #25 (32788 - SEL30M35) + 65535.5 => 'Sony E 30mm F3.5 Macro', #JR (32788 - SEL30M35) 65535.6 => 'Sony E 24mm F1.8 ZA', #PH (32789 - SEL24F18Z) 65535.7 => 'Sony E 50mm F1.8 OSS', #PH (32790 - SEL50F18) - 65535.8 => 'Sony E 16-70mm F4 ZA OSS', #25 (32791 - SEL1670Z) + 65535.8 => 'Sony E 16-70mm F4 ZA OSS', #JR (32791 - SEL1670Z) 65535.9 => 'Sony E 10-18mm F4 OSS', #PH (32792 - SEL1018) '65535.10' => 'Sony E PZ 16-50mm F3.5-5.6 OSS', #PH (32793 - SELP1650) - '65535.11' => 'Sony FE 35mm F2.8 ZA', #25 (32794 - SEL35F28Z) - '65535.12' => 'Sony FE 24-70mm F4 ZA OSS', #25 (32795 - SEL2470Z) - '65535.13' => 'Sony E 18-200mm F3.5-6.3 OSS LE', #25 (32797 - SEL18200LE) + '65535.11' => 'Sony FE 35mm F2.8 ZA', #JR (32794 - SEL35F28Z) + '65535.12' => 'Sony FE 24-70mm F4 ZA OSS', #JR (32795 - SEL2470Z) + '65535.13' => 'Sony E 18-200mm F3.5-6.3 OSS LE', #JR (32797 - SEL18200LE) '65535.14' => 'Sony E 20mm F2.8', #PH (32798 - SEL20F28) - '65535.15' => 'Sony E 35mm F1.8 OSS', #25 (32799 - SEL35F18) - '65535.16' => 'Sony E PZ 18-105mm F4 G OSS', #25 (32800 - SELP18105G) - '65535.17' => 'Sony FE 90mm F2.8 Macro G OSS', #25 (32802 - SEL90M28G) - '65535.18' => 'Sony E 18-50mm F4-5.6', #25 (32803 - SEL1850) - '65535.19' => 'Sony E PZ 18-200mm F3.5-6.3 OSS', #25 (32807 - SELP18200) - '65535.20' => 'Sony FE 55mm F1.8 ZA', #25 (32808 - SEL55F18Z) - '65535.21' => 'Sony FE 70-200mm F4 G OSS', #25 (32810 - SEL70200G) - '65535.22' => 'Sony FE 16-35mm F4 ZA OSS', #25 (32811 - SEL1635Z) - '65535.23' => 'Sony FE 28-70mm F3.5-5.6 OSS', #25 (32813 - SEL2870) - '65535.24' => 'Sony FE 35mm F1.4 ZA', #25 (32814 - SEL35F14Z) - '65535.25' => 'Sony FE 24-240mm F3.5-6.3 OSS', #25 (32815 - SEL24240) - '65535.26' => 'Sony FE 28mm F2', #25 (32816 - SEL28F20) - '65535.27' => 'Sony FE PZ 28-135mm F4 G OSS', #25 (32817 - SELP28135G) - '65535.28' => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #25 # (32826 - SEL28F20 + SEL075UWC Ultra-wide converter) - '65535.29' => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #25 # (32827 - SEL28F20 + SEL057FEC Fisheye converter) + '65535.15' => 'Sony E 35mm F1.8 OSS', #JR (32799 - SEL35F18) + '65535.16' => 'Sony E PZ 18-105mm F4 G OSS', #JR (32800 - SELP18105G) + '65535.17' => 'Sony FE 90mm F2.8 Macro G OSS', #JR (32802 - SEL90M28G) + '65535.18' => 'Sony E 18-50mm F4-5.6', #JR (32803 - SEL1850) + '65535.19' => 'Sony E PZ 18-200mm F3.5-6.3 OSS', #JR (32807 - SELP18200) + '65535.20' => 'Sony FE 55mm F1.8 ZA', #JR (32808 - SEL55F18Z) + '65535.21' => 'Sony FE 70-200mm F4 G OSS', #JR (32810 - SEL70200G) + '65535.22' => 'Sony FE 16-35mm F4 ZA OSS', #JR (32811 - SEL1635Z) + '65535.23' => 'Sony FE 28-70mm F3.5-5.6 OSS', #JR (32813 - SEL2870) + '65535.24' => 'Sony FE 35mm F1.4 ZA', #JR (32814 - SEL35F14Z) + '65535.25' => 'Sony FE 24-240mm F3.5-6.3 OSS', #JR (32815 - SEL24240) + '65535.26' => 'Sony FE 28mm F2', #JR (32816 - SEL28F20) + '65535.27' => 'Sony FE PZ 28-135mm F4 G OSS', #JR (32817 - SELP28135G) + '65535.28' => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #JR # (32826 - SEL28F20 + SEL075UWC Ultra-wide converter) + '65535.29' => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #JR # (32827 - SEL28F20 + SEL057FEC Fisheye converter) # # 3rd party E lenses # - '65535.30' => 'Sigma 19mm F2.8 [EX] DN', #25 - '65535.31' => 'Sigma 30mm F2.8 [EX] DN', #25 - '65535.32' => 'Sigma 60mm F2.8 DN', #25 - '65535.33' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #25 (Model B011) - '65535.34' => 'Zeiss Loxia 35mm F2', #25 - '65535.35' => 'Zeiss Loxia 50mm F2', #25 - '65535.36' => 'Zeiss Touit 12mm F2.8', #25 - '65535.37' => 'Zeiss Touit 32mm F1.8', #25 - '65535.38' => 'Zeiss Touit 50mm F2.8 Macro', #25 + '65535.30' => 'Sigma 19mm F2.8 [EX] DN', #JR + '65535.31' => 'Sigma 30mm F2.8 [EX] DN', #JR + '65535.32' => 'Sigma 60mm F2.8 DN', #JR + '65535.33' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (Model B011) + '65535.34' => 'Zeiss Loxia 35mm F2', #JR + '65535.35' => 'Zeiss Loxia 50mm F2', #JR + '65535.36' => 'Zeiss Touit 12mm F2.8', #JR + '65535.37' => 'Zeiss Touit 32mm F1.8', #JR + '65535.38' => 'Zeiss Touit 50mm F2.8 Macro', #JR # # other lenses # @@ -552,11 +552,11 @@ my %metabonesID = ( 0x04 => 'Minolta/Sony AF 1.4x APO (D) (0x04)', # (Andy Johnson, A77 APO and APO D) 0x05 => 'Minolta/Sony AF 2x APO (D) (0x05)', # (Andy Johnson, A77 APO D) 0x48 => 'Minolta/Sony AF 2x APO (D)', - # 0x48 => 'Sony 2x Teleconverter (SAL20TC)', (ref 25) + # 0x48 => 'Sony 2x Teleconverter (SAL20TC)', (ref JR) 0x50 => 'Minolta AF 2x APO II', 0x60 => 'Minolta AF 2x APO',#26 0x88 => 'Minolta/Sony AF 1.4x APO (D)', - # 0x88 => 'Sony 1.4x Teleconverter (SAL14TC)', (ref 25) + # 0x88 => 'Sony 1.4x Teleconverter (SAL14TC)', (ref JR) 0x90 => 'Minolta AF 1.4x APO II', 0xa0 => 'Minolta AF 1.4x APO',#26 ); @@ -589,11 +589,11 @@ my %metabonesID = ( 6 => 'B&W', 7 => 'Adobe RGB', 12 => 'Neutral', # Sony - 13 => 'Clear', #25 (NC) - 14 => 'Deep', #25 - 15 => 'Light', #25 (NC) - 16 => 'Autumn Leaves', #25 (NC) - 17 => 'Sepia', #25 + 13 => 'Clear', #JR (NC) + 14 => 'Deep', #JR + 15 => 'Light', #JR (NC) + 16 => 'Autumn Leaves', #JR (NC) + 17 => 'Sepia', #JR 100 => 'Neutral', #JD 101 => 'Clear', #JD 102 => 'Deep', #JD @@ -627,7 +627,7 @@ my %metabonesID = ( 26 => 'Fireworks', #28 27 => 'Food', #28 28 => 'Pet', #28 - 33 => 'HDR', #25 + 33 => 'HDR', #JR 0xffff => 'n/a', #PH ); @@ -1961,7 +1961,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' ); }, 0x0d => { #20 Name => 'AFPointSelected', # (v8.88: renamed from LocalAFAreaPoint) - # (9-point centre-cross AF system, ref 25) + # (9-point centre-cross AF system, ref JR) PrintConv => { 1 => 'Center', 2 => 'Top', diff --git a/lib/Image/ExifTool/Olympus.pm b/lib/Image/ExifTool/Olympus.pm index 5281c804..23b89ddd 100644 --- a/lib/Image/ExifTool/Olympus.pm +++ b/lib/Image/ExifTool/Olympus.pm @@ -37,7 +37,7 @@ use vars qw($VERSION); use Image::ExifTool::Exif; use Image::ExifTool::APP12; -$VERSION = '2.30'; +$VERSION = '2.31'; sub PrintLensInfo($$$); @@ -344,6 +344,7 @@ my %olympusCameraTypes = ( D4581 => 'SH-1', D4582 => 'TG-835', D4585 => 'SH-2', + D4586 => 'TG-4', D4809 => 'C2500L', D4842 => 'E-10', D4856 => 'C-1', diff --git a/lib/Image/ExifTool/PostScript.pm b/lib/Image/ExifTool/PostScript.pm index 175c8504..270ddce6 100644 --- a/lib/Image/ExifTool/PostScript.pm +++ b/lib/Image/ExifTool/PostScript.pm @@ -16,7 +16,7 @@ use strict; use vars qw($VERSION $AUTOLOAD); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.38'; +$VERSION = '1.39'; sub WritePS($$); sub ProcessPS($$;$); @@ -383,6 +383,7 @@ sub ProcessPS($$;$) $raf->Seek($pos, 0); } $et->SetFileType($type); + return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; # # extract TIFF information from DOS header # diff --git a/lib/Image/ExifTool/Radiance.pm b/lib/Image/ExifTool/Radiance.pm index 0df58119..66cfb02e 100644 --- a/lib/Image/ExifTool/Radiance.pm +++ b/lib/Image/ExifTool/Radiance.pm @@ -56,7 +56,7 @@ $VERSION = '1.01'; ); #------------------------------------------------------------------------------ -# Extract information from a Radiance JDR file +# Extract information from a Radiance HDR file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid RGBE image sub ProcessHDR($$) diff --git a/lib/Image/ExifTool/Rawzor.pm b/lib/Image/ExifTool/Rawzor.pm index b9b17687..bdee691c 100644 --- a/lib/Image/ExifTool/Rawzor.pm +++ b/lib/Image/ExifTool/Rawzor.pm @@ -14,7 +14,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.03'; +$VERSION = '1.04'; # currently support this version Rawzor images my $implementedRawzorVersion = 199; # (up to version 1.99) @@ -140,8 +140,7 @@ sub ProcessRWZ($$) my $origFileType = $$et{VALUE}{FileType}; if ($origFileType) { $et->HandleTag($tagTablePtr, OriginalFileType => $origFileType); - $$et{VALUE}{FileType} = 'RWZ'; - $$et{VALUE}{MIMEType} = 'image/x-rawzor'; + $et->OverrideFileType('RWZ'); } else { $et->HandleTag($tagTablePtr, OriginalFileType => 'Unknown'); $et->SetFileType(); diff --git a/lib/Image/ExifTool/Real.pm b/lib/Image/ExifTool/Real.pm index 5d7c4355..a2765924 100644 --- a/lib/Image/ExifTool/Real.pm +++ b/lib/Image/ExifTool/Real.pm @@ -16,7 +16,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Canon; -$VERSION = '1.05'; +$VERSION = '1.06'; sub ProcessRealMeta($$$); sub ProcessRealProperties($$$); @@ -522,6 +522,7 @@ sub ProcessReal($$) $raf->Read($buff, 8) == 8 or return 0; $buff =~ m{^(\.RMF|\.ra\xfd|pnm://|rtsp://|http://)} or return 0; + my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; my ($type, $tagTablePtr); if ($1 eq '.RMF') { $tagTablePtr = GetTagTable('Image::ExifTool::Real::Media'); @@ -544,6 +545,7 @@ sub ProcessReal($$) # must be a Real file type if protocol is http return 0 if $buff =~ /^http/ and $buff !~ /\.(ra|rm|rv|rmvb|smil)$/i; $et->SetFileType($type); + return 1 if $fast3; undef $type; } # save URL or Text from RAM file @@ -554,6 +556,7 @@ sub ProcessReal($$) } $et->SetFileType($type); + return 1 if $fast3; SetByteOrder('MM'); my $verbose = $et->Options('Verbose'); # diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm index d9c0560c..addec4a5 100644 --- a/lib/Image/ExifTool/Sony.pm +++ b/lib/Image/ExifTool/Sony.pm @@ -16,11 +16,11 @@ # 9) Michael Reitinger private communication (DSC-TX7,RX100) # 10) http://www.klingebiel.com/tempest/hd/pmp.html # 11) Mike Battilana private communication -# 12) Jos Roost private communication (A580) # 13) http://www.mi-fo.de/forum/index.php?showtopic=33239 # http://www.dyxum.com/dforum/the-alpha-shutter-count-tool_topic97489_page4.html # 14) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication +# JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Sony; @@ -58,10 +58,10 @@ my %sonyLensTypes2 = ( 2 => 'Sony LA-EA2 Adapter', 3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2 6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo - 44 => 'Metabones Canon EF Smart Adapter', #12 - 78 => 'Metabones Canon EF Smart Adapter Mark III or IV', #PH/12 - 234 => 'Adapter only - no lens attached', #12 (seen with LA-EA4 and Metabones Smart IV) - 239 => 'Metabones Canon EF Speed Booster', #12 + 44 => 'Metabones Canon EF Smart Adapter', #JR + 78 => 'Metabones Canon EF Smart Adapter Mark III or IV', #PH/JR + 234 => 'Adapter only - no lens attached', #JR (seen with LA-EA4 and Metabones Smart IV) + 239 => 'Metabones Canon EF Speed Booster', #JR # Sony VX product code: (http://www.mi-fo.de/forum/index.php?s=7df1c8d3b1cd675f2abf4f4442e19cf2&showtopic=35035&view=findpost&p=303746) 32784 => 'Sony E 16mm F2.8', # VX9100 32785 => 'Sony E 18-55mm F3.5-5.6 OSS', # VX9101 @@ -79,7 +79,7 @@ my %sonyLensTypes2 = ( 32797 => 'Sony E 18-200mm F3.5-6.3 OSS LE', # VX9113 32798 => 'Sony E 20mm F2.8', # VX9114 32799 => 'Sony E 35mm F1.8 OSS', # VX9115 - 32800 => 'Sony E PZ 18-105mm F4 G OSS', #12 # VX9116 + 32800 => 'Sony E PZ 18-105mm F4 G OSS', #JR # VX9116 32802 => 'Sony FE 90mm F2.8 Macro G OSS', # VX? 32803 => 'Sony E 18-50mm F4-5.6', @@ -87,19 +87,19 @@ my %sonyLensTypes2 = ( 32807 => 'Sony E PZ 18-200mm F3.5-6.3 OSS', # VX9123 32808 => 'Sony FE 55mm F1.8 ZA', # VX9124 - 32810 => 'Sony FE 70-200mm F4 G OSS', #12 # VX9126 - 32811 => 'Sony FE 16-35mm F4 ZA OSS', #12 # VX9127 + 32810 => 'Sony FE 70-200mm F4 G OSS', #JR # VX9126 + 32811 => 'Sony FE 16-35mm F4 ZA OSS', #JR # VX9127 32813 => 'Sony FE 28-70mm F3.5-5.6 OSS', # VX9129 32814 => 'Sony FE 35mm F1.4 ZA', # VX? 32815 => 'Sony FE 24-240mm F3.5-6.3 OSS', # VX? - 32816 => 'Sony FE 28mm F2', #12 # VX? - 32817 => 'Sony FE PZ 28-135mm F4 G OSS',#12 # VX? + 32816 => 'Sony FE 28mm F2', #JR # VX? + 32817 => 'Sony FE PZ 28-135mm F4 G OSS',#JR # VX? - 32826 => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #12 # (+ Ultra-wide converter) - 32827 => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #12 # (+ Fisheye converter) + 32826 => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #JR # (+ Ultra-wide converter) + 32827 => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #JR # (+ Fisheye converter) - # yet to be determined (ref 12): + # yet to be determined (ref JR): # 32xxx => 'Sony FE 24-240mm F3.5-6.3 OSS # (SEL24240) # 32xxx => 'Sony FE 35mm F1.4 ZA # (SEL35F14Z) # 32xxx => 'Sony FE 90mm F2.8 Macro G # (SEL90M28G) @@ -123,7 +123,7 @@ my %sonyExposureProgram = ( 35 => 'Auto No Flash', # (A330) ); -# ExposureProgram values in CameraSettings3 (ref 12) +# ExposureProgram values in CameraSettings3 (ref JR) my %sonyExposureProgram2 = ( # A580 Mode Dial setting: 1 => 'Program AE', # P 2 => 'Aperture-priority AE', # A @@ -143,7 +143,7 @@ my %sonyExposureProgram2 = ( # A580 Mode Dial setting: 56 => 'Handheld Night Shot', # SCN (also called "Hand-held Twilight") 57 => '3D Sweep Panorama', # "Panorama" symbol 64 => 'Auto 2', #PH (A33 AUTO) - 65 => 'Auto 2 (no flash)', #12 (NC, A35) + 65 => 'Auto 2 (no flash)', #JR (NC, A35) 80 => 'Sweep Panorama', # "Panorama" symbol 96 => 'Anti Motion Blur', #PH (NEX-5) # 128-138 are A35 picture effects (combined SCN/Picture effect mode dial position) @@ -160,7 +160,7 @@ my %sonyExposureProgram2 = ( # A580 Mode Dial setting: 138 => 'High Contrast Monochrome', ); -# ExposureProgram values in Tags 2010 and 94xx (ref 12) +# ExposureProgram values in Tags 2010 and 94xx (ref JR) my %sonyExposureProgram3 = ( 0 => 'Program AE', 1 => 'Aperture-priority AE', @@ -196,7 +196,7 @@ my %sonyExposureProgram3 = ( 43 => 'Cont. Priority AE', ); -# WhiteBalanceSetting values (ref 12) +# WhiteBalanceSetting values (ref JR) my %whiteBalanceSetting = ( 0x10 => 'Auto (-3)', #(NC) 0x11 => 'Auto (-2)', #(NC) @@ -251,7 +251,7 @@ my %whiteBalanceSetting = ( 0xf3 => 'Color Temperature/Color Filter', ); -# AF points for cameras with 15-point AF (ref 12) +# AF points for cameras with 15-point AF (ref JR) my %afPoint15 = ( 0 => 'Upper-left', 1 => 'Left', @@ -348,7 +348,7 @@ my %meterInfo2 = ( }, 0x0010 => [ #PH # appears to contain mostly AF related information; - # for SLT-A77V and newer, similar info is found in 0x940e AFInfo" (ref 12) + # for SLT-A77V and newer, similar info is found in 0x940e AFInfo" (ref JR) { Name => 'CameraInfo', # count: A700=368, A850/A900=5478 @@ -378,11 +378,11 @@ my %meterInfo2 = ( SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfoUnknown' }, }, ], - # 0x0018 - starts with "GYRO" for sweep panorama images (ref 12) + # 0x0018 - starts with "GYRO" for sweep panorama images (ref JR) # - contains ImageStabilization information for Minolta 0x0020 => [ # similar to WBInfoA100 in Minolta.pm. - # appears to contain various types of information, as in MoreInfo. (ref 12) + # appears to contain various types of information, as in MoreInfo. (ref JR) { Name => 'FocusInfo', #PH # count: A200/A230/A290/A300/A330/A350/A380/A390==19154, A700/A850/A900=19148 @@ -392,7 +392,7 @@ my %meterInfo2 = ( ByteOrder => 'LittleEndian', }, },{ - Name => 'MoreInfo', #12 + Name => 'MoreInfo', #JR # count: A450/A500/A550/A560/A580/A33/A35/A55/NEX-3/5/C3/VG10E==20480 SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreInfo', @@ -481,9 +481,9 @@ my %meterInfo2 = ( 0x70 => 'Custom', }, }, - # Tag 0x0116: extra hardware info (ref 12) + # Tag 0x0116: extra hardware info (ref JR) # (tag not present for A100, A200, A300, A350, A700, nor for A37, A57, A65, A77) - 0x0116 => [ #12 + 0x0116 => [ #JR { Name => 'ExtraInfo', Condition => '$$self{Model} =~ /^DSLR-A(850|900)\b/', @@ -528,7 +528,7 @@ my %meterInfo2 = ( 0x1003 => { #9 (64 bytes, contains Panorama info for various DSC, NEX, SLT and DSLR models) Name => 'Panorama', # panorama: first 4 bytes '1 1 0 0' (little-endian) or '0 0 1 1' (big-endian) - # non-panorama: all bytes are '0' (ref 12) + # non-panorama: all bytes are '0' (ref JR) Condition => '$$self{Panorama} = ($$valPt =~ /^(\0\0)?\x01\x01/)', # (little- or big-endian int32u = 257) SubDirectory => { TagTable => 'Image::ExifTool::Sony::Panorama' }, }, @@ -575,9 +575,9 @@ my %meterInfo2 = ( return Set32u(length $val) . $size . ("\0" x 8) . $size . ("\0" x 4) . $val; }, }, - 0x2002 => { #12 (written by Sony IDC) + 0x2002 => { #JR (written by Sony IDC) Name => 'Rating', - Writable => 'int32u', # (0-5 stars) (4294967295 for an HX9V iSweep Panorama, ref 12) + Writable => 'int32u', # (0-5 stars) (4294967295 for an HX9V iSweep Panorama, ref JR) }, # 0x2003 - string[256]: all 0 for DSLR, SLT, NEX; data for DSC-HX9V 0x2004 => { #PH (NEX-5) @@ -626,7 +626,7 @@ my %meterInfo2 = ( 2 => 'Normal', 3 => 'High', 256 => 'Auto', - # it seems that all DSC models except DSC-RX models give n/a here (ref 12) + # it seems that all DSC models except DSC-RX models give n/a here (ref JR) 65535 => 'n/a', }, }, @@ -651,7 +651,7 @@ my %meterInfo2 = ( 0x18 => '5.0 EV', 0x19 => '5.5 EV', 0x1a => '6.0 EV', - },{ #12 (A580) + },{ #JR (A580) 0 => 'Uncorrected image', # A580 stores 2 images: uncorrected and HDR 1 => 'HDR image (good)', 2 => 'HDR image (fail 1)', # alignment problem? @@ -675,26 +675,26 @@ my %meterInfo2 = ( Writable => 'int16u', PrintConv => { 0 => 'Off', - 1 => 'Toy Camera', #12 (A35) - 2 => 'Pop Color', # (also A35/NEX-C3, ref 12) - 3 => 'Posterization', #12 (A35) - 4 => 'Posterization B/W', #12 (A35) - 5 => 'Retro Photo', #12 (A35, NEX-5) - 6 => 'Soft High Key', # (also A65V, A35/NEX-C3 call this "High-key", ref 12) - 7 => 'Partial Color (red)', #12 (A35) - 8 => 'Partial Color (green)', #12 (A35, NEX-5) - 9 => 'Partial Color (blue)', #12 (A35) - 10 => 'Partial Color (yellow)', #12 (A35, NEX-5) - 13 => 'High Contrast Monochrome', #12 (A35) - 16 => 'Toy Camera (normal)', # (also A65, ref 12) + 1 => 'Toy Camera', #JR (A35) + 2 => 'Pop Color', # (also A35/NEX-C3, ref JR) + 3 => 'Posterization', #JR (A35) + 4 => 'Posterization B/W', #JR (A35) + 5 => 'Retro Photo', #JR (A35, NEX-5) + 6 => 'Soft High Key', # (also A65V, A35/NEX-C3 call this "High-key", ref JR) + 7 => 'Partial Color (red)', #JR (A35) + 8 => 'Partial Color (green)', #JR (A35, NEX-5) + 9 => 'Partial Color (blue)', #JR (A35) + 10 => 'Partial Color (yellow)', #JR (A35, NEX-5) + 13 => 'High Contrast Monochrome', #JR (A35) + 16 => 'Toy Camera (normal)', # (also A65, ref JR) 17 => 'Toy Camera (cool)', # (RX100) 18 => 'Toy Camera (warm)', # (RX100) 19 => 'Toy Camera (green)', # (RX100) 20 => 'Toy Camera (magenta)', # (RX100) - 32 => 'Soft Focus (low)', #12 (RX100) - 33 => 'Soft Focus', #12 (A65V) + 32 => 'Soft Focus (low)', #JR (RX100) + 33 => 'Soft Focus', #JR (A65V) 34 => 'Soft Focus (high)', # (RX100) - 48 => 'Miniature (auto)', #12 (A65V/NEX-7, horizontal) + 48 => 'Miniature (auto)', #JR (A65V/NEX-7, horizontal) 49 => 'Miniature (top)', # (RX100) 50 => 'Miniature (middle horizontal)', # (WX100/HX20V, horizontal) 51 => 'Miniature (bottom)', # (WX100, rotate 90 CW) @@ -702,9 +702,9 @@ my %meterInfo2 = ( 53 => 'Miniature (middle vertical)', # (RX100) 54 => 'Miniature (right)', # (RX100) 64 => 'HDR Painting (low)', # (RX100) - 65 => 'HDR Painting', # (also A65V, ref 12) + 65 => 'HDR Painting', # (also A65V, ref JR) 66 => 'HDR Painting (high)', # (RX100) - 80 => 'Rich-tone Monochrome', # (also A65V, ref 12) + 80 => 'Rich-tone Monochrome', # (also A65V, ref JR) 97 => 'Water Color', # (HX200V) 98 => 'Water Color 2', 112 => 'Illustration (low)', # (RX100) @@ -720,12 +720,12 @@ my %meterInfo2 = ( 1 => 'Low', 2 => 'Mid', 3 => 'High', - # 0x10001 - seen (ref 12) - # 0x10002 - seen for landscape and portrait flash (ref 12) + # 0x10001 - seen (ref JR) + # 0x10002 - seen for landscape and portrait flash (ref JR) 0xffffffff => 'n/a', # (A35) }, }, - 0x2010 => [ #12 + 0x2010 => [ #JR # different camera models have similar content but at different offsets, appears to correlate with: # 0x1206 - 0x1207 deciphered (0x1205 changes with firmware version): # ad c3 - NEX-5N @@ -805,7 +805,7 @@ my %meterInfo2 = ( 0xffffffff => 'n/a', # (RX100) }, }, - 0x2013 => { #PH (A77, NEX-5N) ("Setting"; application of such correction is indicated in Tag9405 - ref 12) + 0x2013 => { #PH (A77, NEX-5N) ("Setting"; application of such correction is indicated in Tag9405 - ref JR) Name => 'DistortionCorrectionSetting', Writable => 'int32u', PrintConv => { @@ -814,7 +814,7 @@ my %meterInfo2 = ( 0xffffffff => 'n/a', # (RX100) }, }, - 0x2014 => { #12/9 + 0x2014 => { #JR/9 Name => 'WBShiftAB_GM', Writable => 'int32s', Count => 2, @@ -831,7 +831,7 @@ my %meterInfo2 = ( PrintConv => { 0 => 'No', 1 => 'Yes' }, }, # 0x2017 - int32u: flash mode. 0=off, 1=fired, 2=red-eye (PH, NEX-6) (also in A99, RX1, NEX-5R) - 0x2017 => { #12 + 0x2017 => { #JR Name => 'FlashAction', Writable => 'int32u', PrintConv => { @@ -855,7 +855,7 @@ my %meterInfo2 = ( 7 => 'AF-D', # "Depth Map Assist Continuous AF" }, }, - 0x201c => [ #12 + 0x201c => [ #JR { Name => 'AFAreaModeSetting', Condition => '$$self{Model} =~ /^(SLT-|HV)/', @@ -896,12 +896,12 @@ my %meterInfo2 = ( }, }, ], - 0x201d => { #12 + 0x201d => { #JR Name => 'FlexibleSpotPosition', Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/', Writable => 'int16u', Count => 2, - # position in an 11x9 grid. Values are (ref 12, NC in brackets) + # position in an 11x9 grid. Values are (ref JR, NC in brackets) # X = 135,165,196,227,(258),289,320,281,412,442/443 # Y = (70?),104,(138),(172),206,240,274,308,342,(376?) Notes => q{ @@ -915,7 +915,7 @@ my %meterInfo2 = ( Writable => 'int8u', PrintConvColumns => 2, PrintConv => { - 0 => 'Auto', # (NC) (always 0 for NEX/ILCE unless AFAreaModeSetting is Zone, ref 12) + 0 => 'Auto', # (NC) (always 0 for NEX/ILCE unless AFAreaModeSetting is Zone, ref JR) 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', @@ -977,7 +977,7 @@ my %meterInfo2 = ( 0x9050 => { Name => 'Tag9050', # 944 bytes for A37, A57, A99, NEX-F3, NEX-5R, NEX-6, DSC-RX1, DSC-RX100 - # 3072 bytes for A65, A77, NEX-5N, NEX-7, NEX-VG20 (ref 12) + # 3072 bytes for A65, A77, NEX-5N, NEX-7, NEX-VG20 (ref JR) SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9050', ByteOrder => 'LittleEndian', @@ -1015,7 +1015,7 @@ my %meterInfo2 = ( 0x9401 => { Name => 'Sony_0x9401', %unknownCipherData, - # notes for data in this block (ref PH/12): + # notes for data in this block (ref PH/JR): # 0x02-0x03 appear to have some relation to start-offset of data... # 0x00 - 0x03 Metering # Mode @@ -1142,7 +1142,7 @@ my %meterInfo2 = ( 0x9406 => [{ Name => 'Tag9406', # - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08) and - # third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref 12 + # third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref JR # (applies to most SLT and NEX models, but no DSC models) Condition => '$$valPt =~ /^[\x01\x08].[\x08\x1b]/s', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9406' }, @@ -1224,7 +1224,7 @@ my %meterInfo2 = ( '3 1 0 0' => 'ARW 2.1', '3 2 0 0' => 'ARW 2.2', #PH (NEX-5) '3 3 0 0' => 'ARW 2.3', #PH (SLT-A65,SLT-A77) - '3 3 1 0' => 'ARW 2.3.1', #PH/12 (RX1R,RX100M2) + '3 3 1 0' => 'ARW 2.3.1', #PH/JR (RX1R,RX100M2) # what about cRAW images? }, }, @@ -1258,45 +1258,45 @@ my %meterInfo2 = ( 282 => 'DSLR-A560', #PH 283 => 'DSLR-A580', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2881.0.html 284 => 'NEX-C3', #PH - 285 => 'SLT-A35', #12 + 285 => 'SLT-A35', #JR 286 => 'SLT-A65 / SLT-A65V', #PH 287 => 'SLT-A77 / SLT-A77V', #PH 288 => 'NEX-5N', #PH - 289 => 'NEX-7', #PH (also Hasselblad Lunar, ref 12) - 290 => 'NEX-VG20E', #12 - 291 => 'SLT-A37', #12 - 292 => 'SLT-A57', #12 + 289 => 'NEX-7', #PH (also Hasselblad Lunar, ref JR) + 290 => 'NEX-VG20E', #JR + 291 => 'SLT-A37', #JR + 292 => 'SLT-A57', #JR 293 => 'NEX-F3', #PH - 294 => 'SLT-A99 / SLT-A99V', #12 (also Hasselblad HV) - 295 => 'NEX-6', #12 - 296 => 'NEX-5R', #12 - 297 => 'DSC-RX100', #PH (also Hasselblad Stellar, ref 12) - 298 => 'DSC-RX1', #12 - 299 => 'NEX-VG900', #12 - 300 => 'NEX-VG30E', #12 - 302 => 'ILCE-3000 / ILCE-3500', #12 - 303 => 'SLT-A58', #12 + 294 => 'SLT-A99 / SLT-A99V', #JR (also Hasselblad HV) + 295 => 'NEX-6', #JR + 296 => 'NEX-5R', #JR + 297 => 'DSC-RX100', #PH (also Hasselblad Stellar, ref JR) + 298 => 'DSC-RX1', #JR + 299 => 'NEX-VG900', #JR + 300 => 'NEX-VG30E', #JR + 302 => 'ILCE-3000 / ILCE-3500', #JR + 303 => 'SLT-A58', #JR 305 => 'NEX-3N', #PH - 306 => 'ILCE-7', #12 - 307 => 'NEX-5T', #12 - 308 => 'DSC-RX100M2', #12 - 309 => 'DSC-RX10', #12 - 310 => 'DSC-RX1R', #12 - 311 => 'ILCE-7R', #12 - 312 => 'ILCE-6000', #12 - 313 => 'ILCE-5000', #12 - 317 => 'DSC-RX100M3', #12 - 318 => 'ILCE-7S', #12 + 306 => 'ILCE-7', #JR + 307 => 'NEX-5T', #JR + 308 => 'DSC-RX100M2', #JR + 309 => 'DSC-RX10', #JR + 310 => 'DSC-RX1R', #JR + 311 => 'ILCE-7R', #JR + 312 => 'ILCE-6000', #JR + 313 => 'ILCE-5000', #JR + 317 => 'DSC-RX100M3', #JR + 318 => 'ILCE-7S', #JR 319 => 'ILCA-77M2', #14 - 339 => 'ILCE-5100', #12 - 340 => 'ILCE-7M2', #12 + 339 => 'ILCE-5100', #JR + 340 => 'ILCE-7M2', #JR 346 => 'ILCE-QX1', #14 }, }, 0xb020 => { #2 Name => 'CreativeStyle', Writable => 'string', - # (all of these values have been observed, ref 12 and PH) + # (all of these values have been observed, ref JR and PH) # - this PrintConv is included to make these strings consistent with # other CreativeStyle tags, and to facilitate the language translations # - these values are always English, regardless of the camera language settings @@ -1374,7 +1374,7 @@ my %meterInfo2 = ( PrintConv => { 0 => 'Off', 1 => 'On', - 0xffffffff => 'n/a', # (HX9V sweep panorama, ref 12) + 0xffffffff => 'n/a', # (HX9V sweep panorama, ref JR) }, }, 0xb027 => { #2 @@ -1470,7 +1470,7 @@ my %meterInfo2 = ( 14 => 'Smile Shutter', #9 (T200) 15 => 'Manual', 18 => 'High Sensitivity', #9 - 19 => 'Macro', #12 + 19 => 'Macro', #JR 20 => 'Advanced Sports Shooting', #9 29 => 'Underwater', #9 # 30 seen for DSC-W110 and W390, maybe something with Face or Portrait ?? @@ -1482,8 +1482,8 @@ my %meterInfo2 = ( 38 => 'Backlight Correction HDR', #9 39 => 'Superior Auto', #9 40 => 'Background Defocus', #PH (HX20V) - 41 => 'Soft Skin', #12 (HX9V) (HX200V Portrait - PH) - 42 => '3D Image', #12 (HX9V) + 41 => 'Soft Skin', #JR (HX9V) (HX200V Portrait - PH) + 42 => '3D Image', #JR (HX9V) # 50 seen for DSC-W530 65535 => 'n/a', #PH (A100) }, @@ -1513,7 +1513,7 @@ my %meterInfo2 = ( # AFAreaMode only for older models; # exclude newest DSC models, which give AFAreaMode in Tag9402 0x0017 (eg. RX100 - PH) Writable => 'int16u', - Condition => 'not $$self{MetaVersion} or $$self{MetaVersion} ne "DC7303320222000"', #12 + Condition => 'not $$self{MetaVersion} or $$self{MetaVersion} ne "DC7303320222000"', #JR RawConv => '$val == 65535 ? undef : $val', Notes => 'older models', PrintConv => { @@ -1524,11 +1524,11 @@ my %meterInfo2 = ( 3 => 'Spot', 4 => 'Flexible Spot', # (T200) 6 => 'Touch', - 14 => 'Tracking', #12 (HX9V) ("Manual" for the T200?, ref 9) + 14 => 'Tracking', #JR (HX9V) ("Manual" for the T200?, ref 9) 15 => 'Face Tracking', # (not set when in face detect mode and no faces detected) 65535 => 'n/a', #PH (A100) }, - },{ #12 + },{ #JR Name => 'AFAreaMode', # AFAreaMode for DSC-HX9V generation, having values that appear to be different from older models. Writable => 'int16u', @@ -1564,20 +1564,20 @@ my %meterInfo2 = ( PrintConv => { 0 => 'Standard', 1 => 'Fine', - 2 => 'Extra Fine', #12 + 2 => 'Extra Fine', #JR 65535 => 'n/a', #PH (A100) }, }, 0xb048 => { #9 - Name => 'FlashLevel', #12 other name, but values -9 to 9 match FlashExposureCompensation + Name => 'FlashLevel', #JR other name, but values -9 to 9 match FlashExposureCompensation Writable => 'int16s', RawConv => '($val == -1 and $$self{Model} =~ /DSLR-A100\b/) ? undef : $val', PrintConv => { -32768 => 'Low', - -9 => '-9/3', #12 - -6 => '-6/3', #12 - -5 => '-5/3', #12 - -4 => '-4/3', #12 + -9 => '-9/3', #JR + -6 => '-6/3', #JR + -5 => '-5/3', #JR + -4 => '-4/3', #JR -3 => '-3/3', -2 => '-2/3', -1 => '-1/3', # (for the A100, -1 is effectively 'n/a' - PH) @@ -1585,10 +1585,10 @@ my %meterInfo2 = ( 1 => '+1/3', 2 => '+2/3', 3 => '+3/3', - 4 => '+4/3', #12 (NC) - 5 => '+5/3', #12 (NC) - 6 => '+6/3', #12 - 128 => 'n/a', #12 (HX9V) + 4 => '+4/3', #JR (NC) + 5 => '+5/3', #JR (NC) + 6 => '+6/3', #JR + 128 => 'n/a', #JR (HX9V) 32767 => 'High', }, }, @@ -1626,9 +1626,9 @@ my %meterInfo2 = ( 65535 => 'n/a', }, }, - # 0xb04c - rational64u: 10/10 (seen 5 for HX9V Manual-exposure images, ref 12) + # 0xb04c - rational64u: 10/10 (seen 5 for HX9V Manual-exposure images, ref JR) # 0xb04d - int16u: 0 - # (the Kamisaka decoding of 0xb04e seems wrong - ref 12) + # (the Kamisaka decoding of 0xb04e seems wrong - ref JR) # 0xb04e => { #2 # Name => 'LongExposureNoiseReduction', # Notes => 'LongExposureNoiseReduction for other models', @@ -1642,9 +1642,9 @@ my %meterInfo2 = ( # 65535 => 'n/a', #PH (A100) # }, # }, - 0xb04e => { #PH (RX100) - but not in RX100M3 anymore (ref 12) + 0xb04e => { #PH (RX100) - but not in RX100M3 anymore (ref JR) Name => 'FocusMode', - Condition => '$$self{MetaVersion} and $$self{MetaVersion} eq "DC7303320222000"', #12 + Condition => '$$self{MetaVersion} and $$self{MetaVersion} eq "DC7303320222000"', #JR Notes => 'valid for DSC-HX9V generation and newer', Writable => 'int16u', PrintConv => { @@ -1653,7 +1653,7 @@ my %meterInfo2 = ( 2 => 'AF-S', 3 => 'AF-C', # 4 - seen for HDR-CX360E/CX700E - 5 => 'Semi-manual', #12 (HX9V) + 5 => 'Semi-manual', #JR (HX9V) 6 => 'DMF', # "Direct Manual Focus" }, }, @@ -1677,8 +1677,8 @@ my %meterInfo2 = ( 0 => 'Normal', 1 => 'High', 2 => 'Low', - 3 => 'Off', #12 - # it seems that all SLT and NEX models give n/a here (ref 12) + 3 => 'Off', #JR + # it seems that all SLT and NEX models give n/a here (ref JR) 65535 => 'n/a', }, }, @@ -1693,7 +1693,7 @@ my %meterInfo2 = ( }, }, # 0xb053 - int16u: normally 0, but got 1 for a superior auto backlight picture (RX100) - 0xb054 => { #PH/9/12 (TX1,TX7,RX100,HX9V) + 0xb054 => { #PH/9/JR (TX1,TX7,RX100,HX9V) Name => 'WhiteBalance', Writable => 'int16u', Notes => q{ @@ -1705,12 +1705,12 @@ my %meterInfo2 = ( 4 => 'Custom', # (manual) 5 => 'Daylight', 6 => 'Cloudy', - # PrintConv names matching Exif Fluorescent LightSource names (ref 12) + # PrintConv names matching Exif Fluorescent LightSource names (ref JR) # (Sony uses conflicting names for some models) - 7 => 'Cool White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 1 (White)", ref 9/12) - 8 => 'Day White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 2 (Natural White)", ref 9/12) - 9 => 'Daylight Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 3 (Day White)", ref 9/12) - 10 => 'Incandescent2', #12 (HX9V) + 7 => 'Cool White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 1 (White)", ref 9/JR) + 8 => 'Day White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 2 (Natural White)", ref 9/JR) + 9 => 'Daylight Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 3 (Day White)", ref 9/JR) + 10 => 'Incandescent2', #JR (HX9V) 11 => 'Warm White Fluorescent', 14 => 'Incandescent', 15 => 'Flash', @@ -1750,7 +1750,7 @@ my %meterInfo2 = ( }, ); -# camera information for the A700/A850/A900 (ref 12) +# camera information for the A700/A850/A900 (ref JR) %Image::ExifTool::Sony::CameraInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -1903,7 +1903,7 @@ my %meterInfo2 = ( # 0x0166 - 40 x 128 int8u values: AF Info Blocks for A850 and A900, not for A700 ); -# camera information for other DSLR models (ref 12) +# camera information for other DSLR models (ref JR) %Image::ExifTool::Sony::CameraInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -1923,7 +1923,7 @@ my %meterInfo2 = ( 0x0014 => { Name => 'AFPointSelected', PrintConvColumns => 2, - PrintConv => { #12 (NC) same list as A100, A700/A900, as all have 9 point AF + PrintConv => { #JR (NC) same list as A100, A700/A900, as all have 9 point AF 0 => 'Auto', 1 => 'Center', 2 => 'Top', @@ -1990,7 +1990,7 @@ my %meterInfo2 = ( ); # Camera information for the A55 (ref PH) -# (also valid for A33, A35, A560, A580 - ref 12) +# (also valid for A33, A35, A560, A580 - ref JR) %Image::ExifTool::Sony::CameraInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -2000,7 +2000,7 @@ my %meterInfo2 = ( A580, NEX-3/5/5C/C3 and VG10E. Some tags are valid only for some of these models. }, - 0x00 => { #12 + 0x00 => { #JR Name => 'LensSpec', Condition => '$$self{Model} !~ /^NEX-5C/', Format => 'undef[8]', @@ -2009,7 +2009,7 @@ my %meterInfo2 = ( PrintConv => \&PrintLensSpec, PrintConvInv => \&PrintInvLensSpec, }, - 0x0e => { #12 + 0x0e => { #JR Name => 'FocalLength', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', @@ -2019,7 +2019,7 @@ my %meterInfo2 = ( PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ s/ mm//; $val', }, - 0x10 => { #12 + 0x10 => { #JR Name => 'FocalLengthTeleZoom', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', @@ -2034,10 +2034,10 @@ my %meterInfo2 = ( # 1) DSLR-A450/A500/A550 with 9 point AF system: decoding/offsets identical to A200 - A390 in CameraInfo # 2) SLT-A33/A35/A55 and DSLR-A560/A580 with 15 point AF system: similar/more info but at different offsets # - 0x14 => { #12 + 0x14 => { #JR Name => 'AFPointSelected', Condition => '$$self{Model} =~ /^(DSLR-A(450|500|550))\b/', - # (these cameras have a 9-point AF system, ref 12) + # (these cameras have a 9-point AF system, ref JR) PrintConvColumns => 2, PrintConv => { 0 => 'Auto', # (seen in Wide mode and for Manual Focus) @@ -2052,7 +2052,7 @@ my %meterInfo2 = ( 9 => 'Upper-left', }, }, - 0x15 => { #12 + 0x15 => { #JR Name => 'FocusMode', Condition => '$$self{Model} =~ /^(DSLR-A(450|500|550))\b/', PrintConv => { @@ -2062,7 +2062,7 @@ my %meterInfo2 = ( 3 => 'AF-A', }, }, - 0x18 => { #12 + 0x18 => { #JR Name => 'AFPoint', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', PrintConv => { @@ -2076,7 +2076,7 @@ my %meterInfo2 = ( 7 => 'Bottom-left', }, }, - 0x19 => { #12 + 0x19 => { #JR Name => 'FocusStatus', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Notes => 'not valid with Contrast AF or for NEX models', @@ -2094,7 +2094,7 @@ my %meterInfo2 = ( 64 => 'AF-S - Confirmed', }, }, - 0x1b => { #12 + 0x1b => { #JR Name => 'AFStatusActiveSensor', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, @@ -2102,8 +2102,8 @@ my %meterInfo2 = ( 0x1c => { Name => 'AFPointSelected', # (v8.88: renamed from LocalAFAreaPointSelected) Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', - Notes => 'not valid for Contrast AF', #12 - # (all of these cameras have an 15-point three-cross AF system, ref 12) + Notes => 'not valid for Contrast AF', #JR + # (all of these cameras have an 15-point three-cross AF system, ref JR) PrintConvColumns => 2, PrintConv => { 0 => 'Auto', # (seen in Wide mode) @@ -2134,28 +2134,28 @@ my %meterInfo2 = ( 2 => 'AF-C', 3 => 'AF-A', }, - },{ #12 + },{ #JR Name => 'AFStatusTop-right', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, ], - 0x1f => { #12 + 0x1f => { #JR Name => 'AFStatusBottom-right', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, - 0x20 => { #12 + 0x20 => { #JR Name => 'AFPoint', # (v8.88: renamed from LocalAFAreaPointUsed) Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Notes => 'the AF sensor used for focusing. Not valid for Contrast AF', PrintConvColumns => 2, PrintConv => { %afPoint15, - 255 => '(none)', #PH (A55, guess; also A35 with non-AF lens, ref 12) + 255 => '(none)', #PH (A55, guess; also A35 with non-AF lens, ref JR) }, }, - 0x21 => [ #12 + 0x21 => [ #JR { Name => 'AFStatusActiveSensor', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', @@ -2166,7 +2166,7 @@ my %meterInfo2 = ( %Image::ExifTool::Minolta::afStatusInfo, }, ], - 0x23 => [ #12 + 0x23 => [ #JR { Name => 'AFStatus15', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', @@ -2188,7 +2188,7 @@ my %meterInfo2 = ( 0x31 => { Name => 'AFStatusRight', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, # 0x0166 - starting here there are 96 AF Info blocks of 155 bytes each for the SLT-A33/A35/A55 and DSLR-A560/A580, # starting here there are 86 AF Info blocks of 174 bytes each for the DSLR-A450/A500/A550, - # but NOT for NEX, and not for the A580 in Contrast-AF mode (ref 12) + # but NOT for NEX, and not for the A580 in Contrast-AF mode (ref JR) # The 43rd byte of each block for A580 appears to be the AFPoint as in offset 0x20, # possibly also 73rd and 74th byte ); @@ -2208,7 +2208,7 @@ my %meterInfo2 = ( More camera settings and focus information decoded for models such as the A200, A230, A290, A300, A330, A350, A380, A390, A700, A850 and A900. }, - 0x0e => [{ #7/12 + 0x0e => [{ #7/JR Name => 'DriveMode2', Condition => '$$self{Model} =~ /^DSLR-A(230|290|330|380|390)$/', Notes => 'A230, A290, A330, A380 and A390', @@ -2231,20 +2231,20 @@ my %meterInfo2 = ( PrintConv => { 0x01 => 'Single Frame', 0x02 => 'Continuous High', # A700/A900; not on A850 - 0x12 => 'Continuous Low', #12 + 0x12 => 'Continuous Low', #JR 0x04 => 'Self-timer 10 sec', 0x05 => 'Self-timer 2 sec, Mirror Lock-up', 0x06 => 'Single-frame Bracketing', 0x07 => 'Continuous Bracketing', - 0x18 => 'White Balance Bracketing Low', #12 - 0x28 => 'White Balance Bracketing High', #12 - 0x19 => 'D-Range Optimizer Bracketing Low', #12 - 0x29 => 'D-Range Optimizer Bracketing High', #12 - 0x0a => 'Remote Commander', #12 - 0x0b => 'Mirror Lock-up', #12 (A850/A900; not on A700) + 0x18 => 'White Balance Bracketing Low', #JR + 0x28 => 'White Balance Bracketing High', #JR + 0x19 => 'D-Range Optimizer Bracketing Low', #JR + 0x29 => 'D-Range Optimizer Bracketing High', #JR + 0x0a => 'Remote Commander', #JR + 0x0b => 'Mirror Lock-up', #JR (A850/A900; not on A700) }, }], - 0x10 => { #12 (1 and 2 inverted!) + 0x10 => { #JR (1 and 2 inverted!) Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', @@ -2265,11 +2265,11 @@ my %meterInfo2 = ( 3 => 'Advanced Level', }, }, - 0x2b => { #12 seen 2,1,3 for both WB and DRO bracketing + 0x2b => { #JR seen 2,1,3 for both WB and DRO bracketing Name => 'BracketShotNumber', Notes => 'WB and DRO bracketing', }, - 0x2c => { #12 + 0x2c => { #JR Name => 'WhiteBalanceBracketing', PrintConv => { 0 => 'Off', @@ -2277,10 +2277,10 @@ my %meterInfo2 = ( 2 => 'High', }, }, - 0x2d => { #12 seen 2,1,3 for both WB and DRO bracketing + 0x2d => { #JR seen 2,1,3 for both WB and DRO bracketing Name => 'BracketShotNumber2', }, - 0x2e => { # 12 + 0x2e => { #JR Name => 'DynamicRangeOptimizerBracket', PrintConv => { 0 => 'Off', @@ -2288,15 +2288,15 @@ my %meterInfo2 = ( 2 => 'High', }, }, - 0x2f => { #12 seen 0,1,2 and 0,1,2,3,4 for 3 and 5 image bracketing sequences + 0x2f => { #JR seen 0,1,2 and 0,1,2,3,4 for 3 and 5 image bracketing sequences Name => 'ExposureBracketShotNumber', }, - 0x3f => { #12 + 0x3f => { #JR Name => 'ExposureProgram', SeparateTable => 'ExposureProgram', PrintConv => \%sonyExposureProgram, }, - 0x41 => { #12 style actually used (combination of mode dial + creative style menu) + 0x41 => { #JR style actually used (combination of mode dial + creative style menu) Name => 'CreativeStyle', PrintConvColumns => 2, PrintConv => { @@ -2330,7 +2330,7 @@ my %meterInfo2 = ( PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }, - 0x77 => { #12 + 0x77 => { #JR Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', @@ -2385,7 +2385,7 @@ my %meterInfo2 = ( }, ); -# more camera setting information (ref 12) +# more camera setting information (ref JR) # - many of these tags are the same as in CameraSettings3 %Image::ExifTool::Sony::MoreInfo = ( PROCESS_PROC => \&ProcessMoreInfo, @@ -2415,8 +2415,8 @@ my %meterInfo2 = ( # 0x0102: 1804 bytes # 0x0103: 176 bytes # 0x0104: 1088 bytes - # 0x0105: 160 bytes (all zero unless flash is used, ref 12) - # 0x0106: 256 bytes (faces detected if first byte is non-zero? ref 12) + # 0x0105: 160 bytes (all zero unless flash is used, ref JR) + # 0x0106: 256 bytes (faces detected if first byte is non-zero? ref JR) 0x0107 => { # (7200 bytes: 3 sets of 40x30 int16u values in the range 0-1023) Name => 'TiffMeteringImage', Notes => q{ @@ -2482,21 +2482,21 @@ my %meterInfo2 = ( # }, 0x011b => { #13 Name => 'ImageCount', - Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #12 + Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'not valid for the A450, A500 or A550', RawConv => '$val & 0x00ffffff', }, 0x0125 => { #13 Name => 'ShutterCount', - Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #12 + Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'not valid for the A450, A500 or A550', RawConv => '$val & 0x00ffffff', }, 0x014a => { #13 Name => 'ShutterCount', # (=ImageCount for these models) - Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)$/', #12 + Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'A450, A500 and A550 only', RawConv => '$val & 0x00ffffff', @@ -2507,7 +2507,7 @@ my %meterInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, - 0x044e => { #12 + 0x044e => { #JR Name => 'ShotNumberSincePowerUp', Condition => '$$self{Model} !~ /^NEX-(3|5)$/', Format => 'int32u', @@ -2531,7 +2531,7 @@ my %meterInfo2 = ( # 0x118d - int16u LensType Condition => '$$self{Model} =~ /^SLT-A35/', ); -# more camera setting information (ref 12) +# more camera setting information (ref JR) # - many of these tags are the same as in CameraSettings3 %Image::ExifTool::Sony::MoreSettings = ( %binaryDataAttrs, @@ -2595,7 +2595,7 @@ my %meterInfo2 = ( 160 => 'Sunset', }, }, - 0x08 => { #12 + 0x08 => { #JR Name => 'ContrastSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', @@ -2698,9 +2698,9 @@ my %meterInfo2 = ( PrintConvColumns => 3, PrintConv => { 33 => '1 EV', - 34 => '1.5 EV', #12 (NC) + 34 => '1.5 EV', #JR (NC) 35 => '2 EV', - 36 => '2.5 EV', #12 (NC) + 36 => '2.5 EV', #JR (NC) 37 => '3 EV', 38 => '3.5 EV', #PH (NC) 39 => '4 EV', @@ -3058,7 +3058,7 @@ my %meterInfo2 = ( }, ); -# Face detection information (ref 12) +# Face detection information (ref JR) my %faceInfo = ( Format => 'int16u[4]', # re-order to top,left,height,width and scale to full-sized image like other Sony models @@ -3230,54 +3230,54 @@ my %faceInfo = ( FORMAT => 'int16u', PRIORITY => 0, NOTES => 'Camera settings for the A200, A300, A350, A700, A850 and A900.', - 0x00 => { #12 + 0x00 => { #JR Name => 'ExposureTime', 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)', }, - 0x01 => { #12 + 0x01 => { #JR Name => 'FNumber', 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', }, - 0x02 => { #12 (requires external flash) + 0x02 => { #JR (requires external flash) Name => 'HighSpeedSync', PrintConv => { 0 => 'Off', 1 => 'On', }, }, - 0x03 => { #12 + 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, - 0x04 => { #7/12 + 0x04 => { #7/JR Name => 'DriveMode', Mask => 0xff, # (not sure what upper byte is for) PrintConv => { 0x01 => 'Single Frame', 0x02 => 'Continuous High', # A700/A900; not on A850 - 0x12 => 'Continuous Low', #12 + 0x12 => 'Continuous Low', #JR 0x04 => 'Self-timer 10 sec', 0x05 => 'Self-timer 2 sec, Mirror Lock-up', 0x06 => 'Single-frame Bracketing', 0x07 => 'Continuous Bracketing', # (A200 val=0x1107) - 0x18 => 'White Balance Bracketing Low', #12 - 0x28 => 'White Balance Bracketing High', #12 - 0x19 => 'D-Range Optimizer Bracketing Low', #12 - 0x29 => 'D-Range Optimizer Bracketing High', #12 - 0x0a => 'Remote Commander', #12 - 0x0b => 'Mirror Lock-up', #12 (A850/A900; not on A700) + 0x18 => 'White Balance Bracketing Low', #JR + 0x28 => 'White Balance Bracketing High', #JR + 0x19 => 'D-Range Optimizer Bracketing Low', #JR + 0x29 => 'D-Range Optimizer Bracketing High', #JR + 0x0a => 'Remote Commander', #JR + 0x0b => 'Mirror Lock-up', #JR (A850/A900; not on A700) }, }, - 0x05 => { #12 + 0x05 => { #JR Name => 'WhiteBalanceSetting', PrintConv => { 2 => 'Auto', @@ -3293,18 +3293,18 @@ my %faceInfo = ( 34 => 'Custom 3', }, }, - 0x06 => { #7 (A700) (ref 12: at least also valid for A200, ValueConv as for ColorCompensationFilterSet) + 0x06 => { #7 (A700) (ref JR: at least also valid for A200, ValueConv as for ColorCompensationFilterSet) Name => 'WhiteBalanceFineTune', ValueConv => '$val > 128 ? $val - 256 : $val', }, - 0x07 => { #12 as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing + 0x07 => { #JR as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing Name => 'ColorTemperatureSet', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, - 0x08 => { #12 as set in WB "Color Temperature/Color Filter" + 0x08 => { #JR as set in WB "Color Temperature/Color Filter" Name => 'ColorCompensationFilterSet', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', @@ -3312,14 +3312,14 @@ my %faceInfo = ( PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x0c => { #12 as set in WB "Custom" and in White Balance Bracketing + 0x0c => { #JR as set in WB "Custom" and in White Balance Bracketing Name => 'ColorTemperatureCustom', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, - 0x0d => { #12 as set in WB "Custom" + 0x0d => { #JR as set in WB "Custom" Name => 'ColorCompensationFilterCustom', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', @@ -3327,7 +3327,7 @@ my %faceInfo = ( PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x0f => { #12 + 0x0f => { #JR Name => 'WhiteBalance', PrintConv => { 2 => 'Auto', @@ -3349,7 +3349,7 @@ my %faceInfo = ( 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', - 4 => 'DMF', #12 + 4 => 'DMF', #JR }, }, 0x11 => { #JD (A700) @@ -3365,9 +3365,9 @@ my %faceInfo = ( Format => 'int16u', # The AF point as selected by the user in AFAreaMode=Local or Spot; # Reported value remains at the last-set position in AFAreaModes=Wide. - # A200, A300, A350: 9-point centre-cross (ref 12) - # A700: 11-point centre-dual-cross (ref 12) - # A850, A900: 9-point centre-dual-cross with 10 assist-points (ref 12) + # A200, A300, A350: 9-point centre-cross (ref JR) + # A700: 11-point centre-dual-cross (ref JR) + # A850, A900: 9-point centre-dual-cross with 10 assist-points (ref JR) PrintConvColumns => 2, PrintConv => { 1 => 'Center', @@ -3383,7 +3383,7 @@ my %faceInfo = ( 11 => 'Far Left', # (presumably A700 only) }, }, - 0x13 => { #12 + 0x13 => { #JR Name => 'FlashMode', PrintConv => { 0 => 'Autoflash', @@ -3394,7 +3394,7 @@ my %faceInfo = ( 6 => 'Slow Sync', }, }, - 0x14 => { #12 + 0x14 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) @@ -3451,7 +3451,7 @@ my %faceInfo = ( 16 => 'Sepia', #7 }, }, - 0x1b => { #12 + 0x1b => { #JR Name => 'ColorSpace', PrintConv => { 0 => 'sRGB', @@ -3549,19 +3549,19 @@ my %faceInfo = ( 129 => 'StyleBox1', 130 => 'StyleBox2', 131 => 'StyleBox3', - 132 => 'StyleBox4', #12 (A850) - 133 => 'StyleBox5', #12 (A850) - 134 => 'StyleBox6', #12 (A850) + 132 => 'StyleBox4', #JR (A850) + 133 => 'StyleBox5', #JR (A850) + 134 => 'StyleBox6', #JR (A850) }, }, - 0x2e => { #12 (may not apply to A200/A300/A350 -- they don't have the AF/MF button) + 0x2e => { #JR (may not apply to A200/A300/A350 -- they don't have the AF/MF button) Name => 'FocusModeSwitch', PrintConv => { 0 => 'AF', 1 => 'Manual', }, }, - 0x2f => { #12 + 0x2f => { #JR Name => 'ShutterSpeedSetting', Notes => 'used in M, S and Program Shift S modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', @@ -3569,7 +3569,7 @@ my %faceInfo = ( PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, - 0x30 => { #12 + 0x30 => { #JR Name => 'ApertureSetting', Notes => 'used in M, A and Program Shift A modes', ValueConv => '2 ** (($val/8 - 1) / 2)', @@ -3586,7 +3586,7 @@ my %faceInfo = ( Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, - 0x3e => { #12 + 0x3e => { #JR Name => 'FlashAction', PrintConv => { 0 => 'Did not fire', @@ -3603,14 +3603,14 @@ my %faceInfo = ( 2 => 'Rotate 270 CW', }, }, - 0x40 => { #12 + 0x40 => { #JR Name => 'AELock', PrintConv => { 1 => 'Off', 2 => 'On', }, }, - 0x4c => { #12 + 0x4c => { #JR Name => 'FlashAction2', PrintConv => { 1 => 'Fired, Autoflash', @@ -3624,17 +3624,17 @@ my %faceInfo = ( 34 => 'Fired, Fill-flash, HSS', }, }, - 0x4d => { #12 + 0x4d => { #JR Name => 'FocusMode', # (focus mode actually used) PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', - 4 => 'DMF', #12 + 4 => 'DMF', #JR }, }, - 0x50 => { #12 + 0x50 => { #JR Name => 'BatteryState', PrintConv => { 2 => 'Empty', # 0% @@ -3644,12 +3644,12 @@ my %faceInfo = ( 6 => 'Full', # > 80% }, }, - 0x51 => { #12 + 0x51 => { #JR Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, - 0x53 => { #12 + 0x53 => { #JR Name => 'FocusStatus', PrintConv => { 0 => 'Not confirmed', @@ -3695,20 +3695,20 @@ my %faceInfo = ( 50 => '1/2 EV', }, }, - 0x6a => { #12 + 0x6a => { #JR Name => 'RedEyeReduction', PrintConv => { 0 => 'Off', 1 => 'On', }, }, - 0x9a => { #12 + 0x9a => { #JR Name => 'FolderNumber', Mask => 0x03ff, # (not sure what the upper 6 bits are for) PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, - 0x9b => { #12 + 0x9b => { #JR Name => 'ImageNumber', Mask => 0x3fff, # (not sure what the upper 2 bits are for) PrintConv => 'sprintf("%.4d",$val)', @@ -3724,28 +3724,28 @@ my %faceInfo = ( PRIORITY => 0, NOTES => 'Camera settings for the A230, A290, A330, A380 and A390.', ### 0x00-0x03: same TagID as CameraSettings - 0x00 => { #12 + 0x00 => { #JR Name => 'ExposureTime', 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)', }, - 0x01 => { #12 + 0x01 => { #JR Name => 'FNumber', 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', }, - 0x02 => { #12 (requires external flash) + 0x02 => { #JR (requires external flash) Name => 'HighSpeedSync', PrintConv => { 0 => 'Off', 1 => 'On', }, }, - 0x03 => { #12 + 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', ValueConvInv => 'int($val * 24 + 128.5)', @@ -3753,7 +3753,7 @@ my %faceInfo = ( PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ### 0x04-0x11: subtract 1 from CameraSettings TagID - 0x04 => { #12 + 0x04 => { #JR Name => 'WhiteBalanceSetting', PrintConv => { 2 => 'Auto', @@ -3769,18 +3769,18 @@ my %faceInfo = ( 34 => 'Custom 3', }, }, - 0x05 => { #12 + 0x05 => { #JR Name => 'WhiteBalanceFineTune', ValueConv => '$val > 128 ? $val - 256 : $val', }, - 0x06 => { #12 as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing + 0x06 => { #JR as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing Name => 'ColorTemperatureSet', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, - 0x07 => { #12 as set in WB "Color Temperature/Color Filter" + 0x07 => { #JR as set in WB "Color Temperature/Color Filter" Name => 'ColorCompensationFilterSet', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', @@ -3788,18 +3788,18 @@ my %faceInfo = ( PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x08 => { #12 + 0x08 => { #JR Name => 'CustomWB_RGBLevels', Format => 'int16u[3]', }, - 0x0b => { #12 as set in WB "Custom" and in White Balance Bracketing + 0x0b => { #JR as set in WB "Custom" and in White Balance Bracketing Name => 'ColorTemperatureCustom', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, - 0x0c => { #12 as set in WB "Custom" + 0x0c => { #JR as set in WB "Custom" Name => 'ColorCompensationFilterCustom', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', @@ -3807,7 +3807,7 @@ my %faceInfo = ( PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x0e => { #12 + 0x0e => { #JR Name => 'WhiteBalance', PrintConv => { 2 => 'Auto', @@ -3822,7 +3822,7 @@ my %faceInfo = ( 17 => 'Shade', }, }, - 0x0f => { #12/PH (educated guess) + 0x0f => { #JR/PH (educated guess) Name => 'FocusModeSetting', PrintConv => { 0 => 'Manual', @@ -3832,7 +3832,7 @@ my %faceInfo = ( # seen 5 for A380 (FocusMode was Manual and FocusStatus was Confirmed) }, }, - 0x10 => { #12/PH (educated guess) + 0x10 => { #JR/PH (educated guess) Name => 'AFAreaMode', PrintConv => { 0 => 'Wide', @@ -3840,12 +3840,12 @@ my %faceInfo = ( 2 => 'Spot', }, }, - 0x11 => { #12/PH (educated guess) + 0x11 => { #JR/PH (educated guess) Name => 'AFPointSetting', Format => 'int16u', # The AF point as selected by the user in AFAreaMode=Local or Spot; # Reported value remains at the last-set position in AFAreaModes=Wide. - # (all of these cameras have a 9-point centre-cross AF system, ref 12) + # (all of these cameras have a 9-point centre-cross AF system, ref JR) PrintConvColumns => 2, PrintConv => { 1 => 'Center', @@ -3860,7 +3860,7 @@ my %faceInfo = ( }, }, ### 0x12-0x18: subtract 2 from CameraSettings TagID - 0x12 => { #12 + 0x12 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) @@ -3992,11 +3992,11 @@ my %faceInfo = ( SeparateTable => 'ExposureProgram', PrintConv => \%sonyExposureProgram, }, - 0x3d => { # (copied from CameraSettings, ref 12) + 0x3d => { # (copied from CameraSettings, ref JR) Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, - 0x3e => { #12 + 0x3e => { #JR Name => 'FlashAction', PrintConv => { 0 => 'Did not fire', @@ -4013,14 +4013,14 @@ my %faceInfo = ( 2 => 'Rotate 270 CW', }, }, - 0x40 => { #12 + 0x40 => { #JR Name => 'AELock', PrintConv => { 1 => 'Off', 2 => 'On', }, }, - 0x4c => { #12 + 0x4c => { #JR Name => 'FlashAction2', PrintConv => { 1 => 'Fired, Autoflash', @@ -4034,7 +4034,7 @@ my %faceInfo = ( 34 => 'Fired, Fill-flash, HSS', }, }, - 0x4d => { #12 + 0x4d => { #JR Name => 'FocusMode', # (focus mode actually used) PrintConv => { 0 => 'Manual', @@ -4043,7 +4043,7 @@ my %faceInfo = ( 3 => 'AF-A', }, }, - 0x53 => { #12 (copied from CameraSettings, but all bits may not be applicable for these models) + 0x53 => { #JR (copied from CameraSettings, but all bits may not be applicable for these models) Name => 'FocusStatus', PrintConv => { 0 => 'Not confirmed', @@ -4063,14 +4063,14 @@ my %faceInfo = ( 3 => 'Small', }, }, - 0x55 => { # (copied from CameraSettings, ref 12) + 0x55 => { # (copied from CameraSettings, ref JR) Name => 'AspectRatio', PrintConv => { 1 => '3:2', 2 => '16:9', }, }, - 0x56 => { # (copied from CameraSettings, ref 12) + 0x56 => { # (copied from CameraSettings, ref JR) Name => 'Quality', PrintConv => { 0 => 'RAW', @@ -4082,7 +4082,7 @@ my %faceInfo = ( 48 => 'Standard', }, }, - 0x58 => { # (copied from CameraSettings, ref 12) + 0x58 => { # (copied from CameraSettings, ref JR) Name => 'ExposureLevelIncrements', PrintConv => { 33 => '1/3 EV', @@ -4091,14 +4091,14 @@ my %faceInfo = ( }, ### 0x5a onwards: subtract 1 from CameraSettings TagID # (0x69 not confirmed) - #0x69 => { #12 + #0x69 => { #JR # Name => 'RedEyeReduction', # PrintConv => { # 0 => 'Off', # 1 => 'On', # }, #}, - 0x7e => { #12 + 0x7e => { #JR Name => 'DriveMode', Mask => 0xff, # (not sure what upper byte is for) PrintConv => { # (values confirmed for specified models - PH) @@ -4111,7 +4111,7 @@ my %faceInfo = ( 0x0b => 'Continuous Self-timer', # (A230 val=0x800b [5 shots], A330 val=0x400b [3 shots]) }, }, - 0x7f => { #12 + 0x7f => { #JR Name => 'FlashMode', PrintConv => { 0 => 'Autoflash', @@ -4144,7 +4144,7 @@ my %faceInfo = ( Camera settings for models such as the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E. }, - 0x00 => { #12 + 0x00 => { #JR Name => 'ShutterSpeedSetting', Notes => 'used only in M and S exposure modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', @@ -4152,7 +4152,7 @@ my %faceInfo = ( PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, - 0x01 => { #12 + 0x01 => { #JR Name => 'ApertureSetting', Notes => 'used only in M and A exposure modes', ValueConv => '2 ** (($val/8 - 1) / 2)', @@ -4174,14 +4174,14 @@ my %faceInfo = ( 254 => 'n/a', # get this for multi-shot noise reduction }, }, - 0x03 => { #12 + 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, - 0x04 => { #12 + 0x04 => { #JR Name => 'DriveModeSetting', # Same drivemode info is repeated in 0x0034, but with at least the following exceptions: # - 0x0034 not for A550 ? - seen "0" @@ -4205,7 +4205,7 @@ my %faceInfo = ( 0xc0 => 'Remote Commander', }, }, - 0x05 => { #12 + 0x05 => { #JR Name => 'ExposureProgram', # Camera exposure program/mode as selected with the Mode dial. # For SCN a further selection is done via the menu @@ -4213,7 +4213,7 @@ my %faceInfo = ( SeparateTable => 'ExposureProgram2', PrintConv => \%sonyExposureProgram2, }, - 0x06 => { #12 + 0x06 => { #JR Name => 'FocusModeSetting', PrintConv => { 17 => 'AF-S', @@ -4223,7 +4223,7 @@ my %faceInfo = ( 48 => 'DMF', # (NC) (seen for NEX-5) }, }, - 0x07 => { #12 + 0x07 => { #JR Name => 'MeteringMode', PrintConv => { 1 => 'Multi-segment', @@ -4231,7 +4231,7 @@ my %faceInfo = ( 3 => 'Spot', }, }, - 0x09 => { #12 + 0x09 => { #JR Name => 'SonyImageSize', PrintConv => { # values confirmed as noted for the A580 and A33 21 => 'Large (3:2)', # A580: 16M (4912x3264), A33: 14M (4592x3056) @@ -4242,7 +4242,7 @@ my %faceInfo = ( 27 => 'Small (16:9)', # A580: 3.4M (2448x1376) }, }, - 0x0a => { #12 + 0x0a => { #JR Name => 'AspectRatio', # normally 4 for A580 3:2 ratio images # seen 8 when selecting 16:9 via menu, and when selecting Panorama mode @@ -4251,7 +4251,7 @@ my %faceInfo = ( 8 => '16:9', }, }, - 0x0b => { #12 + 0x0b => { #JR Name => 'Quality', PrintConv => { 2 => 'RAW', @@ -4269,14 +4269,14 @@ my %faceInfo = ( }, }, 0x0d => 'DynamicRangeOptimizerLevel', - 0x0e => { #12 + 0x0e => { #JR Name => 'ColorSpace', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, - 0x0f => { #12 + 0x0f => { #JR Name => 'CreativeStyleSetting', PrintConvColumns => 2, PrintConv => { @@ -4288,25 +4288,25 @@ my %faceInfo = ( 160 => 'Sunset', }, }, - 0x10 => { #12 (seen values 253, 254, 255, 0, 1, 2, 3) + 0x10 => { #JR (seen values 253, 254, 255, 0, 1, 2, 3) Name => 'ContrastSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x11 => { #12 + 0x11 => { #JR Name => 'SaturationSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x12 => { #12 + 0x12 => { #JR Name => 'SharpnessSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x16 => { #12 + 0x16 => { #JR Name => 'WhiteBalanceSetting', # many guessed, based on "logical system" as observed for Daylight and Shade and steps of 16 between the modes PrintHex => 1, @@ -4314,7 +4314,7 @@ my %faceInfo = ( PrintConv => \%whiteBalanceSetting, SeparateTable => 1, }, - 0x17 => { #12 + 0x17 => { #JR Name => 'ColorTemperatureSetting', # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter" ValueConv => '$val * 100', @@ -4322,7 +4322,7 @@ my %faceInfo = ( PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, - 0x18 => { #12 + 0x18 => { #JR Name => 'ColorCompensationFilterSet', # seen 0, 1-9 and 245-255, corresponding to 0, M1-M9 and G9-G1 on camera display # matches "0xb022 ColorCompensationFilter" when WB set to "Custom" or "Color Temperature/Color Filter" @@ -4331,15 +4331,15 @@ my %faceInfo = ( PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, - 0x19 => { #12 + 0x19 => { #JR Name => 'CustomWB_RGBLevels', Format => 'int16uRev[3]', # 0x19 - 0x1e are related to Custom WB measurements performed by the camera. # The values change only each time when measuring and setting a new Custom WB. # (0x19,0x1a) and (0x1d,0x1e) are same as MoreSettings (0x1a,0x1b) and (0x1c,0x1d) }, - # 0x1f - always 2 (ref 12) - 0x20 => { #12 + # 0x1f - always 2 (ref JR) + 0x20 => { #JR Name => 'FlashMode', PrintConvColumns => 2, PrintConv => { @@ -4351,14 +4351,14 @@ my %faceInfo = ( 20 => 'Wireless', }, }, - 0x21 => { #12 + 0x21 => { #JR Name => 'FlashControl', PrintConv => { 1 => 'ADI Flash', 2 => 'Pre-flash TTL', }, }, - 0x23 => { #12 + 0x23 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) @@ -4373,25 +4373,25 @@ my %faceInfo = ( 1 => 'Wide', 2 => 'Spot', 3 => 'Local', - 4 => 'Flexible', #12 + 4 => 'Flexible', #JR # (Flexible Spot is a grid of 17x11 points for the NEX-5) }, }, - 0x25 => { #12 + 0x25 => { #JR Name => 'LongExposureNoiseReduction', PrintConv => { 1 => 'Off', 16 => 'On', # (unused or dark subject) }, }, - 0x26 => { #12 + 0x26 => { #JR Name => 'HighISONoiseReduction', PrintConv => { 16 => 'Low', 19 => 'Auto', }, }, - 0x27 => { #12 + 0x27 => { #JR Name => 'SmileShutterMode', PrintConv => { 17 => 'Slight Smile', @@ -4399,7 +4399,7 @@ my %faceInfo = ( 19 => 'Big Smile', }, }, - 0x28 => { #12 + 0x28 => { #JR Name => 'RedEyeReduction', PrintConv => { 1 => 'Off', @@ -4419,9 +4419,9 @@ my %faceInfo = ( PrintConvColumns => 3, PrintConv => { 33 => '1 EV', - 34 => '1.5 EV', #12 (NC) + 34 => '1.5 EV', #JR (NC) 35 => '2 EV', - 36 => '2.5 EV', #12 (NC) + 36 => '2.5 EV', #JR (NC) 37 => '3 EV', 38 => '3.5 EV', #PH (NC) 39 => '4 EV', @@ -4429,7 +4429,7 @@ my %faceInfo = ( 41 => '6 EV', }, }, - 0x2f => { #12 (not sure what is difference with 0x85) + 0x2f => { #JR (not sure what is difference with 0x85) Name => 'ViewingMode', PrintConv => { 16 => 'ViewFinder', @@ -4437,21 +4437,21 @@ my %faceInfo = ( 34 => 'Quick AF Live View', }, }, - 0x30 => { #12 + 0x30 => { #JR Name => 'FaceDetection', PrintConv => { 1 => 'Off', 16 => 'On', }, }, - 0x31 => { #12 + 0x31 => { #JR Name => 'SmileShutter', PrintConv => { 1 => 'Off', 16 => 'On', }, }, - 0x32 => { #12 + 0x32 => { #JR Name => 'SweepPanoramaSize', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4459,7 +4459,7 @@ my %faceInfo = ( 2 => 'Wide', }, }, - 0x33 => { #12 + 0x33 => { #JR Name => 'SweepPanoramaDirection', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4469,7 +4469,7 @@ my %faceInfo = ( 4 => 'Down', }, }, - 0x34 => { #12 + 0x34 => { #JR Name => 'DriveMode', # (drive mode actually used) Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintHex => 1, @@ -4503,7 +4503,7 @@ my %faceInfo = ( 255 => 'None', # seen for NEX-3/5/C3 }, }, - 0x36 => { #12 (not 100% sure about this one) + 0x36 => { #JR (not 100% sure about this one) Name => 'LiveViewAFSetting', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { @@ -4515,7 +4515,7 @@ my %faceInfo = ( # - changes into Phase-AF when switching to Quick AF LV. }, }, - 0x38 => { #12 + 0x38 => { #JR Name => 'PanoramaSize3D', Description => '3D Panorama Size', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', @@ -4526,7 +4526,7 @@ my %faceInfo = ( 3 => '16:9', }, }, - 0x83 => { #12 + 0x83 => { #JR Name => 'AFButtonPressed', # only indicates pressing and holding the "AF" button (centre-controller), # not pressing the shutter release button halfway down @@ -4536,7 +4536,7 @@ my %faceInfo = ( 16 => 'Yes', }, }, - 0x84 => { #12 (not 100% sure about this one) + 0x84 => { #JR (not 100% sure about this one) Name => 'LiveViewMetering', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { @@ -4545,7 +4545,7 @@ my %faceInfo = ( 32 => '1200-zone Evaluative', # SLT, or DSLR with LiveView/OVF switch in LiveView position }, }, - 0x85 => { #12 (not sure what is difference with 0x2f) + 0x85 => { #JR (not sure what is difference with 0x2f) Name => 'ViewingMode2', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { @@ -4555,7 +4555,7 @@ my %faceInfo = ( 34 => 'Quick AF Live View', }, }, - 0x86 => { #12 + 0x86 => { #JR Name => 'AELock', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { @@ -4563,7 +4563,7 @@ my %faceInfo = ( 2 => 'Off', }, }, - 0x87 => { #12 + 0x87 => { #JR Name => 'FlashStatusBuilt-in', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', PrintConv => { @@ -4571,7 +4571,7 @@ my %faceInfo = ( 2 => 'On', }, }, - 0x88 => { #12 + 0x88 => { #JR Name => 'FlashStatusExternal', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', PrintConv => { @@ -4580,7 +4580,7 @@ my %faceInfo = ( 3 => 'On', }, }, -# 0x8a => { #12 +# 0x8a => { #JR # Name => 'LensAF', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { @@ -4588,7 +4588,7 @@ my %faceInfo = ( # 16 => 'AF Lens', # }, # }, - 0x8b => { #12 + 0x8b => { #JR Name => 'LiveViewFocusMode', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { @@ -4597,7 +4597,7 @@ my %faceInfo = ( 16 => 'Manual', }, }, -# 0x8e => { #12 +# 0x8e => { #JR # Name => 'LensSAM', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { @@ -4605,7 +4605,7 @@ my %faceInfo = ( # 16 => 'SAM Lens', # }, # }, - 0x99 => { #12 + 0x99 => { #JR Name => 'LensMount', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', DataMember => 'LensMount', @@ -4616,7 +4616,7 @@ my %faceInfo = ( 17 => 'E-mount', }, }, -# 0x9b => { #12 +# 0x9b => { #JR # Name => 'LensOSS', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { @@ -4626,7 +4626,7 @@ my %faceInfo = ( # }, # }, # 0x9c - 1; 2 for multi-shot modes - 0x10c => { #12 + 0x10c => { #JR Name => 'SequenceNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # seen 18 for A550, so better exclude ? # normally 0; seen 1,2,3 for bracketing, 6 for Handheld Night Shot, 3 for HDR, 6 for MFNR @@ -4640,7 +4640,7 @@ my %faceInfo = ( # - upper 8 bits (0x0117): always value 4, meaning unknown # - next 10 bits: FolderNumber (max. 999 according to manual) # - last 14 bits: ImageNumber (max 9999) - 0x0114 => { #12 + 0x0114 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', @@ -4650,7 +4650,7 @@ my %faceInfo = ( PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, - 276.1 => { #12 (0x0114.1) + 276.1 => { #JR (0x0114.1) Name => 'ImageNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', @@ -4658,7 +4658,7 @@ my %faceInfo = ( PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, - 0x200 => { #12 + 0x200 => { #JR Name => 'ShotNumberSincePowerUp2', Notes => q{ same as ShotNumberSincePowerUp for single-shot images, but includes all @@ -4669,7 +4669,7 @@ my %faceInfo = ( Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', }, - 0x283 => { #12 + 0x283 => { #JR Name => 'AFButtonPressed', # only indicates pressing and holding the "AF" button (centre-controller), # not pressing the shutter release button halfway down @@ -4679,7 +4679,7 @@ my %faceInfo = ( 16 => 'Yes', }, }, - 0x284 => { #12 (not 100% sure about this one) + 0x284 => { #JR (not 100% sure about this one) Name => 'LiveViewMetering', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4688,7 +4688,7 @@ my %faceInfo = ( 32 => '1200-zone Evaluative', # DSLR with LiveView/OVF switch in LiveView position }, }, - 0x285 => { #12 (not sure what is difference with 0x2f) + 0x285 => { #JR (not sure what is difference with 0x2f) Name => 'ViewingMode2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4698,7 +4698,7 @@ my %faceInfo = ( 34 => 'Quick AF Live View', }, }, - 0x286 => { #12 + 0x286 => { #JR Name => 'AELock', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4706,7 +4706,7 @@ my %faceInfo = ( 2 => 'Off', }, }, - 0x287 => { #12 + 0x287 => { #JR Name => 'FlashStatusBuilt-in', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', @@ -4715,7 +4715,7 @@ my %faceInfo = ( 2 => 'On', }, }, - 0x288 => { #12 + 0x288 => { #JR Name => 'FlashStatusExternal', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', @@ -4725,7 +4725,7 @@ my %faceInfo = ( 3 => 'On', }, }, - 0x28b => { #12 + 0x28b => { #JR Name => 'LiveViewFocusMode', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { @@ -4734,7 +4734,7 @@ my %faceInfo = ( 16 => 'Manual', }, }, - 0x30c => { #12 + 0x30c => { #JR Name => 'SequenceNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', @@ -4745,7 +4745,7 @@ my %faceInfo = ( OTHER => sub { shift }, # pass all other numbers straight through }, }, - 0x314 => { #12 + 0x314 => { #JR Name => 'ImageNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', @@ -4754,7 +4754,7 @@ my %faceInfo = ( PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, - 0x316 => { #12 + 0x316 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', @@ -4778,14 +4778,14 @@ my %faceInfo = ( 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 + 0x3f7 => { #JR Name => 'LensType2', Condition => '($$self{Model} =~ /^NEX-/) and ($$self{LensMount} != 1)', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, - 0x400 => { #12 + 0x400 => { #JR Name => 'ImageNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', @@ -4794,7 +4794,7 @@ my %faceInfo = ( PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, - 0x402 => { #12 + 0x402 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', @@ -4812,7 +4812,7 @@ my %faceInfo = ( FORMAT => 'int16u', ); -# extra hardware information (ref 12) +# extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -4899,7 +4899,7 @@ my %faceInfo = ( }, ); -# extra hardware information (ref 12) +# extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -4918,7 +4918,7 @@ my %faceInfo = ( }, ); -# extra hardware information (ref 12) +# extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -5090,7 +5090,7 @@ my %faceInfo = ( ); -# more AF information (ref 12) +# more AF information (ref JR) %Image::ExifTool::Sony::AFInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -5164,11 +5164,11 @@ my %faceInfo = ( PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, - 0x1a => { #12 + 0x1a => { #JR Name => 'SonyImageHeight', Format => 'int16u', }, - 0x1c => { #12 + 0x1c => { #JR Name => 'SonyImageWidth', Format => 'int16u', }, @@ -5228,10 +5228,10 @@ my %sequenceFileNumber = ( #PH Name => 'SequenceFileNumber', Notes => 'file number in burst sequence', Format => 'int32u', - ValueConv => '$val + 1', #12 + ValueConv => '$val + 1', #JR ValueConvInv => '$val - 1', ); -my %releaseMode2 = ( #12 +my %releaseMode2 = ( #JR Name => 'ReleaseMode2', SeparateTable => 'ReleaseMode2', PrintConv => { @@ -5245,11 +5245,11 @@ my %releaseMode2 = ( #12 8 => 'Continuous - Anti-Motion Blur, Hand-held Twilight', # (HX9V) 9 => 'Continuous - HDR', 10 => 'Continuous - Background defocus', # (HX9V) - 13 => 'Continuous - 3D Sweep Panorama', #PH/12 - 15 => 'Continuous - High Resolution Sweep Panorama', #12 (HX50V) + 13 => 'Continuous - 3D Sweep Panorama', #PH/JR + 15 => 'Continuous - High Resolution Sweep Panorama', #JR (HX50V) 16 => 'Continuous - 3D Image', # (HX9V) - 17 => 'Continuous - Burst 2', # (WX7 - PH) (#12 9400-SequenceLength=10 shots) - 19 => 'Continuous - Speed/Advance Priority', #PH/12 (RX100) + 17 => 'Continuous - Burst 2', # (WX7 - PH) (#JR 9400-SequenceLength=10 shots) + 19 => 'Continuous - Speed/Advance Priority', #PH/JR (RX100) 20 => 'Continuous - Multi Frame NR', 23 => 'Single-frame - Exposure Bracketing', # (NC, seen for ILCE-7) 26 => 'Continuous Low', #PH (A77) @@ -5260,7 +5260,7 @@ my %releaseMode2 = ( #12 }, ); -# tag definitions for Tag2010 tables (ref 12) +# tag definitions for Tag2010 tables (ref JR) my %sonyDateTime2010 = ( Name => 'SonyDateTime', Format => 'undef[7]', @@ -5282,7 +5282,7 @@ my %releaseMode2010 = ( PrintConv => { 0 => 'Normal', 1 => 'Continuous', - 2 => 'Bracketing', # (also white balance bracketing - PH) (also Single-frame Exposure Bracketing - ref 12) + 2 => 'Bracketing', # (also white balance bracketing - PH) (also Single-frame Exposure Bracketing - ref JR) # 3 => 'Remote Commander', (NC) (seen this when other ReleaseMode and ReleaseMode2 are 'Normal' - PH, A77) # 4 => 'Continuous - Burst', (NC) 5 => 'Continuous - Speed/Advance Priority', @@ -5394,7 +5394,7 @@ my %exposureProgram2010 = ( PrintConv => \%sonyExposureProgram3, ); -%Image::ExifTool::Sony::Tag2010a = ( #12 +%Image::ExifTool::Sony::Tag2010a = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5427,7 +5427,7 @@ my %exposureProgram2010 = ( #0x1a0c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); -%Image::ExifTool::Sony::Tag2010b = ( #12 +%Image::ExifTool::Sony::Tag2010b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5490,7 +5490,7 @@ my %exposureProgram2010 = ( }, ); -%Image::ExifTool::Sony::Tag2010c = ( #12 +%Image::ExifTool::Sony::Tag2010c = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5550,7 +5550,7 @@ my %exposureProgram2010 = ( #0x1a0c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); -%Image::ExifTool::Sony::Tag2010d = ( #12 +%Image::ExifTool::Sony::Tag2010d = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5606,7 +5606,7 @@ my %exposureProgram2010 = ( }, ); -%Image::ExifTool::Sony::Tag2010e = ( #12 +%Image::ExifTool::Sony::Tag2010e = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5735,7 +5735,7 @@ my %exposureProgram2010 = ( 2 => 'E-mount', }, }, - 0x1893 => { #12 + 0x1893 => { #JR Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', @@ -5757,7 +5757,7 @@ my %exposureProgram2010 = ( #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, ); -%Image::ExifTool::Sony::Tag2010f = ( #12 +%Image::ExifTool::Sony::Tag2010f = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5828,7 +5828,7 @@ my %exposureProgram2010 = ( #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, ); -%Image::ExifTool::Sony::Tag2010g = ( #12 +%Image::ExifTool::Sony::Tag2010g = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -5920,7 +5920,7 @@ my %exposureProgram2010 = ( 2 => 'E-mount', }, }, - 0x18bf => { #12 + 0x18bf => { #JR Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', @@ -5938,7 +5938,7 @@ my %exposureProgram2010 = ( }, ); -# possible metering information (ref 12) +# possible metering information (ref JR) %Image::ExifTool::Sony::MeterInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, @@ -6004,7 +6004,7 @@ my %exposureProgram2010 = ( 0x0714 => { Name => 'MeterInfo2Row9', %meterInfo2 }, ); -%Image::ExifTool::Sony::Tag900b = ( #12 +%Image::ExifTool::Sony::Tag900b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -6035,7 +6035,7 @@ my %exposureProgram2010 = ( }, ); -%Image::ExifTool::Sony::Tag9050 = ( #12 +%Image::ExifTool::Sony::Tag9050 = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -6070,7 +6070,7 @@ my %exposureProgram2010 = ( # appears to be difference between used FNumber and MaxAperture, 256 being +1 APEX or stop # however, not always valid e.g. bracketing, Shutter-prio e.a. # difference between 0x0002 and 0x0004 mostly 0.0, 0.1 or 0.2 stops. - 0x0031 => { #12 + 0x0031 => { #JR Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', Name => 'FlashStatus', RawConv => '$$self{FlashFired} = $val', @@ -6143,13 +6143,13 @@ my %exposureProgram2010 = ( PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, - 0x007c => { #12 valid for ILCE and most NEX + 0x007c => { #JR valid for ILCE and most NEX Name => 'InternalSerialNumber', # (NC) Condition => '$$self{Model} !~ /^(DSC-|Stellar|Lunar|NEX-(5N|7|VG20E)|SLT-|HV|ILCA-)/', Format => 'int8u[4]', PrintConv => 'unpack "H*", pack "C*", split " ", $val', }, - 0x00f0 => { #12 valid for SLT/ILCA models + 0x00f0 => { #JR valid for SLT/ILCA models Name => 'InternalSerialNumber', # (NC) Condition => '$$self{Model} =~ /^(SLT-|HV|ILCA-)/', Format => 'int8u[5]', @@ -6282,7 +6282,7 @@ my %exposureProgram2010 = ( # 0x037b => {%gain2010,Condition=>'$$self{Model}=~/^(SLT-A(65V|77V)|Lunar|NEX-(7|VG20E))/'}, ); -%Image::ExifTool::Sony::Tag9400a = ( #12 +%Image::ExifTool::Sony::Tag9400a = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -6366,7 +6366,7 @@ my %exposureProgram2010 = ( }, ); -%Image::ExifTool::Sony::Tag9400b = ( #12 +%Image::ExifTool::Sony::Tag9400b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -6442,7 +6442,7 @@ my %exposureProgram2010 = ( }, ); -%Image::ExifTool::Sony::Tag9400c = ( #12 +%Image::ExifTool::Sony::Tag9400c = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, @@ -6536,7 +6536,7 @@ my %exposureProgram2010 = ( PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, - 0x16 => { #12 + 0x16 => { #JR Name => 'FocusMode', Mask => 0x7f, # (often +128, not sure what upper bit is for) PrintConv => { @@ -6556,7 +6556,7 @@ my %exposureProgram2010 = ( 2 => 'Spot', # (NC) seen for DSC-WX300 3 => 'Flexible Spot', 10 => 'Selective (for Miniature effect)', # seen for DSC-HX30V,TX30,WX60,WX100 - 11 => 'Zone', #12 (NC) seen in ILCE-7R images + 11 => 'Zone', #JR (NC) seen in ILCE-7R images 14 => 'Tracking', 15 => 'Face Tracking', 255 => 'Manual', @@ -6642,7 +6642,7 @@ my %exposureProgram2010 = ( # 0x18 - maybe another temperature? ); -# Tag9404 (ref 12) +# Tag9404 (ref JR) %Image::ExifTool::Sony::Tag9404a = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, @@ -6682,7 +6682,7 @@ my %exposureProgram2010 = ( }, ); -# Tag9405 (ref 12) +# Tag9405 (ref JR) %Image::ExifTool::Sony::Tag9405a = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, @@ -6747,7 +6747,7 @@ my %exposureProgram2010 = ( }, ); -# Tag9405b (ref 12) +# Tag9405b (ref JR) %Image::ExifTool::Sony::Tag9405b = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, @@ -6908,7 +6908,7 @@ my %exposureProgram2010 = ( }, ); -# Tag9406 (ref 12) +# Tag9406 (ref JR) %Image::ExifTool::Sony::Tag9406 = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, @@ -6966,7 +6966,7 @@ my %exposureProgram2010 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are currently extracted for SLT models only.', # 0x00 - 10(A65,A77,NEX-5N,7,VG20E), 11(A37,A57,A99,NEX-5R,6,F3,RX1,RX100), - # 9(HX9V), 4,68,86,110(panoramas) - ref 12 + # 9(HX9V), 4,68,86,110(panoramas) - ref JR 0x04 => { Name => 'AFPointsSelected', Format => 'int32u', @@ -6981,7 +6981,7 @@ my %exposureProgram2010 = ( 0x7fffffff => '(all)', # 0xffffffff - 'n/a' - RX1 and NEX models always give this # (on Wide AFAreaMode, outer focus points are dropped - # at progressively higher digital zoom ratios, ref 12) + # at progressively higher digital zoom ratios, ref JR) BITMASK => { 0 => 'Center', # (1.04 gave this for Upper-middle and Near Left) 1 => 'Top', # (1.04 didn't give this value) @@ -7002,7 +7002,7 @@ my %exposureProgram2010 = ( 16 => 'Lower Far Right',# (1.04 OK, but gave this for Far Right and Lower-right too) 17 => 'Lower Far Left', # (1.04 didn't give this value) 18 => 'Upper Far Left', # (1.04 OK) - # higher bits may be used in panorama images - ref 12 + # higher bits may be used in panorama images - ref JR }, }, }, @@ -7010,7 +7010,7 @@ my %exposureProgram2010 = ( # 0xa6 - 8 bytes face detection info ?; starts with 1, otherwise all 0 ); -# Tag940c (ref 12) +# Tag940c (ref JR) %Image::ExifTool::Sony::Tag940c = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, @@ -7094,7 +7094,7 @@ my %exposureProgram2010 = ( DATAMEMBER => [ 0x02 ], IS_SUBDIR => [ 0x11 ], NOTES => 'These tags are currently extracted for SLT models only.', - # first 4 bytes (deciphered) (ref 12): + # first 4 bytes (deciphered) (ref JR): # (perhaps 0x02 indicates the 15- or 19-point AF?) # 2 1 1 0 for A65V # 2 1 2 0 for A77V @@ -7115,14 +7115,14 @@ my %exposureProgram2010 = ( 3 => '79-point', # (NC) seen for ILCA-77M2 }, }, - # 0x04 start 74 Blocks of 164 bytes each for NEX with LA-EA2 15-point Phase-detect AF adapter and A-mount lens (ref 12). + # 0x04 start 74 Blocks of 164 bytes each for NEX with LA-EA2 15-point Phase-detect AF adapter and A-mount lens (ref JR). # For the NEX probably only the 11th byte might be the AFPoint. 0x04 => { Name => 'AFStatusActiveSensor', Condition => '$$self{Model} !~ /^ILCA-/', %Image::ExifTool::Minolta::afStatusInfo, }, - 0x05 => { #12 + 0x05 => { #JR Name => 'FocusMode', Condition => '$$self{Model} =~ /^ILCA-/', Notes => 'ILCA models only', @@ -7219,8 +7219,8 @@ my %exposureProgram2010 = ( 7 => 'AF-D', # (unique to A99) }, }, - # 0x10 - for ILCA-77M2: 10 bytes identical to 0x2020, and probably indicating 'AFPointsUsed' (ref 12) - 0x11 => [ #12 + # 0x10 - for ILCA-77M2: 10 bytes identical to 0x2020, and probably indicating 'AFPointsUsed' (ref JR) + 0x11 => [ #JR { Name => 'AFStatus15', Condition => '$$self{AFType} == 1', @@ -7233,7 +7233,7 @@ my %exposureProgram2010 = ( SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFStatus19' }, }, ], - 0x3a => { #12 + 0x3a => { #JR Name => 'AFAreaMode', Condition => '$$self{Model} =~ /^ILCA-/', PrintConv => { @@ -7250,21 +7250,21 @@ my %exposureProgram2010 = ( Format => 'int8s', }, # 0x007d - AFStatus79 ? - 95 int16s values which would match ILCA-77M2 79 AF points + 15 cross + 1 F2.8 - # 0x016e - for SLT: 4 bytes identical to 0x2020 first 4 bytes, and indicating 'AFPointsUsed' (ref 12) - 0x017d => { #PH (verified for the A77/A99; likely valid for other SLT models - ref 12) + # 0x016e - for SLT: 4 bytes identical to 0x2020 first 4 bytes, and indicating 'AFPointsUsed' (ref JR) + 0x017d => { #PH (verified for the A77/A99; likely valid for other SLT models - ref JR) # (different from AFMicroAdjValue because it is 0 when the adjustment is off) Name => 'AFMicroAdj', Condition => '$$self{Model} !~ /^ILCA-/', Format => 'int8s', }, - 0x017e => { #12 + 0x017e => { #JR Name => 'ExposureProgram', Condition => '$$self{Model} !~ /^ILCA-/', Priority => 0, SeparateTable => 'ExposureProgram3', PrintConv => \%sonyExposureProgram3, }, - # 0x01b8 - 65 AF Info blocks of 180 bytes each for SLT (ref 12) + # 0x01b8 - 65 AF Info blocks of 180 bytes each for SLT (ref JR) # In each block, the 9th, 10th and 11th byte appear to relate to AFPoint as at offsets 0x07, 0x08, 0x09 above.. # Possibly, these blocks relate to sequential focusing attempts and/or object tracking, # the first byte being an Index or Counter. @@ -7279,7 +7279,7 @@ my %exposureProgram2010 = ( # 0x14fa, 0x1570, 0x1572, 0x15ae, 0x1f48 ); -# AF Point Status (ref 12) +# AF Point Status (ref JR) %Image::ExifTool::Sony::AFStatus15 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -7304,7 +7304,7 @@ my %exposureProgram2010 = ( 0x22 => { Name => 'AFStatusLower-middle', %Image::ExifTool::Minolta::afStatusInfo }, ); -# AF Point Status (ref 12) +# AF Point Status (ref JR) %Image::ExifTool::Sony::AFStatus19 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, @@ -7449,7 +7449,7 @@ my %exposureProgram2010 = ( cameras. The width/height values of these tags are not affected by camera rotation -- the width is always the longer dimension. }, - # 0: 257 for panorama images, 0 for all other images (ref 12) + # 0: 257 for panorama images, 0 for all other images (ref JR) 1 => 'PanoramaFullWidth', # (including black/grey borders) 2 => 'PanoramaFullHeight', 3 => { @@ -7707,7 +7707,7 @@ my %exposureProgram2010 = ( Name => 'Barcode', ValueConv => 'length($val) > 12 ? substr($val,0,12) : $val', }, - # 'EvA:' - exposure compensation * 10 (ref 12) + # 'EvA:' - exposure compensation * 10 (ref JR) # for documentation only -- this IFD is handled manually IFD => { Name => 'PIC_IFD', @@ -8018,13 +8018,13 @@ my @lensFeatures = ( # Mask { Bits Name Bits Name } Prefix flag # ------ ------ ----- ------ ----- ----------- [ 0x4000, { 0x4000 => 'PZ' }, 1 ], - [ 0x0300, { 0x0100 => 'DT', 0x0200 => 'FE', 0x0300 => 'E' }, 1 ], # (will come before preceding prefix), FE added (ref 12) + [ 0x0300, { 0x0100 => 'DT', 0x0200 => 'FE', 0x0300 => 'E' }, 1 ], # (will come before preceding prefix), FE added (ref JR) [ 0x00e0, { 0x0020 => 'STF', 0x0040 => 'Reflex', 0x0060 => 'Macro', 0x0080 => 'Fisheye' } ], [ 0x000c, { 0x0004 => 'ZA', 0x0008 => 'G' } ], [ 0x0003, { 0x0001 => 'SSM', 0x0002 => 'SAM' } ], [ 0x8000, { 0x8000 => 'OSS' } ], - [ 0x2000, { 0x2000 => 'LE' } ], #12 - [ 0x0800, { 0x0800 => 'II' } ], #12 + [ 0x2000, { 0x2000 => 'LE' } ], #JR + [ 0x0800, { 0x0800 => 'II' } ], #JR ); sub PrintLensSpec($) { diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm index 7ab75087..d5fa23ba 100644 --- a/lib/Image/ExifTool/TagLookup.pm +++ b/lib/Image/ExifTool/TagLookup.pm @@ -4794,7 +4794,11 @@ my %tagExists = ( '_stream' => 1, 'a100dataoffset' => 1, 'aas' => 1, + 'ab_uid' => 1, + 'abdate' => 1, + 'ablabel' => 1, 'abovecolor' => 1, + 'abrelatednames' => 1, 'abstract' => 1, 'accelerometertime' => 1, 'accessdate' => 1, @@ -4856,6 +4860,7 @@ my %tagExists = ( 'afstatus15' => 1, 'afstatus19' => 1, 'aftune' => 1, + 'aim' => 1, 'aimetadata' => 1, 'aipdfprivatedata' => 1, 'aiprivatedata' => 1, @@ -6122,6 +6127,7 @@ my %tagExists = ( 'filesizebytes' => 1, 'filesubtype' => 1, 'filetype' => 1, + 'filetypeextension' => 1, 'fileurl' => 1, 'fileversionnumber' => 1, 'fillattributes' => 1, @@ -6410,6 +6416,7 @@ my %tagExists = ( 'iconfilename' => 1, 'iconindex' => 1, 'iconuri' => 1, + 'icq' => 1, 'ics' => 1, 'id' => 1, 'id3' => 1, @@ -6492,6 +6499,7 @@ my %tagExists = ( 'imgprofversion' => 1, 'immediatedatabytes' => 1, 'importance' => 1, + 'impp' => 1, 'imprint' => 1, 'includedfileid' => 1, 'incomplete' => 1, @@ -6761,6 +6769,7 @@ my %tagExists = ( 'locationrole' => 1, 'lockedpropertylist' => 1, 'locks' => 1, + 'logo' => 1, 'logoiconurl' => 1, 'logourl' => 1, 'longdescription' => 1, @@ -7293,6 +7302,7 @@ my %tagExists = ( 'pfmheader' => 1, 'pfmversion' => 1, 'pgfversion' => 1, + 'photo' => 1, 'photoeffectsdata' => 1, 'photofinishername' => 1, 'photomech' => 1, @@ -7935,6 +7945,7 @@ my %tagExists = ( 'sminsamplevalue' => 1, 'snapshotid' => 1, 'snapshotname' => 1, + 'socialprofile' => 1, 'soctemperature' => 1, 'softedit' => 1, 'softfocusfilter' => 1, @@ -7949,6 +7960,7 @@ my %tagExists = ( 'sortcomposer' => 1, 'sortname' => 1, 'sortshow' => 1, + 'sound' => 1, 'soundfile' => 1, 'soundschemetitle' => 1, 'sourcecreatedate' => 1, diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod index 69dd3833..9268ec3f 100644 --- a/lib/Image/ExifTool/TagNames.pod +++ b/lib/Image/ExifTool/TagNames.pod @@ -3364,6 +3364,17 @@ XMP Dynamic Media namespace tags. Unit string W real +=head3 XMP Area Struct + + Field Name Writable + ---------- -------- + D real + H real + Unit string + W real + X real + Y real + =head3 XMP xmpMM Tags XMP Media Management namespace tags. @@ -27605,26 +27616,45 @@ default language of "en". =head2 VCard Tags -This table lists only those VCard tags which are renamed by ExifTool, but -any existing VCard tag will be extracted. Tag names may have "Pref" added -to indicate the preferred instance of a VCard property. Other "TYPE" -parameters are also added to the tag name. See -L for the VCard 4.0 specification. +This table lists only a few common vCard tags, but ExifTool will also +extract any other vCard tags found. Tag names may have "Pref" added to +indicate the preferred instance of a vCard property, and other "TYPE" +parameters may also added to the tag name. See +L for the vCard 4.0 specification. - Tag ID Tag Name Writable - ------ -------- -------- - 'Adr' Address N - 'Bday' Birthday N - 'Fn' FormattedName N - 'Geo' Geolocation N - 'N' Name N - 'Org' Organization N - 'Prodid' Software N - 'Rev' Revision N - 'Tel' Telephone N - 'Tz' TimeZone N - 'Uid' UID N - 'Version' VCardVersion N + Tag ID Tag Name Writable + ------ -------- -------- + 'Adr' Address N + 'Anniversary' Anniversary N + 'Bday' Birthday N + 'Email' Email N + 'Fn' FormattedName N + 'Gender' Gender N + 'Geo' Geolocation N + 'Impp' IMPP N + 'Lang' Language N + 'Logo' Logo N + 'N' Name N + 'Nickname' Nickname N + 'Note' Note N + 'Org' Organization N + 'Photo' Photo N + 'Prodid' Software N + 'Rev' Revision N + 'Sound' Sound N + 'Tel' Telephone N + 'Title' JobTitle N + 'Tz' TimeZone N + 'Uid' UID N + 'Url' URL N + 'Version' VCardVersion N + 'X-ABLabel' ABLabel N + 'X-abdate' ABDate N + 'X-abrelatednames' ABRelatedNames N + 'X-abuid' AB_UID N + 'X-aim' AIM N + 'X-icq' ICQ N + 'X-socialprofile' SocialProfile N =head2 RSRC Tags @@ -27877,6 +27907,7 @@ tag is used for dry run testing of writes to FileName. FileSequence ExifTool N FileSize System N FileType File N + FileTypeExtension File N Geosync - Y Geotag - Y Geotime - Y @@ -27951,7 +27982,7 @@ values, may created via the ExifTool configuration file. FocusDistance SubjectDistance ObjectDistance - AverageFocusDistance + ApproximateFocusDistance FocusDistanceLower FocusDistanceUpper DateCreated Kodak:YearCreated N @@ -28448,7 +28479,8 @@ EXIF/IPTC/XMP records that exist. Contrary to the EXIF specification, the MWG recommends that EXIF "ASCII" string values be stored as UTF-8. To honour this, the exiftool application sets the default internal EXIF string encoding to "UTF8" when the MWG module -is loaded (but this setting does not change automatically via the API). +is loaded, but via the API this must be done manually by setting the +CharsetEXIF option. A complication of the MWG specification is that although the MWG:Creator property may consist of multiple values, the associated EXIF tag @@ -28571,17 +28603,6 @@ L for the official specification. Type string SeeAlso string -=head3 XMP Area Struct - - Field Name Writable - ---------- -------- - D real - H real - Unit string - W real - X real - Y real - =head3 MWG Extensions Struct This structure may contain any top-level XMP tags, but none have been diff --git a/lib/Image/ExifTool/VCard.pm b/lib/Image/ExifTool/VCard.pm index 0e3fd524..74753fd6 100644 --- a/lib/Image/ExifTool/VCard.pm +++ b/lib/Image/ExifTool/VCard.pm @@ -15,47 +15,67 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.00'; +$VERSION = '1.01'; my %unescapeVCard = ( '\\'=>'\\', ','=>',', 'n'=>"\n", 'N'=>"\n" ); -# VCard tags (ref 1) +# vCard tags (ref 1/2/PH) %Image::ExifTool::VCard::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ - This table lists only those VCard tags which are renamed by ExifTool, but - any existing VCard tag will be extracted. Tag names may have "Pref" added - to indicate the preferred instance of a VCard property. Other "TYPE" - parameters are also added to the tag name. See - L for the VCard 4.0 specification. + This table lists only a few common vCard tags, but ExifTool will also + extract any other vCard tags found. Tag names may have "Pref" added to + indicate the preferred instance of a vCard property, and other "TYPE" + parameters may also added to the tag name. See + L for the vCard 4.0 specification. }, - Version => 'VCardVersion', - VCardVersion => { Description => 'VCard Version', Hidden => 1 }, # (for the Description) - Prodid => 'Software', - Fn => { Name => 'FormattedName', Groups => { 2 => 'Author' } }, - N => { Name => 'Name', Groups => { 2 => 'Author' } }, - Bday => { Name => 'Birthday', Groups => { 2 => 'Time' } }, - Tz => { Name => 'TimeZone', Groups => { 2 => 'Time' } }, - Adr => { Name => 'Address', Groups => { 2 => 'Location' } }, - Geo => { Name => 'Geolocation', Groups => { 2 => 'Location' } }, - Rev => 'Revision', - Org => 'Organization', - Tel => 'Telephone', - Uid => 'UID', + Version => { Name => 'VCardVersion', Description => 'VCard Version' }, + Fn => { Name => 'FormattedName', Groups => { 2 => 'Author' } }, + N => { Name => 'Name', Groups => { 2 => 'Author' } }, + Bday => { Name => 'Birthday', Groups => { 2 => 'Time' } }, + Tz => { Name => 'TimeZone', Groups => { 2 => 'Time' } }, + Adr => { Name => 'Address', Groups => { 2 => 'Location' } }, + Geo => { Name => 'Geolocation', Groups => { 2 => 'Location' } }, + Anniversary => { }, + Email => { }, + Gender => { }, + Impp => 'IMPP', + Lang => 'Language', + Logo => { }, + Nickname => { }, + Note => { }, + Org => 'Organization', + Photo => { }, + Prodid => 'Software', + Rev => 'Revision', + Sound => { }, + Tel => 'Telephone', + Title => 'JobTitle', + Uid => 'UID', + Url => 'URL', + 'X-ABLabel' => { Name => 'ABLabel', PrintConv => '$val =~ s/^_\$!<(.*)>!\$_$/$1/; $val' }, + 'X-abdate' => { Name => 'ABDate', Groups => { 2 => 'Time' } }, + 'X-aim' => 'AIM', + 'X-icq' => 'ICQ', + 'X-abuid' => 'AB_UID', + 'X-abrelatednames' => 'ABRelatedNames', + 'X-socialprofile' => 'SocialProfile', ); #------------------------------------------------------------------------------ -# Get VCard tag, creating if necessary -# Inputs: 0) tag table ref, 1) tag ID, 2) source tagInfo ref, 3) language code +# Get vCard tag, creating if necessary +# Inputs: 0) ExifTool ref, 1) tag table ref, 2) tag ID, 3) tag Name, +# 4) source tagInfo ref, 5) lang code # Returns: tagInfo ref -sub GetVCardTag($$;$$) +sub GetVCardTag($$$$;$$) { - my ($tagTablePtr, $tag, $srcInfo, $langCode) = @_; + my ($et, $tagTablePtr, $tag, $name, $srcInfo, $langCode) = @_; my $tagInfo = $$tagTablePtr{$tag}; unless ($tagInfo) { $tagInfo = $srcInfo ? { %$srcInfo } : { }; - $$tagInfo{Name} = $tag; + $$tagInfo{Name} = $name; delete $$tagInfo{Description}; # create new description + $et->VPrint(0, $$et{INDENT}, "[adding $tag]\n"); AddTagToTable($tagTablePtr, $tag, $tagInfo); } # handle alternate languages (the "language" parameter) @@ -64,8 +84,8 @@ sub GetVCardTag($$;$$) } #------------------------------------------------------------------------------ -# Decode VCard text -# Inputs: 0) ExifTool ref, 1) VCard text, 2) encoding +# Decode vCard text +# Inputs: 0) ExifTool ref, 1) vCard text, 2) encoding # Returns: decoded text (or array ref for a list of values) sub DecodeVCardText($$;$) { @@ -93,9 +113,9 @@ sub DecodeVCardText($$;$) } #------------------------------------------------------------------------------ -# Read information in a VCard file +# Read information in a vCard file # Inputs: 0) ExifTool ref, 1) dirInfo ref -# Returns: 1 on success, 0 if this wasn't a valid VCard file +# Returns: 1 on success, 0 if this wasn't a valid vCard file sub ProcessVCard($$) { local $_; @@ -137,12 +157,12 @@ sub ProcessVCard($$) } else { delete $$et{SET_GROUP1}; } - # avoid ugly all-caps tag names + # avoid ugly all-caps tag ID's (they are case-insensitive) $tag = ucfirst($tag =~ /[a-z]/ ? $tag : lc $tag); - my (%param, $p, @val); + my (%param, $p, @val, $name); while ($val =~ s/^;([-A-Za-z0-9]*)(=?)//) { $p = lc $1; - # convert old VCard 2.x parameters to the new "TYPE=" format + # convert old vCard 2.x parameters to the new "TYPE=" format $2 or $val = $1 . $val, $p = 'type'; for (;;) { last unless $val =~ s/^"([^"]*)",?// or $val =~ s/^([^";:,]+,?)//; @@ -158,28 +178,37 @@ sub ProcessVCard($$) $val =~ s/^:// or $et->WarnOnce('Invalid line in VCard file'), next; # get source tagInfo reference my $srcInfo = $et->GetTagInfo($tagTablePtr, $tag); - $tag = $$srcInfo{Name} if $srcInfo; # translate name if necessary - $tag .= $param{type} if $param{type}; # add 'type' parameter to name + if ($srcInfo) { + $name = $$srcInfo{Name}; # use our name + } else { + # use tag ID as name (with leading "X-" removed) + ($name = $tag) =~ s/^X-//i and $name = ucfirst $name; + } + # add 'type' parameter to id and name if it exists + $param{type} and $tag .= $param{type}, $name .= $param{type}; # convert base64-encoded data if ($val =~ s{^data:(\w+)/(\w+);base64,}{}) { - $tag .= ucfirst(lc $1) . ucfirst(lc $2); + my $xtra = ucfirst(lc $1) . ucfirst(lc $2); + $tag .= $xtra; + $name .= $xtra; $param{encoding} = 'base64'; } $val = DecodeVCardText($et, $val, $param{encoding}); - my $tagInfo = GetVCardTag($tagTablePtr, $tag, $srcInfo, $param{language}); + my $tagInfo = GetVCardTag($et, $tagTablePtr, $tag, $name, $srcInfo, $param{language}); $et->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo); + # handle 'geo' and 'label' parameters foreach $p (qw(geo label)) { next unless defined $param{$p}; - my $t = $tag . ucfirst($p); # set group 2 to "Location" for "geo" parameters my $srcTag2; if ($p eq 'geo') { $srcTag2 = { Groups => { 2 => 'Location' } }; - $param{$p} =~ s/^geo://; # remove "geo:" prefix of VCard 4.0 + $param{$p} =~ s/^geo://; # remove "geo:" prefix of vCard 4.0 } $val = DecodeVCardText($et, $param{$p}); - $tagInfo = GetVCardTag($tagTablePtr, $t, $srcTag2, $param{language}); - $et->HandleTag($tagTablePtr, $t, $val, TagInfo => $tagInfo); + my ($tg, $nm) = ($tag . ucfirst($p), $name . ucfirst($p)); + $tagInfo = GetVCardTag($et, $tagTablePtr, $tg, $nm, $srcTag2, $param{language}); + $et->HandleTag($tagTablePtr, $tg, $val, TagInfo => $tagInfo); } } delete $$et{SET_GROUP1}; @@ -203,7 +232,7 @@ This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta -information from VCard files. +information from vCard files. =head1 AUTHOR diff --git a/lib/Image/ExifTool/WriteXMP.pl b/lib/Image/ExifTool/WriteXMP.pl index 3bed917c..29f0a8fb 100644 --- a/lib/Image/ExifTool/WriteXMP.pl +++ b/lib/Image/ExifTool/WriteXMP.pl @@ -235,13 +235,25 @@ sub SetPropertyPath($$;$$$$) my ($tagTablePtr, $tagID, $parentID, $structPtr, $propList, $isType) = @_; my $table = $structPtr || $tagTablePtr; my $tagInfo = $$table{$tagID}; + my $flatInfo; - return if ref($tagInfo) ne 'HASH' or $$tagInfo{PropertyPath}; + return if ref($tagInfo) ne 'HASH'; # (shouldn't happen) - # don't override existing main table entry if already set by a Struct if ($structPtr) { + my $flatID = $parentID . ucfirst($tagID); + $flatInfo = $$tagTablePtr{$flatID}; + if ($flatInfo) { + return if $$flatInfo{PropertyPath}; + } else { + # flattened tag doesn't exist, so create it now + # (could happen if we were just writing a structure) + $flatInfo = { Name => ucfirst($flatID), Flat => 1 }; + AddTagToTable($tagTablePtr, $flatID, $flatInfo); + } $isType = 1 if $$structPtr{TYPE}; } else { + # don't override existing main table entry if already set by a Struct + return if $$tagInfo{PropertyPath}; # use property path from original tagInfo if this is an alternate-language tag my $srcInfo = $$tagInfo{SrcTagInfo}; $$tagInfo{PropertyPath} = GetPropertyPath($srcInfo) if $srcInfo; @@ -294,14 +306,7 @@ sub SetPropertyPath($$;$$$$) # if this was a structure field and not a normal tag, # we set PropertyPath in the corresponding flattened tag if ($structPtr) { - my $flatID = $parentID . ucfirst($tagID); - $tagInfo = $$tagTablePtr{$flatID}; - # create flattened tag now if necessary - # (could happen if we were just writing a structure) - unless ($tagInfo) { - $tagInfo = { Name => ucfirst($flatID), Flat => 1 }; - AddTagToTable($tagTablePtr, $flatID, $tagInfo); - } + $tagInfo = $flatInfo; # set StructType flag if any containing structure has a TYPE $$tagInfo{StructType} = 1 if $isType; } diff --git a/lib/Image/ExifTool/Writer.pl b/lib/Image/ExifTool/Writer.pl index c7e0ea5f..d6235ad4 100644 --- a/lib/Image/ExifTool/Writer.pl +++ b/lib/Image/ExifTool/Writer.pl @@ -5767,7 +5767,9 @@ sub Rename($$$) } for (;;) { if ($winUni) { - $result = Win32API::File::MoveFileExW($old, $new, Win32API::File::MOVEFILE_REPLACE_EXISTING()); + $result = Win32API::File::MoveFileExW($old, $new, + Win32API::File::MOVEFILE_REPLACE_EXISTING() | + Win32API::File::MOVEFILE_COPY_ALLOWED()); } else { $result = rename($old, $new); } diff --git a/lib/Image/ExifTool/XMP.pm b/lib/Image/ExifTool/XMP.pm index 14efb1f6..7d89ec8e 100644 --- a/lib/Image/ExifTool/XMP.pm +++ b/lib/Image/ExifTool/XMP.pm @@ -2842,7 +2842,7 @@ sub ScanForXMP($$) } unless ($$et{VALUE}{FileType}) { $$et{FILE_TYPE} = $$et{FILE_EXT}; - $et->SetFileType(''); + $et->SetFileType('', undef, ''); } my %dirInfo = ( DataPt => \$xmp, @@ -3713,6 +3713,8 @@ sub ProcessXMP($$;$) $type = 'SVG'; } elsif ($isXML and not $hasXMP and not $isRDF) { $type = 'XML'; + my $ext = $$et{FILE_EXT}; + $type = $ext if $ext and $ext eq 'COS'; # recognize COS by extension } } $et->SetFileType($type); diff --git a/lib/Image/ExifTool/XMP2.pl b/lib/Image/ExifTool/XMP2.pl index 1f9f13eb..71906e96 100644 --- a/lib/Image/ExifTool/XMP2.pl +++ b/lib/Image/ExifTool/XMP2.pl @@ -1498,8 +1498,14 @@ my %sSubVersion = ( version => 'SVGVersion', id => 'ID', metadataId => 'MetadataID', - width => 'ImageWidth', - height => 'ImageHeight', + width => { + Name => 'ImageWidth', + ValueConv => '$val =~ s/px$//; $val', + }, + height => { + Name => 'ImageHeight', + ValueConv => '$val =~ s/px$//; $val', + }, ); # table to add tags in other namespaces -- cgit v1.2.3