xtool/imports/BrunsliDLL.pas

82 lines
2.2 KiB
ObjectPascal

unit BrunsliDLL;
interface
uses
InitCode,
Utils, LibImport,
WinAPI.Windows,
System.SysUtils, System.Classes;
const
BRUNSLI_OK = 0;
BRUNSLI_NON_REPRESENTABLE = 1;
BRUNSLI_MEMORY_ERROR = 2;
BRUNSLI_INVALID_PARAM = 3;
BRUNSLI_COMPRESSION_ERROR = 4;
BRUNSLI_INVALID_BRN = 5;
BRUNSLI_DECOMPRESSION_ERROR = 6;
BRUNSLI_NOT_ENOUGH_DATA = 7;
type
TBrunsliWriter = function(ctx: Pointer; data: Pointer; Size: NativeUInt)
: Integer cdecl;
var
brunsli_alloc_JPEGData: function: Pointer cdecl;
brunsli_free_JPEGData: procedure(P: Pointer)cdecl;
brunsli_GetMaximumEncodedSize: function(P: Pointer): Integer cdecl;
brunsli_ReadJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_EncodeJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_DecodeJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_alloc_JPEGOutput: function(P: TBrunsliWriter; data: Pointer)
: Pointer cdecl;
brunsli_free_JPEGOutput: procedure(P: Pointer)cdecl;
brunsli_WriteJpeg: function(P: Pointer; oup: Pointer): Integer cdecl;
DLLLoaded: Boolean = False;
implementation
var
Lib: TLibImport;
procedure Init;
begin
Lib := TLibImport.Create;
Lib.LoadLib(ExpandPath(PluginsPath + 'brunsli.dll', True));
if Lib.Loaded then
begin
@brunsli_alloc_JPEGData := Lib.GetProcAddr('brunsli_alloc_JPEGData');
@brunsli_free_JPEGData := Lib.GetProcAddr('brunsli_free_JPEGData');
@brunsli_GetMaximumEncodedSize :=
Lib.GetProcAddr('brunsli_GetMaximumEncodedSize');
@brunsli_ReadJpeg := Lib.GetProcAddr('brunsli_ReadJpeg');
@brunsli_EncodeJpeg := Lib.GetProcAddr('brunsli_EncodeJpeg');
@brunsli_DecodeJpeg := Lib.GetProcAddr('brunsli_DecodeJpeg');
@brunsli_alloc_JPEGOutput := Lib.GetProcAddr('brunsli_alloc_JPEGOutput');
@brunsli_free_JPEGOutput := Lib.GetProcAddr('brunsli_free_JPEGOutput');
@brunsli_WriteJpeg := Lib.GetProcAddr('brunsli_WriteJpeg');
DLLLoaded := Assigned(brunsli_alloc_JPEGData) and
Assigned(brunsli_alloc_JPEGOutput);
end;
end;
procedure Deinit;
begin
Lib.Free;
end;
initialization
Init;
finalization
Deinit;
end.