?? vfw.pas
字號:
end;
PAVISTREAMINFOA = ^TAVISTREAMINFOA;
TAVISTREAMINFOA = record
fccType : DWORD;
fccHandler : DWORD;
dwFlags : DWORD; // Contains AVITF_* flags
dwCaps : DWORD;
wPriority : WORD;
wLanguage : WORD;
dwScale : DWORD;
dwRate : DWORD; // dwRate / dwScale == samples/second
dwStart : DWORD;
dwLength : DWORD; // In units above...
dwInitialFrames : DWORD;
dwSuggestedBufferSize : DWORD;
dwQuality : DWORD;
dwSampleSize : DWORD;
rcFrame : TRECT ;
dwEditCount : DWORD;
dwFormatChangeCount : DWORD;
szName : array[0..63] of AnsiChar;
end;
TAVISTREAMINFO = TAVISTREAMINFOA;
PAVISTREAMINFO = PAVISTREAMINFOA;
const
AVISTREAMINFO_DISABLED = $00000001;
AVISTREAMINFO_FORMATCHANGES = $00010000;
{-- AVIFILEINFO --------------------------------------------------------------}
type
PAVIFILEINFOW = ^TAVIFILEINFOW;
TAVIFILEINFOW = record
dwMaxBytesPerSec : DWORD; // max. transfer rate
dwFlags : DWORD; // the ever-present flags
dwCaps : DWORD;
dwStreams : DWORD;
dwSuggestedBufferSize : DWORD;
dwWidth : DWORD;
dwHeight : DWORD;
dwScale : DWORD;
dwRate : DWORD; // dwRate / dwScale == samples/second
dwLength : DWORD;
dwEditCount : DWORD;
szFileType : array[0..63] of WideChar;
// descriptive string for file type?
end;
PAVIFILEINFOA = ^TAVIFILEINFOA;
TAVIFILEINFOA = record
dwMaxBytesPerSec : DWORD; // max. transfer rate
dwFlags : DWORD; // the ever-present flags
dwCaps : DWORD;
dwStreams : DWORD;
dwSuggestedBufferSize : DWORD;
dwWidth : DWORD;
dwHeight : DWORD;
dwScale : DWORD;
dwRate : DWORD; // dwRate / dwScale == samples/second
dwLength : DWORD;
dwEditCount : DWORD;
szFileType : array[0..63] of AnsiChar;
// descriptive string for file type?
end;
TAVIFILEINFO = TAVIFILEINFOA;
PAVIFILEINFO = PAVIFILEINFOA;
{-- Flags for dwFlags --------------------------------------------------------}
const
AVIFILEINFO_HASINDEX = $00000010;
AVIFILEINFO_MUSTUSEINDEX = $00000020;
AVIFILEINFO_ISINTERLEAVED = $00000100;
AVIFILEINFO_WASCAPTUREFILE = $00010000;
AVIFILEINFO_COPYRIGHTED = $00020000;
{-- Flags for dwCaps ---------------------------------------------------------}
AVIFILECAPS_CANREAD = $00000001;
AVIFILECAPS_CANWRITE = $00000002;
AVIFILECAPS_ALLKEYFRAMES = $00000010;
AVIFILECAPS_NOCOMPRESSION = $00000020;
type
TAVISAVECALLBACK = function(i: int): BOOL; pascal;
{-- AVICOMPRESSOPTIONS -------------------------------------------------------}
// Make sure it matches the AutoDoc in avisave.c !!!
type
PAVICOMPRESSOPTIONS = ^TAVICOMPRESSOPTIONS;
TAVICOMPRESSOPTIONS = record
fccType : DWORD; // stream type, for consistency
fccHandler : DWORD; // compressor
dwKeyFrameEvery : DWORD; // keyframe rate
dwQuality : DWORD; // compress quality 0-10,000
dwBytesPerSecond : DWORD; // bytes per second
dwFlags : DWORD; // flags... see below
lpFormat : PVOID; // save format
cbFormat : DWORD;
lpParms : PVOID; // compressor options
cbParms : DWORD;
dwInterleaveEvery : DWORD; // for non-video streams only
end;
//
// Defines for the dwFlags field of the AVICOMPRESSOPTIONS struct
// Each of these flags determines if the appropriate field in the structure
// (dwInterleaveEvery, dwBytesPerSecond, and dwKeyFrameEvery) is payed
// attention to. See the autodoc in avisave.c for details.
//
const
AVICOMPRESSF_INTERLEAVE = $00000001; // interleave
AVICOMPRESSF_DATARATE = $00000002; // use a data rate
AVICOMPRESSF_KEYFRAMES = $00000004; // use keyframes
AVICOMPRESSF_VALID = $00000008; // has valid data?
{== AVI interfaces ===========================================================}
{-- AVIStream ----------------------------------------------------------------}
type
PAVIStream = ^IAVIStream;
IAVIStream = class
public
function Create(lParam1, lParam2: LPARAM): HResult; virtual; stdcall; abstract;
function Info(psi: PAVISTREAMINFOW; lSize: DWORD): HResult; virtual; stdcall; abstract;
function FindSample(lPos: DWORD; lFlags: DWORD): DWORD; virtual; stdcall; abstract;
function ReadFormat(lPos: DWORD; lpFormat: PVOID; lpcbFormat: PDWORD): HResult; virtual; stdcall; abstract;
function SetFormat(lPos: DWORD; lpFormat: PVOID; cbFormat: DWORD): HResult; virtual; stdcall; abstract;
function Read(lStart: DWORD; lSamples: DWORD; lpBuffer: PVOID; cbBuffer: DWORD; plBytes, plSamples: PDWORD): HResult; virtual; stdcall; abstract;
function Write(lStart: DWORD; lSamples: DWORD; lpBuffer: PVOID; cbBuffer: DWORD; dwFlags: DWORD; plSampWritten, plBytesWritten: PDWORD): HResult; virtual; stdcall; abstract;
function Delete(lStart: DWORD; lSamples: DWORD): HResult; virtual; stdcall; abstract;
function ReadData(fcc: DWORD; lp: PVOID; lpcb: PDWORD): HResult; virtual; stdcall; abstract;
function WriteData(fcc: DWORD; lp: PVOID; cb: DWORD): HResult; virtual; stdcall; abstract;
function SetInfo(lpInfo: PAVISTREAMINFOW; cbInfo: DWORD): HResult; virtual; stdcall; abstract;
end;
PAVIStreaming = ^IAVIStreaming;
IAVIStreaming = class
public
function _Begin(
lStart, // start of what we expect to play
lEnd : DWORD; // expected end, or -1
lRate : DWORD // Should this be a float?
): HResult; virtual; stdcall; abstract;
function _End: HResult; virtual; stdcall; abstract;
end;
PAVIEditStream = ^IAVIEditStream;
IAVIEditStream = class
public
function Cut(plStart, plLength: PDWORD; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function Copy(plStart, plLength: PDWORD; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function Paste(plPos: PDWORD; plLength: PDWORD; pstream: PAVISTREAM; lStart, lEnd: DWORD): HResult; virtual; stdcall; abstract;
function Clone(var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function SetInfo(lpInfo: PAVISTREAMINFOW; cbInfo: DWORD): HResult; virtual; stdcall; abstract;
end;
{-- AVIFile ------------------------------------------------------------------}
PAVIFile = ^IAVIFile;
IAVIFile = class
function Info(pfi: PAVIFILEINFOW; lSize: DWORD): HResult; virtual; stdcall; abstract;
function GetStream(var ppStream: PAVISTREAM; fccType: DWORD; lParam: DWORD): HResult; virtual; stdcall; abstract;
function CreateStream(var ppStream: PAVISTREAM; psi: PAVISTREAMINFOW): HResult; virtual; stdcall; abstract;
function WriteData(ckid: DWORD; lpData: PVOID; cbData: DWORD): HResult; virtual; stdcall; abstract;
function ReadData(ckid: DWORD; lpData: PVOID; lpcbData: PDWORD): HResult; virtual; stdcall; abstract;
function EndRecord: HResult; virtual; stdcall; abstract;
function DeleteStream(fccType: DWORD; lParam: DWORD): HResult; virtual; stdcall; abstract;
end;
{-- GetFrame -----------------------------------------------------------------}
PGetFrame = ^IGetFrame;
IGetFrame = class
public
function GetFrame(lPos: DWORD): PVOID; virtual; stdcall; abstract;
function _Begin(lStart, lEnd: DWORD; lRate: DWORD): HResult; virtual; stdcall; abstract;
function _End: HResult; virtual; stdcall; abstract;
function SetFormat(lpbi: PBITMAPINFOHEADER; lpBits: PVOID; x, y, dx, dy: int): HResult; virtual; stdcall; abstract;
// STDMETHOD(DrawFrameStart) (THIS) PURE;
// STDMETHOD(DrawFrame) (THIS_ DWORD lPos, HDC hdc, int x, int y, int dx, int dy) PURE;
// STDMETHOD(DrawFrameEnd) (THIS) PURE;
end;
{-- GUIDs --------------------------------------------------------------------}
const
IID_IAVIFile : TGUID =
(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));
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; // Call this first!
procedure AVIFileExit; stdcall;
function AVIFileAddRef(pfile: PAVIFILE): UDWORD; stdcall;
function AVIFileRelease(pfile: PAVIFILE): UDWORD; stdcall;
function AVIFileOpenA(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall;
function AVIFileOpenW(var ppfile: PAVIFILE; szFile: LPCWSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall;
function AVIFileOpen(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall; // AVIFileOpenA
function AVIFileInfoW(pfile: PAVIFILE; pfi: PAVIFILEINFOW; lSize: DWORD): HResult; stdcall;
function AVIFileInfoA(pfile: PAVIFILE; pfi: PAVIFILEINFOA; lSize: DWORD): HResult; stdcall;
function AVIFileInfo(pfile: PAVIFILE; pfi: PAVIFILEINFOA; lSize: DWORD): HResult; stdcall; // AVIFileInfoA
function AVIFileGetStream(pfile: PAVIFILE; var ppavi: PAVISTREAM; fccType: DWORD; lParam: DWORD): HResult; stdcall;
function AVIFileCreateStreamW(pfile: PAVIFILE; var ppavi: PAVISTREAM; psi: PAVISTREAMINFOW): HResult; stdcall;
function AVIFileCreateStreamA(pfile: PAVIFILE; var ppavi: PAVISTREAM; psi: PAVISTREAMINFOA): HResult; stdcall;
function AVIFileCreateStream(pfile: PAVIFILE; var ppavi: PAVISTREAM; psi: PAVISTREAMINFOA): HResult; stdcall; // AVIFileCreateStreamA
function AVIFileWriteData(pfile: PAVIFILE; ckid: DWORD; lpData: PVOID; cbData: DWORD): HResult; stdcall;
function AVIFileReadData(pfile: PAVIFILE; ckid: DWORD; lpData: PVOID; lpcbData: PDWORD): HResult; stdcall;
function AVIFileEndRecord(pfile: PAVIFILE): HResult; stdcall;
function AVIStreamAddRef(pavi: PAVISTREAM): UDWORD; stdcall;
function AVIStreamRelease(pavi: PAVISTREAM): UDWORD; stdcall;
function AVIStreamInfoW (pavi: PAVISTREAM; psi: PAVISTREAMINFOW; lSize: DWORD): HResult; stdcall;
function AVIStreamInfoA (pavi: PAVISTREAM; psi: PAVISTREAMINFOA; lSize: DWORD): HResult; stdcall;
function AVIStreamInfo(pavi: PAVISTREAM; psi: PAVISTREAMINFOA; lSize: DWORD): HResult; stdcall; // AVIStreamInfoA
function AVIStreamFindSample(pavi: PAVISTREAM; lPos: DWORD; lFlags: DWORD): DWORD; stdcall;
function AVIStreamReadFormat(pavi: PAVISTREAM; lPos: DWORD; lpFormat: PVOID; lpcbFormat: PDWORD): HResult; stdcall;
function AVIStreamSetFormat(pavi: PAVISTREAM; lPos: DWORD; lpFormat: PVOID; cbFormat: DWORD): HResult; stdcall;
function AVIStreamReadData(pavi: PAVISTREAM; fcc: DWORD; lp: PVOID; lpcb: PDWORD): HResult; stdcall;
function AVIStreamWriteData(pavi: PAVISTREAM; fcc: DWORD; lp: PVOID; cb: DWORD): HResult; stdcall;
function AVIStreamRead(
pavi : PAVISTREAM;
lStart : DWORD;
lSamples : DWORD;
lpBuffer : PVOID;
cbBuffer : DWORD;
plBytes : PDWORD;
plSamples : PDWORD
): HResult; stdcall;
const
AVISTREAMREAD_CONVENIENT = -1;
function AVIStreamWrite(
pavi : PAVISTREAM;
lStart,
lSamples : DWORD;
lpBuffer : PVOID;
cbBuffer : DWORD;
dwFlags : DWORD;
plSampWritten : PDWORD;
plBytesWritten : PDWORD
): HResult; stdcall;
// Right now, these just use AVIStreamInfo() to get information, then
// return some of it. Can they be more efficient?
function AVIStreamStart(pavi: PAVISTREAM)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -