⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfw.pas

📁 Delphi开发高质量频视频捕捉和播放源码。
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    D1:$00020020;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));
  IID_IAVIStream: TGUID = (
    D1:$00020021;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));
  IID_IAVIStreaming: TGUID = (
    D1:$00020022;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));
  IID_IGetFrame: TGUID = (
    D1:$00020023;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));
  IID_IAVIEditStream: TGUID = (
    D1:$00020024;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));

// AVI class IDs
  CLSID_AVISimpleUnMarshal: TGUID = (
    D1:$00020009;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));
  CLSID_AVIFile: TGUID = (
    D1:$00020000;D2:$0;D3:$0;D4:($C0,$0,$0,$0,$0,$0,$0,$46));

	AVIFILEHANDLER_CANREAD		     = $0001;
	AVIFILEHANDLER_CANWRITE		     = $0002;
	AVIFILEHANDLER_CANACCEPTNONRGB = $0004;


//
// functions
//

procedure AVIFileInit; stdcall;
procedure AVIFileExit; stdcall;
function AVIFileAddRef (pfile: PAVIFILE): ULONG; stdcall;
function AVIFileRelease(pfile: PAVIFILE): ULONG; stdcall;

function AVIFileOpen(var ppfile: PAVIFile; szFile: LPCSTR; uMode: UINT;
                     lpHandler: PCLSID): HResult; stdcall;
function AVIFileInfo(pfile: PAVIFile; var pfi: TAVIFileInfo; lSize : Long): HResult; stdcall;

function AVIFileGetStream(pfile: PAVIFile; var ppavi: PAVISTREAM;
											fccType : DWORD; lParam : LONG): HResult; stdcall;
function AVIFileCreateStream(pfile: PAVIFile; var ppavi: PAVISTREAM;
                             var psi: TAVIStreamInfoA): HResult; stdcall;

function AVIFileWriteData(pfile: PAVIFile; ckid: DWORD; lpData: PVOID;
                          cbData: LONG): HResult; stdcall;
function AVIFileReadData(ckid: DWORD; lpData: PVOID;
                         var lpcbData: LONG): HResult; stdcall;
function AVIFileEndRecord(pfile: PAVIFile): HResult; stdcall;

function AVIStreamAddRef (pavi: PAVISTREAM): ULONG; stdcall;
function AVIStreamRelease (pavi: PAVISTREAM): ULONG; stdcall;

function AVIStreamInfo(pavi: PAVISTREAM; var psi: TAVISTREAMINFO; lSize:LONG): HResult; stdcall;
function AVIStreamFindSample(pavi: PAVISTREAM; lPos: LONG; lFlags:LONG): LONG; stdcall;
function AVIStreamReadFormat(pavi: PAVISTREAM; lPos:LONG;lpFormat:PVOID;var lpcbFormat:LONG): HResult; stdcall;
function AVIStreamSetFormat(pavi: PAVIStream; lPos: LONG; lpFormat: PVOID;
                            cbFormat: LONG): HResult; stdcall;

function AVIStreamReadData(pavi: PAVIStream; fcc: DWORD; lp: PVOID;var lpcb: LONG): HResult; stdcall;
function AVIStreamWriteData(pavi: PAVIStream; fcc: DWORD; lp: PVOID;cb: LONG): HResult; stdcall;

function AVIStreamRead(pavi: PAVIStream; lStart: LONG;lSamples: LONG;lpBuffer: PVOID;
			    cbBuffer: LONG;var plBytes: LONG;var plSamples: LONG): HResult; stdcall;


function AVIStreamWrite(pavi: PAVIStream; lStart, lSamples: LONG;
                        lpBuffer: PVOID; cbBuffer: LONG; dwFlags: DWORD;
                        var plSampWritten: LONG; var plBytesWritten: LONG)
                        : HResult; stdcall;

function AVIStreamStart(pavi: PAVIStream): LONG; stdcall;
function AVIStreamLength(pavi: PAVIStream): LONG; stdcall;
function AVIStreamTimeToSample(pavi: PAVIStream; lTime: LONG): LONG; stdcall;
function AVIStreamSampleToTime(pavi: PAVIStream; lSample: LONG): LONG; stdcall;
function AVIStreamBeginStreaming(pavi: PAVIStream; lStart: LONG; lEnd: LONG; lRate: LONG): LONG; stdcall;
function AVIStreamEndStreaming(pavi: PAVIStream): LONG; stdcall;

