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

📄 avicaptura.pas

📁 视频采集控件的源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit AviCaptura;

interface

uses
  Windows, MMSystem, Messages;

const
	// ------------------------------------------------------------------
	//  Window Messages  WM_CAP... which can be sent to an AVICAP window
	// ------------------------------------------------------------------

	// Defines start of the message range
	WM_CAP_START                    = WM_USER;

	WM_CAP_GET_CAPSTREAMPTR         = (WM_CAP_START+  1);
	WM_CAP_SET_CALLBACK_ERROR       = (WM_CAP_START+  2);
	WM_CAP_SET_CALLBACK_STATUS      = (WM_CAP_START+  3);
	WM_CAP_SET_CALLBACK_YIELD       = (WM_CAP_START+  4);
	WM_CAP_SET_CALLBACK_FRAME       = (WM_CAP_START+  5);
	WM_CAP_SET_CALLBACK_VIDEOSTREAM = (WM_CAP_START+  6);
	WM_CAP_SET_CALLBACK_WAVESTREAM  = (WM_CAP_START+  7);
	WM_CAP_GET_USER_DATA            = (WM_CAP_START+  8);
	WM_CAP_SET_USER_DATA            = (WM_CAP_START+  9);

	WM_CAP_DRIVER_CONNECT           = (WM_CAP_START+  10);
	WM_CAP_DRIVER_DISCONNECT        = (WM_CAP_START+  11);
	WM_CAP_DRIVER_GET_NAME          = (WM_CAP_START+  12);
	WM_CAP_DRIVER_GET_VERSION       = (WM_CAP_START+  13);
	WM_CAP_DRIVER_GET_CAPS          = (WM_CAP_START+  14);

	WM_CAP_FILE_SET_CAPTURE_FILE    = (WM_CAP_START+  20);
	WM_CAP_FILE_GET_CAPTURE_FILE    = (WM_CAP_START+  21);
	WM_CAP_FILE_ALLOCATE            = (WM_CAP_START+  22);
	WM_CAP_FILE_SAVEAS              = (WM_CAP_START+  23);
	WM_CAP_FILE_SET_INFOCHUNK       = (WM_CAP_START+  24);
	WM_CAP_FILE_SAVEDIB             = (WM_CAP_START+  25);

	WM_CAP_EDIT_COPY                = (WM_CAP_START+  30);

	WM_CAP_SET_AUDIOFORMAT          = (WM_CAP_START+  35);
	WM_CAP_GET_AUDIOFORMAT          = (WM_CAP_START+  36);

	WM_CAP_DLG_VIDEOFORMAT          = (WM_CAP_START+  41);
	WM_CAP_DLG_VIDEOSOURCE          = (WM_CAP_START+  42);
	WM_CAP_DLG_VIDEODISPLAY         = (WM_CAP_START+  43);
	WM_CAP_GET_VIDEOFORMAT          = (WM_CAP_START+  44);
	WM_CAP_SET_VIDEOFORMAT          = (WM_CAP_START+  45);
	WM_CAP_DLG_VIDEOCOMPRESSION     = (WM_CAP_START+  46);

	WM_CAP_SET_PREVIEW              = (WM_CAP_START+  50);
	WM_CAP_SET_OVERLAY              = (WM_CAP_START+  51);
	WM_CAP_SET_PREVIEWRATE          = (WM_CAP_START+  52);
	WM_CAP_SET_SCALE                = (WM_CAP_START+  53);
	WM_CAP_GET_STATUS               = (WM_CAP_START+  54);
	WM_CAP_SET_SCROLL               = (WM_CAP_START+  55);

	WM_CAP_GRAB_FRAME               = (WM_CAP_START+  60);
	WM_CAP_GRAB_FRAME_NOSTOP        = (WM_CAP_START+  61);

	WM_CAP_SEQUENCE                 = (WM_CAP_START+  62);
	WM_CAP_SEQUENCE_NOFILE          = (WM_CAP_START+  63);
	WM_CAP_SET_SEQUENCE_SETUP       = (WM_CAP_START+  64);
	WM_CAP_GET_SEQUENCE_SETUP       = (WM_CAP_START+  65);
	WM_CAP_SET_MCI_DEVICE           = (WM_CAP_START+  66);
	WM_CAP_GET_MCI_DEVICE           = (WM_CAP_START+  67);
	WM_CAP_STOP                     = (WM_CAP_START+  68);
	WM_CAP_ABORT                    = (WM_CAP_START+  69);

	WM_CAP_SINGLE_FRAME_OPEN        = (WM_CAP_START+  70);
	WM_CAP_SINGLE_FRAME_CLOSE       = (WM_CAP_START+  71);
	WM_CAP_SINGLE_FRAME             = (WM_CAP_START+  72);

	WM_CAP_PAL_OPEN                 = (WM_CAP_START+  80);
	WM_CAP_PAL_SAVE                 = (WM_CAP_START+  81);
	WM_CAP_PAL_PASTE                = (WM_CAP_START+  82);
	WM_CAP_PAL_AUTOCREATE           = (WM_CAP_START+  83);
	WM_CAP_PAL_MANUALCREATE         = (WM_CAP_START+  84);

		// Following added post VFW 1.1
	WM_CAP_SET_CALLBACK_CAPCONTROL  = (WM_CAP_START+  85);

	// Defines end of the message range
	WM_CAP_END                      = WM_CAP_SET_CALLBACK_CAPCONTROL;

	// ------------------------------------------------------------------
	//  Message crackers for above
	// ------------------------------------------------------------------
