diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-08 18:43:29 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-08 18:43:29 +0000 |
commit | 864081102a5f252415f41950b3039a896b4ae9c5 (patch) | |
tree | c6b764651e9dd1f8f53b98eab05f16ba4a492a79 /plugins/Libs/dynbasswma.pas | |
parent | db5149b48346c417e18add5702a9dfe7f6e28dd0 (diff) |
Awkwars's plugins - welcome to our trunk
git-svn-id: http://svn.miranda-ng.org/main/trunk@1822 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Libs/dynbasswma.pas')
-rw-r--r-- | plugins/Libs/dynbasswma.pas | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/plugins/Libs/dynbasswma.pas b/plugins/Libs/dynbasswma.pas new file mode 100644 index 0000000000..60a85f588f --- /dev/null +++ b/plugins/Libs/dynbasswma.pas @@ -0,0 +1,249 @@ +{
+ BASSWMA 2.4 Delphi unit
+ Copyright (c) 2002-2008 Un4seen Developments Ltd.
+
+ See the BASSWMA.CHM file for more detailed documentation
+}
+
+unit DynBassWMA;
+
+interface
+
+uses Windows, Dynamic_Bass;
+
+const
+ // Additional error codes returned by BASS_ErrorGetCode
+ BASS_ERROR_WMA_LICENSE = 1000; // the file is protected
+ BASS_ERROR_WMA = 1001; // Windows Media (9 or above) is not installed
+ BASS_ERROR_WMA_WM9 = BASS_ERROR_WMA;
+ BASS_ERROR_WMA_DENIED = 1002; // access denied (user/pass is invalid)
+ BASS_ERROR_WMA_INDIVIDUAL = 1004; // individualization is needed
+
+ // Additional BASS_SetConfig options
+ BASS_CONFIG_WMA_PRECHECK = $10100;
+ BASS_CONFIG_WMA_PREBUF = $10101;
+// BASS_CONFIG_WMA_ASX = $10102;
+ BASS_CONFIG_WMA_BASSFILE = $10103;
+ BASS_CONFIG_WMA_NETSEEK = $10104;
+ BASS_CONFIG_WMA_VIDEO = $10105;
+
+ // additional WMA sync types
+ BASS_SYNC_WMA_CHANGE = $10100;
+ BASS_SYNC_WMA_META = $10101;
+
+ // additional BASS_StreamGetFilePosition WMA mode
+ BASS_FILEPOS_WMA_BUFFER = 1000; // internet buffering progress (0-100%)
+
+ // Additional flags for use with BASS_WMA_EncodeOpen/File/Network/Publish
+ BASS_WMA_ENCODE_STANDARD = $2000; // standard WMA
+ BASS_WMA_ENCODE_PRO = $4000; // WMA Pro
+ BASS_WMA_ENCODE_24BIT = $8000; // 24-bit
+ BASS_WMA_ENCODE_PCM = $10000; // uncompressed PCM
+ BASS_WMA_ENCODE_SCRIPT = $20000; // set script (mid-stream tags) in the WMA encoding
+
+ // Additional flag for use with BASS_WMA_EncodeGetRates
+ BASS_WMA_ENCODE_RATES_VBR = $10000; // get available VBR quality settings
+
+ // WMENCODEPROC "type" values
+ BASS_WMA_ENCODE_HEAD = 0;
+ BASS_WMA_ENCODE_DATA = 1;
+ BASS_WMA_ENCODE_DONE = 2;
+
+ // BASS_WMA_EncodeSetTag "form" values
+ BASS_WMA_TAG_ANSI = 0;
+ BASS_WMA_TAG_UNICODE = 1;
+ BASS_WMA_TAG_UTF8 = 2;
+ BASS_WMA_TAG_BINARY = $100; // FLAG: binary tag (HIWORD=length)
+
+ // BASS_CHANNELINFO type
+ BASS_CTYPE_STREAM_WMA = $10300;
+ BASS_CTYPE_STREAM_WMA_MP3 = $10301;
+
+ // Additional BASS_ChannelGetTags type
+ BASS_TAG_WMA = 8; // WMA header tags : series of null-terminated UTF-8 strings
+ BASS_TAG_WMA_META = 11; // WMA mid-stream tag : UTF-8 string
+ BASS_TAG_WMA_CODEC = 12; // WMA codec
+
+
+type
+ HWMENCODE = DWORD; // WMA encoding handle
+
+ CLIENTCONNECTPROC = procedure(handle:HWMENCODE; connect:BOOL; ip:PChar; user:Pointer); stdcall;
+ {
+ Client connection notification callback function.
+ handle : The encoder
+ connect: TRUE=client is connecting, FALSE=disconnecting
+ ip : The client's IP (xxx.xxx.xxx.xxx:port)
+ user : The 'user' parameter value given when calling BASS_WMA_EncodeSetNotify
+ }
+
+ WMENCODEPROC = procedure(handle:HWMENCODE; dtype:DWORD; buffer:Pointer; length:DWORD; user:Pointer); stdcall;
+ {
+ Encoder callback function.
+ handle : The encoder handle
+ dtype : The type of data, one of BASS_WMA_ENCODE_xxx values
+ buffer : The encoded data
+ length : Length of the data
+ user : The 'user' parameter value given when calling BASS_WMA_EncodeOpen
+ }
+
+
+const
+ basswmadll = 'basswma.dll';
+
+var BASS_WMA_StreamCreateFile :function(mem:BOOL; fl:pointer; offset,length:QWORD; flags:DWORD): HSTREAM; stdcall;
+var BASS_WMA_StreamCreateFileAuth :function(mem:BOOL; fl:pointer; offset,length:QWORD; flags:DWORD; user,pass:PChar): HSTREAM; stdcall;
+var BASS_WMA_StreamCreateFileUser :function(system,flags:DWORD; var procs:BASS_FILEPROCS; user:Pointer): HSTREAM; stdcall;
+
+var BASS_WMA_GetTags :function(fname:PChar; flags:DWORD): PAnsiChar; stdcall;
+
+var BASS_WMA_EncodeGetRates :function(freq,chans,flags:DWORD): PDWORD; stdcall;
+var BASS_WMA_EncodeOpen :function(freq,chans,flags,bitrate:DWORD; proc:WMENCODEPROC; user:Pointer): HWMENCODE; stdcall;
+var BASS_WMA_EncodeOpenFile :function(freq,chans,flags,bitrate:DWORD; fname:PChar): HWMENCODE; stdcall;
+var BASS_WMA_EncodeOpenNetwork :function(freq,chans,flags,bitrate,port,clients:DWORD): HWMENCODE; stdcall;
+var BASS_WMA_EncodeOpenNetworkMulti:function(freq,chans,flags:DWORD; bitrates:PDWORD; port,clients:DWORD): HWMENCODE; stdcall;
+var BASS_WMA_EncodeOpenPublish :function(freq,chans,flags,bitrate:DWORD; url,user,pass:PChar): HWMENCODE; stdcall;
+var BASS_WMA_EncodeOpenPublishMulti:function(freq,chans,flags:DWORD; bitrates:PDWORD; url,user,pass:PChar): HWMENCODE; stdcall;
+var BASS_WMA_EncodeGetPort :function(handle:HWMENCODE): DWORD; stdcall;
+var BASS_WMA_EncodeSetNotify :function(handle:HWMENCODE; proc:CLIENTCONNECTPROC; user:Pointer): BOOL; stdcall;
+var BASS_WMA_EncodeGetClients :function(handle:HWMENCODE): DWORD; stdcall;
+var BASS_WMA_EncodeSetTag :function(handle:HWMENCODE; tag,text:PChar; ttype:DWORD): BOOL; stdcall;
+var BASS_WMA_EncodeWrite :function(handle:HWMENCODE; buffer:Pointer; length:DWORD): BOOL; stdcall;
+var BASS_WMA_EncodeClose :function(handle:HWMENCODE): BOOL; stdcall;
+
+var BASS_WMA_GetWMObject :function(handle:DWORD): Pointer; stdcall;
+
+function InitWMA:bool;
+Function Load_WMADLL(dllfilename:PAnsiChar):boolean; overload;
+Function Load_WMADLL(dllfilename:PWideChar):boolean; overload;
+
+implementation
+
+const
+ WMA_Handle:THANDLE = 0;
+ from:integer = 0;
+
+procedure SetProcs(handle:THANDLE);
+begin
+ @BASS_WMA_StreamCreateFile :=GetProcAddress(handle,'BASS_WMA_StreamCreateFile');
+ @BASS_WMA_StreamCreateFileAuth :=GetProcAddress(handle,'BASS_WMA_StreamCreateFileAuth');
+ @BASS_WMA_StreamCreateFileUser :=GetProcAddress(handle,'BASS_WMA_StreamCreateFileUser');
+
+ @BASS_WMA_GetTags :=GetProcAddress(handle,'BASS_WMA_GetTags');
+
+ @BASS_WMA_EncodeGetRates :=GetProcAddress(handle,'BASS_WMA_EncodeGetRates');
+ @BASS_WMA_EncodeOpen :=GetProcAddress(handle,'BASS_WMA_EncodeGetOpen');
+ @BASS_WMA_EncodeOpenFile :=GetProcAddress(handle,'BASS_WMA_EncodeOpenFile');
+ @BASS_WMA_EncodeOpenNetwork :=GetProcAddress(handle,'BASS_WMA_EncodeOpenNetwork');
+ @BASS_WMA_EncodeOpenNetworkMulti:=GetProcAddress(handle,'BASS_WMA_EncodeOpenNetworkMulti');
+ @BASS_WMA_EncodeOpenPublish :=GetProcAddress(handle,'BASS_WMA_EncodeOpenPublish');
+ @BASS_WMA_EncodeOpenPublishMulti:=GetProcAddress(handle,'BASS_WMA_EncodeOpenPublishMulti');
+ @BASS_WMA_EncodeGetPort :=GetProcAddress(handle,'BASS_WMA_EncodeGetPort');
+ @BASS_WMA_EncodeSetNotify :=GetProcAddress(handle,'BASS_WMA_EncodeSetNotify');
+ @BASS_WMA_EncodeGetClients :=GetProcAddress(handle,'BASS_WMA_EncodeGetClients');
+ @BASS_WMA_EncodeSetTag :=GetProcAddress(handle,'BASS_WMA_EncodeSetTag');
+ @BASS_WMA_EncodeWrite :=GetProcAddress(handle,'BASS_WMA_EncodeWrite');
+ @BASS_WMA_EncodeClose :=GetProcAddress(handle,'BASS_WMA_EncodeClose');
+
+ @BASS_WMA_GetWMObject:=GetProcAddress(handle,'BASS_WMA_GetWMObject');
+end;
+
+function InitWMA:bool;
+var
+ info:PBASS_PLUGININFO;
+ i:dword;
+ pHPlugin:^HPLUGIN;
+begin
+ if WMA_Handle<>0 then
+ begin
+ result:=true;
+ exit;
+ end;
+ result:=false;
+ pHPlugin:=pointer(BASS_PluginGetInfo(0));
+ if pHPlugin=nil then exit;
+ while pHPlugin^<>0 do
+ begin
+ info:=BASS_PluginGetInfo(pHPlugin^);
+ i:=0;
+ while i<info^.formatc do
+ begin
+ if info^.formats^[i].ctype=BASS_CTYPE_STREAM_WMA then
+ begin
+ WMA_Handle:=pHPlugin^;
+ SetProcs(pHPlugin^);
+ BASS_SetConfig(BASS_CONFIG_WMA_BASSFILE,1);
+ from:=2;
+ result:=true;
+ exit;
+ end;
+ inc(i);
+ end;
+ inc(pHPlugin);
+ end;
+end;
+
+Function Load_WMADLL(dllfilename:PAnsiChar):boolean;
+var
+ oldmode:integer;
+begin
+ if WMA_Handle<>0 then result:=true
+ else
+ begin
+ oldmode:=SetErrorMode($8001);
+ WMA_Handle:=LoadLibraryA(dllfilename);
+ SetErrorMode(oldmode);
+ result:=WMA_Handle<>0;
+ if result then
+ begin
+ from:=1;
+ SetProcs(WMA_Handle);
+ end;
+ end;
+end;
+
+Function Load_WMADLL(dllfilename:PWideChar):boolean;
+var
+ oldmode:integer;
+begin
+ if WMA_Handle<>0 then result:=true
+ else
+ begin
+ oldmode:=SetErrorMode($8001);
+ WMA_Handle:=LoadLibraryW(dllfilename);
+ SetErrorMode(oldmode);
+ result:=WMA_Handle<>0;
+ if result then
+ begin
+ from:=1;
+ SetProcs(WMA_Handle);
+ end;
+ end;
+end;
+
+Procedure Unload_WMADLL;
+begin
+ if WMA_Handle<>0 then
+ begin
+ if from=2 then
+ BASS_PluginFree(WMA_Handle)
+ else //if from=1 then
+ FreeLibrary(WMA_Handle);
+ WMA_Handle:=0;
+ end;
+ from:=0;
+end;
+
+var
+ mWMA:tBASSRegRec;
+
+procedure Init;
+begin
+ mWMA.Next:=BASSRegRec;
+ mWMA.Init:=@InitWMA;
+ BASSRegRec:=@mWMA;
+end;
+
+begin
+ Init;
+end.
|