You've already forked lazarus-ccr
fpexif: Clean up
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8993 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -421,11 +421,14 @@ const
|
|||||||
TAG_MARKER = $1C;
|
TAG_MARKER = $1C;
|
||||||
|
|
||||||
procedure WriteString(AIptcTag: TIptcTag; AText: PChar; ALength: Integer);
|
procedure WriteString(AIptcTag: TIptcTag; AText: PChar; ALength: Integer);
|
||||||
|
var
|
||||||
|
byteAdded: Boolean;
|
||||||
begin
|
begin
|
||||||
if odd(ALength) then begin
|
if odd(ALength) then begin
|
||||||
inc(ALength);
|
inc(ALength);
|
||||||
end;
|
byteAdded := true;
|
||||||
|
end else
|
||||||
|
byteAdded := false;
|
||||||
// "Standard" dataset
|
// "Standard" dataset
|
||||||
if ALength < 32768 then begin
|
if ALength < 32768 then begin
|
||||||
AIptcTag.Size := NtoBE(word(ALength));
|
AIptcTag.Size := NtoBE(word(ALength));
|
||||||
@@ -447,13 +450,12 @@ const
|
|||||||
WriteDWord(AStream, NtoBE(ALength));
|
WriteDWord(AStream, NtoBE(ALength));
|
||||||
AStream.WriteBuffer(AText^, ALength);
|
AStream.WriteBuffer(AText^, ALength);
|
||||||
end;
|
end;
|
||||||
if odd(ALength) then // zero-termination of string
|
if byteAdded then // Write 0 to added byte
|
||||||
WriteByte(AStream, 0);
|
WriteByte(AStream, 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
iptcTag: TIptcTag;
|
iptcTag: TIptcTag;
|
||||||
len: DWord;
|
|
||||||
i: Integer;
|
i: Integer;
|
||||||
sa: TStringArray;
|
sa: TStringArray;
|
||||||
begin
|
begin
|
||||||
@@ -469,41 +471,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
ttString:
|
ttString:
|
||||||
begin
|
begin
|
||||||
if ATag is TIptcMultiStringTag
|
if ATag is TIptcMultiStringTag then
|
||||||
then begin
|
begin
|
||||||
sa := SplitMultiStringTag(ATag);
|
sa := SplitMultiStringTag(ATag);
|
||||||
for i := 0 to High(sa) do
|
for i := 0 to High(sa) do
|
||||||
WriteString(iptcTag, PChar(sa[i]), Length(sa[i]));
|
WriteString(iptcTag, PChar(sa[i]), Length(sa[i]));
|
||||||
end else
|
end else
|
||||||
WriteString(iptcTag, PChar(ATag.RawData), Length(ATag.RawData));
|
WriteString(iptcTag, PChar(ATag.RawData), Length(ATag.RawData));
|
||||||
(*
|
|
||||||
len := Length(ATag.RawData);
|
|
||||||
if odd(len) then begin
|
|
||||||
inc(len);
|
|
||||||
end;
|
|
||||||
// "Standard" dataset
|
|
||||||
if len < 32768 then begin
|
|
||||||
iptcTag.Size := NtoBE(word(len));
|
|
||||||
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
|
|
||||||
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
|
|
||||||
end else
|
|
||||||
// "Extended" dataset
|
|
||||||
if len < 65536 then begin
|
|
||||||
// Size is 2, but we must set highest bit to mark tag as being extended.
|
|
||||||
iptcTag.Size := NtoBE($8002);
|
|
||||||
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
|
|
||||||
WriteWord(AStream, NtoBE(word(len)));
|
|
||||||
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
|
|
||||||
end else begin
|
|
||||||
// Size is 4, but we must set highest bit to mark tag as being extended.
|
|
||||||
iptcTag.Size := $8004;
|
|
||||||
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
|
|
||||||
WriteDWord(AStream, NtoBE(len));
|
|
||||||
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
|
|
||||||
end;
|
|
||||||
if odd(Length(ATag.RawData)) then // zero-termination of string
|
|
||||||
WriteByte(AStream, 0);
|
|
||||||
*)
|
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
// I've never seen other tag types than USHORT and STRING...
|
// I've never seen other tag types than USHORT and STRING...
|
||||||
|
Reference in New Issue
Block a user