function capSetCallbackOnError (hwnd : THandle; fpProc:LongInt):LongInt;
function capSetCallbackOnStatus(hwnd : THandle; fpProc:LongInt):LongInt;
function capSetCallbackOnYield (hwnd : THandle; fpProc:LongInt):LongInt;
function capSetCallbackOnFrame (hwnd : THandle; fpProc:LongInt):LongInt;

function capSetCallbackOnVideoStream(hwnd:THandle; fpProc:LongInt):LongInt;
function capSetCallbackOnWaveStream (hwnd:THandle; fpProc:LongInt):LongInt;
function capSetCallbackOnCapControl (hwnd:THandle; fpProc:LongInt):LongInt;
function capSetUserData(hwnd:THandle; lUser:LongInt):LongInt;
function capGetUserData(hwnd:THandle):LongInt;
function capDriverConnect(hwnd:THandle; I: Word) : LongInt;

function capDriverDisconnect(hwnd:THandle):LongInt;
function capDriverGetName(hwnd:THandle; szName:LongInt; wSize:Word):LongInt;
function capDriverGetVersion(hwnd:THandle; szVer:LongInt; wSize:Word):LongInt;
function capDriverGetCaps(hwnd:THandle; s:LongInt; wSize:Word):LongInt;

function capFileSetCaptureFile(hwnd:THandle; szName:LongInt):LongInt;
function capFileGetCaptureFile(hwnd:THandle; szName:LongInt; wSize:Word):LongInt;
function capFileAlloc(hwnd:THandle; dwSize:LongInt):LongInt;
function capFileSaveAs(hwnd:THandle; szName:LongInt):LongInt;
function capFileSetInfoChunk(hwnd:THandle; lpInfoChunk:LongInt):LongInt;
function capFileSaveDIB(hwnd:THandle; szName:LongInt):LongInt;

function capEditCopy(hwnd : THandle):LongInt;

function capSetAudioFormat(hwnd:THandle; s:LongInt; wSize:Word):LongInt;
function capGetAudioFormat(hwnd:THandle; s:LongInt; wSize:Word):LongInt;
function capGetAudioFormatSize(hwnd:THandle):LongInt;

function capDlgVideoFormat(hwnd:THandle):LongInt;
function capDlgVideoSource(hwnd:THandle):LongInt;
function capDlgVideoDisplay(hwnd:THandle):LongInt;
function capDlgVideoCompression(hwnd:THandle):LongInt;

function capGetVideoFormat(hwnd:THandle; s:LongInt; wSize:Word):LongInt;
function capGetVideoFormatSize(hwnd:THandle):LongInt;
function capSetVideoFormat(hwnd:THandle; s:LongInt; wSize:Word):LongInt;

function capPreview(hwnd:THandle; f:Word):LongInt;
function capPreviewRate(hwnd:THandle; wMS:Word):LongInt;
function capOverlay(hwnd:THandle; f:Word):LongInt;
function capPreviewScale(hwnd:THandle; f:Word):LongInt;
function capGetStatus(hwnd:THandle; s:LongInt; wSize:Word):LongInt;
function capSetScrollPos(hwnd:THandle; lpP:LongInt):LongInt;

function capGrabFrame(hwnd:THandle):LongInt;
function capGrabFrameNoStop(hwnd:THandle):LongInt;

function capCaptureSequence(hwnd:THandle):LongInt;
function capCaptureSequenceNoFile(hwnd:THandle):LongInt;
function capCaptureStop(hwnd:THandle):LongInt;
function capCaptureAbort(hwnd:THandle):LongInt;

function capCaptureSingleFrameOpen(hwnd:THandle):LongInt;
function capCaptureSingleFrameClose(hwnd:THandle):LongInt;
function capCaptureSingleFrame(hwnd:THandle):LongInt;

function capCaptureGetSetup(hwnd:THandle; s:LongInt; wSize:Word):LongInt;
function capCaptureSetSetup(hwnd:THandle; s:LongInt; wSize:Word):LongInt;

function capSetMCIDeviceName(hwnd:THandle; szName:LongInt):LongInt;
function capGetMCIDeviceName(hwnd:THandle; szName:LongInt; wSize:Word):LongInt;

function capPaletteOpen(hwnd:THandle; szName:LongInt):LongInt;
function capPaletteSave(hwnd:THandle; szName:LongInt):LongInt;
function capPalettePaste(hwnd:THandle):LongInt;
function capPaletteAuto(hwnd:THandle; iFrames:Word; iColors:LongInt):LongInt;
function capPaletteManual(hwnd:THandle; fGrab:Word; iColors:LongInt):LongInt;

	// ------------------------------------------------------------------
	//  Structures
	// ------------------------------------------------------------------

//flags del campo dwFlags de TVideoHDr
const
    VHDR_DONE                       = $00000001;    // Done bit
    VHDR_PREPARED                   = $00000002;    // Set if this header has been prepared
    VHDR_INQUEUE                    = $00000004;    // Reserved for driver
    VHDR_KEYFRAME                   = $00000008;    // Key Frame

