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

📄 u_avicap.pas

📁 一个简单的学籍管理软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit U_AviCap;

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
 // ------------------------------------------------------------------
type
  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: LongInt): 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
 // ------------------------------------------------------------------
var
  capCreateCaptureWindow: function(
    lpszWindowName: PChar;
    dwStyle: DWord;
    x, y: Integer;
    nWidth, nHeight: Integer;
    hwndParent: THandle;
    nID: Integer): THandle; stdcall;

  capGetDriverDescription: function(
    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." *)
  IDS_CAP_WAVE_ADD_ERROR = 422; (* "Error: Cannot add wave buffers." *)
  IDS_CAP_WAVE_SIZE_ERROR = 423; (* "Error: Bad wave size." *)

  IDS_CAP_VIDEO_OPEN_ERROR = 424; (* "Error: Cannot open the video input device." *)
  IDS_CAP_VIDEO_ALLOC_ERROR = 425; (* "Error: Out of memory for video buffers." *)
  IDS_CAP_VIDEO_PREPARE_ERROR = 426; (* "Error: Cannot prepare video buffers." *)
  IDS_CAP_VIDEO_ADD_ERROR = 427; (* "Error: Cannot add video buffers." *)
  IDS_CAP_VIDEO_SIZE_ERROR = 428; (* "Error: Bad video size." *)

⌨️ 快捷键说明

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