?? bassvideo.pas
字號:
unit BassVideo;
interface
uses Windows, Messages, Bass, ActiveX;
(* 2.4.1.2 *)
type
TWMAudioFormat = record
Bitrate : integer;
Freq : integer;
nChan : integer;
wBitPerSample : integer;
end;
PWMAudioFormat = ^TWMAudioFormat;
PASFConfig = ^TASFConfig;
TASFConfig = record
Version : integer;
Has_Audio : BOOL;
Has_Video : BOOL;
VideoBitrate : integer;
useVideoVBR : BOOL;
VBRQuality : integer; // 0 -> 100
VideoCodec : integer;
SrcVideoFrameHeight, SrcVideoFrameWidth : integer;
DestVideoFrameHeight, DestVideoFrameWidth : integer;
VideoQuality : integer; // 0 -> 100
AudioCodec : integer;
AudioCodecFormat : integer;
AudioBitrate : integer;
// for auto config audio
Audio_Frequency : integer;
Audio_Channel : integer;
Audio_Bits_Per_Sample : integer;
end;
HFilter = Pointer;
HCapture = integer;
TCallBackEnumEncoderFilter = function(Filter : HFilter; FilterName,
FilterGuid : PChar;user : Pointer) : BOOL; stdcall;
TAudioEncoderCallBack = procedure(chan : DWORD; NewDatasize : DWORD; user : Pointer); stdcall;
TBassVideoFrameInfo = record
AvgFrameRate : integer;
FrameDraw, FrameDrop : integer;
end;
TBassVideoInfo = record
AvgTimePerFrame : Double;
Height, Width : integer;
FormatType : integer;
VideoFormat : integer;
VideoFormat_GUID : PGUID;
end;
TCallBackDraw = procedure(chan : DWORD; DC : HDC; user : Pointer); stdcall;
TMsg = record
msg : DWORD;
param1,
param2 : LongInt;
end;
TResizeType = (R43, R169, RSource, RFree, RCustom);
VIDEOPROC = function(Handle : DWORD; Action, param1, param2 : DWORD; user : Pointer): BOOL; stdcall;
{
Handle : the channels handle
Action :
BassVideo_OpenDone = 1; // chan : DWORD = 0 if failed , <> 0 if success
BassVideo_Buffering = 2; // param1 : 0 if buffering done, <> 0 if buffering in progress , param2 = buffer % // this for used in future
BassVideo_FoundVideo = 3; // chan : DWORD tell the app must prepare the video windows & Handle
}
FILTERPROC = function(Handle : DWORD; FilterName : PChar; Filter : Pointer; User : Pointer): BOOL; stdcall;
{
callback when enum filter
FilterName : name of the DirectShow Filter
Filter : Pointer of IBaseFilter
}
QWORD = int64;
HSTREAM = DWORD;
OAHWND = Longint;
const // video display
BassVideoDLL = 'bassvideo.dll';
BassVideo_Config_Renderer = $100; // for BassVideo_GetConfig/SetConfig
BassVideo_Congfig_WMASF_READER = $101; // 0 = use WM_ASFReader else use Windows Media Source Filter
BassVideo_Config_Audio_Renderer = $102; // 0 = use Bass, 1 = use Windows
// video render option
BassVideo_Default = 0;
BassVideo_VMR9 = 1;
BassVideo_VMR9_Windowless = 2;
BassVideo_EVR = 3;
BassVideo_Overlay = 4;
BassVideo_NOVIdeo = 5;
// action
BassVideo_OpenDone = 1; // chan : DWORD = 0 if failed , <> 0 if success
BassVideo_Buffering = 2; // param1 : 0 if buffering done, <> 0 if buffering in progress , param2 = buffer %
BassVideo_FoundVideo = 3; // chan : DWORD tell the app must prepare the video windows & Handle
BassVideo_EndStream = 4;
BassVideo_DShow_Event = 5;
BassVideo_WM_Move = 6;
BassVideo_WM_Size = 7;
BassVideo_WM_Paint = 8;
BassVideo_WM_Mouse_Click = 9;
BassVideo_WM_Mouse_Move = 10;
BassVideo_PlayEvent = 11;
BassVideo_Is_Play = 1;
BassVideo_Is_Pause = 2;
BassVideo_Is_Stop = 3;
// flags :
BASSVIDEO_AUTO_PAINT = 2;
BASSVIDEO_AUTO_RESIZE = 4;
BASSVIDEO_AUTO_MOVE = 8;
BASSVIDEO_FILTERNAME = 16;
BASSVIDEO_UNICODE = 32;
BASSVIDEO_VIDEOEFFECT = 64;
BASSVIDEO_DISABLE_VIDEO = 128;
{2.4.0.9 change :}
// color set
COLOR_Brightness = 1;
COLOR_Contrast = 2;
COLOR_Hue = 3;
COLOR_Saturation = 4;
BASSVIDEO_MEDIA_UNKNOWN = 0;
BASSVIDEO_MEDIA_AVI = 2;
Video_WMV = 1;
Video_AVI = 0;
EncoderType_Video = 0;
EncoderType_Audio = 1;
EncoderType_WMASF = 2;
Device_Video_Capture = 3;
Device_Audio_Capture = 4;
// wmv encoding
WM_PROFILE = 0;
WM_DONT_COMPRESS = 1; // 0 = false , 1 = true
WM_MULTI_PASS = 2; // 0 = false , 1 = true
WM_AUTOINDEX = 3; // 0 = false , 1 = true
WM_VIDEO_8 = 100;
WM_VIDEO_9 = 101;
WM_AUTO_SELECT = -1; // for ASFConfig AudioCodec value
// WMPofiles8
wmp_V80_255VideoPDA = 0;
wmp_V80_150VideoPDA = 1;
wmp_V80_28856VideoMBR = 2;
wmp_V80_100768VideoMBR = 3;
wmp_V80_288100VideoMBR = 4;
wmp_V80_288Video = 5;
wmp_V80_56Video = 6;
wmp_V80_100Video = 7;
wmp_V80_256Video = 8;
wmp_V80_384Video = 9;
wmp_V80_768Video = 10;
wmp_V80_700NTSCVideo = 11;
wmp_V80_1400NTSCVideo = 12;
wmp_V80_384PALVideo = 13;
wmp_V80_700PALVideo = 14;
wmp_V80_288MonoAudio = 15;
wmp_V80_288StereoAudio = 16;
wmp_V80_32StereoAudio = 17;
wmp_V80_48StereoAudio = 18;
wmp_V80_64StereoAudio = 19;
wmp_V80_96StereoAudio = 20;
wmp_V80_128StereoAudio = 21;
wmp_V80_288VideoOnly = 22;
wmp_V80_56VideoOnly = 23;
wmp_V80_FAIRVBRVideo = 24;
wmp_V80_HIGHVBRVideo = 25;
wmp_V80_BESTVBRVideo = 26;
VIDEOTYPE_UNKNOW = 00;
//Uncompressed RGB Video Subtypes
VIDEOTYPE_RGB1 = 01;
VIDEOTYPE_RGB4 = 02;
VIDEOTYPE_RGB8 = 03;
VIDEOTYPE_RGB555 = 04;
VIDEOTYPE_RGB565 = 05;
VIDEOTYPE_RGB24 = 06;
VIDEOTYPE_RGB32 = 07;
VIDEOTYPE_ARGB1555 = 08;
VIDEOTYPE_ARGB32 = 09;
VIDEOTYPE_ARGB4444 = 10;
VIDEOTYPE_A2R10G10B10 = 11;
VIDEOTYPE_A2B10G10R10 = 12;
//YUV
VIDEOTYPE_AYUV = 13;
VIDEOTYPE_YUY2 = 14;
VIDEOTYPE_UYVY = 15;
VIDEOTYPE_IMC1 = 16;
VIDEOTYPE_IMC3 = 17;
VIDEOTYPE_IMC2 = 18;
VIDEOTYPE_IMC4 = 19;
VIDEOTYPE_YV12 = 20;
VIDEOTYPE_NV12 = 21;
VIDEOTYPE_Y411 = 22;
VIDEOTYPE_Y41P = 23;
VIDEOTYPE_Y211 = 24;
VIDEOTYPE_YVYU = 25;
VIDEOTYPE_YVU9 = 26;
VIDEOTYPE_IF09 = 27;
//Analog Video Subtypes
VIDEOTYPE_AnalogVideo_NTSC_M = 28;
VIDEOTYPE_AnalogVideo_PAL_B = 29;
VIDEOTYPE_AnalogVideo_PAL_D = 30;
VIDEOTYPE_AnalogVideo_PAL_G = 31;
VIDEOTYPE_AnalogVideo_PAL_H = 32;
VIDEOTYPE_AnalogVideo_PAL_I = 33;
VIDEOTYPE_AnalogVideo_PAL_M = 34;
VIDEOTYPE_AnalogVideo_PAL_N = 35;
VIDEOTYPE_AnalogVideo_SECAM_B = 36;
VIDEOTYPE_AnalogVideo_SECAM_D = 37;
VIDEOTYPE_AnalogVideo_SECAM_G = 38;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -