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

📄 vfw.pas

📁 Delphi开发高质量频视频捕捉和播放源码。
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit VFW;

{ just the AVIFile stuff (didn't have time to do the whole thing...) }

interface

uses Windows, Ole2;

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

	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 = (

⌨️ 快捷键说明

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