//
// helper functions for using IGetFrame
//
function AVIStreamGetFrameOpen(pavi : PAVISTREAM; lpbiWanted : PBITMAPINFOHEADER ):PGETFRAME; stdcall;
function AVIStreamGetFrame(pg: PGETFRAME; lPos: LONG): PVOID; stdcall;
function AVIStreamGetFrameClose(pg: PGETFRAME): HResult; stdcall;

// Shortcut function
function AVIStreamOpenFromFile(var ppavi: PAVISTREAM; szFile: LPCSTR;
fccType: DWORD; lParam: LONG; mode :UINT; pclsidHandler: PCLSID): HResult; stdcall;

// Use to create disembodied streams
function AVIStreamCreate(var ppavi: PAVISTREAM; lParam1: LONG; lParam2 :LONG; pclsidHandler: PCLSID): HResult; stdcall;

Const
//
// flags for AVIStreamFindSample
//
 	FIND_DIR        = $0000000F;     // direction
	FIND_NEXT       = $00000001;     // go forward
	FIND_PREV       = $00000004;     // go backward

	FIND_TYPE       = $000000F0;     // type mask
  FIND_KEY        = $00000010;     // find key frame.
  FIND_ANY        = $00000020;     // find any (non-empty) sample
  FIND_FORMAT     = $00000040;     // find format change

	FIND_RET        = $0000F000;     // return mask
	FIND_POS        = $00000000;     // return logical position
	FIND_LENGTH     = $00001000;     // return logical size
	FIND_OFFSET     = $00002000;     // return physical position
	FIND_SIZE       = $00003000;     // return physical size
	FIND_INDEX      = $00004000;     // return physical index position

function AVISaveV(szFile : LPCSTR;pclsidHandler:PCLSID;
          		lpfnCallback :AVISAVECALLBACK; nStreams: INTEGER;
              var ppavi: PAVISTREAM; var plpOptions: PAVICOMPRESSOPTIONS):HResult; stdcall;

function AVISaveOptions(hwnd : HWND;uiFlags:UINT; nStreams : INTEGER;
              var pavi : PAVISTREAM; var plpOptions : PAVICOMPRESSOPTIONS ):Boolean; stdcall;

function AVISaveOptionsFree(nStreams : INTEGER; var plpOptions : PAVICOMPRESSOPTIONS ):Boolean; stdcall;

const
  AVIERR_OK      = 0;
  AVIIF_LIST     = $01;
  AVIIF_TWOCC	   = $02;


implementation

procedure AVIFileInit; stdcall; external 'avifil32.dll' name 'AVIFileInit';
procedure AVIFileExit; stdcall; external 'avifil32.dll' name 'AVIFileExit';
function AVIFileAddRef (pfile: PAVIFILE): ULONG;
                      external 'avifil32.dll' name 'AVIFileAddRef';
function AVIFileRelease(pfile: PAVIFILE): ULONG;
                      external 'avifil32.dll' name 'AVIFileRelease';
function  AVIFileOpen(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT;
                      lpHandler: PCLSID): HResult;
                      external 'avifil32.dll' name 'AVIFileOpenA';
function  AVIFileInfo(pfile: PAVIFile; var pfi: TAVIFileInfo;
                      lSize : Long): HResult; stdcall;
                      external 'avifil32.dll' name 'AVIFileInfo';
function  AVIFileGetStream(pfile: PAVIFile; var ppavi: PAVIStream;
											fccType : DWORD; lParam : LONG): HResult;
                    	external 'avifil32.dll' name 'AVIFileGetStream';

function  AVIFileCreateStream(pfile: PAVIFile; var ppavi: PAVIStream;
                      var psi: TAVIStreamInfoA): HResult;
                    	external 'avifil32.dll' name 'AVIFileCreateStreamA';
function AVIFileWriteData(pfile: PAVIFile; ckid: DWORD; lpData: PVOID;
                          cbData: LONG): HResult;
                    	external 'avifil32.dll' name 'AVIFileWriteData';
function AVIFileReadData(ckid: DWORD; lpData: PVOID;
                         var lpcbData: LONG): HResult;
                    	external 'avifil32.dll' name 'AVIFileReadData';
function AVIFileEndRecord(pfile: PAVIFile): HResult;
                    	external 'avifil32.dll' name 'AVIFileEndRecord';
function AVIStreamAddRef (pavi: PAVISTREAM): ULONG;
                    	external 'avifil32.dll' name 'AVIStreamAddRef';
function AVIStreamRelease (pavi: PAVISTREAM): ULONG;
                    	external 'avifil32.dll' name 'AVIStreamRelease';
function AVIStreamInfo(pavi: PAVISTREAM; var psi: TAVISTREAMINFO; lSize:LONG): HResult;
                    	external 'avifil32.dll' name 'AVIStreamInfo';
