📄 ievfw.pas
字号:
unit ievfw;
{$R-}
{$Q-}
{$I ie.inc}
interface
uses Windows;
const
streamtypeVIDEO = $73646976; // DWORD( 'v', 'i', 'd', 's' )
streamtypeAUDIO = $73647561; // DWORD( 'a', 'u', 'd', 's' )
streamtypeMIDI = $7364696D; // DWORD( 'm', 'i', 'd', 's' )
streamtypeTEXT = $73747874; // DWORD( 't', 'x', 't', 's' )
comptypeDIB = $20424944; // DWORD( 'D', 'I', 'B', ' ' )
AVIIF_KEYFRAME = $10;
type
PCLSID = PGUID;
TIID = TGUID;
IUnknown = class
public
function QueryInterface(const iid: TIID; var obj): HResult; virtual; stdcall; abstract;
function AddRef: Longint; virtual; stdcall; abstract;
function Release: Longint; virtual; stdcall; abstract;
end;
LONG = Longint;
PVOID = Pointer;
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;
PAviStreamInfoW = ^TAviStreamInfoW;
TAviStreamInfoW = 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 WideChar;
end;
const
AVISTREAMINFO_DISABLED = $00000001;
AVISTREAMINFO_FORMATCHANGES = $00010000;
type
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;
// descriptive string for file type?
szFileType: array[0..63] of Char;
end;
TAviFileInfo = TAviFileInfoA;
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;
// descriptive string for file type?
szFileType: array[0..63] of WideChar;
end;
const
// Flags for dwFlags
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;
// defines for uiFlags
ICMF_CHOOSE_KEYFRAME = $0001; // show KeyFrame Every box
ICMF_CHOOSE_DATARATE = $0002; // show DataRate box
ICMF_CHOOSE_PREVIEW = $0004; // allow expanded preview dialog
ICMF_CHOOSE_ALLCOMPRESSORS = $0008; // don't only show those that
type
TAVISaveCallBack = function(Percentage: Integer): Boolean stdcall;
AVISaveCallBack = ^TAVISaveCallBack;
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 aviopts.h
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?
// #include "aviiface.h": All necessary stuff from "aviiface.h" follows
type
// IAVIStream interface
IAVIStream = class(IUnknown)
function Create(lParam1, lParam2: LPARAM): HResult; virtual; stdcall; abstract;
function Info(var psi: TAVIStreamInfoW; lSize: LONG): HResult; virtual; stdcall; abstract;
function FindSample(lPos, lFlags: LONG): LONG; virtual; stdcall; abstract;
function ReadFormat(lPos: LONG; lpFormat: PVOID; var lpcbFormat: LONG): HResult; virtual; stdcall; abstract;
function SetFormat(lPos: LONG; lpFormat: PVOID; lpcbFormat: LONG): HResult; virtual; stdcall; abstract;
function Read(lStart, lSamples: LONG; lpBuffer: PVOID; cbBuffer: LONG; var plBytes: LONG; var plSamples: LONG): HResult; virtual; stdcall; abstract;
function Write(lStart, lSamples: LONG; lpBuffer: PVOID; cbBuffer: LONG; dwFlags: DWORD; var plSampWritten: LONG; var plBytesWritten: LONG): HResult; virtual; stdcall; abstract;
function Delete(lStart, lSamples: LONG): HResult; virtual; stdcall; abstract;
function ReadData(fcc: DWORD; lp: PVOID; var lpcb: LONG): HResult; virtual; stdcall; abstract;
function WriteData(fcc: DWORD; lp: PVOID; cb: LONG): HResult; virtual; stdcall; abstract;
function SetInfo(var lpInfo: TAVIStreamInfoW; cbInfo: LONG): HResult; virtual; stdcall; abstract;
end;
PAVIStream = ^IAVIStream;
// IAVIEditStream interface
IAVIEditStream = class(IUnknown)
function Info(var pfi: TAVIFileInfoW; lSize: LONG): HResult; virtual; stdcall; abstract;
function Cut(var plStart: LONG; var plLength: Long; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function Copy(var plLength: Long; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function Paste(var plLength: Long; pstream: PAVISTREAM; lStart: LONG; lEnd: LONG): HResult; virtual; stdcall; abstract;
function Clone(var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
function SetInfo(var lpInfo: TAVIStreamInfoW; cbInfo: LONG): HResult; virtual; stdcall; abstract;
end;
PAVIEditStream = ^IAVIEditStream;
// IAVIFile interface
IAVIFile = class(IUnknown)
function Open(szFile: LPCSTR; mode: UINT): HResult; virtual; stdcall; abstract;
function Info(var pfi: TAviFileInfo; lSize: LONG): HResult; virtual; stdcall; abstract;
function GetStream(var ppStream: PAVISTREAM; fccType: DWORD; lParam: LONG): HResult; virtual; stdcall; abstract;
function CreateStream(var ppStream: PAVISTREAM; psi: TAVISTREAMINFO): HResult; virtual; stdcall; abstract;
function Save(szFile: LPCSTR; var lpOptions: TAVICOMPRESSOPTIONS; lpfnCallback: AVISAVECALLBACK): HResult; virtual; stdcall; abstract;
function WriteData(ckid: DWORD; lpData: PVOID; cbData: LONG): HResult; virtual; stdcall; abstract;
function ReadData(ckid: DWORD; lpData: PVOID; var lpcbData: LONG): HResult; virtual; stdcall; abstract;
function EndRecord: HResult; virtual; stdcall; abstract;
end;
PAVIFile = ^IAVIFile;
// IGetFrame interface
type
IGetFrame = class(IUnknown)
function GetFrame(lPos: LONG): PVOID; virtual; stdcall; abstract;
function SetFormat(lpbi: PBITMAPINFOHEADER; lpBits: PVOID; x: Integer; y: Integer; dx: Integer; dy: Integer): HResult; virtual; stdcall; abstract;
end;
PGetFrame = ^IGetFrame;
const
// AVI interface IDs
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 = (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -