亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? capture.h

?? 實現avstream流的驅動程序
?? H
字號:
/**************************************************************************

    AVStream Simulated Hardware Sample

    Copyright (c) 2001, Microsoft Corporation.

    File:

        capture.h

    Abstract:

        This file contains header for the video capture pin on the capture
        filter.  The capture sample performs "fake" DMA directly into
        the capture buffers.  Common buffer DMA will work slightly differently.

        For common buffer DMA, the general technique would be DPC schedules
        processing with KsPinAttemptProcessing.  The processing routine grabs
        the leading edge, copies data out of the common buffer and advances.
        Cloning would not be necessary with this technique.  It would be 
        similiar to the way "AVSSamp" works, but it would be pin-centric.

    History:

        created 3/8/2001

**************************************************************************/

//
// STREAM_POINTER_CONTEXT:
//
// This is the context structure we associate with all clone stream pointers.
// It allows the mapping code to rip apart the buffer into chunks the same
// size as the scatter/gather mappings in order to fake scatter / gather
// bus-master DMA.
//
typedef struct _STREAM_POINTER_CONTEXT {
    
    PUCHAR BufferVirtual;

} STREAM_POINTER_CONTEXT, *PSTREAM_POINTER_CONTEXT;

//
// CCapturePin:
//
// The video capture pin class.
//
class CCapturePin :
    public ICaptureSink {

private:

    //
    // The AVStream pin we're associated with.
    //
    PKSPIN m_Pin;

    //
    // Pointer to the internal device object for our capture device.
    // We access the "fake" hardware through this object.
    //
    CCaptureDevice *m_Device;

    //
    // The state we've put the hardware into.  This allows us to keep track
    // of whether to do things like unpausing or restarting.
    //
    HARDWARE_STATE m_HardwareState;

    //
    // The clock we've been assigned.  As with other capture filters, we do
    // not expose a clock.  If one has been assigned, we will use it to
    // time stamp packets (plus a reasonable delta to work the capture stream
    // in a preview graph).
    //
    PIKSREFERENCECLOCK m_Clock;

    //
    // The captured video info header.  The settings for "fake" hardware will be
    // programmed via this video info header.
    //
    PKS_VIDEOINFOHEADER m_VideoInfoHeader;

    //
    // If we are unable to insert all of the mappings in a stream pointer into
    // the "fake" hardware's scatter / gather table, we set this to the
    // stream pointer that's incomplete.  This is done both to make the 
    // relasing easier and to make it easier to fake the scatter / gather
    // hardware.
    //
    PKSSTREAM_POINTER m_PreviousStreamPointer;

    //
    // An indication of whether or not we pended I/O for some reason.  If this
    // is set, the DPC will resume I/O when any mappings are completed.
    //
    BOOLEAN m_PendIo;

    //
    // An indication of whether or not this pin has acquired the necessary
    // hardware resources to operate.  When the pin reaches KSSTATE_ACQUIRE,
    // we attempt to acquire the hardware.  This flag will be set based on
    // our success / failure.
    //
    BOOLEAN m_AcquiredResources;

    //
    // CleanupReferences():
    //
    // Clean up any references we hold on frames in the queue.  This is called
    // when we abruptly stop the fake hardware.
    //
    NTSTATUS
    CleanupReferences (
        );

    //
    // SetState():
    //
    // This is the state transition handler for the capture pin.  It attempts
    // to acquire resources for the capture pin (or releasing them if
    // necessary) and starts and stops the hardware as required.
    //
    NTSTATUS
    SetState (
        IN KSSTATE ToState,
        IN KSSTATE FromState
        );

    //
    // Process():
    //
    // This is the processing dispatch for the capture pin.  It handles
    // programming the scatter / gather tables for the hardware as buffers
    // become available.  This processing routine is designed for a direct
    // into the capture buffers kind of DMA as opposed to common-buffer
    // and copy strategies.
    //
    NTSTATUS
    Process (
        );

    //
    // CaptureVideoInfoHeader():
    //
    // This routine stashes the video info header set on the pin connection
    // in the CCapturePin object.  This is used to base hardware settings.
    //
    PKS_VIDEOINFOHEADER
    CaptureVideoInfoHeader (
        );

    //
    // Cleanup():
    //
    // This is the free callback from the bagged item (CCapturePin).  If we
    // do not provide a callback when we bag the CCapturePin, ExFreePool
    // would be called.  This is not desirable for C++ constructed objects.
    // We merely delete the object here.
    //
    static
    void
    Cleanup (
        IN CCapturePin *Pin
        )
    {
        delete Pin;
    }

public:

    //
    // CCapturePin():
    //
    // The capture pin's constructor.  Initialize any non-0, non-NULL fields
    // (since new will have zero'ed the memory anyway) and set up our
    // device level pointers for access during capture routines.
    //
    CCapturePin (
        IN PKSPIN Pin
        );

    //
    // ~CCapturePin():
    //
    // The capture pin's destructor.
    //
    ~CCapturePin (
        )
    {
    }

    //
    // ICaptureSink::CompleteMappings()
    //
    // This is the capture sink notification mechanism for mapping completion.
    // When the device DPC detects that a given number of mappings have been
    // completed by the fake hardware, it signals the capture sink of this
    // through this method.
    //
    virtual
    void
    CompleteMappings (
        IN ULONG NumMappings
        );

    /*************************************************

        Dispatch Routines

    *************************************************/

    //
    // DispatchCreate():
    //
    // This is the creation dispatch for the capture pin.  It creates
    // the CCapturePin object and associates it with the AVStream object
    // bagging it in the process.
    //
    static
    NTSTATUS
    DispatchCreate (
        IN PKSPIN Pin,
        IN PIRP Irp
        );

    //
    // DispatchSetState():
    //
    // This is the set device state dispatch for the pin.  The routine bridges
    // to SetState() in the context of the CCapturePin.
    //
    static
    NTSTATUS
    DispatchSetState (
        IN PKSPIN Pin,
        IN KSSTATE ToState,
        IN KSSTATE FromState
        )
    {
        return 
            (reinterpret_cast <CCapturePin *> (Pin -> Context)) ->
                SetState (ToState, FromState);
    }

    //
    // DispatchSetFormat():
    //
    // This is the set data format dispatch for the pin.  This will be called
    // BEFORE pin creation to validate that a data format selected is a match
    // for the range pulled out of our range list.  It will also be called
    // for format changes.
    //
    // If OldFormat is NULL, this is an indication that it's the initial
    // call and not a format change.  Even fixed format pins get this call
    // once.
    //
    static
    NTSTATUS
    DispatchSetFormat (
        IN PKSPIN Pin,
        IN PKSDATAFORMAT OldFormat OPTIONAL,
        IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
        IN const KSDATARANGE *DataRange,
        IN const KSATTRIBUTE_LIST *AttributeRange OPTIONAL
        );

    //
    // DispatchProcess():
    //
    // This is the processing dispatch for the capture pin.  The routine 
    // bridges to Process() in the context of the CCapturePin.
    //
    static 
    NTSTATUS
    DispatchProcess (
        IN PKSPIN Pin
        )
    {
        return 
            (reinterpret_cast <CCapturePin *> (Pin -> Context)) ->
                Process ();
    }

    //
    // IntersectHandler():
    //
    // This is the data intersection handler for the capture pin.  This 
    // determines an optimal format in the intersection of two ranges,
    // one local and one possibly foreign.  If there is no compatible format,
    // STATUS_NO_MATCH is returned.
    //
    static
    NTSTATUS
    IntersectHandler (
        IN PKSFILTER Filter,
        IN PIRP Irp,
        IN PKSP_PIN PinInstance,
        IN PKSDATARANGE CallerDataRange,
        IN PKSDATARANGE DescriptorDataRange,
        IN ULONG BufferSize,
        OUT PVOID Data OPTIONAL,
        OUT PULONG DataSize
        );

};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频在线| 一本大道av伊人久久综合| 制服丝袜av成人在线看| 一区二区三区四区av| 91麻豆免费在线观看| 国产精品蜜臀av| 97se狠狠狠综合亚洲狠狠| 911精品产国品一二三产区| 香蕉久久夜色精品国产使用方法| 色老综合老女人久久久| 一区二区三区四区不卡视频| 在线国产亚洲欧美| 亚洲va中文字幕| 欧美精品色综合| 蜜臀精品一区二区三区在线观看 | 亚洲色图一区二区三区| 99热精品国产| 亚洲欧洲精品天堂一级| 91一区一区三区| 亚洲欧美日韩系列| 欧美亚洲动漫精品| 婷婷激情综合网| 欧美一级片在线观看| 亚洲成人在线免费| 日韩一级片网站| 国产乱码精品一品二品| 国产欧美日韩在线观看| 99re热这里只有精品视频| 国产精品拍天天在线| 成人一区二区视频| 亚洲宅男天堂在线观看无病毒| 欧美亚洲国产bt| 看电视剧不卡顿的网站| 欧美高清在线视频| 欧美视频一区二区| 激情丁香综合五月| 中文字幕一区二区在线观看| 欧美色视频在线观看| 久久精品久久久精品美女| 国产精品午夜春色av| 欧美亚洲另类激情小说| 激情成人午夜视频| 亚洲二区视频在线| 国产日韩欧美制服另类| 99久久婷婷国产精品综合| 亚洲成av人片一区二区梦乃 | 日韩欧美中文字幕一区| 处破女av一区二区| 自拍偷拍国产精品| 日韩一区二区三区视频在线| 9l国产精品久久久久麻豆| 日本成人在线一区| 亚洲人成伊人成综合网小说| 欧美tickle裸体挠脚心vk| 成人午夜又粗又硬又大| 日韩国产在线观看一区| 中文字幕制服丝袜成人av| 欧美一区二区视频网站| 91麻豆视频网站| 日本亚洲最大的色成网站www| 最新日韩在线视频| 精品国产髙清在线看国产毛片 | 欧美一区二区精美| 色天使色偷偷av一区二区| 国产精品自拍在线| 奇米影视7777精品一区二区| 亚洲美女免费在线| 国产欧美精品一区二区色综合朱莉| 欧美亚洲丝袜传媒另类| 91丨porny丨国产入口| 国产成人精品网址| 麻豆专区一区二区三区四区五区| 一区二区三区美女视频| 国产精品成人免费| 久久精品一区二区三区不卡牛牛 | 中文字幕一区二区三区视频| 日韩一级免费观看| 欧美精品久久一区| 欧美性猛交xxxx乱大交退制版| 成人黄色国产精品网站大全在线免费观看| 日本不卡视频一二三区| 亚洲福利视频一区二区| 亚洲男人的天堂一区二区| 国产偷v国产偷v亚洲高清| 精品国产一区二区三区久久影院| 欧美精选午夜久久久乱码6080| 欧美亚洲一区二区三区四区| 91麻豆蜜桃一区二区三区| 大尺度一区二区| 成人av中文字幕| www.亚洲精品| 99久久精品免费看国产| av电影一区二区| av不卡在线播放| 色噜噜狠狠一区二区三区果冻| 日本高清成人免费播放| 91美女视频网站| 欧美午夜精品久久久| 欧美日韩卡一卡二| 91精品国产综合久久久久久 | 91首页免费视频| 欧美揉bbbbb揉bbbbb| 欧美一二三区在线| 中文字幕免费不卡在线| 亚洲综合一区二区精品导航| 丝袜亚洲另类欧美| 国产精品自在欧美一区| 99久久99久久精品免费观看 | 黄页视频在线91| 福利一区福利二区| 91福利在线播放| 欧美成人精精品一区二区频| 国产精品女人毛片| 亚洲国产日日夜夜| 国产精品1024| 欧美日韩一级二级| 国产女同互慰高潮91漫画| 亚洲一区二区成人在线观看| 国产一区二区三区四区五区美女| 色综合视频在线观看| 日韩欧美国产一区二区三区| 国产精品区一区二区三区| 婷婷综合在线观看| 成人午夜av在线| 91精品国产福利在线观看| 国产精品国产三级国产| 毛片一区二区三区| 日本韩国一区二区三区视频| 精品国产99国产精品| 亚洲一区二区三区中文字幕在线| 激情欧美一区二区| 欧美二区乱c少妇| 国产精品动漫网站| 国产在线精品国自产拍免费| 欧美日韩一级二级| 国产精品久久毛片a| 蜜臀久久99精品久久久久宅男| 91搞黄在线观看| 国产精品传媒入口麻豆| 国产一二三精品| 日韩免费福利电影在线观看| 亚洲激情图片qvod| 高清成人在线观看| 久久综合色婷婷| 免费精品视频在线| 欧美日韩卡一卡二| 一区二区在线观看免费视频播放| 国产精品一区二区视频| 欧美一区二区三区播放老司机| 一级女性全黄久久生活片免费| av在线不卡网| 国产精品午夜在线| 国产成人精品一区二| 精品sm在线观看| 久久er99热精品一区二区| 91精品免费在线| 日本最新不卡在线| 欧美日韩精品一二三区| 亚洲一区在线视频观看| 在线视频亚洲一区| 亚洲美女偷拍久久| 色综合久久99| 亚洲欧美一区二区三区国产精品| 成人激情校园春色| 国产精品美女一区二区在线观看| 国产精品亚洲第一区在线暖暖韩国| 日韩三级高清在线| 激情深爱一区二区| 久久精品亚洲一区二区三区浴池| 韩国午夜理伦三级不卡影院| 欧美变态凌虐bdsm| 国产一区二区久久| 日本一区二区视频在线| gogogo免费视频观看亚洲一| 中文天堂在线一区| 色婷婷亚洲精品| 亚洲午夜在线视频| 日韩欧美国产精品一区| 久久精品999| 国产欧美视频一区二区三区| www.在线欧美| 亚洲自拍偷拍av| 欧美一二三区在线| 国产一区二区在线免费观看| 国产丝袜美腿一区二区三区| 成人高清视频在线观看| 亚洲影视在线观看| 日韩一区二区影院| 国产成人精品免费在线| 亚洲品质自拍视频| 欧美日韩国产在线观看| 久久精品国产亚洲aⅴ| 国产亚洲自拍一区| 99国产精品久久久久久久久久| 亚洲激情欧美激情| 日韩欧美国产成人一区二区| 粉嫩嫩av羞羞动漫久久久| 一区二区三区日韩欧美| 欧美大肚乱孕交hd孕妇| 丰满白嫩尤物一区二区|