type
    PVIDEOHDR               = ^TVIDEOHDR;
    TVIDEOHDR               = record
        lpData              : PBYTE;                // pointer to locked data buffer
        dwBufferLength      : DWORD;                // Length of data buffer
        dwBytesUsed         : DWORD;                // Bytes actually used
        dwTimeCaptured      : DWORD;                // Milliseconds from start of stream
        dwUser              : DWORD;                // for client's use
        dwFlags             : DWORD;                // assorted flags (see defines)
        dwReserved          : array[0..3] of DWORD; // reserved for driver
    end;


	PCapDriverCaps = ^TCapDriverCaps;
	TCapDriverCaps = record
    wDeviceIndex            :WORD;           // Driver index in system.ini
    fHasOverlay             :BOOL;           // Can device overlay?
    fHasDlgVideoSource      :BOOL;           // Has Video source dlg?
    fHasDlgVideoFormat      :BOOL;           // Has Format dlg?
    fHasDlgVideoDisplay     :BOOL;           // Has External out dlg?
    fCaptureInitialized     :BOOL;           // Driver ready to capture?
    fDriverSuppliesPalettes :BOOL;           // Can driver make palettes?
    hVideoIn                :THANDLE;        // Driver In channel
    hVideoOut               :THANDLE;        // Driver Out channel
    hVideoExtIn             :THANDLE;        // Driver Ext In channel
    hVideoExtOut            :THANDLE;        // Driver Ext Out channel
	end;

	PCapStatus = ^TCapStatus;
	TCapStatus = packed record
    uiImageWidth                :UINT;      // Width of the image
		uiImageHeight               :UINT;      // Height of the image
    fLiveWindow                 :BOOL;      // Now Previewing video?
    fOverlayWindow              :BOOL;      // Now Overlaying video?
    fScale                      :BOOL;      // Scale image to client?
    ptScroll                    :TPOINT;    // Scroll position
    fUsingDefaultPalette        :BOOL;      // Using default driver palette?
    fAudioHardware              :BOOL;      // Audio hardware present?
    fCapFileExists              :BOOL;      // Does capture file exist?
    dwCurrentVideoFrame         :DWORD;     // # of video frames cap'td
    dwCurrentVideoFramesDropped :DWORD;     // # of video frames dropped
    dwCurrentWaveSamples        :DWORD;     // # of wave samples cap'td
    dwCurrentTimeElapsedMS      :DWORD;     // Elapsed capture duration
    hPalCurrent                 :HPALETTE;  // Current palette in use
    fCapturingNow               :BOOL;      // Capture in progress?
    dwReturn                    :DWORD;     // Error value after any operation
    wNumVideoAllocated          :WORD;      // Actual number of video buffers
    wNumAudioAllocated          :WORD;      // Actual number of audio buffers
	end;

	PCaptureParms = ^TCaptureParms;
	TCaptureParms = record                    // Default values in parenthesis
  	dwRequestMicroSecPerFrame :DWORD;    // Requested capture rate
    fMakeUserHitOKToCapture   :BOOL;     // Show "Hit OK to cap" dlg?
    wPercentDropForError      :WORD;     // Give error msg if > (10%)
    fYield                    :BOOL;     // Capture via background task?
    dwIndexSize               :DWORD;    // Max index size in frames (32K)
    wChunkGranularity         :WORD;     // Junk chunk granularity (2K)
    fUsingDOSMemory           :BOOL;     // Use DOS buffers?
    wNumVideoRequested        :WORD;     // # video buffers, If 0, autocalc
    fCaptureAudio             :BOOL;     // Capture audio?
    wNumAudioRequested        :WORD;     // # audio buffers, If 0, autocalc
    vKeyAbort                 :WORD;     // Virtual key causing abort
    fAbortLeftMouse           :BOOL;     // Abort on left mouse?
    fAbortRightMouse          :BOOL;     // Abort on right mouse?
    fLimitEnabled             :BOOL;     // Use wTimeLimit?
    wTimeLimit                :WORD;     // Seconds to capture
    fMCIControl               :BOOL;     // Use MCI video source?
    fStepMCIDevice            :BOOL;     // Step MCI device?
    dwMCIStartTime            :DWORD;    // Time to start in MS
    dwMCIStopTime             :DWORD;    // Time to stop in MS
    fStepCaptureAt2x          :BOOL;     // Perform spatial averaging 2x
    wStepCaptureAverageFrames :WORD;     // Temporal average n Frames
    dwAudioBufferSize         :DWORD;    // Size of audio bufs (0 = default)
    fDisableWriteCache        :BOOL;     // Attempt to disable write cache
		AVStreamMaster            :WORD;     // Indicates whether the audio stream
                                         // 	controls the clock when writing an AVI file.
	end;

	PCapInfoChunk = ^TCapInfoChunk;
	TCapInfoChunk = record
    fccInfoID :FOURCC; 		// Chunk ID, "ICOP" for copyright
    lpData    :LongInt; 	// pointer to data
    cbData    :LongInt;   // size of lpData
	end;

	// ------------------------------------------------------------------
	//  Callback Definitions
	// ------------------------------------------------------------------
type
	TCAPSTATUSCALLBACK  = function(hWnd:HWND; nID:Integer; lpsz:LongInt):LongInt; stdcall;
	TCAPYIELDCALLBACK   = function(hWnd:HWND):LongInt; stdcall;
	TCAPERRORCALLBACK   = function(hWnd:HWND; nID:Integer; lpsz:LongInt):LongInt; stdcall;
	TCAPVIDEOCALLBACK   = function(hWnd:HWND; lpVHdr:PVideoHdr):LongInt; stdcall;
	TCAPWAVECALLBACK    = function(hWnd:HWND; lpWHdr:LongInt):LongInt; stdcall;
	TCAPCONTROLCALLBACK = function(hWnd:HWND; nState:Integer):LongInt; stdcall;

	// ------------------------------------------------------------------
	//  CapControlCallback states
	// ------------------------------------------------------------------
