You've already forked lazarus-ccr
fpexif: Split makernote code off into separate units for each camera make. Add many makernote tags for Nikon cameras.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6803 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="10"/>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
@ -22,9 +22,10 @@
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<Item1>
|
||||
|
@ -13,7 +13,6 @@
|
||||
<XPManifest>
|
||||
<DpiAware Value="True"/>
|
||||
</XPManifest>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
|
@ -8,7 +8,7 @@ object Form1: TForm1
|
||||
ClientWidth = 772
|
||||
OnCloseQuery = FormCloseQuery
|
||||
OnCreate = FormCreate
|
||||
LCLVersion = '1.9.0.0'
|
||||
LCLVersion = '2.1.0.0'
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Height = 545
|
||||
|
@ -5,7 +5,7 @@ unit frMain;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, ShellCtrls,
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ShellCtrls,
|
||||
ExtCtrls, StdCtrls, ComCtrls;
|
||||
|
||||
type
|
||||
|
@ -31,7 +31,7 @@
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Units Count="3">
|
||||
<Unit0>
|
||||
<Filename Value="MetadataViewer.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@ -44,6 +44,11 @@
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="mdvMain"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="..\..\fpemakernotesanyo.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="fpeMakerNoteSanyo"/>
|
||||
</Unit2>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@ -7,7 +7,7 @@ uses
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, mdvMain
|
||||
Forms, mdvMain, fpeMakerNoteSanyo
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
@ -7,7 +7,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ShellCtrls,
|
||||
ExtCtrls, ComCtrls, StdCtrls,
|
||||
fpeMetadata;
|
||||
fpeMetadata, fpeMakerNote;
|
||||
|
||||
type
|
||||
|
||||
@ -166,6 +166,7 @@ var
|
||||
item: TListItem;
|
||||
i: Integer;
|
||||
ms: TMemoryStream;
|
||||
suffix: String;
|
||||
begin
|
||||
FImageLoaded := false;
|
||||
Image.Picture.Clear;
|
||||
@ -193,11 +194,26 @@ begin
|
||||
FImgInfo.ExifData.ExportOptions := FImgInfo.ExifData.ExportOptions + [eoTruncateBinary];
|
||||
for i := 0 to FImgInfo.ExifData.TagCount-1 do begin
|
||||
lTag := FImgInfo.ExifData.TagByIndex[i];
|
||||
|
||||
|
||||
if lTag is TMakerNoteStringTag then
|
||||
suffix := ':' + IntToStr(TMakerNoteStringTag(lTag).Index)
|
||||
else if lTag is TMakerNoteIntegerTag then
|
||||
suffix := ':' + IntToStr(TMakerNoteIntegerTag(lTag).Index)
|
||||
else if lTag is TMakerNoteFloatTag then
|
||||
suffix := ':' + IntToStr(TMakerNoteFloatTag(lTag).Index)
|
||||
else
|
||||
suffix := '';
|
||||
|
||||
|
||||
if lTag is TVersionTag then
|
||||
TVersionTag(lTag).Separator := '.';
|
||||
item := TagListView.Items.Add;
|
||||
item.Data := lTag;
|
||||
item.Caption := 'EXIF.' + NiceGroupNames[lTag.Group];
|
||||
if CbShowParentTagID.Checked then
|
||||
item.SubItems.Add(Format('$%.04x:$%.04x', [lTag.TagIDRec.Parent, lTag.TagIDRec.Tag]))
|
||||
item.SubItems.Add(Format('$%.04x:$%.04x%s', [
|
||||
lTag.TagIDRec.Parent, lTag.TagIDRec.Tag, suffix]))
|
||||
else
|
||||
Item.SubItems.Add(Format('$%.04x', [lTag.TagIDRec.Tag]));
|
||||
item.SubItems.Add(lTag.Description);
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="10"/>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
@ -18,9 +18,10 @@
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
|
@ -8,7 +8,7 @@ object MainForm: TMainForm
|
||||
ClientWidth = 788
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.9.0.0'
|
||||
LCLVersion = '2.1.0.0'
|
||||
object BtnLoad: TButton
|
||||
AnchorSideTop.Control = Owner
|
||||
AnchorSideRight.Control = Owner
|
||||
|
@ -6,7 +6,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
ExtCtrls, fpeMetadata;
|
||||
ExtCtrls, fpeMetadata, fpeMakerNote;
|
||||
|
||||
type
|
||||
|
||||
|
@ -75,12 +75,20 @@ type
|
||||
constructor Create(ABigEndian: Boolean);
|
||||
destructor Destroy; override;
|
||||
|
||||
{
|
||||
function AddMakerNoteTag(AIndex: Integer; ATagID: TTagID; ATagName: String;
|
||||
AData: TBytes; ACount: Integer; ALkUpTbl: String = '';
|
||||
AFormatStr: String = ''; ATagType: TTagType = ttUInt8): Integer; overload;
|
||||
}
|
||||
function AddMakerNoteTag(AIndex: Integer; ATagID: TTagID; ATagName: String;
|
||||
ADataValue: Integer; ALkupTbl: String = ''; AFormatStr: String = '';
|
||||
ATagType: TTagType = ttUInt16): Integer; overload;
|
||||
function AddMakerNoteTag(AIndex: Integer; ATagID: TTagID; ATagName: String;
|
||||
ADataValue: Double; AFormatStr: String = '';
|
||||
ATagType: TTagType = ttURational): Integer; overload;
|
||||
function AddMakerNoteStringTag(AIndex: Integer; ATagID: TTagID; ATagName: String;
|
||||
AData: TBytes; ACount: Integer; ALkupTbl: String = ''): Integer;
|
||||
|
||||
function AddOrReplaceTag(ATag: TTag): Integer;
|
||||
function AddTag(ATag: TTag): Integer;
|
||||
function AddTagByID(ATagID: TTagID): TTag;
|
||||
@ -174,16 +182,31 @@ type
|
||||
procedure SetAsString(const AValue: String); override;
|
||||
end;
|
||||
|
||||
TMakerNoteIntegerTag = class(TIntegerTag)
|
||||
TMakerNoteStringTag = class(TStringTag)
|
||||
private
|
||||
FIndex: Integer;
|
||||
public
|
||||
constructor Create(ATagID, {%H-}AIndex: Integer; AName: String; AValue: Integer;
|
||||
constructor Create(ATagID, AIndex: Integer; AName: String; AData: TBytes;
|
||||
ACount: Integer; ALkupTbl: String; AOptions: TTagOptions); reintroduce;
|
||||
property Index: Integer read FIndex;
|
||||
end;
|
||||
|
||||
TMakerNoteIntegerTag = class(TIntegerTag)
|
||||
private
|
||||
FIndex: Integer;
|
||||
public
|
||||
constructor Create(ATagID, AIndex: Integer; AName: String; AValue: Integer;
|
||||
ALkupTbl, AFormatStr: String; ATagType: TTagType; AOptions: TTagOptions); reintroduce;
|
||||
property Index: Integer read FIndex;
|
||||
end;
|
||||
|
||||
TMakerNoteFloatTag = class(TFloatTag)
|
||||
private
|
||||
FIndex: Integer;
|
||||
public
|
||||
constructor Create(ATagID, {%H-}AIndex: Integer; AName: String; AValue: Double;
|
||||
constructor Create(ATagID, AIndex: Integer; AName: String; AValue: Double;
|
||||
AFormatStr: String; ATagType: TTagType; AOptions: TTagOptions); reintroduce;
|
||||
property Index: Integer read FIndex;
|
||||
end;
|
||||
|
||||
TExposureTimeTag = class(TFloatTag)
|
||||
@ -227,6 +250,14 @@ type
|
||||
function GetAsString: String; override;
|
||||
end;
|
||||
|
||||
(*
|
||||
TSingleTag = class(TBinaryTag)
|
||||
protected
|
||||
function GetAsString: String; override;
|
||||
function GetAsFloat: Double; override;
|
||||
procedure SetAsFloat(const AValue: Double); override;
|
||||
end;
|
||||
*)
|
||||
|
||||
procedure BuildExifTagDefs;
|
||||
procedure FreeExifTagDefs;
|
||||
@ -512,6 +543,27 @@ begin
|
||||
FTagList.Free;
|
||||
inherited;
|
||||
end;
|
||||
{
|
||||
function TExifData.AddMakerNoteTag(AIndex: Integer; ATagID: TTagID;
|
||||
ATagName: String; AData: TBytes; ACount: Integer; ALkupTbl: String = '';
|
||||
AFormatStr: String = ''; ATagType: TTagType = ttUInt8): Integer;
|
||||
var
|
||||
tag: TTag;
|
||||
begin
|
||||
tag := TMakerNoteByteTag.Create(ATagID, AIndex, ATagName, AData, ACount,
|
||||
ALkupTbl, AFormatStr, ATagType, ExportOptionsToTagOptions);
|
||||
Result := FTagList.Add(tag);
|
||||
end;
|
||||
}
|
||||
function TExifData.AddMakerNoteStringTag(AIndex: Integer; ATagID: TTagID;
|
||||
ATagName: String; AData: TBytes; ACount: Integer; ALkupTbl: String = ''): Integer;
|
||||
var
|
||||
tag: TTag;
|
||||
begin
|
||||
tag := TMakerNoteStringTag.Create(ATagID, AIndex, ATagName, AData, ACount,
|
||||
ALkupTbl, ExportOptionsToTagOptions);
|
||||
Result := FTagList.Add(tag);
|
||||
end;
|
||||
|
||||
function TExifData.AddMakerNoteTag(AIndex: Integer; ATagID: TTagID; ATagName: String;
|
||||
ADataValue: Integer; ALkupTbl: String = ''; AFormatStr: String = '';
|
||||
@ -1374,7 +1426,8 @@ begin
|
||||
if not (ATagType in [ttUInt8, ttUInt16, ttUInt32, ttSInt8, ttSInt16, ttSInt32]) then
|
||||
raise EFpExif.Create('Tag type not allowed for TMakerNoteIntegerTag');
|
||||
|
||||
FTagID := ATagID; //AIndex;
|
||||
FIndex := AIndex;
|
||||
FTagID := ATagID;
|
||||
FGroup := tgExifMakerNote;
|
||||
FName := AName;
|
||||
FDesc := '';
|
||||
@ -1394,7 +1447,8 @@ begin
|
||||
if not (ATagType in [ttURational, ttSRational]) then
|
||||
raise EFpExif.Create('Tag type not allowed for TMakerNoteFloatTag');
|
||||
|
||||
FTagID := ATagID; //AIndex;
|
||||
FIndex := AIndex;
|
||||
FTagID := ATagID;
|
||||
FGroup := tgExifMakerNote;
|
||||
FName := AName;
|
||||
FDesc := '';
|
||||
@ -1405,6 +1459,23 @@ begin
|
||||
AsFloat := AValue;
|
||||
end;
|
||||
|
||||
constructor TMakerNoteStringTag.Create(ATagID, AIndex: Integer; AName: String;
|
||||
AData: TBytes; ACount: Integer; ALkupTbl: String;
|
||||
AOptions: TTagOptions);
|
||||
begin
|
||||
FIndex := AIndex;
|
||||
FTagID := ATagID;
|
||||
FGroup := tgExifMakerNote;
|
||||
FName := AName;
|
||||
FDesc := '';
|
||||
FType := ttString;
|
||||
FLkupTbl := ALkUpTbl;
|
||||
FOptions := [toReadOnly, toVolatile] + AOptions;
|
||||
FCount := ACount;
|
||||
SetLength(FRawData, FCount * TagElementSize[ord(FType)]);
|
||||
Move(AData[0], FRawData[0], Length(FRawData));
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TExposureTimeTag
|
||||
@ -1656,6 +1727,44 @@ begin
|
||||
Result := UTF8Encode(ws);
|
||||
end;
|
||||
|
||||
(*
|
||||
//==============================================================================
|
||||
// TSingleTag
|
||||
//
|
||||
// Binary tag of size 4 which is interpreted as a single value
|
||||
//==============================================================================
|
||||
|
||||
function TSingleTag.GetAsString: String;
|
||||
var
|
||||
sng: Single;
|
||||
dw: DWord absolute sng;
|
||||
begin
|
||||
Move(FRawData[0], dw, 4);
|
||||
if BigEndian then dw := BEToN(dw) else dw := LEToN(dw);
|
||||
Result := FloatToStr(sng);
|
||||
end;
|
||||
|
||||
function TSingleTag.GetAsFloat: Double;
|
||||
var
|
||||
sng: Single;
|
||||
dw: DWord absolute sng;
|
||||
begin
|
||||
Move(FRawData[0], dw, 4);
|
||||
if BigEndian then dw := BEToN(dw) else dw := LEToN(dw);
|
||||
Result := sng;
|
||||
end;
|
||||
|
||||
procedure TSingleTag.SetAsFloat(const AValue: Double);
|
||||
var
|
||||
sng: Single;
|
||||
dw: DWord absolute sng;
|
||||
begin
|
||||
sng := AValue;
|
||||
if BigEndian then dw := NToBE(dw) else dw := NToLE(dw);
|
||||
SetLength(FRawData, 4);
|
||||
Move(dw, FRawData[0], 4);
|
||||
end;
|
||||
*)
|
||||
|
||||
initialization
|
||||
|
||||
|
@ -68,16 +68,15 @@ type
|
||||
end;
|
||||
|
||||
TMakerNoteReader = class(TBasicExifReader)
|
||||
private
|
||||
FExifVersion: string;
|
||||
protected
|
||||
FExifVersion: string;
|
||||
FMake: String;
|
||||
FModel: String;
|
||||
FTagDefs: TTagDefList;
|
||||
FDataStartPosition: Int64;
|
||||
procedure GetTagDefs({%H-}AStream: TStream); virtual;
|
||||
procedure Error(const AMsg: String); override;
|
||||
function FindTagDef(ATagID: TTagID): TTagDef; override;
|
||||
procedure GetTagDefs(AStream: TStream; AImgFormat: TImgFormat); virtual;
|
||||
function Prepare(AStream: TStream): Boolean; virtual;
|
||||
public
|
||||
constructor Create(AImgInfo: TImgInfo; AStartPos: Int64;
|
||||
@ -117,8 +116,8 @@ function GetMakerNoteReaderClass(AMake, AModel: String): TMakerNoteReaderClass;
|
||||
implementation
|
||||
|
||||
uses
|
||||
Math, Contnrs,
|
||||
fpeStrConsts, fpeMakerNote, fpeIptcReadWrite;
|
||||
Contnrs,
|
||||
fpeStrConsts, fpeIptcReadWrite;
|
||||
|
||||
const
|
||||
EXIF_SIGNATURE: array[0..5] of AnsiChar = ('E', 'x', 'i', 'f', #0, #0);
|
||||
@ -146,10 +145,12 @@ begin
|
||||
begin
|
||||
Makes := TStringList.Create;
|
||||
try
|
||||
Makes.StrictDelimiter := true;
|
||||
Makes.Delimiter := ';';
|
||||
ucMake := Uppercase(AMake);
|
||||
for Result:=0 to RegisteredReaders.Count-1 do begin
|
||||
item := TReaderItem(RegisteredReaders[Result]);
|
||||
Makes.Text := item.Make;
|
||||
Makes.DelimitedText := item.Make;
|
||||
for j := 0 to Makes.Count-1 do begin
|
||||
if pos(Uppercase(Makes[j]), ucMake) <> 0 then
|
||||
if (item.Model = '') or (AModel = '') or SameText(item.Model, AModel) then
|
||||
@ -596,6 +597,11 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
// to be overridden by descendants
|
||||
end;
|
||||
|
||||
{ Since the MakerNotes are not well-defined we don't want to abort reading of
|
||||
the entire file by an incorrectly interpreted MakeNote tag.
|
||||
IMPORTANT: All methods calling Error() must be exited afterwards because
|
||||
@ -620,19 +626,25 @@ begin
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
(*
|
||||
procedure TMakerNoteReader.GetTagDefs(AStream: TStream; AImgFormat: TImgFormat);
|
||||
var
|
||||
UCMake, {%H-}UCModel: String;
|
||||
tmp, tmp2: String;
|
||||
b: TBytes;
|
||||
p: Integer;
|
||||
streamPos: Int64;
|
||||
tiffHdrPos: Int64;
|
||||
ok: Boolean;
|
||||
dw: DWord;
|
||||
begin
|
||||
UCMake := Uppercase(FMake);
|
||||
UCModel := Uppercase(FModel);
|
||||
|
||||
{
|
||||
if UCMake = 'CANON' then
|
||||
BuildCanonTagDefs(FTagDefs)
|
||||
else
|
||||
}
|
||||
if UCMake = 'SEIKO' then
|
||||
BuildEpsonTagDefs(FTagDefs)
|
||||
else
|
||||
@ -646,42 +658,49 @@ begin
|
||||
FBigEndian := false;
|
||||
BuildFujiTagDefs(FTagDefs)
|
||||
end else
|
||||
(*
|
||||
{
|
||||
if pos('OLYMP', UCMake) = 1 then
|
||||
//BuildOlympusTagDefs(FTagDefs) -- is done by specific Olympus reader
|
||||
else
|
||||
if UCMake = 'CASIO' then
|
||||
{
|
||||
// if UCMake = 'CASIO' then
|
||||
// streamPos := AStream.Position;
|
||||
// if PosInStream('QVC', AStream, streamPos) <> -1 then begin
|
||||
// FTagDefs := @Casio1Table;
|
||||
// FNumTagDefs := Length(Casio1Table);
|
||||
// end else begin
|
||||
// FTagDefs := @Casio12Table;
|
||||
// FNumTagDefs := Length(Casio2Table);
|
||||
// end;
|
||||
// }
|
||||
// BuildCasio1TagDefs(FTagDefs)
|
||||
//else
|
||||
if UCMake = 'NIKON CORPORATION' then begin
|
||||
SetLength(b, 20);
|
||||
streamPos := AStream.Position;
|
||||
if PosInStream('QVC', AStream, streamPos) <> -1 then begin
|
||||
FTagDefs := @Casio1Table;
|
||||
FNumTagDefs := Length(Casio1Table);
|
||||
end else begin
|
||||
FTagDefs := @Casio12Table;
|
||||
FNumTagDefs := Length(Casio2Table);
|
||||
end;
|
||||
}
|
||||
BuildCasio1TagDefs(FTagDefs)
|
||||
else
|
||||
*)
|
||||
if UCMake = 'NIKON' then begin
|
||||
SetLength(tmp, 5);
|
||||
streamPos := AStream.Position;
|
||||
AStream.Read(tmp[1], 5);
|
||||
AStream.Read(b[0], 20);
|
||||
AStream.Position := streamPos;
|
||||
p := Max(0, Pos(' ', FModel));
|
||||
tmp2 := FModel[p+1];
|
||||
if (FExifVersion > '0210') or
|
||||
((FExifVersion = '') and (tmp2 = 'D') and (AImgFormat = ifTiff))
|
||||
SetLength(tmp, 6);
|
||||
Move(b[0], tmp[1], 6);
|
||||
if (PosInBytes('Nikon'#00#02#16#00#00'MM'#00#42#00#00#00#08, b) > -1) or
|
||||
(PosInBytes('Nikon'#00#02#16#00#00'II'#42#00#08#00#00#00, b) > -1)
|
||||
then
|
||||
BuildNikon2TagDefs(FTagDefs)
|
||||
else
|
||||
if (tmp = 'Nikon') then
|
||||
BuildNikon1TagDefs(FTagDefs)
|
||||
else
|
||||
BuildNikon2TagDefs(FTagDefs);
|
||||
BuildNikon3TagDefs(FTagDefs)
|
||||
else begin
|
||||
p := Max(0, Pos(' ', FModel));
|
||||
tmp2 := FModel[p+1];
|
||||
if (FExifVersion > '0210') or
|
||||
((FExifVersion = '') and (tmp2 = 'D') and (AImgFormat = ifTiff))
|
||||
then
|
||||
BuildNikon2TagDefs(FTagDefs)
|
||||
else
|
||||
if (tmp = 'Nikon') then
|
||||
BuildNikon1TagDefs(FTagDefs)
|
||||
else
|
||||
BuildNikon2TagDefs(FTagDefs);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
*)
|
||||
|
||||
function TMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
begin
|
||||
@ -694,7 +713,7 @@ begin
|
||||
if FDataStartPosition = -1 then
|
||||
FDataStartPosition := AStream.Position;
|
||||
FImgFormat := AImgFormat;
|
||||
GetTagDefs(AStream, AImgFormat);
|
||||
GetTagDefs(AStream);
|
||||
if FTagDefs.Count = 0 then
|
||||
exit;
|
||||
AStream.Position := FDataStartPosition;
|
||||
|
@ -1,884 +1,12 @@
|
||||
unit fpeMakerNote;
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$MODE Delphi}
|
||||
{$ENDIF}
|
||||
|
||||
{$I fpexif.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Sysutils, Classes,
|
||||
fpeGlobal, fpeTags, fpeExifReadWrite;
|
||||
|
||||
|
||||
type
|
||||
TCanonMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
function AddTag(AStream: TStream; const AIFDRecord: TIFDRecord;
|
||||
const AData: TBytes; AParent: TTagID): Integer; override;
|
||||
end;
|
||||
|
||||
TCasioMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
FVersion: Integer;
|
||||
function Prepare(AStream: TStream): Boolean; override;
|
||||
end;
|
||||
|
||||
TMinoltaMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
function AddTag(AStream: TStream; const AIFDRecord: TIFDRecord;
|
||||
const AData: TBytes; AParent: TTagID): Integer; override;
|
||||
end;
|
||||
|
||||
TOlympusMakerNoteReader = class(TMinoltaMakerNoteReader)
|
||||
protected
|
||||
FVersion: Integer;
|
||||
function Prepare(AStream: TStream): Boolean; override;
|
||||
end;
|
||||
|
||||
procedure BuildCanonTagDefs(AList: TTagDefList);
|
||||
procedure BuildCasio1TagDefs(AList: TTagDefList);
|
||||
procedure BuildCasio2TagDefs(AList: TTagDefList);
|
||||
procedure BuildEpsonTagDefs(AList: TTagDefList);
|
||||
procedure BuildFujiTagDefs(AList: TTagDefList);
|
||||
procedure BuildMinoltaTagDefs(AList: TTagDefList);
|
||||
procedure BuildNikon1TagDefs(AList: TTagDefList);
|
||||
procedure BuildNikon2TagDefs(AList: TTagDefList);
|
||||
procedure BuildOlympusTagDefs(AList: TTagDefList);
|
||||
procedure BuildSanyoTagDefs(AList: TTagDefList);
|
||||
|
||||
fpeMakerNoteCanonCasio, fpeMakerNoteEpson, fpeMakerNoteFuji,
|
||||
fpeMakerNoteMinolta, fpeMakerNoteNikon, fpeMakerNoteOlympus,
|
||||
fpeMakerNoteSanyo;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts, fpeUtils, fpeExifData;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TCanonMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
function TCanonMakerNoteReader.AddTag(AStream: TStream;
|
||||
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
|
||||
var
|
||||
tagDef: TTagDef;
|
||||
w: array of Word;
|
||||
n,i: Integer;
|
||||
begin
|
||||
Result := -1;
|
||||
|
||||
tagDef := FindTagDef(AIFDRecord.TagID or AParent);
|
||||
if (tagDef = nil) then
|
||||
exit;
|
||||
|
||||
Result := inherited AddTag(AStream, AIFDRecord, AData, AParent);
|
||||
|
||||
// We only handle 16-bit integer types here for further processing
|
||||
if not (tagDef.TagType in [ttUInt16, ttSInt16]) then
|
||||
exit;
|
||||
|
||||
// Put binary data into a word array and fix endianness
|
||||
n := Length(AData) div TagElementSize[ord(tagDef.TagType)];
|
||||
if n = 0 then
|
||||
exit;
|
||||
|
||||
if FBigEndian then
|
||||
for i:=0 to n-1 do AData[i] := BEtoN(AData[i])
|
||||
else
|
||||
for i:=0 to n-1 do AData[i] := LEtoN(AData[i]);
|
||||
SetLength(w, n);
|
||||
Move(AData[0], w[0], Length(AData));
|
||||
|
||||
// This is a special treatment of array tags which will be added as
|
||||
// separate "MakerNote" tags.
|
||||
case AIFDRecord.TagID of
|
||||
1: // Exposure Info 1
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag(1, 1, 'Macro mode', w[1], rsCanonMacroLkup);
|
||||
if n = 2 then exit;
|
||||
AddMakerNoteTag(1, 2, 'Self-timer', w[2]/10, '%2:.1f s');
|
||||
if n = 3 then exit;
|
||||
AddMakerNoteTag(1, 3, 'Quality', w[3], rsCanonQualityLkup);
|
||||
if n = 4 then exit;
|
||||
AddMakerNoteTag(1, 4, 'Flash mode', w[4], rsCanonFlashLkup);
|
||||
if n = 5 then exit;
|
||||
AddMakerNoteTag(1, 5, 'Drive mode', w[5], rsSingleContinuous);
|
||||
if n = 7 then exit;
|
||||
AddMakerNoteTag(1, 7, 'Focus mode', w[7], rsCanonFocusLkup);
|
||||
if n = 9 then exit;
|
||||
AddMakerNoteTag(1, 9, 'Record mode', w[9], rsCanonRecLkup);
|
||||
if n = 10 then exit;
|
||||
AddMakerNoteTag(1,10, 'Image size', w[10], rsCanonSizeLkup);
|
||||
if n = 11 then exit;
|
||||
AddMakerNoteTag(1,11, 'Easy shoot', w[11], rsCanonEasyLkup);
|
||||
if n = 12 then exit;
|
||||
AddMakerNoteTag(1,12, 'Digital zoom', w[12], rsCanonZoomLkup);
|
||||
if n = 13 then exit;
|
||||
AddMakerNoteTag(1,13, 'Contrast', w[13], rsCanonGenLkup);
|
||||
if n = 14 then exit;
|
||||
AddMakerNoteTag(1,14, 'Saturation', w[14], rsCanonGenLkup);
|
||||
if n = 15 then exit;
|
||||
AddMakerNoteTag(1,15, 'Sharpness', w[15], rsCanonGenLkup);
|
||||
if n = 16 then exit;
|
||||
AddMakerNoteTag(1,16, 'CCD ISO', w[16], rsCanonISOLkup);
|
||||
if n = 17 then exit;
|
||||
AddMakerNoteTag(1,17, 'Metering mode', w[17], rsCanonMeterLkup);
|
||||
if n = 18 then exit;
|
||||
AddMakerNoteTag(1,18, 'Focus type', w[18], rsCanonFocTypeLkup);
|
||||
if n = 19 then exit;
|
||||
AddMakerNoteTag(1,19, 'AFPoint', w[19], rsCanonAFLkup);
|
||||
if n = 20 then exit;
|
||||
AddMakerNoteTag(1,20, 'Exposure mode', w[20], rsCanonExposeLkup);
|
||||
if n = 24 then exit;
|
||||
AddMakerNoteTag(1,24, 'Long focal', w[24]);
|
||||
if n = 25 then exit;
|
||||
AddMakerNoteTag(1,25, 'Short focal', w[25]);
|
||||
if n = 26 then exit;
|
||||
AddMakerNoteTag(1,26, 'Focal units', w[26]);
|
||||
if n = 28 then exit;
|
||||
AddMakerNoteTag(1,28, 'Flash activity', w[28], rsCanonFlashActLkup);
|
||||
if n = 29 then exit;
|
||||
AddMakerNoteTag(1,29, 'Flash details', w[29]);
|
||||
if n = 32 then exit;
|
||||
AddMakerNoteTag(1,32, 'Focus mode', w[32], rsSingleContinuous);
|
||||
if n = 33 then exit;
|
||||
AddMakerNoteTag(1,33, 'AESetting', w[33], rsCanonAELkup);
|
||||
if n = 34 then exit;
|
||||
AddMakerNoteTag(1,34, 'Image stabilization', w[34], rsSingleContinuous);
|
||||
end;
|
||||
2: // Focal length
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag(2, 0, 'FocalType', w[0], rsCanonFocalTypeLkup);
|
||||
if n = 1 then exit;
|
||||
AddMakerNoteTag(2, 1, 'FocalLength', w[1]);
|
||||
end;
|
||||
4: // ExposureInfo2
|
||||
with FImgInfo.ExifData do begin
|
||||
if n = 7 then exit;
|
||||
AddMakerNoteTag(4, 7, 'WhiteBalance', w[7], rsCanonWhiteBalLkup);
|
||||
if n = 8 then exit;
|
||||
AddMakerNoteTag(4, 8, 'Slow shutter', w[8], rsCanonSloShuttLkup);
|
||||
if n = 9 then exit;
|
||||
AddMakerNoteTag(4, 9, 'SequenceNumber', w[9]);
|
||||
if n = 11 then exit;
|
||||
AddMakerNoteTag(4,11, 'OpticalZoomStep', w[11]);
|
||||
if n = 12 then exit;
|
||||
AddMakerNoteTag(4,12, 'Camera temperature', w[12]);
|
||||
if n = 14 then exit;
|
||||
AddMakerNoteTag(4,14, 'AFPoint', w[14]);
|
||||
if n = 15 then exit;
|
||||
AddMakerNoteTag(4,15, 'FlashBias', w[15], rsCanonBiasLkup);
|
||||
if n = 19 then exit;
|
||||
AddMakerNoteTag(4,19, 'Distance', w[19]);
|
||||
if n = 21 then exit;
|
||||
AddMakerNoteTag(4,21, 'FNumber', w[21]);
|
||||
if n = 22 then exit;
|
||||
AddMakerNoteTag(4,22, 'Exposure time', w[22]);
|
||||
if n = 23 then exit;
|
||||
AddMakerNoteTag(4,23, 'Measured EV2', w[23]);
|
||||
if n = 24 then exit;
|
||||
AddMakerNoteTag(4,24, 'Bulb duration', w[24]);
|
||||
if n = 26 then exit;
|
||||
AddMakerNoteTag(4,26, 'Camera type', w[26], rsCanonCamTypeLkup);
|
||||
if n = 27 then exit;
|
||||
AddMakerNoteTag(4,27, 'Auto rotation', w[27], rsCanonAutoRotLkup);
|
||||
if n = 28 then exit;
|
||||
AddMakerNoteTag(4,28, 'NDFilter', w[28], rsCanonGenLkup);
|
||||
end;
|
||||
5: // Panorma
|
||||
with FImgInfo.ExifData do begin
|
||||
if n = 2 then exit;
|
||||
AddMakerNoteTag(5, 2, 'Panorama frame number', w[2]);
|
||||
if n = 5 then exit;
|
||||
AddMakerNoteTag(5, 5, 'Panorama direction', w[5], rsCanonPanDirLkup);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
//==============================================================================
|
||||
// TCasioMakerNoteReader
|
||||
//==============================================================================
|
||||
function TCasioMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
var
|
||||
p: Int64;
|
||||
hdr: Array[0..5] of ansichar;
|
||||
begin
|
||||
Result := false;
|
||||
|
||||
p := AStream.Position;
|
||||
AStream.Read({%H-}hdr[0], SizeOf(hdr));
|
||||
if (hdr[0] = 'Q') and (hdr[1] = 'V') and (hdr[2] = 'C') and
|
||||
(hdr[3] = #0) and (hdr[4] = #0) and (hdr[5] = #0)
|
||||
then begin
|
||||
FVersion := 2;
|
||||
BuildCasio2TagDefs(FTagDefs);
|
||||
AStream.Position := p + SizeOf(hdr);
|
||||
end else
|
||||
begin
|
||||
FVersion := 1;
|
||||
BuildCasio1TagDefs(FTagDefs);
|
||||
AStream.Position := p;
|
||||
end;
|
||||
|
||||
FBigEndian := true;
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TMinoltaMakerNoteReader
|
||||
//==============================================================================
|
||||
function TMinoltaMakerNoteReader.AddTag(AStream: TStream;
|
||||
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
|
||||
var
|
||||
tagDef: TTagDef;
|
||||
v: array of DWord;
|
||||
n, i: Integer;
|
||||
t: TTagID;
|
||||
d: Integer;
|
||||
isDiMAGE7Hi: Boolean;
|
||||
//p: PByte;
|
||||
begin
|
||||
Result := -1;
|
||||
|
||||
tagDef := FindTagDef(AIFDRecord.TagID or AParent);
|
||||
if (tagDef = nil) then
|
||||
exit;
|
||||
|
||||
Result := inherited AddTag(AStream, AIFDRecord, AData, AParent);
|
||||
|
||||
// This is a special treatment of array tags which will be added as
|
||||
// separate "MakerNote" tags.
|
||||
// Ref: https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html#CameraSettings
|
||||
t := AIFDRecord.TagID;
|
||||
case AIFDRecord.TagID of
|
||||
$0001,
|
||||
$0003: // Minolta camera settings tags
|
||||
// Contains an array of ULong values encoded in big-endian style,
|
||||
// regardless of the byte order in the picture (i.e., even if the
|
||||
// JPEG or TIFF itself is little-endian).
|
||||
begin
|
||||
// Put binary data into a DWord array and fix endianness
|
||||
// ASSUMING HERE THAT DATA ARE ULONG HERE!
|
||||
n := Length(AData) div TagElementSize[ord(ttUInt32)];
|
||||
SetLength(v, n);
|
||||
Move(AData[0], v[0], Length(AData));
|
||||
for i:=0 to n-1 do
|
||||
v[i] := BEtoN(v[i]);
|
||||
// Fix problem with DiMAGE7Hi (http://www.dalibor.cz/software/minolta-makernote)
|
||||
isDiMAGE7Hi := FModel = 'DiMAGE7Hi';
|
||||
if isDiMAGE7Hi then d := 1 else d := 0;
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag(t, 1, 'Exposure mode', v[1], rsMinoltaExposureModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 2, 'Flash mode', v[2], rsMinoltaFlashModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 3, 'White balance', v[3], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t, 4, 'Minolta image size', v[4], rsMinoltaImageSizeLkup1, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 5, 'Minolta quality', v[5], rsMinoltaQualityLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 6, 'Drive mode', v[6], rsMinoltaDriveModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 7, 'Metering mode', v[7], rsMinoltaMeteringModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t, 8, 'ISO', v[8], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t, 9, 'Exposure time', v[9], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,10, 'F number', v[10], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,11, 'Macro mode', v[11], rsOffOn, '', ttUInt32);
|
||||
AddMakerNoteTag(t,12, 'Digital zoom', v[12], rsMinoltaDigitalZoomLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,13, 'Exposure compensation', v[13], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,14, 'Bracket step', v[14], rsMinoltaBracketStepLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,16, 'Interval length', v[16], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,17, 'Interval number', v[17], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,18, 'Focal length', v[18], '', '', ttUInt32); // crashes
|
||||
AddMakerNoteTag(t,19, 'Focus distance', v[19], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,20, 'Flash fired', v[20], rsNoYes, '', ttUInt32);
|
||||
AddMakerNoteTag(t,21, 'Minolta date', v[21], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,22, 'Minolta time', v[22], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,23, 'Max aperture', v[23], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,26, 'File number memory', v[26], rsOffOn, '', ttUInt32);
|
||||
AddMakerNoteTag(t,27, 'Last file number', v[27], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,28, 'Color balance red', v[28], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,29, 'Color balance green', v[29], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,30, 'Color balance blue', v[30], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,31, 'Saturation', v[31], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,32, 'Contrast', v[32], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,33, 'Sharpness', v[33], rsMinoltaSharpnessLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,34, 'Subject program', v[34], rsMinoltaSubjectProgramLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,35, 'Flash exposure compensation', v[35], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,36, 'AE setting', v[36], rsMinoltaIsoSettingLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,37, 'Minolta model ID', v[37], rsMinoltaModelIDLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,38, 'Interval mode', v[38], rsMinoltaIntervalModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,39, 'Folder name', v[39], rsMinoltaFolderNameLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,40, 'Color mode', v[40], rsMinoltaColorModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,41, 'Color filter', v[41], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,42, 'BW filter', v[42], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,43, 'Internal flash', v[43], rsMinoltaInternalFlashLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,44, 'Brightness', v[44], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,45, 'Spot focus point X', v[45], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,46, 'Spot focus point Y', v[46], '', '', ttUInt32);
|
||||
AddMakerNoteTag(t,47, 'Wide focus zone', v[47], rsMinoltaWideFocusZoneLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,48, 'Focus mode', v[48], rsMinoltaFocusModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,49, 'Focus area', v[49], rsMinoltaFocusAreaLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,50, 'DEC position', v[50], rsMinoltaDECPositionLkup, '', ttUInt32);
|
||||
if isDiMAGE7Hi then
|
||||
AddMakerNoteTag(t,51, 'Color profile', v[51], rsMinoltaColorProfileLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,51+d, 'Data imprint', v[52], rsMinoltaDataImprintLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(t,63+d, 'Flash metering', v[63], rsMinoltaFlashMeteringLkup, '', ttUInt32); // or is the index 53?
|
||||
end;
|
||||
end;
|
||||
$0010: // CameraInfoA100
|
||||
begin
|
||||
//p := @AData[0];
|
||||
//... conversion stopped due to unclear documentation on
|
||||
// https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html#CameraInfoA100
|
||||
// --- Is there an index 0?
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TOlympusMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
{ Read the header and determine the version of the olympus makernotes:
|
||||
- version 1: header OLYMP#0#1+0, offsets relative to EXIF
|
||||
- version 2: header OLYMP#0#2#0, offsets relative to EXIF
|
||||
- version 3: header OLYMPUS#0 + BOM (II or MM) + version (#3#0)
|
||||
offsets relative to maker notes !!!! }
|
||||
function TOlympusMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
var
|
||||
p: Int64;
|
||||
hdr: packed array[0..11] of ansichar;
|
||||
begin
|
||||
Result := false;
|
||||
|
||||
// Remember begin of makernotes tag.
|
||||
p := AStream.Position;
|
||||
|
||||
// Read header
|
||||
AStream.Read(hdr{%H-}, 12);
|
||||
|
||||
// The first 5 bytes must be 'OLYMP'; this is common to all versions
|
||||
if not ((hdr[0] = 'O') and (hdr[1] = 'L') and (hdr[2] = 'Y') and (hdr[3] = 'M') and (hdr[4] = 'P')) then
|
||||
exit;
|
||||
|
||||
FVersion := 0;
|
||||
// Version 1 or 2 if a #0 follows after the 'OLYMP'
|
||||
if (hdr[5] = #0) then begin
|
||||
if (hdr[6] = #1) and (hdr[7] = #0) then
|
||||
FVersion := 1
|
||||
else
|
||||
if (hdr[6] = #2) and (hdr[7] = #0) then
|
||||
FVersion := 2;
|
||||
end else
|
||||
// Version 3 if the first 8 bytes are 'OLYMPUS'#0
|
||||
if (hdr[5] = 'U') and (hdr[6] = 'S') and (hdr[7] = #0) then begin
|
||||
// Endianness marker, like in standard EXIF: 'II' or 'MM'
|
||||
if (hdr[8] = 'I') and (hdr[9] = 'I') then
|
||||
FBigEndian := false
|
||||
else
|
||||
if (hdr[8] = 'M') and (hdr[9] = 'M') then
|
||||
FBigEndian := true;
|
||||
if (hdr[10] = #3) then
|
||||
FVersion := 3;
|
||||
FStartPosition := p; // Offsets are relative to maker notes
|
||||
end;
|
||||
|
||||
// Jump to begin of IFD
|
||||
case FVersion of
|
||||
1, 2: AStream.Position := p + 8;
|
||||
3 : AStream.Position := p + 12;
|
||||
else exit;
|
||||
end;
|
||||
|
||||
BuildOlympusTagDefs(FTagDefs);
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
|
||||
(*
|
||||
{ Read the header and determine the version of the olympus makernotes:
|
||||
- version 1: header OLYMP#0#1+0, offsets relative to EXIF
|
||||
- version 2: header OLYMP#0#2#0, offsets relative to EXIF
|
||||
- version 3: header OLYMPUS#0 + BOM (II or MM) + version (#3#0)
|
||||
offsets relative to maker notes !!!! }
|
||||
procedure TOlympusMakerNoteReader.ReadIFD(AStream: TStream; AParent: TTagID);
|
||||
//procedure TOlympusMakerNoteReader.ReadIFD(AStream: TStream; AGroup: TTagGroup);
|
||||
var
|
||||
p: Int64;
|
||||
hdr: packed array[0..11] of ansichar;
|
||||
begin
|
||||
if TTagIDRec(AParent).Parent = TAG_MAKERNOTE then
|
||||
begin
|
||||
// if AGroup = tgExifMakerNote then
|
||||
// Remember begin of makernotes tag.
|
||||
p := AStream.Position;
|
||||
|
||||
// Read header
|
||||
AStream.Read(hdr, 12);
|
||||
|
||||
// The first 5 bytes must be 'OLYMP'; this is common to all versions
|
||||
if not ((hdr[0] = 'O') and (hdr[1] = 'L') and (hdr[2] = 'Y') and (hdr[3] = 'M') and (hdr[4] = 'P')) then
|
||||
exit;
|
||||
|
||||
FVersion := 0;
|
||||
// Version 1 or 2 if a #0 follows after the 'OLYMP'
|
||||
if (hdr[5] = #0) then begin
|
||||
if (hdr[6] = #1) and (hdr[7] = #0) then
|
||||
FVersion := 1
|
||||
else
|
||||
if (hdr[6] = #2) and (hdr[7] = #0) then
|
||||
FVersion := 2;
|
||||
end else
|
||||
// Version 3 if the first 8 bytes are 'OLYMPUS'#0
|
||||
if (hdr[5] = 'U') and (hdr[6] = 'S') and (hdr[7] = #0) then begin
|
||||
// Endianness marker, like in standard EXIF: 'II' or 'MM'
|
||||
if (hdr[8] = 'I') and (hdr[9] = 'I') then
|
||||
FBigEndian := false
|
||||
else
|
||||
if (hdr[8] = 'M') and (hdr[9] = 'M') then
|
||||
FBigEndian := true;
|
||||
if (hdr[10] = #3) then
|
||||
FVersion := 3;
|
||||
FStartPosition := p; // Offsets are relative to maker notes
|
||||
end;
|
||||
|
||||
// Jump to begin of IFD
|
||||
case FVersion of
|
||||
1, 2: AStream.Position := p + 8;
|
||||
3 : AStream.Position := p + 12;
|
||||
else exit;
|
||||
end;
|
||||
|
||||
BuildOlympusTagDefs(FTagDefs)
|
||||
end;
|
||||
|
||||
inherited;
|
||||
end;
|
||||
*)
|
||||
|
||||
//==============================================================================
|
||||
// Tag definition lists
|
||||
//==============================================================================
|
||||
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
|
||||
procedure BuildCanonTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0001, 'ExposureInfo1');
|
||||
AddUShortTag(M+$0002, 'Panorama');
|
||||
AddUShortTag(M+$0004, 'ExposureInfo2');
|
||||
AddStringTag(M+$0006, 'ImageType');
|
||||
AddStringTag(M+$0007, 'FirmwareVersion');
|
||||
AddULongTag (M+$0008, 'ImageNumber');
|
||||
AddStringTag(M+$0009, 'OwnerName');
|
||||
AddULongTag (M+$000C, 'CameraSerialNumber');
|
||||
AddUShortTag(M+$000F, 'CustomFunctions');
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Casio Type 1
|
||||
Standard TIFF IFD Data using Casio Type 1 Tags but always uses
|
||||
Motorola (Big-Endian) byte alignment
|
||||
This makernote has no header - the IFD starts immediately
|
||||
Ref.: http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html }
|
||||
procedure BuildCasio1TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0001, 'RecordingMode', 1, '', rsCasioRecordingModeLkup);
|
||||
AddUShortTag(M+$0002, 'Quality', 1, '', rsEconomyNormalFine1);
|
||||
AddUShortTag(M+$0003, 'FocusingMode', 1, '', rsCasioFocusingModeLkup);
|
||||
AddUShortTag(M+$0004, 'FlashMode', 1, '', rsCasioFlashModeLkup);
|
||||
AddUShortTag(M+$0005, 'FlashIntensity', 1, '', rsCasioFlashIntensityLkup);
|
||||
AddULongTag (M+$0006, 'ObjectDistance', 1, '', '', '%d mm');
|
||||
AddUShortTag(M+$0007, 'WhiteBalance', 1, '', rsCasioWhiteBalanceLkup);
|
||||
AddULongTag (M+$000A, 'DigitalZoom', 1, '', rsCasioDigitalZoomLkup);
|
||||
AddUShortTag(M+$000B, 'Sharpness', 1, '', rsNormalSoftHard);
|
||||
AddUShortTag(M+$000C, 'Contrast', 1, '', rsNormalLowHigh);
|
||||
AddUShortTag(M+$000D, 'Saturation', 1, '', rsNormalLowHigh);
|
||||
AddUShortTag(M+$000A, 'DigitalZoom', 1, '', rsCasioDigitalZoomLkup);
|
||||
AddUShortTag(M+$0014, 'CCDSensitivity', 1, '', rsCasioCCDSensitivityLkup);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Case Type 2
|
||||
Header: 6 Bytes "QVC\x00\x00\x00"
|
||||
IFD Data: Standard TIFF IFD Data using Casio Type 2 Tags but always uses
|
||||
Motorola (Big-Endian) Byte Alignment.
|
||||
All EXIF offsets are relative to the start of the TIFF header at the beginning of the EXIF segment
|
||||
Ref.: http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html
|
||||
http://www.exiv2.org/tags-casio.html
|
||||
https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Casio.html#Type2
|
||||
}
|
||||
procedure BuildCasio2TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag (M+$0002, 'PreviewImageSize', 2); // width and height, in pixels
|
||||
AddULongTag (M+$0003, 'PreviewImageLength');
|
||||
AddULongTag (M+$0004, 'PreviewImageStart');
|
||||
AddUShortTag (M+$0008, 'QualityMode', 1, '', rsEconomyNormalFine);
|
||||
AddUShortTag (M+$0009, 'ImageSize', 1, '', rsCasioImageSize2Lkup);
|
||||
AddUShortTag (M+$000D, 'FocusMode', 1, '', rsCasioFocusMode2Lkup);
|
||||
AddUShortTag (M+$0014, 'ISOSpeed', 1, '', rsCasioISOSpeed2Lkup);
|
||||
AddUShortTag (M+$0019, 'WhiteBalance', 1, '', rsCasioWhiteBalance2Lkup);
|
||||
AddURationalTag(M+$001D, 'FocalLength');
|
||||
AddUShortTag (M+$001F, 'Saturation', 1, '', rsLowNormalHigh);
|
||||
AddUShortTag (M+$0020, 'Contrast', 1, '', rsLowNormalHigh);
|
||||
AddUShortTag (M+$0021, 'Sharpness', 1, '', rsCasioSharpness2Lkup);
|
||||
AddBinaryTag (M+$0E00, 'PrintIM');
|
||||
AddBinaryTag (M+$2000, 'PreviewImage');
|
||||
AddStringTag (M+$2001, 'FirwareDate', 18);
|
||||
AddUShortTag (M+$2011, 'WhiteBalanceBias', 2);
|
||||
AddUShortTag (M+$2012, 'WhiteBalance2', 2, '', rsCasioWhiteBalance22Lkup);
|
||||
AddUShortTag (M+$2021, 'AFPointPosition', 4);
|
||||
AddULongTag (M+$2022, 'ObjectDistance');
|
||||
AddUShortTag (M+$2034, 'FlashDistance');
|
||||
AddByteTag (M+$2076, 'SpecialEffectMode', 3); // to do: array lkup - should be: '0 0 0' = Off,'1 0 0' = Makeup,'2 0 0' = Mist Removal,'3 0 0' = Vivid Landscape
|
||||
AddBinaryTag (M+$2089, 'FaceInfo');
|
||||
AddByteTag (M+$211C, 'FacesDetected');
|
||||
AddUShortTag (M+$3000, 'RecordMode', 1, '', rsCasioRecordMode2Lkup);
|
||||
AddUShortTag (M+$3001, 'ReleaseMode', 1, '', rsCasioReleaseMode2Lkup);
|
||||
AddUShortTag (M+$3002, 'Quality', 1, '', rsEconomyNormalFine1);
|
||||
AddUShortTag (M+$3003, 'FocusMode2', 1, '', rsCasioFocusMode2Lkup);
|
||||
AddStringTag (M+$3006, 'HometownCity');
|
||||
AddUShortTag (M+$3007, 'BestShotMode'); // Lkup depends severly on camera model
|
||||
AddUShortTag (M+$3008, 'AutoISO', 1, '', rsCasioAutoIso2Lkup);
|
||||
AddUShortTag (M+$3009, 'AFMode', 1, '', rsCasioAFMode2Lkup);
|
||||
AddBinaryTag (M+$3011, 'Sharpness2');
|
||||
AddBinaryTag (M+$3012, 'Contrast2');
|
||||
AddBinaryTag (M+$3013, 'Saturation2');
|
||||
AddUShortTag (M+$3014, 'ISO');
|
||||
AddUShortTag (M+$3015, 'ColorMode', 1, '', rsCasioColorMode2Lkup);
|
||||
AddUShortTag (M+$3016, 'Enhancement', 1, '', rsCasioEnhancement2Lkup);
|
||||
AddUShortTag (M+$3017, 'ColorFilter', 1, '', rsCasioColorFilter2Lkup);
|
||||
AddUShortTag (M+$301B, 'ArtMode', 1, '', rsCasioArtMode2Lkup);
|
||||
AddUShortTag (M+$301C, 'SequenceNumber');
|
||||
AddUShortTag (M+$301D, 'BracketSequence', 2);
|
||||
AddUShortTag (M+$3020, 'ImageStabilization', 1, '', rsCasioImageStabilization2Lkup);
|
||||
AddUShortTag (M+$302A, 'LightingMode', 1, '', rsCasioLightingMode2Lkup);
|
||||
AddUShortTag (M+$302B, 'PortraitRefiner', 1, '', rsCasioPortraitRefiner2Lkup);
|
||||
AddUShortTag (M+$3030, 'SpecialEffectLevel');
|
||||
AddUShortTag (M+$3031, 'SpecialEffectSetting', 1, '', rsCasioSpecialEffectSetting2Lkup);
|
||||
AddUShortTag (M+$3103, 'DriveMode', 1, '', rsCasioDriveMode2Lkup);
|
||||
AddBinaryTag (M+$310B, 'ArtModeParameters', 3);
|
||||
AddUShortTag (M+$4001, 'CaptureFrameRate');
|
||||
AddUShortTag (M+$4003, 'VideoQuality', 1, '', rsCasioVideoQuality2Lkup);
|
||||
|
||||
// to do...
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure BuildEpsonTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0200, 'SpecialMode');
|
||||
AddUShortTag(M+$0201, 'JpegQuality');
|
||||
AddUShortTag(M+$0202, 'Macro');
|
||||
AddUShortTag(M+$0204, 'DigitalZoom');
|
||||
AddUShortTag(M+$0209, 'CameraID');
|
||||
AddStringTag(M+$020A, 'Comments');
|
||||
AddUShortTag(M+$020B, 'Width');
|
||||
AddUShortTag(M+$020C, 'Height');
|
||||
AddUShortTag(M+$020D, 'SoftRelease');
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure BuildFujiTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0000, 'Version');
|
||||
AddStringTag (M+$1000, 'Quality');
|
||||
AddUShortTag (M+$1001, 'Sharpness', 1, '', rsFujiSharpnessLkup);
|
||||
AddUShortTag (M+$1002, 'WhiteBalance', 1, '', rsFujiWhiteBalLkup);
|
||||
AddUShortTag (M+$1003, 'Saturation', 1, '', rsFujiSaturationLkup);
|
||||
AddUShortTag (M+$1004, 'Contrast', 1, '', rsFujiContrastLkup);
|
||||
AddUShortTag (M+$1005, 'ColorTemperature');
|
||||
AddUShortTag (M+$1006, 'Contrast', 1, '', rsFujiContrastLkup1);
|
||||
AddURationalTag(M+$100A, 'WhiteBalanceFineTune');
|
||||
AddUShortTag (M+$100B, 'NoiseReduction', 1, '', rsFujiNoiseReductionLkup);
|
||||
AddUShortTag (M+$100E, 'HighISONoiseReduction', 1, '', rsFujiHighIsoNoiseReductionLkup);
|
||||
AddUShortTag (M+$1010, 'FlashMode', 1, '', rsFujiFlashModeLkup);
|
||||
AddURationalTag(M+$1011, 'FlashStrength');
|
||||
AddUShortTag (M+$1020, 'Macro', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$1021, 'FocusMode', 1, '', rsAutoManual);
|
||||
AddUShortTag (M+$1030, 'SlowSync', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$1031, 'PictureMode', 1, '', rsFujiPictureModeLkup);
|
||||
AddUShortTag (M+$1032, 'ExposureCount');
|
||||
AddUShortTag (M+$1033, 'EXRAuto', 1, '', rsAutoManual);
|
||||
AddUShortTag (M+$1034, 'EXRMode', 1, '', rsFujiEXRModeLkup);
|
||||
AddSLongTag (M+$1040, 'ShadowTone', 1, '', rsFujiShadowHighlightLkup);
|
||||
AddSLongTag (M+$1041, 'HighlightTone', 1, '', rsFujiShadowHighlightLkup);
|
||||
AddULongTag (M+$1044, 'DigitalZoom');
|
||||
AddUShortTag (M+$1050, 'ShutterType', 1, '', rsFujiShutterTypeLkup);
|
||||
AddUShortTag (M+$1100, 'AutoBracketing', 1, '', rsFujiAutoBracketingLkup);
|
||||
AddUShortTag (M+$1101, 'SequenceNumber');
|
||||
AddUShortTag (M+$1153, 'PanoramaAngle');
|
||||
AddUShortTag (M+$1154, 'PanoramaDirection', 1, '', rsFujiPanoramaDirLkup);
|
||||
AddULongTag (M+$1201, 'AdvancedFilter', 1, '', rsFujiAdvancedFilterLkup);
|
||||
AddUShortTag (M+$1210, 'ColorMode', 1, '', rsFujiColorModeLkup);
|
||||
AddUShortTag (M+$1300, 'BlurWarning', 1, '', rsFujiBlurWarningLkup);
|
||||
AddUShortTag (M+$1301, 'FocusWarning', 1, '', rsFujiFocusWarningLkup);
|
||||
AddUShortTag (M+$1302, 'ExposureWarning', 1, '', rsFujiExposureWarningLkup);
|
||||
AddUShortTag (M+$1400, 'DynamicRange', 1, '', rsFujiDynamicRangeLkup);
|
||||
AddURationalTag(M+$1404, 'MinFocalLength');
|
||||
AddURationalTag(M+$1405, 'MaxFocalLength');
|
||||
AddURationalTag(M+$1406, 'MaxApertureAtMinFocal');
|
||||
AddURationalTag(M+$1407, 'MaxApertureAtMaxFocal');
|
||||
AddUShortTag (M+$140B, 'AutoDynamicRange');
|
||||
AddUShortTag (M+$1422, 'ImageStabilization', 3);
|
||||
AddUShortTag (M+$1425, 'SceneRecognition', 1, '', rsFujiSceneRecognLkup);
|
||||
AddUShortTag (M+$1431, 'Rating');
|
||||
AddStringTag (M+$8000, 'FileSource');
|
||||
AddULongTag (M+$8002, 'OrderNumber');
|
||||
AddUShortTag (M+$8003, 'FrameNumber');
|
||||
end;
|
||||
end;
|
||||
|
||||
{ The Minolta MakerNote can be quite long, about 12 kB. In the beginning
|
||||
of this tag there is a normal tag directory in usual format.
|
||||
References:
|
||||
- http://www.dalibor.cz/software/minolta-makernote
|
||||
- https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html }
|
||||
procedure BuildMinoltaTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
{ This tag stores the string 'MLT0', not zero-terminated, as an identifier }
|
||||
AddBinaryTag (M+$0000, 'Version', 4, '', '', '', TVersionTag);
|
||||
|
||||
{ Stores all settings which were in effect when taking the picture.
|
||||
Details depend on camera. }
|
||||
AddBinaryTag (M+$0001, 'MinoltaCameraSettingsOld'); // Camera D5, D7, S304, S404
|
||||
AddBinaryTag (M+$0003, 'MinoltaCameraSettings'); // Camera D7u, D7i, D7Hi
|
||||
|
||||
// this is the size of the JPEG (compressed) or TIFF or RAW file.
|
||||
AddULongTag (M+$0040, 'CompressedImageSize');
|
||||
|
||||
{ Stores the thumbnail image (640×480). It is in normal JFIF format but the
|
||||
first byte should be changed to 0xFF. Beware! Sometimes the thumbnail
|
||||
is not stored in the file and this tag points beyond the end of the file. }
|
||||
AddBinaryTag (M+$0081, 'ReviewImage');
|
||||
|
||||
{ The cameras D7u, D7i and D7Hi no longer store the thumbnail inside the tag.
|
||||
It has instead two tags describing the position of the thumbnail in the
|
||||
file and its size }
|
||||
AddULongTag (M+$0088, 'PreviewImageStart');
|
||||
AddULongTag (M+$0089, 'PreviewImageLength');
|
||||
|
||||
AddULongTag (M+$0100, 'SceneMode', 1, '', rsMinoltaSceneModeLkup);
|
||||
AddULongTag (M+$0101, 'ColorMode', 1, '', rsMinoltaColorModeLkup);
|
||||
AddULongtag (M+$0102, 'Quality', 1, '', rsMinoltaQualityLkup);
|
||||
AddULongTag (M+$0103, 'ImageSize', 1, '', rsMinoltaImageSizeLkup);
|
||||
AddSRationalTag(M+$0104, 'FlashExposureComp');
|
||||
AddULongTag (M+$0105, 'TeleConverter', 1, '', rsMinoltaTeleconverterLkup);
|
||||
AddULongTag (M+$0107, 'ImageStabilization', 1, '', rsMinoltaImageStabLkup);
|
||||
AddULongTag (M+$0109, 'RawAndJpegRecording', 1, '', rsOffOn);
|
||||
AddULongTag (M+$010A, 'ZoneMatching', 1, '', rsMinoltaZoneMatchingLkup);
|
||||
AddULongTag (M+$010B, 'ColorTemperature', 1);
|
||||
AddULongTag (M+$010C, 'LensType', 1);
|
||||
AddSLongTag (M+$0111, 'ColorCompensationFilter', 1);
|
||||
AddULongTag (M+$0112, 'WhiteBalanceFileTune', 1);
|
||||
AddULongTag (M+$0113, 'ImageStabilization', 1, '', rsOffOn);
|
||||
AddULongTag (M+$0115, 'WhiteBalance', 1, '', rsMinoltaWhiteBalanceLkup);
|
||||
AddBinaryTag (M+$0E00, 'PrintPIM');
|
||||
end;
|
||||
end;
|
||||
|
||||
// not tested
|
||||
procedure BuildNikon1TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0002, 'FamilyID');
|
||||
AddUShortTag(M+$0003, 'Quality', 1, '', rsNikonQualityLkup);
|
||||
AddUShortTag(M+$0004, 'ColorMode', 1, '', rsNikonColorModeLkup);
|
||||
AddUShortTag(M+$0005, 'ImageAdjustment', 1, '', rsNikonImgAdjLkup);
|
||||
AddUShortTag(M+$0006, 'ISOSpeed', 1, '', rsNikonISOLkup);
|
||||
AddUShortTag(M+$0007, 'WhiteBalance', 1, '', rsNikonWhiteBalanceLkup);
|
||||
AddUShortTag(M+$0008, 'Focus');
|
||||
AddUShortTag(M+$000A, 'DigitalZoom');
|
||||
AddUShortTag(M+$000B, 'Converter', 1, '', rsNikonConverterLkup);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ for Nikon D1, E880, E885, E990, E995, E2500, E5000
|
||||
Ref http://www.tawbaware.com/990exif.htm
|
||||
https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html }
|
||||
procedure BuildNikon2TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0001, 'Version', 4, '', '', '', TVersionTag);
|
||||
AddUShortTag (M+$0002, 'ISO', 2);
|
||||
AddStringTag (M+$0003, 'ColorMode');
|
||||
AddStringTag (M+$0004, 'Quality');
|
||||
AddStringTag (M+$0005, 'WhiteBalance');
|
||||
AddStringtag (M+$0006, 'ImageSharpening');
|
||||
AddStringTag (M+$0007, 'FocusMode');
|
||||
AddStringTag (M+$0008, 'FlashSetting');
|
||||
AddStringTag (M+$0009, 'FlashType');
|
||||
AddURationalTag(M+$000A, 'UNKNOWN');
|
||||
AddStringTag (M+$000F, 'ISOSelection');
|
||||
AddStringTag (M+$0080, 'ImageAdjustment');
|
||||
AddStringTag (M+$0081, 'ToneComp');
|
||||
AddStringTag (M+$0082, 'AuxiliaryLens');
|
||||
AddURationalTag(M+$0085, 'ManualFocusDistance');
|
||||
AddURationalTag(M+$0086, 'DigitalZoom');
|
||||
AddBinaryTag (M+$0088, 'AFInfo');
|
||||
AddStringTag (M+$008D, 'ColorHue');
|
||||
AddStringTag (M+$008F, 'SceneMode');
|
||||
AddStringTag (M+$0090, 'LightSource');
|
||||
AddBinaryTag (M+$0010, 'DataDump');
|
||||
end;
|
||||
end;
|
||||
|
||||
// Most from https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Olympus.html
|
||||
// some from dExif
|
||||
|
||||
const
|
||||
E = $2010 shl 16; // Equipment version
|
||||
C = $2011 shl 16; // Camera settings
|
||||
|
||||
procedure BuildOlympusTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0000, 'Version', 4, '', '', '', TVersionTag);
|
||||
|
||||
{ Stores all settings which were in effect when taking the picture.
|
||||
Details depend on camera. }
|
||||
AddBinaryTag (M+$0001, 'MinoltaCameraSettingsOld'); //, $FFFF, '', '', '', TSubIFDTag, true);
|
||||
AddBinaryTag (M+$0003, 'MinoltaCameraSettings'); //, $FFFF, '', '', '', TSubIFDTag, false);
|
||||
|
||||
// this is the size of the JPEG (compressed) or TIFF or RAW file.
|
||||
AddULongTag (M+$0040, 'CompressedImageSize');
|
||||
|
||||
{ Stores the thumbnail image (640×480). It is in normal JFIF format but the
|
||||
first byte should be changed to 0xFF. Beware! Sometimes the thumbnail
|
||||
is not stored in the file and this tag points beyond the end of the file. }
|
||||
AddBinaryTag (M+$0081, 'ReviewImage');
|
||||
|
||||
{ The cameras D7u, D7i and D7Hi no longer store the thumbnail inside the tag.
|
||||
It has instead two tags describing the position of the thumbnail in the
|
||||
file and its size }
|
||||
AddULongTag (M+$0088, 'PreviewImageStart');
|
||||
AddULongTag (M+$0089, 'PreviewImageLength');
|
||||
|
||||
AddULongTag (M+$0200, 'SpecialMode', 3);
|
||||
AddUShortTag (M+$0201, 'JpegQuality', 1, '', rsOlympusJpegQualLkup);
|
||||
AddUShortTag (M+$0202, 'Macro', 1, '', rsOlympusMacroLkup);
|
||||
AddURationalTag(M+$0204, 'DigitalZoom');
|
||||
// AddUShortTag (M+$0207, 'Firmware');
|
||||
AddStringTag (M+$9207, 'CameraType');
|
||||
AddStringTag (M+$0208, 'PictureInfo');
|
||||
AddStringTag (M+$0209, 'CameraID');
|
||||
AddUShortTag (M+$020B, 'EpsonImageWidth');
|
||||
AddUShortTag (M+$020C, 'EpsonImageHeight');
|
||||
AddStringTag (M+$020D, 'EpsonSoftware');
|
||||
AddUShortTag (M+$0403, 'SceneMode', 1, '', rsOlympusSceneModeLkup);
|
||||
AddStringTag (M+$0404, 'SerialNumber');
|
||||
AddStringTag (M+$0405, 'Firmware');
|
||||
AddSRationalTag(M+$1000, 'ShutterSpeedValue');
|
||||
AddSRationalTag(M+$1001, 'ISOValue');
|
||||
AddSRationalTag(M+$1002, 'ApertureValue');
|
||||
AddSRationalTag(M+$1003, 'BrightnessValue');
|
||||
AddUShortTag (M+$1004, 'FlashMode', 1, '', rsOlympusFlashModeLkup);
|
||||
AddUShortTag (M+$1005, 'FlashDevice', 1, '', rsOlympusFlashDevLkup);
|
||||
AddURationalTag(M+$1006, 'Bracket');
|
||||
AddSShortTag (M+$1007, 'SensorTemperature');
|
||||
AddSShortTag (M+$1008, 'LensTemperature');
|
||||
AddUShortTag (M+$100B, 'FocusMode', 1, '', rsAutoManual);
|
||||
AddURationalTag(M+$100C, 'FocusDistance');
|
||||
AddUShortTag (M+$100D, 'ZoomStepCount');
|
||||
AddUShortTag (M+$100E, 'FocusStepCount');
|
||||
AddUShortTag (M+$100F, 'Sharpness', 1, '', rsOlympusSharpnessLkup);
|
||||
AddUShortTag (M+$1010, 'FlashChargeLevel');
|
||||
AddUShortTag (M+$1011, 'ColorMatrix', 9);
|
||||
AddUShortTag (M+$1012, 'BlackLevel', 4);
|
||||
AddUShortTag (M+$1015, 'WhiteBalanceMode', 2);
|
||||
AddUShortTag (M+$1017, 'RedBalance', 2);
|
||||
AddUShortTag (M+$1018, 'BlueBalance', 2);
|
||||
AddStringTag (M+$101A, 'SerialNumber');
|
||||
AddURationalTag(M+$1023, 'FlashBias');
|
||||
AddUShortTag (M+$1029, 'Contrast', 1, '', rsOlympusContrastLkup);
|
||||
AddUShortTag (M+$102A, 'SharpnessFactor');
|
||||
AddUShortTag (M+$102B, 'ColorControl', 6);
|
||||
AddUShortTag (M+$102C, 'ValidBits', 2);
|
||||
AddUShortTag (M+$102D, 'CoringFilter');
|
||||
AddULongTag (M+$102E, 'FinalWidth');
|
||||
AddULongTag (M+$102F, 'FinalHeight');
|
||||
AddUShortTag (M+$1030, 'SceneDetect');
|
||||
AddULongTag (M+$1031, 'SceneArea', 8);
|
||||
AddURationalTag(M+$1034, 'CompressionRatio');
|
||||
AddUShortTag (M+$1038, 'AFResult');
|
||||
AddUShortTag (M+$1039, 'CCDScanMode', 1, '', rsOlympusCCDScanModeLkup);
|
||||
AddUShortTag (M+$103A, 'NoiseReduction', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$103B, 'FocusStepInfinity');
|
||||
AddUShortTag (M+$103C, 'FocusStepNear');
|
||||
AddSRationalTag(M+$103D, 'LightValueCenter');
|
||||
AddSRationalTag(M+$103E, 'LightValuePeriphery');
|
||||
AddIFDTag (M+$2010, 'Equipment', '', TSubIFDTag);
|
||||
AddIFDTag (M+$2011, 'CameraSettings', '', TSubIFDTag);
|
||||
|
||||
// Olympus Equipment Tags
|
||||
AddBinaryTag (E+$0000, 'EquipmentVersion', 4, '', '', '', TVersionTag);
|
||||
AddStringTag (E+$0100, 'CameraType', 6);
|
||||
AddStringTag (E+$0101, 'SerialNumber', 32);
|
||||
AddStringTag (E+$0102, 'InternalSerialNumber', 32);
|
||||
AddURationalTag(E+$0103, 'FocalPlaneDiagonal');
|
||||
AddULongTag (E+$0104, 'BodyFirmwareVersion');
|
||||
AddByteTag (E+$0201, 'LensType', 6);
|
||||
AddStringTag (E+$0202, 'LensSerialNumber', 32);
|
||||
AddStringTag (E+$0203, 'LensModel');
|
||||
AddULongTag (E+$0204, 'LensFirmwareVersion');
|
||||
AddUShortTag (E+$0205, 'MaxApertureAtMinFocal');
|
||||
AddUShortTag (E+$0206, 'MaxApertureAtMaxFocal');
|
||||
AddUShortTag (E+$0207, 'MinFocalLength');
|
||||
AddUShortTag (E+$0208, 'MaxFocalLength');
|
||||
AddUShortTag (E+$020A, 'MaxAperture');
|
||||
AddUShortTag (E+$020B, 'LensProperties');
|
||||
AddByteTag (E+$0301, 'Extender', 6);
|
||||
AddStringTag (E+$0302, 'ExtenderSerialNumber', 32);
|
||||
AddStringTag (E+$0303, 'ExtenderModel');
|
||||
AddULongTag (E+$0304, 'ExtenderFirmwareVersion');
|
||||
AddStringTag (E+$0403, 'ConversionLens');
|
||||
AddUShortTag (E+$1000, 'FlashType', 1, '', rsOlympusFlashTypeLkup);
|
||||
AddUShortTag (E+$1001, 'FlashModel', 1, '', rsOlympusFlashModelLkup);
|
||||
AddULongTag (E+$1002, 'FlashFirmwareVersion');
|
||||
AddStringTag (E+$1003, 'FlashSerialNumber', 32);
|
||||
|
||||
// Olympus camera settings tags
|
||||
AddBinaryTag (C+$0000, 'CameraSettingsVersion', 4, '', '', '', TVersionTag);
|
||||
AddULongTag (C+$0100, 'PreviewImageValid', 1, rsOlympusPreviewImgValid, rsOffOn);
|
||||
AddULongTag (C+$0101, 'PreviewImageStart', 1, rsOlympusPreviewImgStart);
|
||||
AddULongTag (C+$0102, 'PreviewImageLength', 1, rsOlympusPreviewImgLength);
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
// from dExif.
|
||||
procedure BuildSanyoTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddULongTag (M+$0200, 'SpecialMode', 3, rsSanyoSpecialMode);
|
||||
AddUShortTag (M+$0201, 'Quality', 1, rsQuality, rsSanyoQualityLkup);
|
||||
AddUShortTag (M+$0202, 'Macro', 1, rsMacro, rsSanyoMacroLkup);
|
||||
AddURationalTag(M+$0204, 'DigitalZoom', 1, rsDigitalZoom);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TCanonMakerNoteReader, 'Canon', '');
|
||||
RegisterMakerNoteReader(TCanonMakerNoteReader, 'Casio', '');
|
||||
RegisterMakerNoteReader(TMinoltaMakerNoteReader, 'Minolta', '');
|
||||
RegisterMakerNoteReader(TOlympusMakerNoteReader, 'Olympus', '');
|
||||
|
||||
end.
|
||||
|
454
components/fpexif/fpemakernotecanoncasio.pas
Normal file
454
components/fpexif/fpemakernotecanoncasio.pas
Normal file
@ -0,0 +1,454 @@
|
||||
{ This maker note reader can handle CANON and CASIO cameras. }
|
||||
|
||||
unit fpeMakerNoteCanonCasio;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeGlobal, fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TCanonMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
function AddTag(AStream: TStream; const AIFDRecord: TIFDRecord;
|
||||
const AData: TBytes; AParent: TTagID): Integer; override;
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
end;
|
||||
|
||||
TCasioMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
FVersion: Integer;
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
function Prepare(AStream: TStream): Boolean; override;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts, fpeUtils, fpeExifData;
|
||||
|
||||
resourcestring
|
||||
// Canon
|
||||
rsCanonAELkup = '0:Normal AE,1:Exposure compensation,2:AE lock,'+
|
||||
'3:AE lock + Exposure compensation,4:No AE';
|
||||
{
|
||||
rsCanonAFLkup = '12288:None (MF),12289:Auto-selected,12290:Right,12291:Center,'+
|
||||
'12292:Left';
|
||||
}
|
||||
rsCanonAFLkup = '$2005:Manual AF point selection,$3000:None (MF),' +
|
||||
'$3001:Auto AF point selection,$3002:Right,$3003:Center,$3004:Left,' +
|
||||
'$4001:Auto AF point selection,$4006:Face Detect';
|
||||
rsCanonAutoRotLkup = '0:None,1:Rotate 90 CW,2:Rotate 180,3:Rotate 270 CW';
|
||||
rsCanonBiasLkup = '65472:-2 EV,65484:-1.67 EV,65488:-1.50 EV,65492:-1.33 EV,'+
|
||||
'65504:-1 EV,65516:-0.67 EV,65520:-0.50 EV,65524:-0.33 EV,0:0 EV,'+
|
||||
'12:0.33 EV,16:0.50 EV,20:0.67 EV,32:1 EV,44:1.33 EV,48:1.50 EV,'+
|
||||
'52:1.67 EV,64:2 EV';
|
||||
rsCanonCamTypeLkup = '248:EOS High-end,250:Compact,252:EOS Mid-range,255:DV Camera';
|
||||
rsCanonEasyLkup = '0:Full Auto,1:Manual,2:Landscape,3:Fast Shutter,4:Slow Shutter,'+
|
||||
'5:Night,6:Gray scale,7:Sepia,8:Portrait,9:Sports,10:Macro,11:Black & White,'+
|
||||
'12:Pan Focus,13:Vivid,14:Neutral,15:Flash off,16:Long shutter,'+
|
||||
'17:Super macro,18:Foliage,19:Indoor,20:Fireworks,21:Beach,22:Underwater,'+
|
||||
'23:Snow,24:Kids & Pets,25:Night snapshot,26:Digital macro,27:My colors,'+
|
||||
'28:Movie snap,29:Super macro 2,30:Color accent,31:Color swap,32:Aquarium,'+
|
||||
'33:ISO3200,34:ISO6400,35:Creative light effect,36:Easy,37:Quick shot,'+
|
||||
'38:Creative auto,39:Zoom blur,40:Low light,41:Nostalgic,42:Super vivid,'+
|
||||
'43:Poster effect,44:Face self-timer,45:Smile,46:Wink self-timer,'+
|
||||
'47:Fisheye effect,48:Miniature effect,49:High-speed burst,'+
|
||||
'50:Best image selection,51:High dynamic range,52:Handheld night scene,'+
|
||||
'53:Movie digest,54:Live view control,55:Discreet,56:Blur reduction,'+
|
||||
'57:Monochrome,58:Toy camera effect,59:Scene intelligent auto,'+
|
||||
'60:High-speed burst HQ,61:Smooth skin,62:Soft focus,257:Spotlight,'+
|
||||
'258:Night 2,259:Night+,260:Super night,261:Sunset,263:Night scene,'+
|
||||
'264:Surface,265:Low light 2';
|
||||
rsCanonExposeLkup = '0:Easy shooting,1:Program AE,2:Shutter speed priority AE,'+
|
||||
'3:Aperture priority AE,4:Manual,5:Depth-of-field AE,6:M-Dep,7:Bulb';
|
||||
rsCanonFlashActLkup = '0:Did not fire,1:Fired';
|
||||
rsCanonFlashLkup = '0:Not fired,1:Auto,2:On,3:Red-eye,4:Slow sync,'+
|
||||
'5:Auto+red-eye,6:On+red eye,16:External flash';
|
||||
rsCanonFocalTypeLkup = '1:Fixed,2:Zoom';
|
||||
rsCanonFocTypeLkup = '0:Manual,1:Auto,3:Close-up (macro),8:Locked (pan mode)';
|
||||
rsCanonFocusLkup = '0:One-Shot AF,1:AI Servo AF,2:AI Focus AF,3:Manual focus,'+
|
||||
'4:Single,5:Continuous,6:Manual focus,16:Pan focus,256:AF+MF,'+
|
||||
'512:Movie snap focus,519:Movie servo AF';
|
||||
rsCanonGenLkup = '65535:Low,0:Normal,1:High';
|
||||
rsCanonImgStabLkup = '0:Off,1:On,2:Shoot only,3:Panning,4:Dynamic,256:Off,'+
|
||||
'257:On,258:Shoot only,259:Panning,260:Dynamic';
|
||||
rsCanonISOLkup = '0:Not used,15:auto,16:50,17:100,18:200,19:400';
|
||||
rsCanonMacroLkup = '1:Macro,2:Normal';
|
||||
rsCanonMeterLkup = '0:Default,1:Spot,2:Average,3:Evaluative,4:Partial,'+
|
||||
'5:Center-weighted average';
|
||||
rsCanonPanDirLkup = '0:Left to right,1:Right to left,2:Bottom to top,'+
|
||||
'3:Top to bottom,4:2x2 Matrix (clockwise)';
|
||||
rsCanonQualityLkup = '65535:n/a,1:Economy,2:Normal,3:Fine,4:RAW,5:Superfine,'+
|
||||
'130:Normal Movie,131:Movie (2)';
|
||||
rsCanonRecLkup = '1:JPEG,2:CRW+THM,3:AVI+THM,4:TIF,5:TIF+JPEG,6:CR2,'+
|
||||
'7:CR2+JPEG,9:MOV,10:MP4';
|
||||
rsCanonSizeLkup = '65535:n/a,0:Large,1:Medium,2:Small,4:5 MPixel,5:2 MPixel,'+
|
||||
'6:1.5 MPixel,8:Postcard,9:Widescreen,10:Medium widescreen,14:Small 1,'+
|
||||
'15:Small 2,16:Small 3,128:640x480 movie,129:Medium movie,130:Small movie,'+
|
||||
'137:128x720 movie,142:1920x1080 movie';
|
||||
rsCanonSloShuttLkup = '65535:n/a,0:Off,1:Night scene,2:On,3:None';
|
||||
rsCanonWhiteBalLkup = '0:Auto,1:Daylight,2:Cloudy,3:Tungsten,4:Flourescent,'+
|
||||
'5:Flash,6:Custom,7:Black & white,8:Shade,9:Manual temperature (Kelvin),'+
|
||||
'14:Daylight fluorescent,17:Under water';
|
||||
rsCanonZoomLkup = '0:None,1:2x,2:4x,3:Other';
|
||||
|
||||
// Casio
|
||||
rsCasioAFMode2Lkup = '0:Off,1:Spot,2:Multi,3:Face detection,4:Tracking,5:Intelligent';
|
||||
rsCasioArtMode2Lkup = '0:Normal,8:Silent movie,39:HDR,45:Premium auto,' +
|
||||
'47:Painting,49:Crayon drawing,51:Panorama,52:Art HDR,62:High Speed night shot,'+
|
||||
'64:Monochrome,67:Toy camera,68:Pop art,69:Light tone';
|
||||
rsCasioAutoIso2Lkup = '1:On,2:Off,7:On (high sensitivity),8:On (anti-shake),'+
|
||||
'10:High Speed';
|
||||
rsCasioCCDSensitivityLkup = '64:Normal,125:+1.0,250:+2.0,244:+3.0,80:Normal,'+
|
||||
'100:High';
|
||||
rsCasioColorFilter2Lkup = '0:Off,1:Blue,3:Green,4:Yellow,5:Red,6:Purple,7:Pink';
|
||||
rsCasioColorMode2Lkup = '0:Off,2:Black & White,3:Sepia';
|
||||
rsCasioDigitalZoomLkup = '$10000:Off,$10001:2x Digital zoom,'+
|
||||
'$20000:2x digital zoom,$40000:4x digital zoom';
|
||||
rsCasioDriveMode2Lkup = '0:Single shot,1:Continuous shooting,'+
|
||||
'2:Continuous (2 fps),3:Continuous (3 fps),4:Continuous (4 fps),'+
|
||||
'5:Continuous (5 fps),6:Continuous (6 fps),7:Continuous (7 fps),'+
|
||||
'10:Continuous (10 fps),12:Continuous (12 fps),15:Continuous (15 fps),'+
|
||||
'20:Continuous (20 fps),30:Continuous (30 fps),40:Continuous (40 fps),'+
|
||||
'60:Continuous (60 fps),240:Auto-N';
|
||||
rsCasioEnhancement2Lkup = '0:Off,1:Scenery,3:Green,5:Underwater,9:Flesh tones';
|
||||
rsCasioFlashIntensityLkup = '11:Weak,13:Normal,15:Strong';
|
||||
rsCasioFlashModeLkup = '1:Auto,2:On,3:Off,4:Red-eye reduction';
|
||||
rsCasioFocusingModeLkup = '2:Macro,3:Auto focus,4:Manual focus,5:Infinity';
|
||||
rsCasioFocusMode2Lkup = '0:Normal,1:Macro';
|
||||
rsCasioFocusMode22Lkup = '0:Manual,1:Focus lock,2:Macro,3:Single-area auto focus,'+
|
||||
'5:Infinity,6:Multi-area auto focus,8:Super macro';
|
||||
rsCasioImageSize2Lkup = '0:640 x 480,4:1600 x 1200,5:2048 x 1536,'+
|
||||
'20:2288 x 1712,21:2592 x 1944,22:2304 x 1728,36:3008 x 2008';
|
||||
rsCasioImageStabilization2Lkup = '0:Off,1:On,2:Best shot,3:Movie anti-shake';
|
||||
rsCasioISOSpeed2Lkup = '3 = 50,4:64,6:100,9:200';
|
||||
rsCasioLightingMode2Lkup = '0:Off,1:High dynamic range,5:Shadow enhance low,'+
|
||||
'6:Shadow enhance high';
|
||||
rsCasioPortraitRefiner2Lkup = '0:Off,1:+1,2:+2';
|
||||
rsCasioRecordingModeLkup = '1:Single shutter,2:Panorama,3:Night scene,'+
|
||||
'4:Portrait,5:Landscape';
|
||||
rsCasioRecordMode2Lkup = '2:Program AE,3:Shutter priority,4:Aperture priority,'+
|
||||
'5:Manual,6:Best shot,17:Movie,19:Movie (19),20:YouTube Movie';
|
||||
rsCasioReleaseMode2Lkup = '1:Normal,3:AE Bracketing,11:WB Bracketing,'+
|
||||
'13 = Contrast Bracketing,19:High Speed Burst';
|
||||
rsCasioSharpness2Lkup = '0:Soft,1:Normal,2:Hard';
|
||||
rsCasioSpecialEffectSetting2Lkup = '0:Off,1:Makeup,2:Mist removal,'+
|
||||
'3:Vivid landscape,16:Art shot';
|
||||
rsCasioVideoQuality2Lkup = '1:Standard,3:HD (720p),4:Full HD (1080p),5:Low';
|
||||
rsCasioWhiteBalanceLkup = '1:Auto,2:Tungsten,3:Daylight,4:Fluorescent,'+
|
||||
'5:Shade,129:Manual';
|
||||
rsCasioWhiteBalance2Lkup = '0:Auto,1:Daylight,2:Shade,3:Tungsten,4:Fluorescent,5:Manual';
|
||||
rsCasioWhiteBalance22Lkup = '0:Manual,1:Daylight,2:Cloudy,3:Shade,4:Flash?,'+
|
||||
'6:Fluorescent,9:Tungsten?,10:Tungsten,12:Flash';
|
||||
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
|
||||
procedure BuildCanonTagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0001, 'ExposureInfo1');
|
||||
AddUShortTag(M+$0002, 'Panorama');
|
||||
AddUShortTag(M+$0004, 'ExposureInfo2');
|
||||
AddStringTag(M+$0006, 'ImageType');
|
||||
AddStringTag(M+$0007, 'FirmwareVersion');
|
||||
AddULongTag (M+$0008, 'ImageNumber');
|
||||
AddStringTag(M+$0009, 'OwnerName');
|
||||
AddULongTag (M+$000C, 'CameraSerialNumber');
|
||||
AddUShortTag(M+$000F, 'CustomFunctions');
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Casio Type 1
|
||||
Standard TIFF IFD Data using Casio Type 1 Tags but always uses
|
||||
Motorola (Big-Endian) byte alignment
|
||||
This makernote has no header - the IFD starts immediately
|
||||
Ref.: http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html }
|
||||
procedure BuildCasio1TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0001, 'RecordingMode', 1, '', rsCasioRecordingModeLkup);
|
||||
AddUShortTag(M+$0002, 'Quality', 1, '', rsEconomyNormalFine1);
|
||||
AddUShortTag(M+$0003, 'FocusingMode', 1, '', rsCasioFocusingModeLkup);
|
||||
AddUShortTag(M+$0004, 'FlashMode', 1, '', rsCasioFlashModeLkup);
|
||||
AddUShortTag(M+$0005, 'FlashIntensity', 1, '', rsCasioFlashIntensityLkup);
|
||||
AddULongTag (M+$0006, 'ObjectDistance', 1, '', '', '%d mm');
|
||||
AddUShortTag(M+$0007, 'WhiteBalance', 1, '', rsCasioWhiteBalanceLkup);
|
||||
AddULongTag (M+$000A, 'DigitalZoom', 1, '', rsCasioDigitalZoomLkup);
|
||||
AddUShortTag(M+$000B, 'Sharpness', 1, '', rsNormalSoftHard);
|
||||
AddUShortTag(M+$000C, 'Contrast', 1, '', rsNormalLowHigh);
|
||||
AddUShortTag(M+$000D, 'Saturation', 1, '', rsNormalLowHigh);
|
||||
AddUShortTag(M+$000A, 'DigitalZoom', 1, '', rsCasioDigitalZoomLkup);
|
||||
AddUShortTag(M+$0014, 'CCDSensitivity', 1, '', rsCasioCCDSensitivityLkup);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Case Type 2
|
||||
Header: 6 Bytes "QVC\x00\x00\x00"
|
||||
IFD Data: Standard TIFF IFD Data using Casio Type 2 Tags but always uses
|
||||
Motorola (Big-Endian) Byte Alignment.
|
||||
All EXIF offsets are relative to the start of the TIFF header at the
|
||||
beginning of the EXIF segment
|
||||
Ref.: http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html
|
||||
http://www.exiv2.org/tags-casio.html
|
||||
https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Casio.html#Type2
|
||||
}
|
||||
procedure BuildCasio2TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag (M+$0002, 'PreviewImageSize', 2); // width and height, in pixels
|
||||
AddULongTag (M+$0003, 'PreviewImageLength');
|
||||
AddULongTag (M+$0004, 'PreviewImageStart');
|
||||
AddUShortTag (M+$0008, 'QualityMode', 1, '', rsEconomyNormalFine);
|
||||
AddUShortTag (M+$0009, 'ImageSize', 1, '', rsCasioImageSize2Lkup);
|
||||
AddUShortTag (M+$000D, 'FocusMode', 1, '', rsCasioFocusMode2Lkup);
|
||||
AddUShortTag (M+$0014, 'ISOSpeed', 1, '', rsCasioISOSpeed2Lkup);
|
||||
AddUShortTag (M+$0019, 'WhiteBalance', 1, '', rsCasioWhiteBalance2Lkup);
|
||||
AddURationalTag(M+$001D, 'FocalLength');
|
||||
AddUShortTag (M+$001F, 'Saturation', 1, '', rsLowNormalHigh);
|
||||
AddUShortTag (M+$0020, 'Contrast', 1, '', rsLowNormalHigh);
|
||||
AddUShortTag (M+$0021, 'Sharpness', 1, '', rsCasioSharpness2Lkup);
|
||||
AddBinaryTag (M+$0E00, 'PrintIM');
|
||||
AddBinaryTag (M+$2000, 'PreviewImage');
|
||||
AddStringTag (M+$2001, 'FirwareDate', 18);
|
||||
AddUShortTag (M+$2011, 'WhiteBalanceBias', 2);
|
||||
AddUShortTag (M+$2012, 'WhiteBalance2', 2, '', rsCasioWhiteBalance22Lkup);
|
||||
AddUShortTag (M+$2021, 'AFPointPosition', 4);
|
||||
AddULongTag (M+$2022, 'ObjectDistance');
|
||||
AddUShortTag (M+$2034, 'FlashDistance');
|
||||
AddByteTag (M+$2076, 'SpecialEffectMode', 3); // to do: array lkup - should be: '0 0 0' = Off,'1 0 0' = Makeup,'2 0 0' = Mist Removal,'3 0 0' = Vivid Landscape
|
||||
AddBinaryTag (M+$2089, 'FaceInfo');
|
||||
AddByteTag (M+$211C, 'FacesDetected');
|
||||
AddUShortTag (M+$3000, 'RecordMode', 1, '', rsCasioRecordMode2Lkup);
|
||||
AddUShortTag (M+$3001, 'ReleaseMode', 1, '', rsCasioReleaseMode2Lkup);
|
||||
AddUShortTag (M+$3002, 'Quality', 1, '', rsEconomyNormalFine1);
|
||||
AddUShortTag (M+$3003, 'FocusMode2', 1, '', rsCasioFocusMode2Lkup);
|
||||
AddStringTag (M+$3006, 'HometownCity');
|
||||
AddUShortTag (M+$3007, 'BestShotMode'); // Lkup depends severly on camera model
|
||||
AddUShortTag (M+$3008, 'AutoISO', 1, '', rsCasioAutoIso2Lkup);
|
||||
AddUShortTag (M+$3009, 'AFMode', 1, '', rsCasioAFMode2Lkup);
|
||||
AddBinaryTag (M+$3011, 'Sharpness2');
|
||||
AddBinaryTag (M+$3012, 'Contrast2');
|
||||
AddBinaryTag (M+$3013, 'Saturation2');
|
||||
AddUShortTag (M+$3014, 'ISO');
|
||||
AddUShortTag (M+$3015, 'ColorMode', 1, '', rsCasioColorMode2Lkup);
|
||||
AddUShortTag (M+$3016, 'Enhancement', 1, '', rsCasioEnhancement2Lkup);
|
||||
AddUShortTag (M+$3017, 'ColorFilter', 1, '', rsCasioColorFilter2Lkup);
|
||||
AddUShortTag (M+$301B, 'ArtMode', 1, '', rsCasioArtMode2Lkup);
|
||||
AddUShortTag (M+$301C, 'SequenceNumber');
|
||||
AddUShortTag (M+$301D, 'BracketSequence', 2);
|
||||
AddUShortTag (M+$3020, 'ImageStabilization', 1, '', rsCasioImageStabilization2Lkup);
|
||||
AddUShortTag (M+$302A, 'LightingMode', 1, '', rsCasioLightingMode2Lkup);
|
||||
AddUShortTag (M+$302B, 'PortraitRefiner', 1, '', rsCasioPortraitRefiner2Lkup);
|
||||
AddUShortTag (M+$3030, 'SpecialEffectLevel');
|
||||
AddUShortTag (M+$3031, 'SpecialEffectSetting', 1, '', rsCasioSpecialEffectSetting2Lkup);
|
||||
AddUShortTag (M+$3103, 'DriveMode', 1, '', rsCasioDriveMode2Lkup);
|
||||
AddBinaryTag (M+$310B, 'ArtModeParameters', 3);
|
||||
AddUShortTag (M+$4001, 'CaptureFrameRate');
|
||||
AddUShortTag (M+$4003, 'VideoQuality', 1, '', rsCasioVideoQuality2Lkup);
|
||||
|
||||
// to do...
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TCanonMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
function TCanonMakerNoteReader.AddTag(AStream: TStream;
|
||||
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
|
||||
var
|
||||
tagDef: TTagDef;
|
||||
w: array of Word;
|
||||
n,i: Integer;
|
||||
t: TTagID;
|
||||
begin
|
||||
Result := -1;
|
||||
|
||||
tagDef := FindTagDef(AIFDRecord.TagID or AParent);
|
||||
if (tagDef = nil) then
|
||||
exit;
|
||||
|
||||
Result := inherited AddTag(AStream, AIFDRecord, AData, AParent);
|
||||
|
||||
// We only handle 16-bit integer types here for further processing
|
||||
if not (tagDef.TagType in [ttUInt16, ttSInt16]) then
|
||||
exit;
|
||||
|
||||
// Put binary data into a word array and fix endianness
|
||||
n := Length(AData) div TagElementSize[ord(tagDef.TagType)];
|
||||
if n = 0 then
|
||||
exit;
|
||||
|
||||
if FBigEndian then
|
||||
for i:=0 to n-1 do AData[i] := BEtoN(AData[i])
|
||||
else
|
||||
for i:=0 to n-1 do AData[i] := LEtoN(AData[i]);
|
||||
SetLength(w, n);
|
||||
Move(AData[0], w[0], Length(AData));
|
||||
|
||||
// This is a special treatment of array tags which will be added as
|
||||
// separate "MakerNote" tags.
|
||||
t := AIFDRecord.TagID;
|
||||
case AIFDRecord.TagID of
|
||||
1: // Exposure Info 1
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag( 1, t, 'Macro mode', w[1], rsCanonMacroLkup);
|
||||
if n = 2 then exit;
|
||||
AddMakerNoteTag( 2, t, 'Self-timer', w[2]/10, '%2:.1f s');
|
||||
if n = 3 then exit;
|
||||
AddMakerNoteTag( 3, t, 'Quality', w[3], rsCanonQualityLkup);
|
||||
if n = 4 then exit;
|
||||
AddMakerNoteTag( 4, t, 'Flash mode', w[4], rsCanonFlashLkup);
|
||||
if n = 5 then exit;
|
||||
AddMakerNoteTag( 5, t, 'Drive mode', w[5], rsSingleContinuous);
|
||||
if n = 7 then exit;
|
||||
AddMakerNoteTag( 7, t, 'Focus mode', w[7], rsCanonFocusLkup);
|
||||
if n = 9 then exit;
|
||||
AddMakerNoteTag( 9, t, 'Record mode', w[9], rsCanonRecLkup);
|
||||
if n = 10 then exit;
|
||||
AddMakerNoteTag(10, t, 'Image size', w[10], rsCanonSizeLkup);
|
||||
if n = 11 then exit;
|
||||
AddMakerNoteTag(11, t, 'Easy shoot', w[11], rsCanonEasyLkup);
|
||||
if n = 12 then exit;
|
||||
AddMakerNoteTag(12, t, 'Digital zoom', w[12], rsCanonZoomLkup);
|
||||
if n = 13 then exit;
|
||||
AddMakerNoteTag(13, t, 'Contrast', w[13], rsCanonGenLkup);
|
||||
if n = 14 then exit;
|
||||
AddMakerNoteTag(14, t, 'Saturation', w[14], rsCanonGenLkup);
|
||||
if n = 15 then exit;
|
||||
AddMakerNoteTag(15, t, 'Sharpness', w[15], rsCanonGenLkup);
|
||||
if n = 16 then exit;
|
||||
AddMakerNoteTag(16, t, 'CCD ISO', w[16], rsCanonISOLkup);
|
||||
if n = 17 then exit;
|
||||
AddMakerNoteTag(17, t, 'Metering mode', w[17], rsCanonMeterLkup);
|
||||
if n = 18 then exit;
|
||||
AddMakerNoteTag(18, t, 'Focus type', w[18], rsCanonFocTypeLkup);
|
||||
if n = 19 then exit;
|
||||
AddMakerNoteTag(19, t, 'AFPoint', w[19], rsCanonAFLkup);
|
||||
if n = 20 then exit;
|
||||
AddMakerNoteTag(20, t, 'Exposure mode', w[20], rsCanonExposeLkup);
|
||||
if n = 24 then exit;
|
||||
AddMakerNoteTag(24, t, 'Long focal', w[24]);
|
||||
if n = 25 then exit;
|
||||
AddMakerNoteTag(25, t, 'Short focal', w[25]);
|
||||
if n = 26 then exit;
|
||||
AddMakerNoteTag(26, t, 'Focal units', w[26]);
|
||||
if n = 28 then exit;
|
||||
AddMakerNoteTag(28, t, 'Flash activity', w[28], rsCanonFlashActLkup);
|
||||
if n = 29 then exit;
|
||||
AddMakerNoteTag(29, t, 'Flash details', w[29]);
|
||||
if n = 32 then exit;
|
||||
AddMakerNoteTag(32, t, 'Focus mode', w[32], rsSingleContinuous);
|
||||
if n = 33 then exit;
|
||||
AddMakerNoteTag(33, t, 'AESetting', w[33], rsCanonAELkup);
|
||||
if n = 34 then exit;
|
||||
AddMakerNoteTag(34, t, 'Image stabilization', w[34], rsSingleContinuous);
|
||||
end;
|
||||
2: // Focal length
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag(0, t, 'FocalType', w[0], rsCanonFocalTypeLkup);
|
||||
if n = 1 then exit;
|
||||
AddMakerNoteTag(1, t, 'FocalLength', w[1]);
|
||||
end;
|
||||
4: // ExposureInfo2
|
||||
with FImgInfo.ExifData do begin
|
||||
if n = 7 then exit;
|
||||
AddMakerNoteTag( 7, t, 'WhiteBalance', w[7], rsCanonWhiteBalLkup);
|
||||
if n = 8 then exit;
|
||||
AddMakerNoteTag( 8, t, 'Slow shutter', w[8], rsCanonSloShuttLkup);
|
||||
if n = 9 then exit;
|
||||
AddMakerNoteTag( 9, t, 'SequenceNumber', w[9]);
|
||||
if n = 11 then exit;
|
||||
AddMakerNoteTag(11, t, 'OpticalZoomStep', w[11]);
|
||||
if n = 12 then exit;
|
||||
AddMakerNoteTag(12, t, 'Camera temperature', w[12]);
|
||||
if n = 14 then exit;
|
||||
AddMakerNoteTag(14, t, 'AFPoint', w[14]);
|
||||
if n = 15 then exit;
|
||||
AddMakerNoteTag(15, t, 'FlashBias', w[15], rsCanonBiasLkup);
|
||||
if n = 19 then exit;
|
||||
AddMakerNoteTag(19, t, 'Distance', w[19]);
|
||||
if n = 21 then exit;
|
||||
AddMakerNoteTag(21, t, 'FNumber', w[21]);
|
||||
if n = 22 then exit;
|
||||
AddMakerNoteTag(22, t, 'Exposure time', w[22]);
|
||||
if n = 23 then exit;
|
||||
AddMakerNoteTag(23, t, 'Measured EV2', w[23]);
|
||||
if n = 24 then exit;
|
||||
AddMakerNoteTag(24, t, 'Bulb duration', w[24]);
|
||||
if n = 26 then exit;
|
||||
AddMakerNoteTag(26, t, 'Camera type', w[26], rsCanonCamTypeLkup);
|
||||
if n = 27 then exit;
|
||||
AddMakerNoteTag(27, t, 'Auto rotation', w[27], rsCanonAutoRotLkup);
|
||||
if n = 28 then exit;
|
||||
AddMakerNoteTag(28, t, 'NDFilter', w[28], rsCanonGenLkup);
|
||||
end;
|
||||
5: // Panorma
|
||||
with FImgInfo.ExifData do begin
|
||||
if n = 2 then exit;
|
||||
AddMakerNoteTag(2, t, 'Panorama frame number', w[2]);
|
||||
if n = 5 then exit;
|
||||
AddMakerNoteTag(5, t, 'Panorama direction', w[5], rsCanonPanDirLkup);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCanonMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
if Uppercase(FMake) = 'CANON' then
|
||||
BuildCanonTagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TCasioMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
function TCasioMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
var
|
||||
p: Int64;
|
||||
hdr: Array[0..5] of ansichar;
|
||||
begin
|
||||
Result := false;
|
||||
|
||||
p := AStream.Position;
|
||||
AStream.Read({%H-}hdr[0], SizeOf(hdr));
|
||||
if (hdr[0] = 'Q') and (hdr[1] = 'V') and (hdr[2] = 'C') and
|
||||
(hdr[3] = #0) and (hdr[4] = #0) and (hdr[5] = #0)
|
||||
then begin
|
||||
FVersion := 2;
|
||||
BuildCasio2TagDefs(FTagDefs);
|
||||
AStream.Position := p + SizeOf(hdr);
|
||||
end else
|
||||
begin
|
||||
FVersion := 1;
|
||||
BuildCasio1TagDefs(FTagDefs);
|
||||
AStream.Position := p;
|
||||
end;
|
||||
|
||||
FBigEndian := true;
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
procedure TCasioMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
if Uppercase(FMake) = 'CASIO' then
|
||||
BuildCasio1TagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TCanonMakerNoteReader, 'Canon;Casio', '');
|
||||
|
||||
end.
|
||||
|
50
components/fpexif/fpemakernoteepson.pas
Normal file
50
components/fpexif/fpemakernoteepson.pas
Normal file
@ -0,0 +1,50 @@
|
||||
unit fpeMakerNoteEpson;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TEpsonMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
procedure BuildEpsonTagDefs(AList: TTagDefList);
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0200, 'SpecialMode');
|
||||
AddUShortTag(M+$0201, 'JpegQuality');
|
||||
AddUShortTag(M+$0202, 'Macro');
|
||||
AddUShortTag(M+$0204, 'DigitalZoom');
|
||||
AddUShortTag(M+$0209, 'CameraID');
|
||||
AddStringTag(M+$020A, 'Comments');
|
||||
AddUShortTag(M+$020B, 'Width');
|
||||
AddUShortTag(M+$020C, 'Height');
|
||||
AddUShortTag(M+$020D, 'SoftRelease');
|
||||
end;
|
||||
end;
|
||||
|
||||
//==============================================================================
|
||||
// TEpsonMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
procedure TEpsonMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
BuildEpsonTagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TEpsonMakerNoteReader, 'Epson', '');
|
||||
|
||||
end.
|
||||
|
142
components/fpexif/fpemakernotefuji.pas
Normal file
142
components/fpexif/fpemakernotefuji.pas
Normal file
@ -0,0 +1,142 @@
|
||||
unit fpeMakerNoteFuji;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TFujiMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts;
|
||||
|
||||
resourcestring
|
||||
rsFujiSharpnessLkup = '0:-4 (softest),1:-3 (very soft),2:-2 (soft),3:0 (normal),' +
|
||||
'4:+2 (hard),5:+3 (very hard),6:+4 (hardest),130:-1 (medium soft),'+
|
||||
'132:+1 (medium hard),32768:Film Simulation,65535:n/a';
|
||||
rsFujiWhiteBalLkup = '0:Auto,256:Daylight,512:Cloudy,768:Daylight Fluorescent,' +
|
||||
'769:Day White Fluorescent,770:White Fluorescent,771:Warm White Fluorescent,'+
|
||||
'772:Living Room Warm White Fluorescent,1024:Incandescent,1280:Flash,'+
|
||||
'1536:Underwater,3840:Custom,3841:Custom2,3842:Custom3,3843:Custom4,'+
|
||||
'3844:Custom5,4080:Kelvin';
|
||||
rsFujiSaturationLkup = '0:0 (normal),128:+1 (medium high),192:+3 (very high),'+
|
||||
'224:+4 (highest),256:+2 (high),384:-1 (medium low),512:Low,768:None (B&W),'+
|
||||
'769:B&W Red Filter,770:B&W Yellow Filter,771:B&W Green Filter,'+
|
||||
'784:B&W Sepia,1024:-2 (low),1216:-3 (very low),1248:-4 (lowest),'+
|
||||
'1280:Acros,1281:Acros Red Filter,1282:Acros Yellow Filter,'+
|
||||
'1283:Acros Green Filter,32768:Film Simulation';
|
||||
rsFujiContrastLkup = '0:Normal,128:Medium High,256:High,384:Medium Low,'+
|
||||
'512:Low,32768:Film Simulation';
|
||||
rsFujiContrastLkup1 = '0:Normal,256:High,768:Low';
|
||||
rsFujiNoiseReductionLkup = '64:Low,128:Normal,256:n/a';
|
||||
rsFujiHighIsoNoiseReductionLkup = '0:0 (normal),256:+2 (strong),'+
|
||||
'384:+1 (medium strong),448:+3 (very strong),480:+4 (strongest)'+
|
||||
'512:-2 (weak),640:-1 (medium weak),704:-3 (very weak),736:-4 (weakest)';
|
||||
rsFujiFlashModeLkup = '0:Auto,1:On,2:Off,3:Red-eye reduction,4:External,'+
|
||||
'16:Commander,32768:Not Attached,33056:TTL,38976:Manual,39040:Multi-flash,'+
|
||||
'43296:1st Curtain (front),51488:2nd Curtain (rear),59680:High Speed Sync (HSS)';
|
||||
rsFujiPictureModeLkup = '0:Auto,1:Portrait,2:Landscape,3:Macro,4:Sports,'+
|
||||
'5:Night Scene,6:Program AE,7:Natural Light,8:Anti-blur,9:Beach & Snow,'+
|
||||
'10:Sunset,11:Museum,12:Party,13:Flower,14:Text,15:Natural Light & Flash,'+
|
||||
'16:Beach,17:Snow,18:Fireworks,19:Underwater,20:Portrait with Skin Correction,'+
|
||||
'22:Panorama,23:Night (tripod),24:Pro Low-light,25:Pro Focus,26:Portrait 2,'+
|
||||
'27:Dog Face Detection,28:Cat Face Detection,64:Advanced Filter,'+
|
||||
'256:Aperture-priority AE,512:Shutter speed priority AE,768:Manual';
|
||||
rsFujiEXRModeLkup = '128:HR (High Resolution),512:SN (Signal to Noise priority),'+
|
||||
'768:DR (Dynamic Range priority)';
|
||||
rsFujiShadowHighlightLkup = '-64:+4 (hardest),-48:+3 (very hard),'+
|
||||
'-32:+2 (hard),-16:+1 (medium hard)';
|
||||
rsFujiShutterTypeLkup = '0:Mechanical,1:Electronic';
|
||||
rsFujiAutoBracketingLkup = '0:Off,1:On,2:No flash & flash';
|
||||
rsFujiPanoramaDirLkup = '1:Right,2:Up,3:Left,4:Down';
|
||||
rsFujiAdvancedFilterLkup = '65536:Pop Color,131072:Hi Key,196608:Toy Camera,'+
|
||||
'262144:Miniature, 327680:Dynamic Tone,327681:Partial Color Red,'+
|
||||
'327682:Partial Color Yellow,327683:Partial Color Green,'+
|
||||
'327684:Partial Color Blue,327685:Partial Color Orange,'+
|
||||
'327686:Partial Color Purple,458752:Soft Focus,589824:Low Key';
|
||||
rsFujiColorModeLkup = '0:Standard,16:Chrome,48:B & W';
|
||||
rsFujiBlurWarningLkup = '0:None,1:Blur Warning';
|
||||
rsFujiFocusWarningLkup = '0:Good,1:Out of focus';
|
||||
rsFujiExposureWarningLkup = '0:Good,1:Bad exposure';
|
||||
rsFujiDynamicRangeLkup = '1:Standard,3:Wide';
|
||||
rsFujiSceneRecognLkup = '0:Unrecognized,256:Portrait Image,512:Landscape Image,'+
|
||||
'768:Night Scene,1024:Macro';
|
||||
|
||||
procedure BuildFujiTagDefs(AList: TTagDefList);
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0000, 'Version');
|
||||
AddStringTag (M+$1000, 'Quality');
|
||||
AddUShortTag (M+$1001, 'Sharpness', 1, '', rsFujiSharpnessLkup);
|
||||
AddUShortTag (M+$1002, 'WhiteBalance', 1, '', rsFujiWhiteBalLkup);
|
||||
AddUShortTag (M+$1003, 'Saturation', 1, '', rsFujiSaturationLkup);
|
||||
AddUShortTag (M+$1004, 'Contrast', 1, '', rsFujiContrastLkup);
|
||||
AddUShortTag (M+$1005, 'ColorTemperature');
|
||||
AddUShortTag (M+$1006, 'Contrast', 1, '', rsFujiContrastLkup1);
|
||||
AddURationalTag(M+$100A, 'WhiteBalanceFineTune');
|
||||
AddUShortTag (M+$100B, 'NoiseReduction', 1, '', rsFujiNoiseReductionLkup);
|
||||
AddUShortTag (M+$100E, 'HighISONoiseReduction', 1, '', rsFujiHighIsoNoiseReductionLkup);
|
||||
AddUShortTag (M+$1010, 'FlashMode', 1, '', rsFujiFlashModeLkup);
|
||||
AddURationalTag(M+$1011, 'FlashStrength');
|
||||
AddUShortTag (M+$1020, 'Macro', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$1021, 'FocusMode', 1, '', rsAutoManual);
|
||||
AddUShortTag (M+$1030, 'SlowSync', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$1031, 'PictureMode', 1, '', rsFujiPictureModeLkup);
|
||||
AddUShortTag (M+$1032, 'ExposureCount');
|
||||
AddUShortTag (M+$1033, 'EXRAuto', 1, '', rsAutoManual);
|
||||
AddUShortTag (M+$1034, 'EXRMode', 1, '', rsFujiEXRModeLkup);
|
||||
AddSLongTag (M+$1040, 'ShadowTone', 1, '', rsFujiShadowHighlightLkup);
|
||||
AddSLongTag (M+$1041, 'HighlightTone', 1, '', rsFujiShadowHighlightLkup);
|
||||
AddULongTag (M+$1044, 'DigitalZoom');
|
||||
AddUShortTag (M+$1050, 'ShutterType', 1, '', rsFujiShutterTypeLkup);
|
||||
AddUShortTag (M+$1100, 'AutoBracketing', 1, '', rsFujiAutoBracketingLkup);
|
||||
AddUShortTag (M+$1101, 'SequenceNumber');
|
||||
AddUShortTag (M+$1153, 'PanoramaAngle');
|
||||
AddUShortTag (M+$1154, 'PanoramaDirection', 1, '', rsFujiPanoramaDirLkup);
|
||||
AddULongTag (M+$1201, 'AdvancedFilter', 1, '', rsFujiAdvancedFilterLkup);
|
||||
AddUShortTag (M+$1210, 'ColorMode', 1, '', rsFujiColorModeLkup);
|
||||
AddUShortTag (M+$1300, 'BlurWarning', 1, '', rsFujiBlurWarningLkup);
|
||||
AddUShortTag (M+$1301, 'FocusWarning', 1, '', rsFujiFocusWarningLkup);
|
||||
AddUShortTag (M+$1302, 'ExposureWarning', 1, '', rsFujiExposureWarningLkup);
|
||||
AddUShortTag (M+$1400, 'DynamicRange', 1, '', rsFujiDynamicRangeLkup);
|
||||
AddURationalTag(M+$1404, 'MinFocalLength');
|
||||
AddURationalTag(M+$1405, 'MaxFocalLength');
|
||||
AddURationalTag(M+$1406, 'MaxApertureAtMinFocal');
|
||||
AddURationalTag(M+$1407, 'MaxApertureAtMaxFocal');
|
||||
AddUShortTag (M+$140B, 'AutoDynamicRange');
|
||||
AddUShortTag (M+$1422, 'ImageStabilization', 3);
|
||||
AddUShortTag (M+$1425, 'SceneRecognition', 1, '', rsFujiSceneRecognLkup);
|
||||
AddUShortTag (M+$1431, 'Rating');
|
||||
AddStringTag (M+$8000, 'FileSource');
|
||||
AddULongTag (M+$8002, 'OrderNumber');
|
||||
AddUShortTag (M+$8003, 'FrameNumber');
|
||||
end;
|
||||
end;
|
||||
|
||||
//==============================================================================
|
||||
// TFujiMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
procedure TFujiMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
BuildFujiTagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TFujiMakerNoteReader, 'Fuji', '');
|
||||
|
||||
end.
|
||||
|
243
components/fpexif/fpemakernoteminolta.pas
Normal file
243
components/fpexif/fpemakernoteminolta.pas
Normal file
@ -0,0 +1,243 @@
|
||||
unit fpeMakerNoteMinolta;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeGlobal, fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TMinoltaMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
function AddTag(AStream: TStream; const AIFDRecord: TIFDRecord;
|
||||
const AData: TBytes; AParent: TTagID): Integer; override;
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts, fpeUtils, fpeExifData;
|
||||
|
||||
resourcestring
|
||||
// Minolta
|
||||
rsMinoltaBracketStepLkup = '0:1/3 EV,1:2/3 EV,2:1 EV';
|
||||
rsMinoltaColorModeLkup = '0:Natural color,1:Black & White,2:Vivid color,'+
|
||||
'3:Solarization,4:Adobe RGB,5:Sepia,9:Natural,12:Portrait,13:Natural sRGB,'+
|
||||
'14:Natural+ sRGB,15:Landscape,16:Evening,17:Night Scene,18:Night Portrait,'+
|
||||
'132:Embed Adobe RGB';
|
||||
rsMinoltaColorProfileLkup = '0:Not embedded,1:Embedded';
|
||||
rsMinoltaDataImprintLkup = '0;None,1:YYYY/MM/DD,2:MM/DD/HH:MM,3:Text,4:Text + ID#';
|
||||
rsMinoltaDECPositionLkup = '0:Exposure,1:Contrast,2:Saturation,3:Filter';
|
||||
rsMinoltaDigitalZoomLkup = '0:Off,1:Electronic magnification,2:2x';
|
||||
rsMinoltaDriveModeLkup = '0:Single,1:Continuous,2:Self-timer,4:Bracketing,'+
|
||||
'5:Interval,6:UHS continuous,7:HS continuous';
|
||||
rsMinoltaExposureModeLkup = '0:Program,1:Aperture priority,2:Shutter priority,3:Manual';
|
||||
rsMinoltaFocusAreaLkup = '0:Wide Focus (normal),1:Spot Focus';
|
||||
rsMinoltaFlashMeteringLkup = '0:ADI (Advanced Distance Integration),1:Pre-flash TTL,2:Manual flash control';
|
||||
rsMinoltaFlashModeLkup = '0:Fill flash,1:Red-eye reduction,2:Rear flash sync,3:Wireless,4:Off?';
|
||||
rsMinoltaFocusModeLkup = '0:AF,1:MF';
|
||||
rsMinoltaFolderNameLkup = '0:Standard Form,1:Data Form';
|
||||
rsMinoltaImageSizeLkup = '1:1600x1200,2:1280x960,3:640x480,5:2560x1920,6:2272x1704,7:2048x1536';
|
||||
rsMinoltaImageSizeLkup1 = '0:Full,1:1600x1200,2:1280x960,3:640x480,6:2080x1560,7:2560x1920,8;3264x2176';
|
||||
rsMinoltaImageStabLkup = '1:Off,5:On';
|
||||
rsMinoltaInternalFlashLkup = '0:No,1:Fired';
|
||||
rsMinoltaIntervalModeLkup = '0:Still image,1:Time-lapse movie';
|
||||
rsMinoltaIsoSettingLkup = '0:100,1:200,2:400,3:800,4:Auto,5:64';
|
||||
rsMinoltaMeteringModeLkup = '0:Multi-segment,1:Center-weighted average,2:Spot';
|
||||
rsMinoltaModelIDLkup = '0:DiMAGE 7/X1/X21 or X31,1:DiMAGE 5,2:DiMAGE S304,'+
|
||||
'3:DiMAGE S404,4:DiMAGE 7i,5:DiMAGE 7Hi,6:DiMAGE A1,7:DiMAGE A2 or S414';
|
||||
rsMinoltaQualityLkup = '0:Raw,1:Super Fine,2:Fine,3:Standard,4:Economy,5:Extra fine';
|
||||
rsMinoltaSceneModeLkup = '0:Standard,1:Portrait,2:Text,3:Night Scene,'+
|
||||
'4:Sunset,5:Sports,6:Landscape,7:Night Portrait,8:Macro,9:Super Macro,'+
|
||||
'16:Auto,17:Night View/Portrait,18:Sweep Panorama,19:Handheld Night Shot,'+
|
||||
'20:Anti Motion Blur,21:Cont. Priority AE,22:Auto+,23:3D Sweep Panorama,'+
|
||||
'24:Superior Auto,25:High Sensitivity,26:Fireworks,27:Food,28:Pet,33:HDR,'+
|
||||
'65535:n/a';
|
||||
rsMinoltaSharpnessLkup = '0:Hard,1:Normal,2:Soft';
|
||||
rsMinoltaSubjectProgramLkup = '0:None,1:Portrait,2:Text,3:Night portrait,4:Sunset,5:Sports action';
|
||||
rsMinoltaTeleconverterLkup = '$0:None,$4:Minolta/Sony AF 1.4x APO (D) (0x04),'+
|
||||
'$5:Minolta/Sony AF 2x APO (D) (0x05),$48 = Minolta/Sony AF 2x APO (D),'+
|
||||
'$50:Minolta AF 2x APO II,$60:Minolta AF 2x APO,$88:Minolta/Sony AF 1.4x APO (D),'+
|
||||
'$90 = Minolta AF 1.4x APO II,$A0 = Minolta AF 1.4x APO';
|
||||
rsMinoltaWhiteBalanceLkup = '$00:Auto,$01:Color Temperature/Color Filter,$10:Daylight,'+
|
||||
'$20:Cloudy,$30:Shade,$40:Tungsten,$50:Flash,$60:Fluorescent,$70:Custom';
|
||||
rsMinoltaWideFocusZoneLkup = '0:No zone,1:Center zone (horizontal orientation),'+
|
||||
'2:Center zone (vertical orientation),3:Left zone,4:Right zone';
|
||||
rsMinoltaZoneMatchingLkup = '0:ISO Setting Used,1:High Key,2:Low Key';
|
||||
|
||||
{ The Minolta MakerNote can be quite long, about 12 kB. In the beginning
|
||||
of this tag there is a normal tag directory in usual format.
|
||||
References:
|
||||
- http://www.dalibor.cz/software/minolta-makernote
|
||||
- https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html }
|
||||
procedure BuildMinoltaTagDefs(AList: TTagDefList);
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
{ This tag stores the string 'MLT0', not zero-terminated, as an identifier }
|
||||
AddBinaryTag (M+$0000, 'Version', 4, '', '', '', TVersionTag);
|
||||
|
||||
{ Stores all settings which were in effect when taking the picture.
|
||||
Details depend on camera. }
|
||||
AddBinaryTag (M+$0001, 'MinoltaCameraSettingsOld'); // Camera D5, D7, S304, S404
|
||||
AddBinaryTag (M+$0003, 'MinoltaCameraSettings'); // Camera D7u, D7i, D7Hi
|
||||
|
||||
// this is the size of the JPEG (compressed) or TIFF or RAW file.
|
||||
AddULongTag (M+$0040, 'CompressedImageSize');
|
||||
|
||||
{ Stores the thumbnail image (640×480). It is in normal JFIF format but the
|
||||
first byte should be changed to 0xFF. Beware! Sometimes the thumbnail
|
||||
is not stored in the file and this tag points beyond the end of the file. }
|
||||
AddBinaryTag (M+$0081, 'ReviewImage');
|
||||
|
||||
{ The cameras D7u, D7i and D7Hi no longer store the thumbnail inside the tag.
|
||||
It has instead two tags describing the position of the thumbnail in the
|
||||
file and its size }
|
||||
AddULongTag (M+$0088, 'PreviewImageStart');
|
||||
AddULongTag (M+$0089, 'PreviewImageLength');
|
||||
|
||||
AddULongTag (M+$0100, 'SceneMode', 1, '', rsMinoltaSceneModeLkup);
|
||||
AddULongTag (M+$0101, 'ColorMode', 1, '', rsMinoltaColorModeLkup);
|
||||
AddULongtag (M+$0102, 'Quality', 1, '', rsMinoltaQualityLkup);
|
||||
AddULongTag (M+$0103, 'ImageSize', 1, '', rsMinoltaImageSizeLkup);
|
||||
AddSRationalTag(M+$0104, 'FlashExposureComp');
|
||||
AddULongTag (M+$0105, 'TeleConverter', 1, '', rsMinoltaTeleconverterLkup);
|
||||
AddULongTag (M+$0107, 'ImageStabilization', 1, '', rsMinoltaImageStabLkup);
|
||||
AddULongTag (M+$0109, 'RawAndJpegRecording', 1, '', rsOffOn);
|
||||
AddULongTag (M+$010A, 'ZoneMatching', 1, '', rsMinoltaZoneMatchingLkup);
|
||||
AddULongTag (M+$010B, 'ColorTemperature', 1);
|
||||
AddULongTag (M+$010C, 'LensType', 1);
|
||||
AddSLongTag (M+$0111, 'ColorCompensationFilter', 1);
|
||||
AddULongTag (M+$0112, 'WhiteBalanceFileTune', 1);
|
||||
AddULongTag (M+$0113, 'ImageStabilization', 1, '', rsOffOn);
|
||||
AddULongTag (M+$0115, 'WhiteBalance', 1, '', rsMinoltaWhiteBalanceLkup);
|
||||
AddBinaryTag (M+$0E00, 'PrintPIM');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TMinoltaMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
function TMinoltaMakerNoteReader.AddTag(AStream: TStream;
|
||||
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
|
||||
var
|
||||
tagDef: TTagDef;
|
||||
v: array of DWord;
|
||||
n, i: Integer;
|
||||
t: TTagID;
|
||||
d: Integer;
|
||||
isDiMAGE7Hi: Boolean;
|
||||
//p: PByte;
|
||||
begin
|
||||
Result := -1;
|
||||
|
||||
tagDef := FindTagDef(AIFDRecord.TagID or AParent);
|
||||
if (tagDef = nil) then
|
||||
exit;
|
||||
|
||||
Result := inherited AddTag(AStream, AIFDRecord, AData, AParent);
|
||||
|
||||
// This is a special treatment of array tags which will be added as
|
||||
// separate "MakerNote" tags.
|
||||
// Ref: https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html#CameraSettings
|
||||
t := AIFDRecord.TagID;
|
||||
case AIFDRecord.TagID of
|
||||
$0001,
|
||||
$0003: // Minolta camera settings tags
|
||||
// Contains an array of ULong values encoded in big-endian style,
|
||||
// regardless of the byte order in the picture (i.e., even if the
|
||||
// JPEG or TIFF itself is little-endian).
|
||||
begin
|
||||
// Put binary data into a DWord array and fix endianness
|
||||
// ASSUMING HERE THAT DATA ARE ULONG HERE!
|
||||
n := Length(AData) div TagElementSize[ord(ttUInt32)];
|
||||
SetLength(v, n);
|
||||
Move(AData[0], v[0], Length(AData));
|
||||
for i:=0 to n-1 do
|
||||
v[i] := BEtoN(v[i]);
|
||||
// Fix problem with DiMAGE7Hi (http://www.dalibor.cz/software/minolta-makernote)
|
||||
isDiMAGE7Hi := FModel = 'DiMAGE7Hi';
|
||||
if isDiMAGE7Hi then d := 1 else d := 0;
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteTag( 1, t, 'Exposure mode', v[1], rsMinoltaExposureModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag( 2, t, 'Flash mode', v[2], rsMinoltaFlashModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag( 3, t, 'White balance', v[3], '', '', ttUInt32);
|
||||
AddMakerNoteTag( 4, t, 'Minolta image size', v[4], rsMinoltaImageSizeLkup1, '', ttUInt32);
|
||||
AddMakerNoteTag( 5, t, 'Minolta quality', v[5], rsMinoltaQualityLkup, '', ttUInt32);
|
||||
AddMakerNoteTag( 6, t, 'Drive mode', v[6], rsMinoltaDriveModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag( 7, t, 'Metering mode', v[7], rsMinoltaMeteringModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag( 8, t, 'ISO', v[8], '', '', ttUInt32);
|
||||
AddMakerNoteTag( 9, t, 'Exposure time', v[9], '', '', ttUInt32);
|
||||
AddMakerNoteTag(10, t, 'F number', v[10], '', '', ttUInt32);
|
||||
AddMakerNoteTag(11, t, 'Macro mode', v[11], rsOffOn, '', ttUInt32);
|
||||
AddMakerNoteTag(12, t, 'Digital zoom', v[12], rsMinoltaDigitalZoomLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(13, t, 'Exposure compensation', v[13], '', '', ttUInt32);
|
||||
AddMakerNoteTag(14, t, 'Bracket step', v[14], rsMinoltaBracketStepLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(16, t, 'Interval length', v[16], '', '', ttUInt32);
|
||||
AddMakerNoteTag(17, t, 'Interval number', v[17], '', '', ttUInt32);
|
||||
AddMakerNoteTag(18, t, 'Focal length', v[18], '', '', ttUInt32); // crashes
|
||||
AddMakerNoteTag(19, t, 'Focus distance', v[19], '', '', ttUInt32);
|
||||
AddMakerNoteTag(20, t, 'Flash fired', v[20], rsNoYes, '', ttUInt32);
|
||||
AddMakerNoteTag(21, t, 'Minolta date', v[21], '', '', ttUInt32);
|
||||
AddMakerNoteTag(22, t, 'Minolta time', v[22], '', '', ttUInt32);
|
||||
AddMakerNoteTag(23, t, 'Max aperture', v[23], '', '', ttUInt32);
|
||||
AddMakerNoteTag(26, t, 'File number memory', v[26], rsOffOn, '', ttUInt32);
|
||||
AddMakerNoteTag(27, t, 'Last file number', v[27], '', '', ttUInt32);
|
||||
AddMakerNoteTag(28, t, 'Color balance red', v[28], '', '', ttUInt32);
|
||||
AddMakerNoteTag(29, t, 'Color balance green', v[29], '', '', ttUInt32);
|
||||
AddMakerNoteTag(30, t, 'Color balance blue', v[30], '', '', ttUInt32);
|
||||
AddMakerNoteTag(31, t, 'Saturation', v[31], '', '', ttUInt32);
|
||||
AddMakerNoteTag(32, t, 'Contrast', v[32], '', '', ttUInt32);
|
||||
AddMakerNoteTag(33, t, 'Sharpness', v[33], rsMinoltaSharpnessLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(34, t, 'Subject program', v[34], rsMinoltaSubjectProgramLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(35, t, 'Flash exposure compensation', v[35], '', '', ttUInt32);
|
||||
AddMakerNoteTag(36, t, 'AE setting', v[36], rsMinoltaIsoSettingLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(37, t, 'Minolta model ID', v[37], rsMinoltaModelIDLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(38, t, 'Interval mode', v[38], rsMinoltaIntervalModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(39, t, 'Folder name', v[39], rsMinoltaFolderNameLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(40, t, 'Color mode', v[40], rsMinoltaColorModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(41, t, 'Color filter', v[41], '', '', ttUInt32);
|
||||
AddMakerNoteTag(42, t, 'BW filter', v[42], '', '', ttUInt32);
|
||||
AddMakerNoteTag(43, t, 'Internal flash', v[43], rsMinoltaInternalFlashLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(44, t, 'Brightness', v[44], '', '', ttUInt32);
|
||||
AddMakerNoteTag(45, t, 'Spot focus point X', v[45], '', '', ttUInt32);
|
||||
AddMakerNoteTag(46, t, 'Spot focus point Y', v[46], '', '', ttUInt32);
|
||||
AddMakerNoteTag(47, t, 'Wide focus zone', v[47], rsMinoltaWideFocusZoneLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(48, t, 'Focus mode', v[48], rsMinoltaFocusModeLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(49, t, 'Focus area', v[49], rsMinoltaFocusAreaLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(40, t, 'DEC position', v[50], rsMinoltaDECPositionLkup, '', ttUInt32);
|
||||
if isDiMAGE7Hi then
|
||||
AddMakerNoteTag(51, t, 'Color profile', v[51], rsMinoltaColorProfileLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(51+d, t, 'Data imprint', v[52], rsMinoltaDataImprintLkup, '', ttUInt32);
|
||||
AddMakerNoteTag(63+d, t, 'Flash metering', v[63], rsMinoltaFlashMeteringLkup, '', ttUInt32); // or is the index 53?
|
||||
end;
|
||||
end;
|
||||
$0010: // CameraInfoA100
|
||||
begin
|
||||
//p := @AData[0];
|
||||
//... conversion stopped due to unclear documentation on
|
||||
// https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Minolta.html#CameraInfoA100
|
||||
// --- Is there an index 0?
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMinoltaMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
BuildMinoltaTagDefs(FTagDefs)
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TMinoltaMakerNoteReader, 'Minolta', '');
|
||||
|
||||
end.
|
||||
|
519
components/fpexif/fpemakernotenikon.pas
Normal file
519
components/fpexif/fpemakernotenikon.pas
Normal file
@ -0,0 +1,519 @@
|
||||
unit fpeMakerNoteNikon;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeGlobal, fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TNikonMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
function AddTag(AStream: TStream; const AIFDRecord: TIFDRecord;
|
||||
const AData: TBytes; AParent: TTagID): Integer; override;
|
||||
procedure GetTagDefs(AStream: TStream); override;
|
||||
function Prepare(AStream: TStream): Boolean; override;
|
||||
end;
|
||||
|
||||
TNikonCropHiSpeedTag = class(TIntegerTag)
|
||||
public
|
||||
function GetAsString: String; override;
|
||||
end;
|
||||
|
||||
TNikonLensTypeTag = class(TIntegerTag)
|
||||
public
|
||||
function GetAsString: string; override;
|
||||
end;
|
||||
|
||||
TNikonLensTag = class(TFloatTag)
|
||||
public
|
||||
function GetAsString: string; override;
|
||||
end;
|
||||
|
||||
TNikonShootingModeTag = class(TIntegerTag)
|
||||
public
|
||||
function GetAsString: String; override;
|
||||
end;
|
||||
|
||||
TNikonNEFBitDepthTag = class(TIntegerTag)
|
||||
public
|
||||
function GetAsString: String; override;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Math,
|
||||
fpeStrConsts, fpeUtils, fpeExifData;
|
||||
|
||||
resourcestring
|
||||
rsNikonActiveDLightingLkUp = '0:Off,1:Low,3:Normal,5:High,7:Extra High,'+
|
||||
'8:Extra High 1,9:Extra High 2,10:Extra High 3,11:Extra High 4,65535:Auto';
|
||||
rsNikonAFAreaMode = '0:Single Area,1:Dynamic Area,2:Dynamic Area (closest subject),'+
|
||||
'3:Group Dynamic,4:Single Area (wide),5:Dynamic Area (wide)';
|
||||
rsNikonAFPoint = '0:Center,1:Top,2:Bottom,3:Mid-left,4:Mid-right,5:Upper-left,'+
|
||||
'6:Upper-right,7:Lower-left,8:Lower-right,9:Far Left,10:Far Right';
|
||||
rsNikonAFPointsInFocus = '0:(none),$7FF:All 11 points,1:Center,2:Top,4:Bottom,'+
|
||||
'8:Mid-left,16:Mid-right,32:Upper-left,64:Upper-right,128:Lower-left,'+
|
||||
'256:Lower-right,512:Far left,1024:Far right';
|
||||
// To do: This is a bit-mask. Combinations should be calculated!
|
||||
rsNikonColorModeLkup = '1:Color,2:Monochrome';
|
||||
rsNikonColorSpaceLkup = '1:sRGB,2:Adobe RGB';
|
||||
rsNikonConverterLkup = '0:Not used,1:Used';
|
||||
rsNikonCropHiSpeedLkup = '0:Off,1:1.3x Crop,2:DX Crop,3:5/4 Crop,4:3/2 Crop,'+
|
||||
'6:16/9 Crop,9:DX Movie Crop,11:FX Uncropped,12:DX Uncropped,17:1/1 Crop';
|
||||
rsNikonCropHiSpeedMask = '%0:s (%1:dx%2:d cropped to %3:dx%4:d at pixel %5:d,%6:d)';
|
||||
rsNikonDateDisplayFormat = '0:Y/M/D,1:M/D/Y,2:D/M/Y';
|
||||
rsNikonFlashModeLkUp = '0:Did Not Fire,1:Fired, Manual,3:Not Ready,'+
|
||||
'7:Fired External,8:Fired Commander Mode,9:Fired TTL Mode';
|
||||
rsNikonHighISONoiseReductionLkUp = '0:Off,1:Minimal,2:Low,3:Medium Low,'+
|
||||
'4:Normal,5:Medium High,6:High';
|
||||
rsNikonImgAdjLkup = '0:Normal,1:Bright+,2:Bright-,3:Contrast+,4:Contrast-';
|
||||
rsNikonISOLkup = '0:ISO80,2:ISO160,4:ISO320,5:ISO100';
|
||||
rsNikonNEFCompressionLkUp = '1:Lossy (type 1),2: Uncompressed,3:Lossless,'+
|
||||
'4:Lossy (type 2),5:Striped packed 12 bits,6:Uncompressed (reduced to 12 bit),'+
|
||||
'7:Unpacked 12 bits,8:Small,9:Packed 12 bits';
|
||||
rsNikonOffOn='-1:Off,1:On';
|
||||
rsNikonQualityLkup = '1:Vga Basic,2:Vga Normal,3:Vga Fine,4:SXGA Basic,'+
|
||||
'5:SXGA Normal,6:SXGA Fine,10:2 Mpixel Basic,11:2 Mpixel Normal,'+
|
||||
'12:2 Mpixel Fine';
|
||||
rsNikonRetoucheHistoryLkup = '0:None,3:B & W,4:Sepia,5:Trim,6:Small Picture,'+
|
||||
'7:D-Lighting,8:Red Eye,9:Cyanotype,10:Sky Light,11:Warm Tone,'+
|
||||
'12:Color Custom,13:Image Overlay,14:Red Intensifier,15:Green Intensifier,'+
|
||||
'16:Blue Intensifier,17:Cross Screen,18:Quick Retouch,19:NEF Processing,'+
|
||||
'23:Distortion Control,25:Fisheye,26:Straighten,29:Perspective Control,'+
|
||||
'30:Color Outline,31:Soft Filter,32:Resize,33: Miniature Effect,'+
|
||||
'34:Skin Softening,35:Selected Frame,37:Color Sketch,38:Selective Color,'+
|
||||
'39:Glamour,40:Drawing,44:Pop,45:Toy Camera Effect 1,46:Toy Camera Effect 2,'+
|
||||
'47:Cross Process (red),48:Cross Process (blue),49:Cross Process (green),'+
|
||||
'50:Cross Process (yellow),51:Super Vivid,52:High-contrast Monochrome,'+
|
||||
'53:High Key,54:Low Key';
|
||||
rsNikonShutterModeLkUp = '0:Mechanical,16:Electronic,48:Electronic Front Curtain';
|
||||
rsNikonVignetteControlLkUp = '0:Off,1:Low,3:Normal,5:High';
|
||||
rsNikonVibrationReductionLkUp = '0:n/a,1:On,2:Off';
|
||||
rsNikonVRModeLkUp = '0:Normal,1:On (1),2:Active,3:Sport';
|
||||
rsNikonWhiteBalanceLkup = '0:Auto,1:Preset,2:Daylight,3:Incandescense,'+
|
||||
'4:Fluorescence,5:Cloudy,6:SpeedLight';
|
||||
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
|
||||
// not tested
|
||||
procedure BuildNikon1TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddUShortTag(M+$0002, 'FamilyID');
|
||||
AddUShortTag(M+$0003, 'Quality', 1, '', rsNikonQualityLkup);
|
||||
AddUShortTag(M+$0004, 'ColorMode', 1, '', rsNikonColorModeLkup);
|
||||
AddUShortTag(M+$0005, 'ImageAdjustment', 1, '', rsNikonImgAdjLkup);
|
||||
AddUShortTag(M+$0006, 'ISOSpeed', 1, '', rsNikonISOLkup);
|
||||
AddUShortTag(M+$0007, 'WhiteBalance', 1, '', rsNikonWhiteBalanceLkup);
|
||||
AddUShortTag(M+$0008, 'Focus');
|
||||
AddUShortTag(M+$000A, 'DigitalZoom');
|
||||
AddUShortTag(M+$000B, 'Converter', 1, '', rsNikonConverterLkup);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ for Nikon D1, E880, E885, E990, E995, E2500, E5000
|
||||
Ref http://www.tawbaware.com/990exif.htm
|
||||
https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html }
|
||||
procedure BuildNikon2TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0001, 'Version', 4, '', '', '', TVersionTag);
|
||||
AddUShortTag (M+$0002, 'ISO', 2);
|
||||
AddStringTag (M+$0003, 'ColorMode');
|
||||
AddStringTag (M+$0004, 'Quality');
|
||||
AddStringTag (M+$0005, 'WhiteBalance');
|
||||
AddStringtag (M+$0006, 'ImageSharpening');
|
||||
AddStringTag (M+$0007, 'FocusMode');
|
||||
AddStringTag (M+$0008, 'FlashSetting');
|
||||
AddStringTag (M+$0009, 'FlashType');
|
||||
AddURationalTag(M+$000A, 'UNKNOWN');
|
||||
AddStringTag (M+$000F, 'ISOSelection');
|
||||
AddStringTag (M+$0080, 'ImageAdjustment');
|
||||
AddStringTag (M+$0081, 'ToneComp');
|
||||
AddStringTag (M+$0082, 'AuxiliaryLens');
|
||||
AddURationalTag(M+$0085, 'ManualFocusDistance');
|
||||
AddURationalTag(M+$0086, 'DigitalZoom');
|
||||
AddBinaryTag (M+$0088, 'AFInfo');
|
||||
AddStringTag (M+$008D, 'ColorHue');
|
||||
AddStringTag (M+$008F, 'SceneMode');
|
||||
AddStringTag (M+$0090, 'LightSource');
|
||||
AddBinaryTag (M+$0010, 'DataDump');
|
||||
end;
|
||||
end;
|
||||
|
||||
// Ref.: https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html
|
||||
procedure BuildNikon3TagDefs(AList: TTagDefList);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
// Tags in main MakerNote IFD
|
||||
AddBinaryTag (M+$0001, 'Version', 4, '', '', '', TVersionTag);
|
||||
AddUShortTag (M+$0002, 'ISO', 2);
|
||||
AddStringTag (M+$0003, 'ColorMode');
|
||||
AddStringTag (M+$0004, 'Quality');
|
||||
AddStringTag (M+$0005, 'WhiteBalance');
|
||||
AddStringtag (M+$0006, 'Sharpness');
|
||||
AddStringTag (M+$0007, 'FocusMode');
|
||||
AddStringTag (M+$0008, 'FlashSetting');
|
||||
AddStringTag (M+$0009, 'FlashType');
|
||||
AddURationalTag(M+$000A, 'UNKNOWN');
|
||||
AddSShortTag (M+$000B, 'WhiteBalanceFineTune');
|
||||
AddURationalTag(M+$000C, 'WB_RBLevels', 4);
|
||||
AddBinaryTag (M+$000D, 'ProgramShift', 1);
|
||||
AddBinaryTag (M+$000E, 'ExposureDifference', 1);
|
||||
AddBinaryTag (M+$000F, 'ISOSelection');
|
||||
AddBinaryTag (M+$0010, 'DataDump');
|
||||
// ...
|
||||
AddBinaryTag (M+$0012, 'FlashExposureComp', 4);
|
||||
AddUShortTag (M+$0013, 'ISO Setting', 2);
|
||||
AddUShortTag (M+$0016, 'ImageBoundary', 4);
|
||||
AddBinaryTag (M+$0017, 'ExternalFlashExposureComp', 4);
|
||||
AddBinaryTag (M+$0018, 'FlashExposureBracketValue', 4);
|
||||
AddSRationalTag(M+$0019, 'ExposureBracketValue');
|
||||
AddStringTag (M+$001A, 'ImageProcessing');
|
||||
AddUShortTag (M+$001B, 'CropHiSpeed', 7, '', rsNikonCropHiSpeedLkUp, '', TNikonCropHiSpeedTag);
|
||||
AddBinaryTag (M+$001C, 'ExposureTuning', 3);
|
||||
AddStringTag (M+$001D, 'SerialNumber', 1, '', '', nil, true);
|
||||
AddUShortTag (M+$001E, 'ColorSpace', 1, '', rsNikonColorSpaceLkUp);
|
||||
AddBinaryTag (M+$001F, 'VRInfo', 8);
|
||||
AddByteTag (M+$0020, 'ImageAuthentication', 1, '', rsOffOn);
|
||||
// 21
|
||||
AddUShortTag (M+$0022, 'ActiveD-Lighting', 1, '', rsNikonActiveDLightingLkUp);
|
||||
AddBinaryTag (M+$0024, 'WorldTime');
|
||||
//...
|
||||
AddUShortTag (M+$002A, 'VignetteControl', 1, '', rsNikonVignetteControlLkUp);
|
||||
//...
|
||||
AddUShortTag (M+$0034, 'ShutterMode', 1, '', '', rsNikonShutterModeLkUp);
|
||||
//..
|
||||
AddULongTag (M+$0037, 'MechanicalShutterCount');
|
||||
AddBinaryTag (M+$0039, 'LocationInfo');
|
||||
//..
|
||||
AddUShortTag (M+$003D, 'BlackLevel', 4);
|
||||
AddUShortTag (M+$004F, 'ColorTemperatureAuto');
|
||||
AddStringTag (M+$0080, 'ImageAdjustment');
|
||||
AddStringTag (M+$0081, 'ToneComp');
|
||||
AddStringTag (M+$0082, 'AuxiliaryLens');
|
||||
AddByteTag (M+$0083, 'LensType', 1, '', '', '', TNikonLensTypeTag);
|
||||
AddURationalTag(M+$0084, 'Lens', 4, '', '', '', TNikonLensTag);
|
||||
AddURationalTag(M+$0085, 'ManualFocusDistance');
|
||||
AddURationalTag(M+$0086, 'DigitalZoom');
|
||||
AddByteTag (M+$0087, 'FlashMode', 1, '', rsNikonFlashModeLkUp);
|
||||
AddBinaryTag (M+$0088, 'AFInfo', 4);
|
||||
// ..
|
||||
AddUShortTag (M+$0089, 'ShootingMode', 1, '', '', '', TNikonShootingModeTag);
|
||||
AddBinaryTag (M+$008B, 'LensFStops', 4);
|
||||
AddBinaryTag (M+$008C, 'ContrastCurve');
|
||||
AddStringTag (M+$008D, 'ColorHude');
|
||||
AddStringTag (M+$008F, 'SceneMode');
|
||||
AddStringTag (M+$0090, 'LightSource');
|
||||
AddSShortTag (M+$0092, 'HueAdjustment');
|
||||
AddUShortTag (M+$0093, 'NEFCompression', 1, '', rsNikonNEFCompressionLkUp);
|
||||
AddSShortTag (M+$0094, 'Saturation');
|
||||
AddStringTag (M+$0095, 'NoiseReduction');
|
||||
AddBinaryTag (M+$0097, 'NEFLinearizationTable');
|
||||
AddUShortTag (M+$0099, 'RawImageCenter', 2);
|
||||
AddURationalTag(M+$009A, 'SensorPixelSize', 2);
|
||||
AddStringTag (M+$009C, 'SceneAssist');
|
||||
AddUShortTag (M+$009E, 'RetoucheHistory', 10, '', rsNikonRetoucheHistoryLkup);
|
||||
AddStringTag (M+$00A0, 'SerialNumber');
|
||||
AddULongTag (M+$00A2, 'ImageDataSize');
|
||||
AddULongTag (M+$00A5, 'ImageCount');
|
||||
AddULongTag (M+$00A6, 'DeletedImageCount');
|
||||
AddULongTag (M+$00A7, 'ShutterCount', 1, '', '', '', nil, true);
|
||||
AddStringTag (M+$00A9, 'ImageOptimization');
|
||||
AddStringTag (M+$00AA, 'Saturation');
|
||||
AddStringTag (M+$00AB, 'VariProgram');
|
||||
AddStringTag (M+$00AC, 'ImageStabilization');
|
||||
AddStringTag (M+$00AD, 'AFResponse');
|
||||
AddUShortTag (M+$00B1, 'HighISONoiseReduction', 1, '', rsNikonHighISONoiseReductionLkup);
|
||||
AddStringTag (M+$00B3, 'ToningEffect');
|
||||
AddBinaryTag (M+$00B6, 'PowerUpTime');
|
||||
|
||||
// ...
|
||||
AddBinaryTag (M+$00B8, 'FileInfo');
|
||||
AddBinaryTag (M+$00BB, 'RetoucheInfo');
|
||||
|
||||
AddBinaryTag (M+$00C3, 'BarometerInfo');
|
||||
AddStringTag (M+$0E09, 'NikonCaptureVersion');
|
||||
// ...
|
||||
AddUShortTag (M+$0E22, 'NEFBitDepth', 4, '', '', '', TNikonNEFBitDepthTag);
|
||||
|
||||
// AddBinaryTag (M+$0103, 'CompressionValue', 1, '', rsCompressionLkUp);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// MakerNote reader
|
||||
//==============================================================================
|
||||
|
||||
function TNikonMakerNoteReader.AddTag(AStream: TStream;
|
||||
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
|
||||
type
|
||||
TVRInfoRecord = record
|
||||
Version: DWord;
|
||||
VibrationReduction: byte;
|
||||
VRMode: byte;
|
||||
end;
|
||||
var
|
||||
tagDef: TTagDef;
|
||||
p: PByte;
|
||||
t: TTagID;
|
||||
idx: Integer;
|
||||
b: Byte;
|
||||
w: Word;
|
||||
r: TExifRational;
|
||||
begin
|
||||
Result := -1;
|
||||
|
||||
tagDef := FindTagDef(AIFDRecord.TagID or AParent);
|
||||
if (tagDef = nil) then
|
||||
exit;
|
||||
|
||||
Result := inherited AddTag(AStream, AIFDRecord, AData, AParent);
|
||||
t := tagDef.TagID;
|
||||
case tagDef.TagID of
|
||||
TAGPARENT_MAKERNOTE+$001F: // VR info
|
||||
if Length(AData) >= 8 then
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteStringTag(0, t, 'VRInfoVersion', AData, 4, '');
|
||||
AddMakerNoteTag(4, t, 'VibrationReduction', AData[4], rsNikonVibrationReductionLkUp, '', ttUInt8);
|
||||
AddMakerNoteTag(6, t, 'VRMode', AData[6], rsNikonVRModeLkUp, '', ttUInt8);
|
||||
end;
|
||||
TAGPARENT_MAKERNOTE+$0088:
|
||||
if Length(AData) >= 4 then // AF Info
|
||||
with FImgInfo.ExifData do begin
|
||||
b := AData[0];
|
||||
AddMakerNoteTag(0, t, 'AFAreaMode', b, rsNikonAFAreaMode, '', ttUInt8);
|
||||
b := AData[1];
|
||||
AddMakerNoteTag(1, t, 'AFPoint', b, rsNikonAFPoint, '', ttUInt8);
|
||||
w := FixEndian16(PWord(@AData[2])^);
|
||||
AddmakerNoteTag(2, t, 'AFPointsInFocus', w, rsNikonAFPointsInFocus, '', ttUInt16);
|
||||
end;
|
||||
TAGPARENT_MAKERNOTE+$0024:
|
||||
if Length(AData) >= 4 then // WorldTime
|
||||
with FImgInfo.ExifData do begin
|
||||
w := FixEndian16(PWord(@AData[0])^);
|
||||
AddMakerNoteTag(0, t, 'TimeZone', Integer(w), '', '', ttSInt16);
|
||||
AddMakerNoteTag(2, t, 'DaylightSavings', byte(AData[2]), rsNoYes, '', ttUInt8);
|
||||
AddMakerNoteTag(3, t, 'DateDisplayFormat', byte(AData[3]), rsNikonDateDisplayformat, '', ttUInt8);
|
||||
end;
|
||||
TAGPARENT_MAKERNOTE+$00B8:
|
||||
if Length(AData) >= 8 then
|
||||
with FImgInfo.ExifData do begin
|
||||
idx := 0;
|
||||
AddMakerNoteStringTag(idx, t, 'FileInfoVersion', AData, 4);
|
||||
inc(idx, 4);
|
||||
w := FixEndian16(PWord(@AData[idx])^);
|
||||
AddMakerNoteTag(idx, t, 'MemoryCardNumber', Integer(w), '', '', ttUInt16);
|
||||
inc(idx, 2);
|
||||
w := FixEndian16(PWord(@AData[idx])^);
|
||||
AddMakerNoteTag(idx, t, 'DirectoryNumber', Integer(w), '', '', ttUInt16);
|
||||
inc(idx, 2);
|
||||
w := FixEndian16(PWord(@AData[idx])^);
|
||||
AddMakerNoteTag(idx, t, 'FileNumber', Integer(w), '', '', ttUInt16);
|
||||
end;
|
||||
TAGPARENT_MAKERNOTE+$BB:
|
||||
if Length(ADAta) >= 6 then
|
||||
with FImgInfo.ExifData do begin
|
||||
AddMakerNoteStringTag(0, t, 'RetouchInfoVersion', AData, 5);
|
||||
AddMakerNoteTag(5, t, 'RetouchNEFProcessing', byte(AData[5]), '', rsNikonOffOn, ttSInt8);
|
||||
end;
|
||||
TAGPARENT_MAKERNOTE+$00C3:
|
||||
if Length(AData) >= 10 then
|
||||
with FImgInfo.ExifData do begin
|
||||
idx := 0;
|
||||
AddMakerNoteStringTag(idx, t, 'BarometerInfoVersion', AData, 6);
|
||||
inc(idx, 6);
|
||||
Move(AData[idx], r, SizeOf(r));
|
||||
r.Numerator := FixEndian32(r.Numerator);
|
||||
r.Denominator := FixEndian32(r.Denominator);
|
||||
AddMakerNoteTag(idx, t, 'Altitude', r.Numerator/r.Denominator, '', ttSRational);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TNikonMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
var
|
||||
b: array of byte;
|
||||
tmp, tmp2: String;
|
||||
p: Integer;
|
||||
streamPos: Int64;
|
||||
begin
|
||||
if Uppercase(FMake) = 'NIKON CORPORATION' then begin
|
||||
SetLength(b, 20);
|
||||
streamPos := AStream.Position;
|
||||
AStream.Read(b[0], 20);
|
||||
AStream.Position := streamPos;
|
||||
SetLength(tmp, 5);
|
||||
Move(b[0], tmp[1], 5);
|
||||
if (PosInBytes('Nikon'#00, b) = 0) and (
|
||||
(PosInBytes('MM'#00#42#00#00#00#08, b) = 10) or
|
||||
(PosInBytes('II'#42#00#08#00#00#00, b) = 10)
|
||||
)
|
||||
then
|
||||
BuildNikon3TagDefs(FTagDefs)
|
||||
else begin
|
||||
p := Max(0, Pos(' ', FModel));
|
||||
tmp2 := FModel[p+1];
|
||||
if (FExifVersion > '0210') or
|
||||
((FExifVersion = '') and (tmp2 = 'D') and (FImgFormat = ifTiff))
|
||||
then
|
||||
BuildNikon2TagDefs(FTagDefs)
|
||||
else
|
||||
if (tmp = 'Nikon') then
|
||||
BuildNikon1TagDefs(FTagDefs)
|
||||
else
|
||||
BuildNikon2TagDefs(FTagDefs);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TNikonMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
var
|
||||
b: TBytes;
|
||||
UCMake: String;
|
||||
dw: DWord;
|
||||
begin
|
||||
Result := false;
|
||||
UCMake := Uppercase(FMake);
|
||||
if UCMake = 'NIKON CORPORATION' then begin
|
||||
SetLength(b, 10);
|
||||
AStream.Read(b[0], 10);
|
||||
if PosInBytes('Nikon'#0{#$10#00#00}, b) = 0 then begin
|
||||
// These MakerNotes are relative to the beginning of the MakerNote's
|
||||
// TIFF header!
|
||||
FStartPosition := AStream.Position;
|
||||
AStream.Read(b[0], 4);
|
||||
if PosInBytes('MM'#00#42, b) = 0 then
|
||||
FBigEndian := true
|
||||
else
|
||||
if PosInBytes('II'#42#00, b) = 0 then
|
||||
FBigEndian := false
|
||||
else
|
||||
exit;
|
||||
dw := AStream.ReadDWord;
|
||||
if FBigEndian then dw := BEToN(dw) else dw := LEToN(dw);
|
||||
if dw = 8 then
|
||||
Result := true;
|
||||
// The stream is now at the beginning of the IFD structure used by
|
||||
// the Nikon maker notes.
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// Special tags
|
||||
//==============================================================================
|
||||
|
||||
function TNikonCropHiSpeedTag.GetAsString: String;
|
||||
var
|
||||
s: String;
|
||||
intVal: TExifIntegerArray;
|
||||
begin
|
||||
if (FCount = 7) and (toDecodeValue in FOptions) then begin
|
||||
intVal := AsIntegerArray;
|
||||
s := Lookup(IntToStr(intVal[0]), FLkupTbl, @SameIntegerFunc);
|
||||
Result := Format(rsNikonCropHiSpeedMask, [
|
||||
s, intval[1], intVal[2], intVal[3], intVal[4], intVal[5], intVal[6]
|
||||
]);
|
||||
end else
|
||||
Result := inherited;
|
||||
end;
|
||||
|
||||
function TNikonLensTypeTag.GetAsString: String;
|
||||
var
|
||||
intVal: Integer;
|
||||
begin
|
||||
if (toDecodeValue in FOptions) then begin
|
||||
Result := '';
|
||||
intVal := AsInteger;
|
||||
if intVal and 1 <> 0 then Result := Result + 'MF+';
|
||||
if intVal and 2 <> 0 then Result := Result + 'D+';
|
||||
if intVal and 4 <> 0 then Result := Result + 'G+';
|
||||
if intVal and 8 <> 0 then Result := Result + 'VR+';
|
||||
if intval and 16 <> 0 then Result := Result + '1+';
|
||||
if intVal and 32 <> 0 then Result := Result + 'E+';
|
||||
if Result <> '' then SetLength(Result, Length(Result)-1);
|
||||
end else
|
||||
Result := inherited;
|
||||
end;
|
||||
|
||||
function TNikonLensTag.GetAsString: String;
|
||||
var
|
||||
values: TExifDoubleArray;
|
||||
begin
|
||||
values := AsFloatArray;
|
||||
if (toDecodeValue in FOptions) and (Length(values) = 4) then
|
||||
Result := Format('%g-%gmm f/%g-%g', [values[0], values[1], values[2], values[3]], fpExifFmtSettings)
|
||||
else
|
||||
Result := inherited;
|
||||
end;
|
||||
|
||||
function TNikonShootingModetag.GetAsString: String;
|
||||
var
|
||||
intVal: Integer;
|
||||
begin
|
||||
if (toDecodeValue in FOptions) then begin
|
||||
intVal := AsInteger;
|
||||
if intVal = 0 then
|
||||
Result := 'Single frame'
|
||||
else begin
|
||||
Result := '';
|
||||
if intVal and 1 <> 0 then Result := Result + 'Continuous, ';
|
||||
if intVal and 2 <> 0 then Result := Result + 'Delay, ';
|
||||
if intVal and 4 <> 0 then Result := Result + 'PC Control, ';
|
||||
if intVal and 8 <> 0 then Result := Result + 'Self-timer, ';
|
||||
if intval and 16 <> 0 then Result := Result + 'Exposure bracketing, ';
|
||||
if intVal and 32 <> 0 then Result := Result + 'Auto ISO, ';
|
||||
if intVal and 64 <> 0 then Result := Result + 'White-balance bracketing, ';
|
||||
if intVal and 128 <> 0 then Result := Result + 'IR control, ';
|
||||
if intVal and 256 <> 0 then Result := Result + 'D-Lighting bracketing, ';
|
||||
if Result <> '' then SetLength(Result, Length(Result)-2);
|
||||
end;
|
||||
end else
|
||||
Result := inherited;
|
||||
end;
|
||||
|
||||
function TNikonNEFBitDepthTag.GetAsString: String;
|
||||
var
|
||||
iVal: TExifIntegerArray;
|
||||
i: Integer;
|
||||
n: Integer;
|
||||
begin
|
||||
if (FCount = 4) and (toDecodeValue in FOptions) then begin
|
||||
iVal := AsIntegerArray;
|
||||
if iVal[0] = 0 then
|
||||
Result := 'n/a (JPEG)'
|
||||
else begin
|
||||
Result := intToStr(iVal[0]);
|
||||
n := 1;
|
||||
for i:= Succ(Low(iVal)) to High(iVal) do
|
||||
if iVal[i] = 0 then
|
||||
break
|
||||
else if iVal[i] = iVal[0] then
|
||||
inc(n)
|
||||
else begin
|
||||
Result := inherited;
|
||||
exit;
|
||||
end;
|
||||
Result := Result + ' x ' + IntToStr(n);
|
||||
end;
|
||||
end else
|
||||
Result := inherited;
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TNikonMakerNoteReader, 'Nikon Corporation;Nikon', '');
|
||||
|
||||
end.
|
||||
|
263
components/fpexif/fpemakernoteolympus.pas
Normal file
263
components/fpexif/fpemakernoteolympus.pas
Normal file
@ -0,0 +1,263 @@
|
||||
unit fpeMakerNoteOlympus;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
fpeGlobal, fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TOlympusMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
FVersion: Integer;
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
function Prepare(AStream: TStream): Boolean; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts, fpeUtils, fpeExifData;
|
||||
|
||||
resourcestring
|
||||
// Olympus
|
||||
rsOlympusCCDScanModeLkup = '0:Interlaced,1:Progressive';
|
||||
rsOlympusContrastLkup = '0:High,1:Normal,2:Low';
|
||||
rsOlympusFlashDevLkup = '0:None,1:Internal,4:External,5:Internal + External';
|
||||
rsOlympusFlashModeLkup = '2:On,3;Off';
|
||||
rsOlympusFlashModelLkup = '0:None,1:FL-20,2:FL-50,3:RF-11,4:TF-22,5:FL-36,'+
|
||||
'6:FL-50R,7:FL-36R,9:FL-14,11:FL-600R';
|
||||
rsOlympusFlashTypeLkup = '0:None,2:Simple E-System,3:E-System';
|
||||
rsOlympusJpegQualLkup = '1:SQ,2:HQ,3:SHQ,4:Raw';
|
||||
rsOlympusMacroLkup = '0:Off,1:On,2:Super Macro';
|
||||
rsOlympusPreviewImgLength = 'Preview image length';
|
||||
rsOlympusPreviewImgStart = 'Preview image start';
|
||||
rsOlympusPreviewImgValid = 'Preview image valid';
|
||||
rsOlympusSharpnessLkup = '0:Normal,1:Hard,2:Soft';
|
||||
rsOlympusSceneModeLkup = '0:Normal,1:Standard,2:Auto,3:Intelligent Auto,' +
|
||||
'4:Portrait,5:Landscape+Portrait,6:Landscape,7:Night Scene,8:Night+Portrait' +
|
||||
'9:Sport,10:Self Portrait,11:Indoor,12:Beach & Snow,13:Beach,14:Snow,' +
|
||||
'15:Self Portrait+Self Timer,16:Sunset,17:Cuisine,18:Documents,19:Candle,' +
|
||||
'20:Fireworks,21:Available Light,22:Vivid,23:Underwater Wide1,24:Underwater Macro,' +
|
||||
'25:Museum,26:Behind Glass,27:Auction,28:Shoot & Select1,29:Shoot & Select2,'+
|
||||
'30:Underwater Wide2,31:Digital Image Stabilization,32:Face Portrait,33:Pet,'+
|
||||
'34:Smile Shot,35:Quick Shutter,43:Hand-held Starlight,100:Panorama,'+
|
||||
'101:Magic Filter,103:HDR';
|
||||
|
||||
|
||||
// Most from https://sno.phy.queensu.ca/~phil/exiftool/TagNames/Olympus.html
|
||||
// some from dExif
|
||||
const
|
||||
E = $2010 shl 16; // Equipment version
|
||||
C = $2011 shl 16; // Camera settings
|
||||
|
||||
procedure BuildOlympusTagDefs(AList: TTagDefList);
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddBinaryTag (M+$0000, 'Version', 4, '', '', '', TVersionTag);
|
||||
|
||||
{ Stores all settings which were in effect when taking the picture.
|
||||
Details depend on camera. }
|
||||
AddBinaryTag (M+$0001, 'MinoltaCameraSettingsOld'); //, $FFFF, '', '', '', TSubIFDTag, true);
|
||||
AddBinaryTag (M+$0003, 'MinoltaCameraSettings'); //, $FFFF, '', '', '', TSubIFDTag, false);
|
||||
|
||||
// this is the size of the JPEG (compressed) or TIFF or RAW file.
|
||||
AddULongTag (M+$0040, 'CompressedImageSize');
|
||||
|
||||
{ Stores the thumbnail image (640×480). It is in normal JFIF format but the
|
||||
first byte should be changed to 0xFF. Beware! Sometimes the thumbnail
|
||||
is not stored in the file and this tag points beyond the end of the file. }
|
||||
AddBinaryTag (M+$0081, 'ReviewImage');
|
||||
|
||||
{ The cameras D7u, D7i and D7Hi no longer store the thumbnail inside the tag.
|
||||
It has instead two tags describing the position of the thumbnail in the
|
||||
file and its size }
|
||||
AddULongTag (M+$0088, 'PreviewImageStart');
|
||||
AddULongTag (M+$0089, 'PreviewImageLength');
|
||||
|
||||
AddULongTag (M+$0200, 'SpecialMode', 3);
|
||||
AddUShortTag (M+$0201, 'JpegQuality', 1, '', rsOlympusJpegQualLkup);
|
||||
AddUShortTag (M+$0202, 'Macro', 1, '', rsOlympusMacroLkup);
|
||||
AddURationalTag(M+$0204, 'DigitalZoom');
|
||||
// AddUShortTag (M+$0207, 'Firmware');
|
||||
AddStringTag (M+$9207, 'CameraType');
|
||||
AddStringTag (M+$0208, 'PictureInfo');
|
||||
AddStringTag (M+$0209, 'CameraID');
|
||||
AddUShortTag (M+$020B, 'EpsonImageWidth');
|
||||
AddUShortTag (M+$020C, 'EpsonImageHeight');
|
||||
AddStringTag (M+$020D, 'EpsonSoftware');
|
||||
AddUShortTag (M+$0403, 'SceneMode', 1, '', rsOlympusSceneModeLkup);
|
||||
AddStringTag (M+$0404, 'SerialNumber');
|
||||
AddStringTag (M+$0405, 'Firmware');
|
||||
AddSRationalTag(M+$1000, 'ShutterSpeedValue');
|
||||
AddSRationalTag(M+$1001, 'ISOValue');
|
||||
AddSRationalTag(M+$1002, 'ApertureValue');
|
||||
AddSRationalTag(M+$1003, 'BrightnessValue');
|
||||
AddUShortTag (M+$1004, 'FlashMode', 1, '', rsOlympusFlashModeLkup);
|
||||
AddUShortTag (M+$1005, 'FlashDevice', 1, '', rsOlympusFlashDevLkup);
|
||||
AddURationalTag(M+$1006, 'Bracket');
|
||||
AddSShortTag (M+$1007, 'SensorTemperature');
|
||||
AddSShortTag (M+$1008, 'LensTemperature');
|
||||
AddUShortTag (M+$100B, 'FocusMode', 1, '', rsAutoManual);
|
||||
AddURationalTag(M+$100C, 'FocusDistance');
|
||||
AddUShortTag (M+$100D, 'ZoomStepCount');
|
||||
AddUShortTag (M+$100E, 'FocusStepCount');
|
||||
AddUShortTag (M+$100F, 'Sharpness', 1, '', rsOlympusSharpnessLkup);
|
||||
AddUShortTag (M+$1010, 'FlashChargeLevel');
|
||||
AddUShortTag (M+$1011, 'ColorMatrix', 9);
|
||||
AddUShortTag (M+$1012, 'BlackLevel', 4);
|
||||
AddUShortTag (M+$1015, 'WhiteBalanceMode', 2);
|
||||
AddUShortTag (M+$1017, 'RedBalance', 2);
|
||||
AddUShortTag (M+$1018, 'BlueBalance', 2);
|
||||
AddStringTag (M+$101A, 'SerialNumber');
|
||||
AddURationalTag(M+$1023, 'FlashBias');
|
||||
AddUShortTag (M+$1029, 'Contrast', 1, '', rsOlympusContrastLkup);
|
||||
AddUShortTag (M+$102A, 'SharpnessFactor');
|
||||
AddUShortTag (M+$102B, 'ColorControl', 6);
|
||||
AddUShortTag (M+$102C, 'ValidBits', 2);
|
||||
AddUShortTag (M+$102D, 'CoringFilter');
|
||||
AddULongTag (M+$102E, 'FinalWidth');
|
||||
AddULongTag (M+$102F, 'FinalHeight');
|
||||
AddUShortTag (M+$1030, 'SceneDetect');
|
||||
AddULongTag (M+$1031, 'SceneArea', 8);
|
||||
AddURationalTag(M+$1034, 'CompressionRatio');
|
||||
AddUShortTag (M+$1038, 'AFResult');
|
||||
AddUShortTag (M+$1039, 'CCDScanMode', 1, '', rsOlympusCCDScanModeLkup);
|
||||
AddUShortTag (M+$103A, 'NoiseReduction', 1, '', rsOffOn);
|
||||
AddUShortTag (M+$103B, 'FocusStepInfinity');
|
||||
AddUShortTag (M+$103C, 'FocusStepNear');
|
||||
AddSRationalTag(M+$103D, 'LightValueCenter');
|
||||
AddSRationalTag(M+$103E, 'LightValuePeriphery');
|
||||
AddIFDTag (M+$2010, 'Equipment', '', TSubIFDTag);
|
||||
AddIFDTag (M+$2011, 'CameraSettings', '', TSubIFDTag);
|
||||
|
||||
// Olympus Equipment Tags
|
||||
AddBinaryTag (E+$0000, 'EquipmentVersion', 4, '', '', '', TVersionTag);
|
||||
AddStringTag (E+$0100, 'CameraType', 6);
|
||||
AddStringTag (E+$0101, 'SerialNumber', 32);
|
||||
AddStringTag (E+$0102, 'InternalSerialNumber', 32);
|
||||
AddURationalTag(E+$0103, 'FocalPlaneDiagonal');
|
||||
AddULongTag (E+$0104, 'BodyFirmwareVersion');
|
||||
AddByteTag (E+$0201, 'LensType', 6);
|
||||
AddStringTag (E+$0202, 'LensSerialNumber', 32);
|
||||
AddStringTag (E+$0203, 'LensModel');
|
||||
AddULongTag (E+$0204, 'LensFirmwareVersion');
|
||||
AddUShortTag (E+$0205, 'MaxApertureAtMinFocal');
|
||||
AddUShortTag (E+$0206, 'MaxApertureAtMaxFocal');
|
||||
AddUShortTag (E+$0207, 'MinFocalLength');
|
||||
AddUShortTag (E+$0208, 'MaxFocalLength');
|
||||
AddUShortTag (E+$020A, 'MaxAperture');
|
||||
AddUShortTag (E+$020B, 'LensProperties');
|
||||
AddByteTag (E+$0301, 'Extender', 6);
|
||||
AddStringTag (E+$0302, 'ExtenderSerialNumber', 32);
|
||||
AddStringTag (E+$0303, 'ExtenderModel');
|
||||
AddULongTag (E+$0304, 'ExtenderFirmwareVersion');
|
||||
AddStringTag (E+$0403, 'ConversionLens');
|
||||
AddUShortTag (E+$1000, 'FlashType', 1, '', rsOlympusFlashTypeLkup);
|
||||
AddUShortTag (E+$1001, 'FlashModel', 1, '', rsOlympusFlashModelLkup);
|
||||
AddULongTag (E+$1002, 'FlashFirmwareVersion');
|
||||
AddStringTag (E+$1003, 'FlashSerialNumber', 32);
|
||||
|
||||
// Olympus camera settings tags
|
||||
AddBinaryTag (C+$0000, 'CameraSettingsVersion', 4, '', '', '', TVersionTag);
|
||||
AddULongTag (C+$0100, 'PreviewImageValid', 1, rsOlympusPreviewImgValid, rsOffOn);
|
||||
AddULongTag (C+$0101, 'PreviewImageStart', 1, rsOlympusPreviewImgStart);
|
||||
AddULongTag (C+$0102, 'PreviewImageLength', 1, rsOlympusPreviewImgLength);
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// TOlympusMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
procedure TOlympusMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
const
|
||||
SIGNATURE_V1 = 'OLYMP'#00#01#00;
|
||||
SIGNATURE_V2 = 'OLYMP'#00#02#00;
|
||||
SIGNATURE_V3I = 'OLYMPUS'#00'II'#3;
|
||||
SIGNATURE_V3M = 'OLYMPUS'#00'MM'#3;
|
||||
var
|
||||
hdr: array of byte;
|
||||
p: Int64;
|
||||
begin
|
||||
p := AStream.Position;
|
||||
SetLength(hdr, 11);
|
||||
AStream.Read(hdr[0], 11);
|
||||
AStream.Position := p;
|
||||
|
||||
if (PosInBytes(SIGNATURE_V1, hdr) <> 0) and
|
||||
(PosInBytes(SIGNATURE_V2, hdr) <> 0) and
|
||||
(PosInBytes(SIGNATURE_V3I, hdr) <> 0) and
|
||||
(PosInBytes(SIGNATURE_V3M, hdr) <> 0) then exit;
|
||||
|
||||
BuildOlympusTagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
{ Read the header and determine the version of the olympus makernotes:
|
||||
- version 1: header OLYMP#0#1+0, offsets relative to EXIF
|
||||
- version 2: header OLYMP#0#2#0, offsets relative to EXIF
|
||||
- version 3: header OLYMPUS#0 + BOM (II or MM) + version (#3#0)
|
||||
offsets relative to maker notes !!!! }
|
||||
function TOlympusMakerNoteReader.Prepare(AStream: TStream): Boolean;
|
||||
var
|
||||
p: Int64;
|
||||
hdr: packed array[0..11] of ansichar;
|
||||
begin
|
||||
Result := false;
|
||||
|
||||
// Remember begin of makernotes tag.
|
||||
p := AStream.Position;
|
||||
|
||||
// Read header
|
||||
AStream.Read(hdr{%H-}, 12);
|
||||
|
||||
// The first 5 bytes must be 'OLYMP'; this is common to all versions
|
||||
if not ((hdr[0] = 'O') and (hdr[1] = 'L') and (hdr[2] = 'Y') and (hdr[3] = 'M') and (hdr[4] = 'P')) then
|
||||
exit;
|
||||
|
||||
FVersion := 0;
|
||||
// Version 1 or 2 if a #0 follows after the 'OLYMP'
|
||||
if (hdr[5] = #0) then begin
|
||||
if (hdr[6] = #1) and (hdr[7] = #0) then
|
||||
FVersion := 1
|
||||
else
|
||||
if (hdr[6] = #2) and (hdr[7] = #0) then
|
||||
FVersion := 2;
|
||||
end else
|
||||
// Version 3 if the first 8 bytes are 'OLYMPUS'#0
|
||||
if (hdr[5] = 'U') and (hdr[6] = 'S') and (hdr[7] = #0) then begin
|
||||
// Endianness marker, like in standard EXIF: 'II' or 'MM'
|
||||
if (hdr[8] = 'I') and (hdr[9] = 'I') then
|
||||
FBigEndian := false
|
||||
else
|
||||
if (hdr[8] = 'M') and (hdr[9] = 'M') then
|
||||
FBigEndian := true;
|
||||
if (hdr[10] = #3) then
|
||||
FVersion := 3;
|
||||
FStartPosition := p; // Offsets are relative to maker notes
|
||||
end;
|
||||
|
||||
// Jump to begin of IFD
|
||||
case FVersion of
|
||||
1, 2: AStream.Position := p + 8;
|
||||
3 : AStream.Position := p + 12;
|
||||
else exit;
|
||||
end;
|
||||
|
||||
BuildOlympusTagDefs(FTagDefs);
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TOlympusMakerNoteReader, 'Olympus', '');
|
||||
|
||||
end.
|
||||
|
65
components/fpexif/fpemakernotesanyo.pas
Normal file
65
components/fpexif/fpemakernotesanyo.pas
Normal file
@ -0,0 +1,65 @@
|
||||
unit fpemakernotesanyo;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
fpeTags, fpeExifReadWrite;
|
||||
|
||||
type
|
||||
TSanyoMakerNoteReader = class(TMakerNoteReader)
|
||||
protected
|
||||
procedure GetTagDefs({%H-}AStream: TStream); override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpeStrConsts;
|
||||
|
||||
resourcestring
|
||||
rsSanyoMacroLkup = '0:Normal,1:Macro,2:View,3:Manual';
|
||||
rsSanyoQualityLkup = '0:Normal/Very Low,1:Normal/Low,2:Normal/Medium Low,'+
|
||||
'3:Normal/Medium,4:Normal/Medium High,5:Normal/High,6:Normal/Very High'+
|
||||
'7:Normal/Super High,256:Fine/Very Low,257:Fine/Low,258:Fine/Medium Low'+
|
||||
'259:Fine/Medium,260:Fine/Medium High,261:Fine/High,262:Fine/Very High'+
|
||||
'263:Fine/Super High,512:Super Fine/Very Low,513:Super Fine/Low,'+
|
||||
'514:Super Fine/Medium Low,515:Super Fine/Medium,516:Super Fine/Medium High,'+
|
||||
'517:Super Fine/High,518:Super Fine/Very High,519:Super Fine/Super High';
|
||||
rsSanyoSpecialMode = 'Special mode';
|
||||
|
||||
// from dExif
|
||||
procedure BuildSanyoTagDefs(AList: TTagDefList);
|
||||
const
|
||||
M = DWord(TAGPARENT_MAKERNOTE);
|
||||
begin
|
||||
Assert(AList <> nil);
|
||||
with AList do begin
|
||||
AddULongTag (M+$0200, 'SpecialMode', 3, rsSanyoSpecialMode);
|
||||
AddUShortTag (M+$0201, 'Quality', 1, rsQuality, rsSanyoQualityLkup);
|
||||
AddUShortTag (M+$0202, 'Macro', 1, rsMacro, rsSanyoMacroLkup);
|
||||
AddURationalTag(M+$0204, 'DigitalZoom', 1, rsDigitalZoom);
|
||||
end;
|
||||
end;
|
||||
|
||||
//==============================================================================
|
||||
// TSanyoMakerNoteReader
|
||||
//==============================================================================
|
||||
|
||||
procedure TSanyoMakerNoteReader.GetTagDefs(AStream: TStream);
|
||||
begin
|
||||
BuildSanyoTagDefs(FTagDefs);
|
||||
end;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// initialization
|
||||
//==============================================================================
|
||||
|
||||
initialization
|
||||
RegisterMakerNoteReader(TSanyoMakerNoteReader, 'Sanyo', '');
|
||||
|
||||
end.
|
||||
|
@ -337,266 +337,6 @@ resourcestring
|
||||
rsYPosition = 'Y position';
|
||||
rsYResolution = 'Y resolution';
|
||||
|
||||
// *** MakerNote ***
|
||||
|
||||
// Canon
|
||||
rsCanonAELkup = '0:Normal AE,1:Exposure compensation,2:AE lock,'+
|
||||
'3:AE lock + Exposure compensation,4:No AE';
|
||||
{
|
||||
rsCanonAFLkup = '12288:None (MF),12289:Auto-selected,12290:Right,12291:Center,'+
|
||||
'12292:Left';
|
||||
}
|
||||
rsCanonAFLkup = '$2005:Manual AF point selection,$3000:None (MF),' +
|
||||
'$3001:Auto AF point selection,$3002:Right,$3003:Center,$3004:Left,' +
|
||||
'$4001:Auto AF point selection,$4006:Face Detect';
|
||||
rsCanonAutoRotLkup = '0:None,1:Rotate 90 CW,2:Rotate 180,3:Rotate 270 CW';
|
||||
rsCanonBiasLkup = '65472:-2 EV,65484:-1.67 EV,65488:-1.50 EV,65492:-1.33 EV,'+
|
||||
'65504:-1 EV,65516:-0.67 EV,65520:-0.50 EV,65524:-0.33 EV,0:0 EV,'+
|
||||
'12:0.33 EV,16:0.50 EV,20:0.67 EV,32:1 EV,44:1.33 EV,48:1.50 EV,'+
|
||||
'52:1.67 EV,64:2 EV';
|
||||
rsCanonCamTypeLkup = '248:EOS High-end,250:Compact,252:EOS Mid-range,255:DV Camera';
|
||||
rsCanonEasyLkup = '0:Full Auto,1:Manual,2:Landscape,3:Fast Shutter,4:Slow Shutter,'+
|
||||
'5:Night,6:Gray scale,7:Sepia,8:Portrait,9:Sports,10:Macro,11:Black & White,'+
|
||||
'12:Pan Focus,13:Vivid,14:Neutral,15:Flash off,16:Long shutter,'+
|
||||
'17:Super macro,18:Foliage,19:Indoor,20:Fireworks,21:Beach,22:Underwater,'+
|
||||
'23:Snow,24:Kids & Pets,25:Night snapshot,26:Digital macro,27:My colors,'+
|
||||
'28:Movie snap,29:Super macro 2,30:Color accent,31:Color swap,32:Aquarium,'+
|
||||
'33:ISO3200,34:ISO6400,35:Creative light effect,36:Easy,37:Quick shot,'+
|
||||
'38:Creative auto,39:Zoom blur,40:Low light,41:Nostalgic,42:Super vivid,'+
|
||||
'43:Poster effect,44:Face self-timer,45:Smile,46:Wink self-timer,'+
|
||||
'47:Fisheye effect,48:Miniature effect,49:High-speed burst,'+
|
||||
'50:Best image selection,51:High dynamic range,52:Handheld night scene,'+
|
||||
'53:Movie digest,54:Live view control,55:Discreet,56:Blur reduction,'+
|
||||
'57:Monochrome,58:Toy camera effect,59:Scene intelligent auto,'+
|
||||
'60:High-speed burst HQ,61:Smooth skin,62:Soft focus,257:Spotlight,'+
|
||||
'258:Night 2,259:Night+,260:Super night,261:Sunset,263:Night scene,'+
|
||||
'264:Surface,265:Low light 2';
|
||||
rsCanonExposeLkup = '0:Easy shooting,1:Program AE,2:Shutter speed priority AE,'+
|
||||
'3:Aperture priority AE,4:Manual,5:Depth-of-field AE,6:M-Dep,7:Bulb';
|
||||
rsCanonFlashActLkup = '0:Did not fire,1:Fired';
|
||||
rsCanonFlashLkup = '0:Not fired,1:Auto,2:On,3:Red-eye,4:Slow sync,'+
|
||||
'5:Auto+red-eye,6:On+red eye,16:External flash';
|
||||
rsCanonFocalTypeLkup = '1:Fixed,2:Zoom';
|
||||
rsCanonFocTypeLkup = '0:Manual,1:Auto,3:Close-up (macro),8:Locked (pan mode)';
|
||||
rsCanonFocusLkup = '0:One-Shot AF,1:AI Servo AF,2:AI Focus AF,3:Manual focus,'+
|
||||
'4:Single,5:Continuous,6:Manual focus,16:Pan focus,256:AF+MF,'+
|
||||
'512:Movie snap focus,519:Movie servo AF';
|
||||
rsCanonGenLkup = '65535:Low,0:Normal,1:High';
|
||||
rsCanonImgStabLkup = '0:Off,1:On,2:Shoot only,3:Panning,4:Dynamic,256:Off,'+
|
||||
'257:On,258:Shoot only,259:Panning,260:Dynamic';
|
||||
rsCanonISOLkup = '0:Not used,15:auto,16:50,17:100,18:200,19:400';
|
||||
rsCanonMacroLkup = '1:Macro,2:Normal';
|
||||
rsCanonMeterLkup = '0:Default,1:Spot,2:Average,3:Evaluative,4:Partial,'+
|
||||
'5:Center-weighted average';
|
||||
rsCanonPanDirLkup = '0:Left to right,1:Right to left,2:Bottom to top,'+
|
||||
'3:Top to bottom,4:2x2 Matrix (clockwise)';
|
||||
rsCanonQualityLkup = '65535:n/a,1:Economy,2:Normal,3:Fine,4:RAW,5:Superfine,'+
|
||||
'130:Normal Movie,131:Movie (2)';
|
||||
rsCanonRecLkup = '1:JPEG,2:CRW+THM,3:AVI+THM,4:TIF,5:TIF+JPEG,6:CR2,'+
|
||||
'7:CR2+JPEG,9:MOV,10:MP4';
|
||||
rsCanonSizeLkup = '65535:n/a,0:Large,1:Medium,2:Small,4:5 MPixel,5:2 MPixel,'+
|
||||
'6:1.5 MPixel,8:Postcard,9:Widescreen,10:Medium widescreen,14:Small 1,'+
|
||||
'15:Small 2,16:Small 3,128:640x480 movie,129:Medium movie,130:Small movie,'+
|
||||
'137:128x720 movie,142:1920x1080 movie';
|
||||
rsCanonSloShuttLkup = '65535:n/a,0:Off,1:Night scene,2:On,3:None';
|
||||
rsCanonWhiteBalLkup = '0:Auto,1:Daylight,2:Cloudy,3:Tungsten,4:Flourescent,'+
|
||||
'5:Flash,6:Custom,7:Black & white,8:Shade,9:Manual temperature (Kelvin),'+
|
||||
'14:Daylight fluorescent,17:Under water';
|
||||
rsCanonZoomLkup = '0:None,1:2x,2:4x,3:Other';
|
||||
|
||||
// Casio
|
||||
rsCasioAFMode2Lkup = '0:Off,1:Spot,2:Multi,3:Face detection,4:Tracking,5:Intelligent';
|
||||
rsCasioArtMode2Lkup = '0:Normal,8:Silent movie,39:HDR,45:Premium auto,' +
|
||||
'47:Painting,49:Crayon drawing,51:Panorama,52:Art HDR,62:High Speed night shot,'+
|
||||
'64:Monochrome,67:Toy camera,68:Pop art,69:Light tone';
|
||||
rsCasioAutoIso2Lkup = '1:On,2:Off,7:On (high sensitivity),8:On (anti-shake),'+
|
||||
'10:High Speed';
|
||||
rsCasioCCDSensitivityLkup = '64:Normal,125:+1.0,250:+2.0,244:+3.0,80:Normal,'+
|
||||
'100:High';
|
||||
rsCasioColorFilter2Lkup = '0:Off,1:Blue,3:Green,4:Yellow,5:Red,6:Purple,7:Pink';
|
||||
rsCasioColorMode2Lkup = '0:Off,2:Black & White,3:Sepia';
|
||||
rsCasioDigitalZoomLkup = '$10000:Off,$10001:2x Digital zoom,'+
|
||||
'$20000:2x digital zoom,$40000:4x digital zoom';
|
||||
rsCasioDriveMode2Lkup = '0:Single shot,1:Continuous shooting,'+
|
||||
'2:Continuous (2 fps),3:Continuous (3 fps),4:Continuous (4 fps),'+
|
||||
'5:Continuous (5 fps),6:Continuous (6 fps),7:Continuous (7 fps),'+
|
||||
'10:Continuous (10 fps),12:Continuous (12 fps),15:Continuous (15 fps),'+
|
||||
'20:Continuous (20 fps),30:Continuous (30 fps),40:Continuous (40 fps),'+
|
||||
'60:Continuous (60 fps),240:Auto-N';
|
||||
rsCasioEnhancement2Lkup = '0:Off,1:Scenery,3:Green,5:Underwater,9:Flesh tones';
|
||||
rsCasioFlashIntensityLkup = '11:Weak,13:Normal,15:Strong';
|
||||
rsCasioFlashModeLkup = '1:Auto,2:On,3:Off,4:Red-eye reduction';
|
||||
rsCasioFocusingModeLkup = '2:Macro,3:Auto focus,4:Manual focus,5:Infinity';
|
||||
rsCasioFocusMode2Lkup = '0:Normal,1:Macro';
|
||||
rsCasioFocusMode22Lkup = '0:Manual,1:Focus lock,2:Macro,3:Single-area auto focus,'+
|
||||
'5:Infinity,6:Multi-area auto focus,8:Super macro';
|
||||
rsCasioImageSize2Lkup = '0:640 x 480,4:1600 x 1200,5:2048 x 1536,'+
|
||||
'20:2288 x 1712,21:2592 x 1944,22:2304 x 1728,36:3008 x 2008';
|
||||
rsCasioImageStabilization2Lkup = '0:Off,1:On,2:Best shot,3:Movie anti-shake';
|
||||
rsCasioISOSpeed2Lkup = '3 = 50,4:64,6:100,9:200';
|
||||
rsCasioLightingMode2Lkup = '0:Off,1:High dynamic range,5:Shadow enhance low,'+
|
||||
'6:Shadow enhance high';
|
||||
rsCasioPortraitRefiner2Lkup = '0:Off,1:+1,2:+2';
|
||||
rsCasioRecordingModeLkup = '1:Single shutter,2:Panorama,3:Night scene,'+
|
||||
'4:Portrait,5:Landscape';
|
||||
rsCasioRecordMode2Lkup = '2:Program AE,3:Shutter priority,4:Aperture priority,'+
|
||||
'5:Manual,6:Best shot,17:Movie,19:Movie (19),20:YouTube Movie';
|
||||
rsCasioReleaseMode2Lkup = '1:Normal,3:AE Bracketing,11:WB Bracketing,'+
|
||||
'13 = Contrast Bracketing,19:High Speed Burst';
|
||||
rsCasioSharpness2Lkup = '0:Soft,1:Normal,2:Hard';
|
||||
rsCasioSpecialEffectSetting2Lkup = '0:Off,1:Makeup,2:Mist removal,'+
|
||||
'3:Vivid landscape,16:Art shot';
|
||||
rsCasioVideoQuality2Lkup = '1:Standard,3:HD (720p),4:Full HD (1080p),5:Low';
|
||||
rsCasioWhiteBalanceLkup = '1:Auto,2:Tungsten,3:Daylight,4:Fluorescent,'+
|
||||
'5:Shade,129:Manual';
|
||||
rsCasioWhiteBalance2Lkup = '0:Auto,1:Daylight,2:Shade,3:Tungsten,4:Fluorescent,5:Manual';
|
||||
rsCasioWhiteBalance22Lkup = '0:Manual,1:Daylight,2:Cloudy,3:Shade,4:Flash?,'+
|
||||
'6:Fluorescent,9:Tungsten?,10:Tungsten,12:Flash';
|
||||
|
||||
// Fuji
|
||||
rsFujiSharpnessLkup = '0:-4 (softest),1:-3 (very soft),2:-2 (soft),3:0 (normal),' +
|
||||
'4:+2 (hard),5:+3 (very hard),6:+4 (hardest),130:-1 (medium soft),'+
|
||||
'132:+1 (medium hard),32768:Film Simulation,65535:n/a';
|
||||
rsFujiWhiteBalLkup = '0:Auto,256:Daylight,512:Cloudy,768:Daylight Fluorescent,' +
|
||||
'769:Day White Fluorescent,770:White Fluorescent,771:Warm White Fluorescent,'+
|
||||
'772:Living Room Warm White Fluorescent,1024:Incandescent,1280:Flash,'+
|
||||
'1536:Underwater,3840:Custom,3841:Custom2,3842:Custom3,3843:Custom4,'+
|
||||
'3844:Custom5,4080:Kelvin';
|
||||
rsFujiSaturationLkup = '0:0 (normal),128:+1 (medium high),192:+3 (very high),'+
|
||||
'224:+4 (highest),256:+2 (high),384:-1 (medium low),512:Low,768:None (B&W),'+
|
||||
'769:B&W Red Filter,770:B&W Yellow Filter,771:B&W Green Filter,'+
|
||||
'784:B&W Sepia,1024:-2 (low),1216:-3 (very low),1248:-4 (lowest),'+
|
||||
'1280:Acros,1281:Acros Red Filter,1282:Acros Yellow Filter,'+
|
||||
'1283:Acros Green Filter,32768:Film Simulation';
|
||||
rsFujiContrastLkup = '0:Normal,128:Medium High,256:High,384:Medium Low,'+
|
||||
'512:Low,32768:Film Simulation';
|
||||
rsFujiContrastLkup1 = '0:Normal,256:High,768:Low';
|
||||
rsFujiNoiseReductionLkup = '64:Low,128:Normal,256:n/a';
|
||||
rsFujiHighIsoNoiseReductionLkup = '0:0 (normal),256:+2 (strong),'+
|
||||
'384:+1 (medium strong),448:+3 (very strong),480:+4 (strongest)'+
|
||||
'512:-2 (weak),640:-1 (medium weak),704:-3 (very weak),736:-4 (weakest)';
|
||||
rsFujiFlashModeLkup = '0:Auto,1:On,2:Off,3:Red-eye reduction,4:External,'+
|
||||
'16:Commander,32768:Not Attached,33056:TTL,38976:Manual,39040:Multi-flash,'+
|
||||
'43296:1st Curtain (front),51488:2nd Curtain (rear),59680:High Speed Sync (HSS)';
|
||||
rsFujiPictureModeLkup = '0:Auto,1:Portrait,2:Landscape,3:Macro,4:Sports,'+
|
||||
'5:Night Scene,6:Program AE,7:Natural Light,8:Anti-blur,9:Beach & Snow,'+
|
||||
'10:Sunset,11:Museum,12:Party,13:Flower,14:Text,15:Natural Light & Flash,'+
|
||||
'16:Beach,17:Snow,18:Fireworks,19:Underwater,20:Portrait with Skin Correction,'+
|
||||
'22:Panorama,23:Night (tripod),24:Pro Low-light,25:Pro Focus,26:Portrait 2,'+
|
||||
'27:Dog Face Detection,28:Cat Face Detection,64:Advanced Filter,'+
|
||||
'256:Aperture-priority AE,512:Shutter speed priority AE,768:Manual';
|
||||
rsFujiEXRModeLkup = '128:HR (High Resolution),512:SN (Signal to Noise priority),'+
|
||||
'768:DR (Dynamic Range priority)';
|
||||
rsFujiShadowHighlightLkup = '-64:+4 (hardest),-48:+3 (very hard),'+
|
||||
'-32:+2 (hard),-16:+1 (medium hard)';
|
||||
rsFujiShutterTypeLkup = '0:Mechanical,1:Electronic';
|
||||
rsFujiAutoBracketingLkup = '0:Off,1:On,2:No flash & flash';
|
||||
rsFujiPanoramaDirLkup = '1:Right,2:Up,3:Left,4:Down';
|
||||
rsFujiAdvancedFilterLkup = '65536:Pop Color,131072:Hi Key,196608:Toy Camera,'+
|
||||
'262144:Miniature, 327680:Dynamic Tone,327681:Partial Color Red,'+
|
||||
'327682:Partial Color Yellow,327683:Partial Color Green,'+
|
||||
'327684:Partial Color Blue,327685:Partial Color Orange,'+
|
||||
'327686:Partial Color Purple,458752:Soft Focus,589824:Low Key';
|
||||
rsFujiColorModeLkup = '0:Standard,16:Chrome,48:B & W';
|
||||
rsFujiBlurWarningLkup = '0:None,1:Blur Warning';
|
||||
rsFujiFocusWarningLkup = '0:Good,1:Out of focus';
|
||||
rsFujiExposureWarningLkup = '0:Good,1:Bad exposure';
|
||||
rsFujiDynamicRangeLkup = '1:Standard,3:Wide';
|
||||
rsFujiSceneRecognLkup = '0:Unrecognized,256:Portrait Image,512:Landscape Image,'+
|
||||
'768:Night Scene,1024:Macro';
|
||||
|
||||
// Minolta
|
||||
rsMinoltaBracketStepLkup = '0:1/3 EV,1:2/3 EV,2:1 EV';
|
||||
rsMinoltaColorModeLkup = '0:Natural color,1:Black & White,2:Vivid color,'+
|
||||
'3:Solarization,4:Adobe RGB,5:Sepia,9:Natural,12:Portrait,13:Natural sRGB,'+
|
||||
'14:Natural+ sRGB,15:Landscape,16:Evening,17:Night Scene,18:Night Portrait,'+
|
||||
'132:Embed Adobe RGB';
|
||||
rsMinoltaColorProfileLkup = '0:Not embedded,1:Embedded';
|
||||
rsMinoltaDataImprintLkup = '0;None,1:YYYY/MM/DD,2:MM/DD/HH:MM,3:Text,4:Text + ID#';
|
||||
rsMinoltaDECPositionLkup = '0:Exposure,1:Contrast,2:Saturation,3:Filter';
|
||||
rsMinoltaDigitalZoomLkup = '0:Off,1:Electronic magnification,2:2x';
|
||||
rsMinoltaDriveModeLkup = '0:Single,1:Continuous,2:Self-timer,4:Bracketing,'+
|
||||
'5:Interval,6:UHS continuous,7:HS continuous';
|
||||
rsMinoltaExposureModeLkup = '0:Program,1:Aperture priority,2:Shutter priority,3:Manual';
|
||||
rsMinoltaFocusAreaLkup = '0:Wide Focus (normal),1:Spot Focus';
|
||||
rsMinoltaFlashMeteringLkup = '0:ADI (Advanced Distance Integration),1:Pre-flash TTL,2:Manual flash control';
|
||||
rsMinoltaFlashModeLkup = '0:Fill flash,1:Red-eye reduction,2:Rear flash sync,3:Wireless,4:Off?';
|
||||
rsMinoltaFocusModeLkup = '0:AF,1:MF';
|
||||
rsMinoltaFolderNameLkup = '0:Standard Form,1:Data Form';
|
||||
rsMinoltaImageSizeLkup = '1:1600x1200,2:1280x960,3:640x480,5:2560x1920,6:2272x1704,7:2048x1536';
|
||||
rsMinoltaImageSizeLkup1 = '0:Full,1:1600x1200,2:1280x960,3:640x480,6:2080x1560,7:2560x1920,8;3264x2176';
|
||||
rsMinoltaImageStabLkup = '1:Off,5:On';
|
||||
rsMinoltaInternalFlashLkup = '0:No,1:Fired';
|
||||
rsMinoltaIntervalModeLkup = '0:Still image,1:Time-lapse movie';
|
||||
rsMinoltaIsoSettingLkup = '0:100,1:200,2:400,3:800,4:Auto,5:64';
|
||||
rsMinoltaMeteringModeLkup = '0:Multi-segment,1:Center-weighted average,2:Spot';
|
||||
rsMinoltaModelIDLkup = '0:DiMAGE 7/X1/X21 or X31,1:DiMAGE 5,2:DiMAGE S304,'+
|
||||
'3:DiMAGE S404,4:DiMAGE 7i,5:DiMAGE 7Hi,6:DiMAGE A1,7:DiMAGE A2 or S414';
|
||||
rsMinoltaQualityLkup = '0:Raw,1:Super Fine,2:Fine,3:Standard,4:Economy,5:Extra fine';
|
||||
rsMinoltaSceneModeLkup = '0:Standard,1:Portrait,2:Text,3:Night Scene,'+
|
||||
'4:Sunset,5:Sports,6:Landscape,7:Night Portrait,8:Macro,9:Super Macro,'+
|
||||
'16:Auto,17:Night View/Portrait,18:Sweep Panorama,19:Handheld Night Shot,'+
|
||||
'20:Anti Motion Blur,21:Cont. Priority AE,22:Auto+,23:3D Sweep Panorama,'+
|
||||
'24:Superior Auto,25:High Sensitivity,26:Fireworks,27:Food,28:Pet,33:HDR,'+
|
||||
'65535:n/a';
|
||||
rsMinoltaSharpnessLkup = '0:Hard,1:Normal,2:Soft';
|
||||
rsMinoltaSubjectProgramLkup = '0:None,1:Portrait,2:Text,3:Night portrait,4:Sunset,5:Sports action';
|
||||
rsMinoltaTeleconverterLkup = '$0:None,$4:Minolta/Sony AF 1.4x APO (D) (0x04),'+
|
||||
'$5:Minolta/Sony AF 2x APO (D) (0x05),$48 = Minolta/Sony AF 2x APO (D),'+
|
||||
'$50:Minolta AF 2x APO II,$60:Minolta AF 2x APO,$88:Minolta/Sony AF 1.4x APO (D),'+
|
||||
'$90 = Minolta AF 1.4x APO II,$A0 = Minolta AF 1.4x APO';
|
||||
rsMinoltaWhiteBalanceLkup = '$00:Auto,$01:Color Temperature/Color Filter,$10:Daylight,'+
|
||||
'$20:Cloudy,$30:Shade,$40:Tungsten,$50:Flash,$60:Fluorescent,$70:Custom';
|
||||
rsMinoltaWideFocusZoneLkup = '0:No zone,1:Center zone (horizontal orientation),'+
|
||||
'2:Center zone (vertical orientation),3:Left zone,4:Right zone';
|
||||
rsMinoltaZoneMatchingLkup = '0:ISO Setting Used,1:High Key,2:Low Key';
|
||||
|
||||
// Nikon
|
||||
rsNikonColorModeLkup = '1:Color,2:Monochrome';
|
||||
rsNikonConverterLkup = '0:Not used,1:Used';
|
||||
rsNikonImgAdjLkup = '0:Normal,1:Bright+,2:Bright-,3:Contrast+,4:Contrast-';
|
||||
rsNikonISOLkup = '0:ISO80,2:ISO160,4:ISO320,5:ISO100';
|
||||
rsNikonQualityLkup = '1:Vga Basic,2:Vga Normal,3:Vga Fine,4:SXGA Basic,'+
|
||||
'5:SXGA Normal,6:SXGA Fine,10:2 Mpixel Basic,11:2 Mpixel Normal,'+
|
||||
'12:2 Mpixel Fine';
|
||||
rsNikonWhiteBalanceLkup = '0:Auto,1:Preset,2:Daylight,3:Incandescense,'+
|
||||
'4:Fluorescence,5:Cloudy,6:SpeedLight';
|
||||
|
||||
// Olympus
|
||||
rsOlympusCCDScanModeLkup = '0:Interlaced,1:Progressive';
|
||||
rsOlympusContrastLkup = '0:High,1:Normal,2:Low';
|
||||
rsOlympusFlashDevLkup = '0:None,1:Internal,4:External,5:Internal + External';
|
||||
rsOlympusFlashModeLkup = '2:On,3;Off';
|
||||
rsOlympusFlashModelLkup = '0:None,1:FL-20,2:FL-50,3:RF-11,4:TF-22,5:FL-36,'+
|
||||
'6:FL-50R,7:FL-36R,9:FL-14,11:FL-600R';
|
||||
rsOlympusFlashTypeLkup = '0:None,2:Simple E-System,3:E-System';
|
||||
rsOlympusJpegQualLkup = '1:SQ,2:HQ,3:SHQ,4:Raw';
|
||||
rsOlympusMacroLkup = '0:Off,1:On,2:Super Macro';
|
||||
rsOlympusPreviewImgLength = 'Preview image length';
|
||||
rsOlympusPreviewImgStart = 'Preview image start';
|
||||
rsOlympusPreviewImgValid = 'Preview image valid';
|
||||
rsOlympusSharpnessLkup = '0:Normal,1:Hard,2:Soft';
|
||||
rsOlympusSceneModeLkup = '0:Normal,1:Standard,2:Auto,3:Intelligent Auto,' +
|
||||
'4:Portrait,5:Landscape+Portrait,6:Landscape,7:Night Scene,8:Night+Portrait' +
|
||||
'9:Sport,10:Self Portrait,11:Indoor,12:Beach & Snow,13:Beach,14:Snow,' +
|
||||
'15:Self Portrait+Self Timer,16:Sunset,17:Cuisine,18:Documents,19:Candle,' +
|
||||
'20:Fireworks,21:Available Light,22:Vivid,23:Underwater Wide1,24:Underwater Macro,' +
|
||||
'25:Museum,26:Behind Glass,27:Auction,28:Shoot & Select1,29:Shoot & Select2,'+
|
||||
'30:Underwater Wide2,31:Digital Image Stabilization,32:Face Portrait,33:Pet,'+
|
||||
'34:Smile Shot,35:Quick Shutter,43:Hand-held Starlight,100:Panorama,'+
|
||||
'101:Magic Filter,103:HDR';
|
||||
|
||||
// Sanyo
|
||||
rsSanyoMacroLkup = '0:Normal,1:Macro,2:View,3:Manual';
|
||||
rsSanyoQualityLkup = '0:Normal/Very Low,1:Normal/Low,2:Normal/Medium Low,'+
|
||||
'3:Normal/Medium,4:Normal/Medium High,5:Normal/High,6:Normal/Very High'+
|
||||
'7:Normal/Super High,256:Fine/Very Low,257:Fine/Low,258:Fine/Medium Low'+
|
||||
'259:Fine/Medium,260:Fine/Medium High,261:Fine/High,262:Fine/Very High'+
|
||||
'263:Fine/Super High,512:Super Fine/Very Low,513:Super Fine/Low,'+
|
||||
'514:Super Fine/Medium Low,515:Super Fine/Medium,516:Super Fine/Medium High,'+
|
||||
'517:Super Fine/High,518:Super Fine/Very High,519:Super Fine/Super High';
|
||||
rsSanyoSpecialMode = 'Special mode';
|
||||
|
||||
|
||||
// *** IPTC tags ***
|
||||
|
||||
|
@ -319,7 +319,10 @@ const
|
||||
TSubIFDTag // IFD
|
||||
);
|
||||
|
||||
(*
|
||||
function SameIntegerFunc(AKey1, AKey2: String): Boolean;
|
||||
function SameStringFunc(AKey1, AKey2: String): Boolean;
|
||||
|
||||
(*
|
||||
{ TTagGroups }
|
||||
|
||||
function GetGroupFromGeneratingTagID(ATagID: TTagID): TTagGroup;
|
||||
|
@ -12,7 +12,7 @@
|
||||
<Description Value="Library for displaying and editing of meta data (EXIF, IPTC) in images."/>
|
||||
<License Value="LGPL with linking exception (like Lazarus)"/>
|
||||
<Version Minor="1"/>
|
||||
<Files Count="12">
|
||||
<Files Count="19">
|
||||
<Item1>
|
||||
<Filename Value="fpeglobal.pas"/>
|
||||
<UnitName Value="fpeGlobal"/>
|
||||
@ -61,6 +61,34 @@
|
||||
<Filename Value="fpemakernote.pas"/>
|
||||
<UnitName Value="fpeMakerNote"/>
|
||||
</Item12>
|
||||
<Item13>
|
||||
<Filename Value="fpemakernotenikon.pas"/>
|
||||
<UnitName Value="fpeMakerNoteNikon"/>
|
||||
</Item13>
|
||||
<Item14>
|
||||
<Filename Value="fpemakernotecanoncasio.pas"/>
|
||||
<UnitName Value="fpeMakerNoteCanonCasio"/>
|
||||
</Item14>
|
||||
<Item15>
|
||||
<Filename Value="fpemakernoteminolta.pas"/>
|
||||
<UnitName Value="fpeMakerNoteMinolta"/>
|
||||
</Item15>
|
||||
<Item16>
|
||||
<Filename Value="fpemakernoteolympus.pas"/>
|
||||
<UnitName Value="fpeMakerNoteOlympus"/>
|
||||
</Item16>
|
||||
<Item17>
|
||||
<Filename Value="fpemakernoteepson.pas"/>
|
||||
<UnitName Value="fpeMakerNoteEpson"/>
|
||||
</Item17>
|
||||
<Item18>
|
||||
<Filename Value="fpemakernotefuji.pas"/>
|
||||
<UnitName Value="fpeMakerNoteFuji"/>
|
||||
</Item18>
|
||||
<Item19>
|
||||
<Filename Value="fpemakernotesanyo.pas"/>
|
||||
<UnitName Value="fpemakernotesanyo"/>
|
||||
</Item19>
|
||||
</Files>
|
||||
<i18n>
|
||||
<EnableI18N Value="True"/>
|
||||
|
@ -4,11 +4,14 @@
|
||||
|
||||
unit fpexif_pkg;
|
||||
|
||||
{$warn 5023 off : no warning about unused units}
|
||||
interface
|
||||
|
||||
uses
|
||||
fpeGlobal, fpeTags, fpeUtils, fpeMetadata, fpeExifReadWrite,
|
||||
fpeIptcReadWrite, fpeExifData, fpeIptcData, fpeStrConsts, fpeMakerNote;
|
||||
fpeIptcReadWrite, fpeExifData, fpeIptcData, fpeStrConsts, fpeMakerNote,
|
||||
fpeMakerNoteNikon, fpeMakerNoteCanonCasio, fpeMakerNoteMinolta,
|
||||
fpeMakerNoteOlympus, fpeMakerNoteEpson, fpeMakerNoteFuji, fpemakernotesanyo;
|
||||
|
||||
implementation
|
||||
|
||||
|
@ -55,214 +55,6 @@ msgstr ""
|
||||
msgid "The metadata structure cannot be saved because the file format of the receiving file is not known or not supported."
|
||||
msgstr "Die Metadaten-Struktur kann nicht gespeichert werden, weil das Format der Zieldatei nicht bekannt ist oder nicht unterstützt wird."
|
||||
|
||||
#: fpestrconsts.rscanonaelkup
|
||||
msgid "0:Normal AE,1:Exposure compensation,2:AE lock,3:AE lock + Exposure compensation,4:No AE"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonaflkup
|
||||
msgid "$2005:Manual AF point selection,$3000:None (MF),$3001:Auto AF point selection,$3002:Right,$3003:Center,$3004:Left,$4001:Auto AF point selection,$4006:Face Detect"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonautorotlkup
|
||||
msgid "0:None,1:Rotate 90 CW,2:Rotate 180,3:Rotate 270 CW"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonbiaslkup
|
||||
msgid "65472:-2 EV,65484:-1.67 EV,65488:-1.50 EV,65492:-1.33 EV,65504:-1 EV,65516:-0.67 EV,65520:-0.50 EV,65524:-0.33 EV,0:0 EV,12:0.33 EV,16:0.50 EV,20:0.67 EV,32:1 EV,44:1.33 EV,48:1.50 EV,52:1.67 EV,64:2 EV"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanoncamtypelkup
|
||||
msgid "248:EOS High-end,250:Compact,252:EOS Mid-range,255:DV Camera"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanoneasylkup
|
||||
msgid "0:Full Auto,1:Manual,2:Landscape,3:Fast Shutter,4:Slow Shutter,5:Night,6:Gray scale,7:Sepia,8:Portrait,9:Sports,10:Macro,11:Black & White,12:Pan Focus,13:Vivid,14:Neutral,15:Flash off,16:Long shutter,17:Super macro,18:Foliage,19:Indoor,20:Fireworks,21:Beach,22:Underwater,23:Snow,24:Kids & Pets,25:Night snapshot,26:Digital macro,27:My colors,28:Movie snap,29:Super macro 2,30:Color accent,31:Color swap,32:Aquarium,33:ISO3200,34:ISO6400,35:Creative light effect,36:Easy,37:Quick shot,38:Creative auto,39:Zoom blur,40:Low light,41:Nostalgic,42:Super vivid,43:Poster effect,44:Face self-timer,45:Smile,46:Wink self-timer,47:Fisheye effect,48:Miniature effect,49:High-speed burst,50:Best image selection,51:High dynamic range,52:Handheld night scene,53:Movie digest,54:Live view control,55:Discreet,56:Blur reduction,57:Monochrome,58:Toy camera effect,59:Scene intelligent auto,60:High-speed burst HQ,61:Smooth skin,62:Soft focus,257:Spotlight,258:Night 2,259:Night+,260:Super night,261:Sunset,263:Night scene,264:Surface,265:Low light 2"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonexposelkup
|
||||
msgid "0:Easy shooting,1:Program AE,2:Shutter speed priority AE,3:Aperture priority AE,4:Manual,5:Depth-of-field AE,6:M-Dep,7:Bulb"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonflashactlkup
|
||||
msgid "0:Did not fire,1:Fired"
|
||||
msgstr "0:Hat nicht ausgelöst,1:Ausgelöst"
|
||||
|
||||
#: fpestrconsts.rscanonflashlkup
|
||||
msgid "0:Not fired,1:Auto,2:On,3:Red-eye,4:Slow sync,5:Auto+red-eye,6:On+red eye,16:External flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfocaltypelkup
|
||||
msgid "1:Fixed,2:Zoom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfoctypelkup
|
||||
msgid "0:Manual,1:Auto,3:Close-up (macro),8:Locked (pan mode)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfocuslkup
|
||||
msgid "0:One-Shot AF,1:AI Servo AF,2:AI Focus AF,3:Manual focus,4:Single,5:Continuous,6:Manual focus,16:Pan focus,256:AF+MF,512:Movie snap focus,519:Movie servo AF"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanongenlkup
|
||||
msgid "65535:Low,0:Normal,1:High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonimgstablkup
|
||||
msgid "0:Off,1:On,2:Shoot only,3:Panning,4:Dynamic,256:Off,257:On,258:Shoot only,259:Panning,260:Dynamic"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonisolkup
|
||||
msgid "0:Not used,15:auto,16:50,17:100,18:200,19:400"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonmacrolkup
|
||||
msgid "1:Macro,2:Normal"
|
||||
msgstr "1:Makro,2:Normal"
|
||||
|
||||
#: fpestrconsts.rscanonmeterlkup
|
||||
msgid "0:Default,1:Spot,2:Average,3:Evaluative,4:Partial,5:Center-weighted average"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonpandirlkup
|
||||
msgid "0:Left to right,1:Right to left,2:Bottom to top,3:Top to bottom,4:2x2 Matrix (clockwise)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonqualitylkup
|
||||
msgid "65535:n/a,1:Economy,2:Normal,3:Fine,4:RAW,5:Superfine,130:Normal Movie,131:Movie (2)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonreclkup
|
||||
msgid "1:JPEG,2:CRW+THM,3:AVI+THM,4:TIF,5:TIF+JPEG,6:CR2,7:CR2+JPEG,9:MOV,10:MP4"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonsizelkup
|
||||
msgid "65535:n/a,0:Large,1:Medium,2:Small,4:5 MPixel,5:2 MPixel,6:1.5 MPixel,8:Postcard,9:Widescreen,10:Medium widescreen,14:Small 1,15:Small 2,16:Small 3,128:640x480 movie,129:Medium movie,130:Small movie,137:128x720 movie,142:1920x1080 movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonsloshuttlkup
|
||||
msgid "65535:n/a,0:Off,1:Night scene,2:On,3:None"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonwhiteballkup
|
||||
msgid "0:Auto,1:Daylight,2:Cloudy,3:Tungsten,4:Flourescent,5:Flash,6:Custom,7:Black & white,8:Shade,9:Manual temperature (Kelvin),14:Daylight fluorescent,17:Under water"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonzoomlkup
|
||||
msgid "0:None,1:2x,2:4x,3:Other"
|
||||
msgstr "0:Nichts,1:2x,2:4x,3:Anderer Wert"
|
||||
|
||||
#: fpestrconsts.rscasioafmode2lkup
|
||||
msgid "0:Off,1:Spot,2:Multi,3:Face detection,4:Tracking,5:Intelligent"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioartmode2lkup
|
||||
msgid "0:Normal,8:Silent movie,39:HDR,45:Premium auto,47:Painting,49:Crayon drawing,51:Panorama,52:Art HDR,62:High Speed night shot,64:Monochrome,67:Toy camera,68:Pop art,69:Light tone"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioautoiso2lkup
|
||||
msgid "1:On,2:Off,7:On (high sensitivity),8:On (anti-shake),10:High Speed"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioccdsensitivitylkup
|
||||
msgid "64:Normal,125:+1.0,250:+2.0,244:+3.0,80:Normal,100:High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiocolorfilter2lkup
|
||||
msgid "0:Off,1:Blue,3:Green,4:Yellow,5:Red,6:Purple,7:Pink"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiocolormode2lkup
|
||||
msgid "0:Off,2:Black & White,3:Sepia"
|
||||
msgstr "0:Aus,1:Schwarzweiß,2:Sepia"
|
||||
|
||||
#: fpestrconsts.rscasiodigitalzoomlkup
|
||||
msgid "$10000:Off,$10001:2x Digital zoom,$20000:2x digital zoom,$40000:4x digital zoom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiodrivemode2lkup
|
||||
msgid "0:Single shot,1:Continuous shooting,2:Continuous (2 fps),3:Continuous (3 fps),4:Continuous (4 fps),5:Continuous (5 fps),6:Continuous (6 fps),7:Continuous (7 fps),10:Continuous (10 fps),12:Continuous (12 fps),15:Continuous (15 fps),20:Continuous (20 fps),30:Continuous (30 fps),40:Continuous (40 fps),60:Continuous (60 fps),240:Auto-N"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioenhancement2lkup
|
||||
msgid "0:Off,1:Scenery,3:Green,5:Underwater,9:Flesh tones"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioflashintensitylkup
|
||||
msgid "11:Weak,13:Normal,15:Strong"
|
||||
msgstr "11:Schwach,13:Normal,15:Stark"
|
||||
|
||||
#: fpestrconsts.rscasioflashmodelkup
|
||||
msgid "1:Auto,2:On,3:Off,4:Red-eye reduction"
|
||||
msgstr "1:Auto,2:Ein,3:Unterdrückung von roten Augen"
|
||||
|
||||
#: fpestrconsts.rscasiofocusingmodelkup
|
||||
msgid "2:Macro,3:Auto focus,4:Manual focus,5:Infinity"
|
||||
msgstr "2:Makro,3:Auto-Fokus,4:Manuelle Entfernungseinstellung,5:Unendlich"
|
||||
|
||||
#: fpestrconsts.rscasiofocusmode22lkup
|
||||
msgid "0:Manual,1:Focus lock,2:Macro,3:Single-area auto focus,5:Infinity,6:Multi-area auto focus,8:Super macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiofocusmode2lkup
|
||||
msgid "0:Normal,1:Macro"
|
||||
msgstr "0:Normal,1:Makro"
|
||||
|
||||
#: fpestrconsts.rscasioimagesize2lkup
|
||||
msgid "0:640 x 480,4:1600 x 1200,5:2048 x 1536,20:2288 x 1712,21:2592 x 1944,22:2304 x 1728,36:3008 x 2008"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioimagestabilization2lkup
|
||||
msgid "0:Off,1:On,2:Best shot,3:Movie anti-shake"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioisospeed2lkup
|
||||
msgid "3 = 50,4:64,6:100,9:200"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiolightingmode2lkup
|
||||
msgid "0:Off,1:High dynamic range,5:Shadow enhance low,6:Shadow enhance high"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioportraitrefiner2lkup
|
||||
msgid "0:Off,1:+1,2:+2"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiorecordingmodelkup
|
||||
msgid "1:Single shutter,2:Panorama,3:Night scene,4:Portrait,5:Landscape"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiorecordmode2lkup
|
||||
msgid "2:Program AE,3:Shutter priority,4:Aperture priority,5:Manual,6:Best shot,17:Movie,19:Movie (19),20:YouTube Movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioreleasemode2lkup
|
||||
msgid "1:Normal,3:AE Bracketing,11:WB Bracketing,13 = Contrast Bracketing,19:High Speed Burst"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiosharpness2lkup
|
||||
msgid "0:Soft,1:Normal,2:Hard"
|
||||
msgstr "0:Weich,1:Normal,2:Hart"
|
||||
|
||||
#: fpestrconsts.rscasiospecialeffectsetting2lkup
|
||||
msgid "0:Off,1:Makeup,2:Mist removal,3:Vivid landscape,16:Art shot"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiovideoquality2lkup
|
||||
msgid "1:Standard,3:HD (720p),4:Full HD (1080p),5:Low"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalance22lkup
|
||||
msgid "0:Manual,1:Daylight,2:Cloudy,3:Shade,4:Flash?,6:Fluorescent,9:Tungsten?,10:Tungsten,12:Flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalance2lkup
|
||||
msgid "0:Auto,1:Daylight,2:Shade,3:Tungsten,4:Fluorescent,5:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalancelkup
|
||||
msgid "1:Auto,2:Tungsten,3:Daylight,4:Fluorescent,5:Shade,129:Manual"
|
||||
msgstr "1:Auto,2:Wolframlampe,3:Tagelicht,4:Leuchstoffröhre,5:Schatten,129:Manuell"
|
||||
|
||||
#: fpestrconsts.rscategory
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
@ -521,90 +313,6 @@ msgstr ""
|
||||
msgid "Focal plane y resolution"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiadvancedfilterlkup
|
||||
msgid "65536:Pop Color,131072:Hi Key,196608:Toy Camera,262144:Miniature, 327680:Dynamic Tone,327681:Partial Color Red,327682:Partial Color Yellow,327683:Partial Color Green,327684:Partial Color Blue,327685:Partial Color Orange,327686:Partial Color Purple,458752:Soft Focus,589824:Low Key"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiautobracketinglkup
|
||||
msgid "0:Off,1:On,2:No flash & flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiblurwarninglkup
|
||||
msgid "0:None,1:Blur Warning"
|
||||
msgstr "0:Nichts,1:Unschärfewarnung"
|
||||
|
||||
#: fpestrconsts.rsfujicolormodelkup
|
||||
msgid "0:Standard,16:Chrome,48:B & W"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujicontrastlkup
|
||||
msgid "0:Normal,128:Medium High,256:High,384:Medium Low,512:Low,32768:Film Simulation"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujicontrastlkup1
|
||||
msgid "0:Normal,256:High,768:Low"
|
||||
msgstr "0:Normal,256:Hoch,768:Niedrig"
|
||||
|
||||
#: fpestrconsts.rsfujidynamicrangelkup
|
||||
msgid "1:Standard,3:Wide"
|
||||
msgstr "1:Standard,3:Breit"
|
||||
|
||||
#: fpestrconsts.rsfujiexposurewarninglkup
|
||||
msgid "0:Good,1:Bad exposure"
|
||||
msgstr "0:Gut,1:Schlecht belichtet"
|
||||
|
||||
#: fpestrconsts.rsfujiexrmodelkup
|
||||
msgid "128:HR (High Resolution),512:SN (Signal to Noise priority),768:DR (Dynamic Range priority)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiflashmodelkup
|
||||
msgid "0:Auto,1:On,2:Off,3:Red-eye reduction,4:External,16:Commander,32768:Not Attached,33056:TTL,38976:Manual,39040:Multi-flash,43296:1st Curtain (front),51488:2nd Curtain (rear),59680:High Speed Sync (HSS)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujifocuswarninglkup
|
||||
msgid "0:Good,1:Out of focus"
|
||||
msgstr "0:Gut,1:Unscharf"
|
||||
|
||||
#: fpestrconsts.rsfujihighisonoisereductionlkup
|
||||
msgid "0:0 (normal),256:+2 (strong),384:+1 (medium strong),448:+3 (very strong),480:+4 (strongest)512:-2 (weak),640:-1 (medium weak),704:-3 (very weak),736:-4 (weakest)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujinoisereductionlkup
|
||||
msgid "64:Low,128:Normal,256:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujipanoramadirlkup
|
||||
msgid "1:Right,2:Up,3:Left,4:Down"
|
||||
msgstr "1:Rechts,2:Oben,3:Links,4:Unten"
|
||||
|
||||
#: fpestrconsts.rsfujipicturemodelkup
|
||||
msgid "0:Auto,1:Portrait,2:Landscape,3:Macro,4:Sports,5:Night Scene,6:Program AE,7:Natural Light,8:Anti-blur,9:Beach & Snow,10:Sunset,11:Museum,12:Party,13:Flower,14:Text,15:Natural Light & Flash,16:Beach,17:Snow,18:Fireworks,19:Underwater,20:Portrait with Skin Correction,22:Panorama,23:Night (tripod),24:Pro Low-light,25:Pro Focus,26:Portrait 2,27:Dog Face Detection,28:Cat Face Detection,64:Advanced Filter,256:Aperture-priority AE,512:Shutter speed priority AE,768:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujisaturationlkup
|
||||
msgid "0:0 (normal),128:+1 (medium high),192:+3 (very high),224:+4 (highest),256:+2 (high),384:-1 (medium low),512:Low,768:None (B&W),769:B&W Red Filter,770:B&W Yellow Filter,771:B&W Green Filter,784:B&W Sepia,1024:-2 (low),1216:-3 (very low),1248:-4 (lowest),1280:Acros,1281:Acros Red Filter,1282:Acros Yellow Filter,1283:Acros Green Filter,32768:Film Simulation"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiscenerecognlkup
|
||||
msgid "0:Unrecognized,256:Portrait Image,512:Landscape Image,768:Night Scene,1024:Macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujishadowhighlightlkup
|
||||
msgid "-64:+4 (hardest),-48:+3 (very hard),-32:+2 (hard),-16:+1 (medium hard)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujisharpnesslkup
|
||||
msgid "0:-4 (softest),1:-3 (very soft),2:-2 (soft),3:0 (normal),4:+2 (hard),5:+3 (very hard),6:+4 (hardest),130:-1 (medium soft),132:+1 (medium hard),32768:Film Simulation,65535:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujishuttertypelkup
|
||||
msgid "0:Mechanical,1:Electronic"
|
||||
msgstr "0:Mechanisch,1:Elektronisch"
|
||||
|
||||
#: fpestrconsts.rsfujiwhiteballkup
|
||||
msgid "0:Auto,256:Daylight,512:Cloudy,768:Daylight Fluorescent,769:Day White Fluorescent,770:White Fluorescent,771:Warm White Fluorescent,772:Living Room Warm White Fluorescent,1024:Incandescent,1280:Flash,1536:Underwater,3840:Custom,3841:Custom2,3842:Custom3,3843:Custom4,3844:Custom5,4080:Kelvin"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsgaincontrol
|
||||
msgid "Gain control"
|
||||
msgstr "Verstärkungsregelung"
|
||||
@ -1001,122 +709,6 @@ msgstr "Belichtungsmess-Modus"
|
||||
msgid "0:Unknown,1:Average,2:Center-weighted average,3:Spot,4:Multi-spot,5:Multi-segment,6:Partial,255:Other"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltabracketsteplkup
|
||||
msgid "0:1/3 EV,1:2/3 EV,2:1 EV"
|
||||
msgstr "0:1/3 EV,1:2/3 EV,2:1 EV"
|
||||
|
||||
#: fpestrconsts.rsminoltacolormodelkup
|
||||
msgid "0:Natural color,1:Black & White,2:Vivid color,3:Solarization,4:Adobe RGB,5:Sepia,9:Natural,12:Portrait,13:Natural sRGB,14:Natural+ sRGB,15:Landscape,16:Evening,17:Night Scene,18:Night Portrait,132:Embed Adobe RGB"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltacolorprofilelkup
|
||||
msgid "0:Not embedded,1:Embedded"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadataimprintlkup
|
||||
msgid "0;None,1:YYYY/MM/DD,2:MM/DD/HH:MM,3:Text,4:Text + ID#"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadecpositionlkup
|
||||
msgid "0:Exposure,1:Contrast,2:Saturation,3:Filter"
|
||||
msgstr "0:Belichtung,1:Kontrast,2:Sättigung,3:Filter"
|
||||
|
||||
#: fpestrconsts.rsminoltadigitalzoomlkup
|
||||
msgid "0:Off,1:Electronic magnification,2:2x"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadrivemodelkup
|
||||
msgid "0:Single,1:Continuous,2:Self-timer,4:Bracketing,5:Interval,6:UHS continuous,7:HS continuous"
|
||||
msgstr "0:Einzeln,1:Ständig,2:Selbstauslöser,4:Belichtungsreihe,4:Intervall,6:UHS ständig,7:HS ständig"
|
||||
|
||||
#: fpestrconsts.rsminoltaexposuremodelkup
|
||||
msgid "0:Program,1:Aperture priority,2:Shutter priority,3:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaflashmeteringlkup
|
||||
msgid "0:ADI (Advanced Distance Integration),1:Pre-flash TTL,2:Manual flash control"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaflashmodelkup
|
||||
msgid "0:Fill flash,1:Red-eye reduction,2:Rear flash sync,3:Wireless,4:Off?"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltafocusarealkup
|
||||
msgid "0:Wide Focus (normal),1:Spot Focus"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltafocusmodelkup
|
||||
msgid "0:AF,1:MF"
|
||||
msgstr "0:AF,1:MF"
|
||||
|
||||
#: fpestrconsts.rsminoltafoldernamelkup
|
||||
msgid "0:Standard Form,1:Data Form"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaimagesizelkup
|
||||
msgid "1:1600x1200,2:1280x960,3:640x480,5:2560x1920,6:2272x1704,7:2048x1536"
|
||||
msgstr "1:1600x1200,2:1280x960,3:640x480,5:2560x1920,6:2272x1704,7:2048x1536"
|
||||
|
||||
#: fpestrconsts.rsminoltaimagesizelkup1
|
||||
msgid "0:Full,1:1600x1200,2:1280x960,3:640x480,6:2080x1560,7:2560x1920,8;3264x2176"
|
||||
msgstr "0:Full,1:1600x1200,2:1280x960,3:640x480,6:2080x1560,7:2560x1920,8;3264x2176"
|
||||
|
||||
#: fpestrconsts.rsminoltaimagestablkup
|
||||
msgid "1:Off,5:On"
|
||||
msgstr "1:Aus,2:Ein"
|
||||
|
||||
#: fpestrconsts.rsminoltainternalflashlkup
|
||||
msgid "0:No,1:Fired"
|
||||
msgstr "0:Nein,1:Ausgelöst"
|
||||
|
||||
#: fpestrconsts.rsminoltaintervalmodelkup
|
||||
msgid "0:Still image,1:Time-lapse movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaisosettinglkup
|
||||
msgid "0:100,1:200,2:400,3:800,4:Auto,5:64"
|
||||
msgstr "0:100,1:200,2:400,3:800,4:Auto,5:64"
|
||||
|
||||
#: fpestrconsts.rsminoltameteringmodelkup
|
||||
msgid "0:Multi-segment,1:Center-weighted average,2:Spot"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltamodelidlkup
|
||||
msgid "0:DiMAGE 7/X1/X21 or X31,1:DiMAGE 5,2:DiMAGE S304,3:DiMAGE S404,4:DiMAGE 7i,5:DiMAGE 7Hi,6:DiMAGE A1,7:DiMAGE A2 or S414"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaqualitylkup
|
||||
msgid "0:Raw,1:Super Fine,2:Fine,3:Standard,4:Economy,5:Extra fine"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltascenemodelkup
|
||||
msgid "0:Standard,1:Portrait,2:Text,3:Night Scene,4:Sunset,5:Sports,6:Landscape,7:Night Portrait,8:Macro,9:Super Macro,16:Auto,17:Night View/Portrait,18:Sweep Panorama,19:Handheld Night Shot,20:Anti Motion Blur,21:Cont. Priority AE,22:Auto+,23:3D Sweep Panorama,24:Superior Auto,25:High Sensitivity,26:Fireworks,27:Food,28:Pet,33:HDR,65535:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltasharpnesslkup
|
||||
msgid "0:Hard,1:Normal,2:Soft"
|
||||
msgstr "0:Hart,1:Normal,2:Weich"
|
||||
|
||||
#: fpestrconsts.rsminoltasubjectprogramlkup
|
||||
msgid "0:None,1:Portrait,2:Text,3:Night portrait,4:Sunset,5:Sports action"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltateleconverterlkup
|
||||
msgid "$0:None,$4:Minolta/Sony AF 1.4x APO (D) (0x04),$5:Minolta/Sony AF 2x APO (D) (0x05),$48 = Minolta/Sony AF 2x APO (D),$50:Minolta AF 2x APO II,$60:Minolta AF 2x APO,$88:Minolta/Sony AF 1.4x APO (D),$90 = Minolta AF 1.4x APO II,$A0 = Minolta AF 1.4x APO"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltawhitebalancelkup
|
||||
msgid "$00:Auto,$01:Color Temperature/Color Filter,$10:Daylight,$20:Cloudy,$30:Shade,$40:Tungsten,$50:Flash,$60:Fluorescent,$70:Custom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltawidefocuszonelkup
|
||||
msgid "0:No zone,1:Center zone (horizontal orientation),2:Center zone (vertical orientation),3:Left zone,4:Right zone"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltazonematchinglkup
|
||||
msgid "0:ISO Setting Used,1:High Key,2:Low Key"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminsamplevalue
|
||||
msgid "Min sample value"
|
||||
msgstr "Minimaler Abtastwert"
|
||||
@ -1129,30 +721,6 @@ msgstr "Modell"
|
||||
msgid "More thumbnail tags than expected."
|
||||
msgstr "Mehr Vorschaubild-Tags als erwartet."
|
||||
|
||||
#: fpestrconsts.rsnikoncolormodelkup
|
||||
msgid "1:Color,2:Monochrome"
|
||||
msgstr "1:Farbe,2:Monochrom"
|
||||
|
||||
#: fpestrconsts.rsnikonconverterlkup
|
||||
msgid "0:Not used,1:Used"
|
||||
msgstr "0:Nicht benutzt,1:Benutzt"
|
||||
|
||||
#: fpestrconsts.rsnikonimgadjlkup
|
||||
msgid "0:Normal,1:Bright+,2:Bright-,3:Contrast+,4:Contrast-"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonisolkup
|
||||
msgid "0:ISO80,2:ISO160,4:ISO320,5:ISO100"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonqualitylkup
|
||||
msgid "1:Vga Basic,2:Vga Normal,3:Vga Fine,4:SXGA Basic,5:SXGA Normal,6:SXGA Fine,10:2 Mpixel Basic,11:2 Mpixel Normal,12:2 Mpixel Fine"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonwhitebalancelkup
|
||||
msgid "0:Auto,1:Preset,2:Daylight,3:Incandescense,4:Fluorescence,5:Cloudy,6:SpeedLight"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnormallowhigh
|
||||
msgctxt "fpestrconsts.rsnormallowhigh"
|
||||
msgid "0:Normal,1:Low,2:High"
|
||||
@ -1163,7 +731,7 @@ msgctxt "fpestrconsts.rsnormalsofthard"
|
||||
msgid "0:Normal,1:Soft,2:Hard"
|
||||
msgstr ""
|
||||
"0:Normal,1:Weich,2:\n"
|
||||
"Hart"
|
||||
"Hart\n"
|
||||
|
||||
#: fpestrconsts.rsnovalidiptcfile
|
||||
msgid "No valid IPTC file"
|
||||
@ -1215,58 +783,6 @@ msgstr "Zeitzone für Datum/Uhrzeit der Digitalisierung"
|
||||
msgid "Time zone for date/time original"
|
||||
msgstr "Zeitzone für Original-Datum/Uhrzeit"
|
||||
|
||||
#: fpestrconsts.rsolympusccdscanmodelkup
|
||||
msgid "0:Interlaced,1:Progressive"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympuscontrastlkup
|
||||
msgid "0:High,1:Normal,2:Low"
|
||||
msgstr "0:Hoch,1:Normal,2:Niedrig"
|
||||
|
||||
#: fpestrconsts.rsolympusflashdevlkup
|
||||
msgid "0:None,1:Internal,4:External,5:Internal + External"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashmodelkup
|
||||
msgid "2:On,3;Off"
|
||||
msgstr "2:Ein,3:Aus"
|
||||
|
||||
#: fpestrconsts.rsolympusflashmodellkup
|
||||
msgid "0:None,1:FL-20,2:FL-50,3:RF-11,4:TF-22,5:FL-36,6:FL-50R,7:FL-36R,9:FL-14,11:FL-600R"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashtypelkup
|
||||
msgid "0:None,2:Simple E-System,3:E-System"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusjpegquallkup
|
||||
msgid "1:SQ,2:HQ,3:SHQ,4:Raw"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusmacrolkup
|
||||
msgid "0:Off,1:On,2:Super Macro"
|
||||
msgstr "0:Aus,1:Ein,2:Super-Makro"
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimglength
|
||||
msgid "Preview image length"
|
||||
msgstr "Vorschaubildhöhe"
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimgstart
|
||||
msgid "Preview image start"
|
||||
msgstr "Vorschaubild-Start"
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimgvalid
|
||||
msgid "Preview image valid"
|
||||
msgstr "Vorschaubild ungültig"
|
||||
|
||||
#: fpestrconsts.rsolympusscenemodelkup
|
||||
msgid "0:Normal,1:Standard,2:Auto,3:Intelligent Auto,4:Portrait,5:Landscape+Portrait,6:Landscape,7:Night Scene,8:Night+Portrait9:Sport,10:Self Portrait,11:Indoor,12:Beach & Snow,13:Beach,14:Snow,15:Self Portrait+Self Timer,16:Sunset,17:Cuisine,18:Documents,19:Candle,20:Fireworks,21:Available Light,22:Vivid,23:Underwater Wide1,24:Underwater Macro,25:Museum,26:Behind Glass,27:Auction,28:Shoot & Select1,29:Shoot & Select2,30:Underwater Wide2,31:Digital Image Stabilization,32:Face Portrait,33:Pet,34:Smile Shot,35:Quick Shutter,43:Hand-held Starlight,100:Panorama,101:Magic Filter,103:HDR"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympussharpnesslkup
|
||||
msgid "0:Normal,1:Hard,2:Soft"
|
||||
msgstr "0:Normal,1:Hart,2:Weich"
|
||||
|
||||
#: fpestrconsts.rsorientation
|
||||
msgid "Orientation"
|
||||
msgstr "Ausrichtung"
|
||||
@ -1403,18 +919,6 @@ msgstr ""
|
||||
msgid "Samples per pixel"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssanyomacrolkup
|
||||
msgid "0:Normal,1:Macro,2:View,3:Manual"
|
||||
msgstr "0:Normal,1.Makro,2:Ansicht,3:Manuell"
|
||||
|
||||
#: fpestrconsts.rssanyoqualitylkup
|
||||
msgid "0:Normal/Very Low,1:Normal/Low,2:Normal/Medium Low,3:Normal/Medium,4:Normal/Medium High,5:Normal/High,6:Normal/Very High7:Normal/Super High,256:Fine/Very Low,257:Fine/Low,258:Fine/Medium Low259:Fine/Medium,260:Fine/Medium High,261:Fine/High,262:Fine/Very High263:Fine/Super High,512:Super Fine/Very Low,513:Super Fine/Low,514:Super Fine/Medium Low,515:Super Fine/Medium,516:Super Fine/Medium High,517:Super Fine/High,518:Super Fine/Very High,519:Super Fine/Super High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssanyospecialmode
|
||||
msgid "Special mode"
|
||||
msgstr "Spezialmodus"
|
||||
|
||||
#: fpestrconsts.rssaturation
|
||||
msgid "Saturation"
|
||||
msgstr "Sättigung"
|
||||
@ -1691,3 +1195,4 @@ msgstr "Y-Position"
|
||||
#: fpestrconsts.rsyresolution
|
||||
msgid "Y resolution"
|
||||
msgstr "Y-Auflösung"
|
||||
|
||||
|
@ -45,214 +45,6 @@ msgstr ""
|
||||
msgid "The metadata structure cannot be saved because the file format of the receiving file is not known or not supported."
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonaelkup
|
||||
msgid "0:Normal AE,1:Exposure compensation,2:AE lock,3:AE lock + Exposure compensation,4:No AE"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonaflkup
|
||||
msgid "$2005:Manual AF point selection,$3000:None (MF),$3001:Auto AF point selection,$3002:Right,$3003:Center,$3004:Left,$4001:Auto AF point selection,$4006:Face Detect"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonautorotlkup
|
||||
msgid "0:None,1:Rotate 90 CW,2:Rotate 180,3:Rotate 270 CW"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonbiaslkup
|
||||
msgid "65472:-2 EV,65484:-1.67 EV,65488:-1.50 EV,65492:-1.33 EV,65504:-1 EV,65516:-0.67 EV,65520:-0.50 EV,65524:-0.33 EV,0:0 EV,12:0.33 EV,16:0.50 EV,20:0.67 EV,32:1 EV,44:1.33 EV,48:1.50 EV,52:1.67 EV,64:2 EV"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanoncamtypelkup
|
||||
msgid "248:EOS High-end,250:Compact,252:EOS Mid-range,255:DV Camera"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanoneasylkup
|
||||
msgid "0:Full Auto,1:Manual,2:Landscape,3:Fast Shutter,4:Slow Shutter,5:Night,6:Gray scale,7:Sepia,8:Portrait,9:Sports,10:Macro,11:Black & White,12:Pan Focus,13:Vivid,14:Neutral,15:Flash off,16:Long shutter,17:Super macro,18:Foliage,19:Indoor,20:Fireworks,21:Beach,22:Underwater,23:Snow,24:Kids & Pets,25:Night snapshot,26:Digital macro,27:My colors,28:Movie snap,29:Super macro 2,30:Color accent,31:Color swap,32:Aquarium,33:ISO3200,34:ISO6400,35:Creative light effect,36:Easy,37:Quick shot,38:Creative auto,39:Zoom blur,40:Low light,41:Nostalgic,42:Super vivid,43:Poster effect,44:Face self-timer,45:Smile,46:Wink self-timer,47:Fisheye effect,48:Miniature effect,49:High-speed burst,50:Best image selection,51:High dynamic range,52:Handheld night scene,53:Movie digest,54:Live view control,55:Discreet,56:Blur reduction,57:Monochrome,58:Toy camera effect,59:Scene intelligent auto,60:High-speed burst HQ,61:Smooth skin,62:Soft focus,257:Spotlight,258:Night 2,259:Night+,260:Super night,261:Sunset,263:Night scene,264:Surface,265:Low light 2"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonexposelkup
|
||||
msgid "0:Easy shooting,1:Program AE,2:Shutter speed priority AE,3:Aperture priority AE,4:Manual,5:Depth-of-field AE,6:M-Dep,7:Bulb"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonflashactlkup
|
||||
msgid "0:Did not fire,1:Fired"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonflashlkup
|
||||
msgid "0:Not fired,1:Auto,2:On,3:Red-eye,4:Slow sync,5:Auto+red-eye,6:On+red eye,16:External flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfocaltypelkup
|
||||
msgid "1:Fixed,2:Zoom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfoctypelkup
|
||||
msgid "0:Manual,1:Auto,3:Close-up (macro),8:Locked (pan mode)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonfocuslkup
|
||||
msgid "0:One-Shot AF,1:AI Servo AF,2:AI Focus AF,3:Manual focus,4:Single,5:Continuous,6:Manual focus,16:Pan focus,256:AF+MF,512:Movie snap focus,519:Movie servo AF"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanongenlkup
|
||||
msgid "65535:Low,0:Normal,1:High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonimgstablkup
|
||||
msgid "0:Off,1:On,2:Shoot only,3:Panning,4:Dynamic,256:Off,257:On,258:Shoot only,259:Panning,260:Dynamic"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonisolkup
|
||||
msgid "0:Not used,15:auto,16:50,17:100,18:200,19:400"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonmacrolkup
|
||||
msgid "1:Macro,2:Normal"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonmeterlkup
|
||||
msgid "0:Default,1:Spot,2:Average,3:Evaluative,4:Partial,5:Center-weighted average"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonpandirlkup
|
||||
msgid "0:Left to right,1:Right to left,2:Bottom to top,3:Top to bottom,4:2x2 Matrix (clockwise)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonqualitylkup
|
||||
msgid "65535:n/a,1:Economy,2:Normal,3:Fine,4:RAW,5:Superfine,130:Normal Movie,131:Movie (2)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonreclkup
|
||||
msgid "1:JPEG,2:CRW+THM,3:AVI+THM,4:TIF,5:TIF+JPEG,6:CR2,7:CR2+JPEG,9:MOV,10:MP4"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonsizelkup
|
||||
msgid "65535:n/a,0:Large,1:Medium,2:Small,4:5 MPixel,5:2 MPixel,6:1.5 MPixel,8:Postcard,9:Widescreen,10:Medium widescreen,14:Small 1,15:Small 2,16:Small 3,128:640x480 movie,129:Medium movie,130:Small movie,137:128x720 movie,142:1920x1080 movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonsloshuttlkup
|
||||
msgid "65535:n/a,0:Off,1:Night scene,2:On,3:None"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonwhiteballkup
|
||||
msgid "0:Auto,1:Daylight,2:Cloudy,3:Tungsten,4:Flourescent,5:Flash,6:Custom,7:Black & white,8:Shade,9:Manual temperature (Kelvin),14:Daylight fluorescent,17:Under water"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscanonzoomlkup
|
||||
msgid "0:None,1:2x,2:4x,3:Other"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioafmode2lkup
|
||||
msgid "0:Off,1:Spot,2:Multi,3:Face detection,4:Tracking,5:Intelligent"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioartmode2lkup
|
||||
msgid "0:Normal,8:Silent movie,39:HDR,45:Premium auto,47:Painting,49:Crayon drawing,51:Panorama,52:Art HDR,62:High Speed night shot,64:Monochrome,67:Toy camera,68:Pop art,69:Light tone"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioautoiso2lkup
|
||||
msgid "1:On,2:Off,7:On (high sensitivity),8:On (anti-shake),10:High Speed"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioccdsensitivitylkup
|
||||
msgid "64:Normal,125:+1.0,250:+2.0,244:+3.0,80:Normal,100:High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiocolorfilter2lkup
|
||||
msgid "0:Off,1:Blue,3:Green,4:Yellow,5:Red,6:Purple,7:Pink"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiocolormode2lkup
|
||||
msgid "0:Off,2:Black & White,3:Sepia"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiodigitalzoomlkup
|
||||
msgid "$10000:Off,$10001:2x Digital zoom,$20000:2x digital zoom,$40000:4x digital zoom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiodrivemode2lkup
|
||||
msgid "0:Single shot,1:Continuous shooting,2:Continuous (2 fps),3:Continuous (3 fps),4:Continuous (4 fps),5:Continuous (5 fps),6:Continuous (6 fps),7:Continuous (7 fps),10:Continuous (10 fps),12:Continuous (12 fps),15:Continuous (15 fps),20:Continuous (20 fps),30:Continuous (30 fps),40:Continuous (40 fps),60:Continuous (60 fps),240:Auto-N"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioenhancement2lkup
|
||||
msgid "0:Off,1:Scenery,3:Green,5:Underwater,9:Flesh tones"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioflashintensitylkup
|
||||
msgid "11:Weak,13:Normal,15:Strong"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioflashmodelkup
|
||||
msgid "1:Auto,2:On,3:Off,4:Red-eye reduction"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiofocusingmodelkup
|
||||
msgid "2:Macro,3:Auto focus,4:Manual focus,5:Infinity"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiofocusmode22lkup
|
||||
msgid "0:Manual,1:Focus lock,2:Macro,3:Single-area auto focus,5:Infinity,6:Multi-area auto focus,8:Super macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiofocusmode2lkup
|
||||
msgid "0:Normal,1:Macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioimagesize2lkup
|
||||
msgid "0:640 x 480,4:1600 x 1200,5:2048 x 1536,20:2288 x 1712,21:2592 x 1944,22:2304 x 1728,36:3008 x 2008"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioimagestabilization2lkup
|
||||
msgid "0:Off,1:On,2:Best shot,3:Movie anti-shake"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioisospeed2lkup
|
||||
msgid "3 = 50,4:64,6:100,9:200"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiolightingmode2lkup
|
||||
msgid "0:Off,1:High dynamic range,5:Shadow enhance low,6:Shadow enhance high"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioportraitrefiner2lkup
|
||||
msgid "0:Off,1:+1,2:+2"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiorecordingmodelkup
|
||||
msgid "1:Single shutter,2:Panorama,3:Night scene,4:Portrait,5:Landscape"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiorecordmode2lkup
|
||||
msgid "2:Program AE,3:Shutter priority,4:Aperture priority,5:Manual,6:Best shot,17:Movie,19:Movie (19),20:YouTube Movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasioreleasemode2lkup
|
||||
msgid "1:Normal,3:AE Bracketing,11:WB Bracketing,13 = Contrast Bracketing,19:High Speed Burst"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiosharpness2lkup
|
||||
msgid "0:Soft,1:Normal,2:Hard"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiospecialeffectsetting2lkup
|
||||
msgid "0:Off,1:Makeup,2:Mist removal,3:Vivid landscape,16:Art shot"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiovideoquality2lkup
|
||||
msgid "1:Standard,3:HD (720p),4:Full HD (1080p),5:Low"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalance22lkup
|
||||
msgid "0:Manual,1:Daylight,2:Cloudy,3:Shade,4:Flash?,6:Fluorescent,9:Tungsten?,10:Tungsten,12:Flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalance2lkup
|
||||
msgid "0:Auto,1:Daylight,2:Shade,3:Tungsten,4:Fluorescent,5:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscasiowhitebalancelkup
|
||||
msgid "1:Auto,2:Tungsten,3:Daylight,4:Fluorescent,5:Shade,129:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rscategory
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -511,90 +303,6 @@ msgstr ""
|
||||
msgid "Focal plane y resolution"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiadvancedfilterlkup
|
||||
msgid "65536:Pop Color,131072:Hi Key,196608:Toy Camera,262144:Miniature, 327680:Dynamic Tone,327681:Partial Color Red,327682:Partial Color Yellow,327683:Partial Color Green,327684:Partial Color Blue,327685:Partial Color Orange,327686:Partial Color Purple,458752:Soft Focus,589824:Low Key"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiautobracketinglkup
|
||||
msgid "0:Off,1:On,2:No flash & flash"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiblurwarninglkup
|
||||
msgid "0:None,1:Blur Warning"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujicolormodelkup
|
||||
msgid "0:Standard,16:Chrome,48:B & W"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujicontrastlkup
|
||||
msgid "0:Normal,128:Medium High,256:High,384:Medium Low,512:Low,32768:Film Simulation"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujicontrastlkup1
|
||||
msgid "0:Normal,256:High,768:Low"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujidynamicrangelkup
|
||||
msgid "1:Standard,3:Wide"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiexposurewarninglkup
|
||||
msgid "0:Good,1:Bad exposure"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiexrmodelkup
|
||||
msgid "128:HR (High Resolution),512:SN (Signal to Noise priority),768:DR (Dynamic Range priority)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiflashmodelkup
|
||||
msgid "0:Auto,1:On,2:Off,3:Red-eye reduction,4:External,16:Commander,32768:Not Attached,33056:TTL,38976:Manual,39040:Multi-flash,43296:1st Curtain (front),51488:2nd Curtain (rear),59680:High Speed Sync (HSS)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujifocuswarninglkup
|
||||
msgid "0:Good,1:Out of focus"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujihighisonoisereductionlkup
|
||||
msgid "0:0 (normal),256:+2 (strong),384:+1 (medium strong),448:+3 (very strong),480:+4 (strongest)512:-2 (weak),640:-1 (medium weak),704:-3 (very weak),736:-4 (weakest)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujinoisereductionlkup
|
||||
msgid "64:Low,128:Normal,256:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujipanoramadirlkup
|
||||
msgid "1:Right,2:Up,3:Left,4:Down"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujipicturemodelkup
|
||||
msgid "0:Auto,1:Portrait,2:Landscape,3:Macro,4:Sports,5:Night Scene,6:Program AE,7:Natural Light,8:Anti-blur,9:Beach & Snow,10:Sunset,11:Museum,12:Party,13:Flower,14:Text,15:Natural Light & Flash,16:Beach,17:Snow,18:Fireworks,19:Underwater,20:Portrait with Skin Correction,22:Panorama,23:Night (tripod),24:Pro Low-light,25:Pro Focus,26:Portrait 2,27:Dog Face Detection,28:Cat Face Detection,64:Advanced Filter,256:Aperture-priority AE,512:Shutter speed priority AE,768:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujisaturationlkup
|
||||
msgid "0:0 (normal),128:+1 (medium high),192:+3 (very high),224:+4 (highest),256:+2 (high),384:-1 (medium low),512:Low,768:None (B&W),769:B&W Red Filter,770:B&W Yellow Filter,771:B&W Green Filter,784:B&W Sepia,1024:-2 (low),1216:-3 (very low),1248:-4 (lowest),1280:Acros,1281:Acros Red Filter,1282:Acros Yellow Filter,1283:Acros Green Filter,32768:Film Simulation"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiscenerecognlkup
|
||||
msgid "0:Unrecognized,256:Portrait Image,512:Landscape Image,768:Night Scene,1024:Macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujishadowhighlightlkup
|
||||
msgid "-64:+4 (hardest),-48:+3 (very hard),-32:+2 (hard),-16:+1 (medium hard)"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujisharpnesslkup
|
||||
msgid "0:-4 (softest),1:-3 (very soft),2:-2 (soft),3:0 (normal),4:+2 (hard),5:+3 (very hard),6:+4 (hardest),130:-1 (medium soft),132:+1 (medium hard),32768:Film Simulation,65535:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujishuttertypelkup
|
||||
msgid "0:Mechanical,1:Electronic"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsfujiwhiteballkup
|
||||
msgid "0:Auto,256:Daylight,512:Cloudy,768:Daylight Fluorescent,769:Day White Fluorescent,770:White Fluorescent,771:Warm White Fluorescent,772:Living Room Warm White Fluorescent,1024:Incandescent,1280:Flash,1536:Underwater,3840:Custom,3841:Custom2,3842:Custom3,3843:Custom4,3844:Custom5,4080:Kelvin"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsgaincontrol
|
||||
msgid "Gain control"
|
||||
msgstr ""
|
||||
@ -991,122 +699,6 @@ msgstr ""
|
||||
msgid "0:Unknown,1:Average,2:Center-weighted average,3:Spot,4:Multi-spot,5:Multi-segment,6:Partial,255:Other"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltabracketsteplkup
|
||||
msgid "0:1/3 EV,1:2/3 EV,2:1 EV"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltacolormodelkup
|
||||
msgid "0:Natural color,1:Black & White,2:Vivid color,3:Solarization,4:Adobe RGB,5:Sepia,9:Natural,12:Portrait,13:Natural sRGB,14:Natural+ sRGB,15:Landscape,16:Evening,17:Night Scene,18:Night Portrait,132:Embed Adobe RGB"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltacolorprofilelkup
|
||||
msgid "0:Not embedded,1:Embedded"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadataimprintlkup
|
||||
msgid "0;None,1:YYYY/MM/DD,2:MM/DD/HH:MM,3:Text,4:Text + ID#"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadecpositionlkup
|
||||
msgid "0:Exposure,1:Contrast,2:Saturation,3:Filter"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadigitalzoomlkup
|
||||
msgid "0:Off,1:Electronic magnification,2:2x"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltadrivemodelkup
|
||||
msgid "0:Single,1:Continuous,2:Self-timer,4:Bracketing,5:Interval,6:UHS continuous,7:HS continuous"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaexposuremodelkup
|
||||
msgid "0:Program,1:Aperture priority,2:Shutter priority,3:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaflashmeteringlkup
|
||||
msgid "0:ADI (Advanced Distance Integration),1:Pre-flash TTL,2:Manual flash control"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaflashmodelkup
|
||||
msgid "0:Fill flash,1:Red-eye reduction,2:Rear flash sync,3:Wireless,4:Off?"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltafocusarealkup
|
||||
msgid "0:Wide Focus (normal),1:Spot Focus"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltafocusmodelkup
|
||||
msgid "0:AF,1:MF"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltafoldernamelkup
|
||||
msgid "0:Standard Form,1:Data Form"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaimagesizelkup
|
||||
msgid "1:1600x1200,2:1280x960,3:640x480,5:2560x1920,6:2272x1704,7:2048x1536"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaimagesizelkup1
|
||||
msgid "0:Full,1:1600x1200,2:1280x960,3:640x480,6:2080x1560,7:2560x1920,8;3264x2176"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaimagestablkup
|
||||
msgid "1:Off,5:On"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltainternalflashlkup
|
||||
msgid "0:No,1:Fired"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaintervalmodelkup
|
||||
msgid "0:Still image,1:Time-lapse movie"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaisosettinglkup
|
||||
msgid "0:100,1:200,2:400,3:800,4:Auto,5:64"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltameteringmodelkup
|
||||
msgid "0:Multi-segment,1:Center-weighted average,2:Spot"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltamodelidlkup
|
||||
msgid "0:DiMAGE 7/X1/X21 or X31,1:DiMAGE 5,2:DiMAGE S304,3:DiMAGE S404,4:DiMAGE 7i,5:DiMAGE 7Hi,6:DiMAGE A1,7:DiMAGE A2 or S414"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltaqualitylkup
|
||||
msgid "0:Raw,1:Super Fine,2:Fine,3:Standard,4:Economy,5:Extra fine"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltascenemodelkup
|
||||
msgid "0:Standard,1:Portrait,2:Text,3:Night Scene,4:Sunset,5:Sports,6:Landscape,7:Night Portrait,8:Macro,9:Super Macro,16:Auto,17:Night View/Portrait,18:Sweep Panorama,19:Handheld Night Shot,20:Anti Motion Blur,21:Cont. Priority AE,22:Auto+,23:3D Sweep Panorama,24:Superior Auto,25:High Sensitivity,26:Fireworks,27:Food,28:Pet,33:HDR,65535:n/a"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltasharpnesslkup
|
||||
msgid "0:Hard,1:Normal,2:Soft"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltasubjectprogramlkup
|
||||
msgid "0:None,1:Portrait,2:Text,3:Night portrait,4:Sunset,5:Sports action"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltateleconverterlkup
|
||||
msgid "$0:None,$4:Minolta/Sony AF 1.4x APO (D) (0x04),$5:Minolta/Sony AF 2x APO (D) (0x05),$48 = Minolta/Sony AF 2x APO (D),$50:Minolta AF 2x APO II,$60:Minolta AF 2x APO,$88:Minolta/Sony AF 1.4x APO (D),$90 = Minolta AF 1.4x APO II,$A0 = Minolta AF 1.4x APO"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltawhitebalancelkup
|
||||
msgid "$00:Auto,$01:Color Temperature/Color Filter,$10:Daylight,$20:Cloudy,$30:Shade,$40:Tungsten,$50:Flash,$60:Fluorescent,$70:Custom"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltawidefocuszonelkup
|
||||
msgid "0:No zone,1:Center zone (horizontal orientation),2:Center zone (vertical orientation),3:Left zone,4:Right zone"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminoltazonematchinglkup
|
||||
msgid "0:ISO Setting Used,1:High Key,2:Low Key"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsminsamplevalue
|
||||
msgid "Min sample value"
|
||||
msgstr ""
|
||||
@ -1119,30 +711,6 @@ msgstr ""
|
||||
msgid "More thumbnail tags than expected."
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikoncolormodelkup
|
||||
msgid "1:Color,2:Monochrome"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonconverterlkup
|
||||
msgid "0:Not used,1:Used"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonimgadjlkup
|
||||
msgid "0:Normal,1:Bright+,2:Bright-,3:Contrast+,4:Contrast-"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonisolkup
|
||||
msgid "0:ISO80,2:ISO160,4:ISO320,5:ISO100"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonqualitylkup
|
||||
msgid "1:Vga Basic,2:Vga Normal,3:Vga Fine,4:SXGA Basic,5:SXGA Normal,6:SXGA Fine,10:2 Mpixel Basic,11:2 Mpixel Normal,12:2 Mpixel Fine"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnikonwhitebalancelkup
|
||||
msgid "0:Auto,1:Preset,2:Daylight,3:Incandescense,4:Fluorescence,5:Cloudy,6:SpeedLight"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsnormallowhigh
|
||||
msgctxt "fpestrconsts.rsnormallowhigh"
|
||||
msgid "0:Normal,1:Low,2:High"
|
||||
@ -1203,58 +771,6 @@ msgstr ""
|
||||
msgid "Time zone for date/time original"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusccdscanmodelkup
|
||||
msgid "0:Interlaced,1:Progressive"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympuscontrastlkup
|
||||
msgid "0:High,1:Normal,2:Low"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashdevlkup
|
||||
msgid "0:None,1:Internal,4:External,5:Internal + External"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashmodelkup
|
||||
msgid "2:On,3;Off"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashmodellkup
|
||||
msgid "0:None,1:FL-20,2:FL-50,3:RF-11,4:TF-22,5:FL-36,6:FL-50R,7:FL-36R,9:FL-14,11:FL-600R"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusflashtypelkup
|
||||
msgid "0:None,2:Simple E-System,3:E-System"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusjpegquallkup
|
||||
msgid "1:SQ,2:HQ,3:SHQ,4:Raw"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusmacrolkup
|
||||
msgid "0:Off,1:On,2:Super Macro"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimglength
|
||||
msgid "Preview image length"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimgstart
|
||||
msgid "Preview image start"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympuspreviewimgvalid
|
||||
msgid "Preview image valid"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympusscenemodelkup
|
||||
msgid "0:Normal,1:Standard,2:Auto,3:Intelligent Auto,4:Portrait,5:Landscape+Portrait,6:Landscape,7:Night Scene,8:Night+Portrait9:Sport,10:Self Portrait,11:Indoor,12:Beach & Snow,13:Beach,14:Snow,15:Self Portrait+Self Timer,16:Sunset,17:Cuisine,18:Documents,19:Candle,20:Fireworks,21:Available Light,22:Vivid,23:Underwater Wide1,24:Underwater Macro,25:Museum,26:Behind Glass,27:Auction,28:Shoot & Select1,29:Shoot & Select2,30:Underwater Wide2,31:Digital Image Stabilization,32:Face Portrait,33:Pet,34:Smile Shot,35:Quick Shutter,43:Hand-held Starlight,100:Panorama,101:Magic Filter,103:HDR"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsolympussharpnesslkup
|
||||
msgid "0:Normal,1:Hard,2:Soft"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rsorientation
|
||||
msgid "Orientation"
|
||||
msgstr ""
|
||||
@ -1391,18 +907,6 @@ msgstr ""
|
||||
msgid "Samples per pixel"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssanyomacrolkup
|
||||
msgid "0:Normal,1:Macro,2:View,3:Manual"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssanyoqualitylkup
|
||||
msgid "0:Normal/Very Low,1:Normal/Low,2:Normal/Medium Low,3:Normal/Medium,4:Normal/Medium High,5:Normal/High,6:Normal/Very High7:Normal/Super High,256:Fine/Very Low,257:Fine/Low,258:Fine/Medium Low259:Fine/Medium,260:Fine/Medium High,261:Fine/High,262:Fine/Very High263:Fine/Super High,512:Super Fine/Very Low,513:Super Fine/Low,514:Super Fine/Medium Low,515:Super Fine/Medium,516:Super Fine/Medium High,517:Super Fine/High,518:Super Fine/Very High,519:Super Fine/Super High"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssanyospecialmode
|
||||
msgid "Special mode"
|
||||
msgstr ""
|
||||
|
||||
#: fpestrconsts.rssaturation
|
||||
msgid "Saturation"
|
||||
msgstr ""
|
||||
|
Reference in New Issue
Block a user