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

📄 vfw.pas

📁 Led识别与统计系统,基于DELPHI 7.0下
💻 PAS
📖 第 1 页 / 共 5 页
字号:
        rcFrame                 : TRECT ;
        dwEditCount             : DWORD;
        dwFormatChangeCount     : DWORD;
        szName                  : array[0..63] of WideChar;
    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(IUnknown)
    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(IUnknown)
    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(IUnknown)
    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(IUnknown)
        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(IUnknown)
    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?

⌨️ 快捷键说明

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