Const
	CONTROLCALLBACK_PREROLL         = 1;	// Waiting to start capture
	CONTROLCALLBACK_CAPTURING       = 2; 	// Now capturing

	// ------------------------------------------------------------------
	//  The only exported functions from AVICAP.DLL
	// ------------------------------------------------------------------
  function capCreateCaptureWindow (
		  	      lpszWindowName  : PChar;
    			    dwStyle         : DWord;
     	  		  x, y            : Integer;
		          nWidth, nHeight : Integer;
    		    	hwndParent      : THandle;
        		  nID             : Integer ) : THandle; stdcall;

	function capGetDriverDescription (
  						wDriverIndex : DWord;
		  	      lpszName     : PChar;
		          cbName       : Integer;
		    	    lpszVer      : PChar;
		          cbVer        : Integer ) : Boolean; stdcall;

	// ------------------------------------------------------------------
	// New Information chunk IDs
	// ------------------------------------------------------------------
(*
	infotypeDIGITIZATION_TIME  = mmioStringToFOURCC(PChar('IDIT'), MMIO_TOUPPER);
	infotypeSMPTE_TIME         = mmioStringToFOURCC(PChar('ISMP'), MMIO_TOUPPER);
*)

	// ------------------------------------------------------------------
	// String IDs from status and error callbacks
	// ------------------------------------------------------------------
Const
	IDS_CAP_BEGIN               = 300; (* "Capture Start" *)
	IDS_CAP_END                 = 301; (* "Capture End" *)

	IDS_CAP_INFO                = 401; (* "%s" *)
	IDS_CAP_OUTOFMEM            = 402; (* "Out of memory" *)
	IDS_CAP_FILEEXISTS          = 403; (* "File '%s' exists -- overwrite it?" *)
	IDS_CAP_ERRORPALOPEN        = 404; (* "Error opening palette '%s'" *)
	IDS_CAP_ERRORPALSAVE        = 405; (* "Error saving palette '%s'" *)
	IDS_CAP_ERRORDIBSAVE        = 406; (* "Error saving frame '%s'" *)
	IDS_CAP_DEFAVIEXT           = 407; (* "avi" *)
	IDS_CAP_DEFPALEXT           = 408; (* "pal" *)
	IDS_CAP_CANTOPEN            = 409; (* "Cannot open '%s'" *)
	IDS_CAP_SEQ_MSGSTART        = 410; (* "Select OK to start capture\nof video sequence\nto %s." *)
	IDS_CAP_SEQ_MSGSTOP         = 411; (* "Hit ESCAPE or click to end capture" *)

	IDS_CAP_VIDEDITERR          = 412; (* "An error occurred while trying to run VidEdit." *)
	IDS_CAP_READONLYFILE        = 413; (* "The file '%s' is a read-only file." *)
	IDS_CAP_WRITEERROR          = 414; (* "Unable to write to file '%s'.\nDisk may be full." *)
	IDS_CAP_NODISKSPACE         = 415; (* "There is no space to create a capture file on the specified device." *)
	IDS_CAP_SETFILESIZE         = 416; (* "Set File Size" *)
	IDS_CAP_SAVEASPERCENT       = 417; (* "SaveAs: %2ld%%  Hit Escape to abort." *)

	IDS_CAP_DRIVER_ERROR        = 418; (* Driver specific error message *)

	IDS_CAP_WAVE_OPEN_ERROR     = 419; (* "Error: Cannot open the wave input device.\nCheck sample size, frequency, and channels." *)
	IDS_CAP_WAVE_ALLOC_ERROR    = 420; (* "Error: Out of memory for wave buffers." *)
	IDS_CAP_WAVE_PREPARE_ERROR  = 421; (* "Error: Cannot prepare wave buffers." *)

⌨️ 快捷键说明

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