function AVIStreamFindSample(pavi: PAVISTREAM; lPos: LONG; lFlags:LONG): LONG;
                    	external 'avifil32.dll' name 'AVIStreamFindSample';
function AVIStreamReadFormat(pavi: PAVISTREAM; lPos:LONG;lpFormat:PVOID;var lpcbFormat:LONG): HResult;
                    	external 'avifil32.dll' name 'AVIStreamReadFormat';
function AVIStreamSetFormat(pavi: PAVIStream; lPos: LONG; lpFormat: PVOID;
                      cbFormat: LONG): HResult;
                      external 'avifil32.dll' name 'AVIStreamSetFormat';
function AVIStreamReadData(pavi: PAVIStream; fcc: DWORD; lp: PVOID;var lpcb: LONG): HResult;
                      external 'avifil32.dll' name 'AVIStreamReadData';
function AVIStreamWriteData(pavi: PAVIStream; fcc: DWORD; lp: PVOID;cb: LONG): HResult;
                      external 'avifil32.dll' name 'AVIStreamWriteData';
function AVIStreamRead(pavi: PAVIStream; lStart: LONG;lSamples: LONG;lpBuffer: PVOID;
			    cbBuffer: LONG;var plBytes: LONG;var plSamples: LONG): HResult;
                      external 'avifil32.dll' name 'AVIStreamRead';
function AVIStreamWrite(pavi: PAVIStream; lStart, lSamples: LONG;
                      lpBuffer: PVOID; cbBuffer: LONG; dwFlags: DWORD;
                      var plSampWritten: LONG; var plBytesWritten: LONG): HResult;
                      external 'avifil32.dll' name 'AVIStreamWrite';
function AVIStreamStart(pavi: PAVIStream): LONG;
                      external 'avifil32.dll' name 'AVIStreamStart';
function AVIStreamLength(pavi: PAVIStream): LONG;
                      external 'avifil32.dll' name 'AVIStreamLength';
function AVIStreamTimeToSample(pavi: PAVIStream; lTime: LONG): LONG;
                      external 'avifil32.dll' name 'AVIStreamTimeToSample';
function AVIStreamSampleToTime(pavi: PAVIStream; lSample: LONG): LONG;
                      external 'avifil32.dll' name 'AVIStreamSampleToTime';
function AVIStreamBeginStreaming(pavi: PAVIStream; lStart: LONG; lEnd: LONG; lRate: LONG): LONG; stdcall;
                      external 'avifil32.dll' name 'AVIStreamBeginStreaming';
function AVIStreamEndStreaming(pavi: PAVIStream): LONG;
                      external 'avifil32.dll' name 'AVIStreamEndStreaming';

function AVIStreamGetFrameOpen(pavi : PAVISTREAM; lpbiWanted : PBITMAPINFOHEADER ):PGETFRAME;
                      external 'avifil32.dll' name 'AVIStreamGetFrameOpen';
function AVIStreamGetFrame(pg: PGETFRAME; lPos: LONG): PVOID;
                      external 'avifil32.dll' name 'AVIStreamGetFrame';
function AVIStreamGetFrameClose(pg: PGETFRAME): HResult;
                      external 'avifil32.dll' name 'AVIStreamGetFrameClose';
function AVIStreamOpenFromFile(var ppavi: PAVISTREAM; szFile: LPCSTR;
fccType: DWORD; lParam: LONG; mode :UINT; pclsidHandler: PCLSID): HResult;
                      external 'avifil32.dll' name 'AVIStreamOpenFromFile';
function AVIStreamCreate(var ppavi: PAVISTREAM; lParam1: LONG; lParam2 :LONG; pclsidHandler: PCLSID): HResult;
                      external 'avifil32.dll' name 'AVIStreamCreate';

function AVISaveV(szFile : LPCSTR;pclsidHandler:PCLSID;
          		lpfnCallback :AVISAVECALLBACK; nStreams: INTEGER;
              var ppavi: PAVISTREAM; var plpOptions: PAVICOMPRESSOPTIONS):HResult; stdcall;
                      external 'avifil32.dll' name 'AVISaveV';
function AVISaveOptions(hwnd : HWND;uiFlags:UINT; nStreams : INTEGER;
              var pavi : PAVISTREAM; var plpOptions : PAVICOMPRESSOPTIONS ):Boolean; stdcall;
                      external 'avifil32.dll' name 'AVISaveOptions';

function AVISaveOptionsFree(nStreams : INTEGER; var plpOptions : PAVICOMPRESSOPTIONS ):Boolean; stdcall;
                      external 'avifil32.dll' name 'AVISaveOptionsFree';

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -