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

📄 pindriver.h

📁 三星2440原版bsp
💻 H
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#ifndef __PIN_DD
#define __PIN_DD

#ifdef __cplusplus
extern "C" {
#endif

#define PIN_TIMEOUT    250
#define BUFFER_COUNT 3
#define MAX_BUFFER_COUNT 100

typedef MMRESULT (WINAPI *FNTIMEKILLEVENT)(UINT);
typedef MMRESULT (WINAPI *FNTIMESETEVENT)(UINT, UINT, LPTIMECALLBACK, DWORD, UINT );

typedef enum _ImageCommands
{
    IMAGE_NTSC_EIA_100AMP_100SAT = 0,      
    IMAGE_NTSC_EIA_75AMP_100SAT,           
    IMAGE_BLACK,
    IMAGE_WHITE,
    IMAGE_GRAY_INCREASING, 
    IMAGE_LIST_TERMINATOR                  // Always keep this guy last
} IMAGECOMMAND;

typedef UINT (*PFNBUFFERFILL)( PUCHAR pImage, PCS_VIDEOINFOHEADER pCsVideoInfoHdr, IMAGECOMMAND Command, bool FlipHorizontal, LPVOID lpParam );
UINT BufferFill( PUCHAR pImage, PCS_VIDEOINFOHEADER pCsVideoInfoHdr, IMAGECOMMAND Command, bool FlipHorizontal, LPVOID lpParam );

typedef struct 
{
    ULONG ulBrightness;
    ULONG ulZoom;
} BUFFERFILLPARAMS, *PBUFFERFILLPARAMS;

typedef struct _tagStreamDescriptorShadow
{
    PCS_STREAM_DESCRIPTOR pCsStreamDescriptorExternal;
    CS_STREAM_DESCRIPTOR  csStreamDescriptorShadow;
    BOOL                  m_fBusy;
} CS_STREAM_DESCRIPTOR_SHADOW, * PCS_STREAM_DESCRIPTOR_SHADOW;


typedef class CPinDevice 
{
public:
    CPinDevice( );

    ~CPinDevice( );

    bool
    InitializeSubDevice(
        PCAMERADEVICE pCamDevice
        );

    DWORD
    StreamInstantiate(
        PCSPROPERTY_STREAMEX_S pCsPropStreamEx,
        __out_bcount(OutBufLen) PUCHAR pOutBuf,
        DWORD                  OutBufLen,
        PDWORD                 pdwBytesTransferred
        );

    DWORD
    PinHandleConnectionRequests(
        PCSPROPERTY pCsProp,
        __out_bcount(OutBufLen) PUCHAR pOutBuf,
        DWORD       OutBufLen,
        PDWORD      pdwBytesTransferred
        );

    DWORD
    PinHandleBufferRequest(
        DWORD  dwCommand,
        __out_bcount(OutBufLen) PUCHAR pOutBuf,
        DWORD  OutBufLen
        );

    void
    HandlePinIO( );

    void 
    FlushBufferQueue();

    void
    SetState(
        CSSTATE   CsState,
        CSSTATE * CsPrevState
        );

    static
    void
    TimerCallBack(
        UINT uTimerID,
        UINT uMsg,
        DWORD_PTR dwUser,
        DWORD_PTR dw1,
        DWORD_PTR dw2
        ); 

    DWORD
    PauseStream( );

    bool
    CloseSubDevice( );

    ULONG
    PictureNumber( ) const;

    ULONG
    FramesDropped( ) const;

    ULONG
    FrameSize( ) const;

private:
    bool
    CreateTimer( );

    DWORD
    AllocateBuffer( 
        LPVOID pOutBuf
        );

    DWORD
    DeallocateBuffer(
        LPVOID pOutBuf
        );

    DWORD
    EnqueueDescriptor(
        LPVOID pOutBuf
        );

    bool
    RemoveBufferFromList(
        PCS_STREAM_DESCRIPTOR * ppCsStreamDesc,
        PVOID                 * ppMappedData,
        PVOID                 * ppUnmappedData, 
        DWORD			*pdwBuffNumber
        );

    bool
    ResetBufferList( );
    
    DWORD
    PinHandleConnStateSubReqs(
        ULONG  ulReqFlags,
        __out_bcount(OutBufLen) PUCHAR pOutBuf,
        DWORD  OutBufLen,
        PDWORD pdwBytesTransferred
        );

    DWORD
    PinHandleConnDataFormatSubReqs(
        ULONG                          ulReqFlags,
        PCS_DATAFORMAT_VIDEOINFOHEADER pCsDataFormatVidInfoHdr,
        PDWORD                         pdwBytesTransferred
        );

    BOOL InitMsgQueueDescriptor(
        PCCS_MSGQUEUE_BUFFER pCsMsgQBuff, 
        PCS_STREAM_DESCRIPTOR pCsStreamDesc, 
        PVOID pMappedData, 
        PVOID pUnmappedData, 
        BOOL bFillBuffer,
        DWORD dwBuffNumber);

    DWORD
    GetIndexFromHandle( 
        DWORD  dwHandle,
        LPVOID pBuffer
        );

    DWORD 
    CreateHandle( 
        DWORD  dwIndex, 
        LPVOID pBuffer 
        );

    DWORD
    SwSetupStreamDescriptor(
        DWORD                 dwIndex,
        PCS_STREAM_DESCRIPTOR pCsStreamDesc,
        LPVOID                pBuffer
        );

    DWORD
    HwSetupStreamDescriptor(
        DWORD dwIndex
        );

    CSPROPERTY_BUFFER_MODE GetCurrentMemoryModel(
        );

    DWORD GetMaxBufferCount(
        );

    bool ReadMemoryModelFromRegistry();

	ULONG BufferFill( PUCHAR pImage, PCS_VIDEOINFOHEADER pCsVideoInfoHdr, IMAGECOMMAND Command, bool FlipHorizontal, LPVOID lpParam );
    void EnableCamera();
    void DisableCamera();

    ULONG              m_ulPinId;
    ULONG              m_ulMaxNumOfBuffers;
    ULONG              m_ulFrameSize;
    ULONG              m_ulFramesDropped;
    ULONG              m_ulPictureNumber;

    FNTIMESETEVENT     m_pfnTimeSetEvent; 
    FNTIMEKILLEVENT    m_pfnTimeKillEvent;

    PCAMERADEVICE      m_pCamAdapter;
    CS_DATARANGE_VIDEO m_CsDataRangeVideo;

    DWORD              m_dwBufferCount;
    PCS_STREAM_DESCRIPTOR_SHADOW m_pStreamDescriptorList;

    MMRESULT           m_TimerIdentifier;
    REFERENCE_TIME     m_RtAveTimePerFrame;
    DWORD              m_msStart;
    DWORD              m_msLastPT;

    HANDLE             m_hMsgQ;
    HANDLE             m_hIOThread;
    HMODULE            m_hTimerDll;

    CRITICAL_SECTION   m_csStreamBuffer;
    CSSTATE            m_CsState;

    bool               m_fClientInitialized;
    bool               m_fDiscontinuity;

    PFNBUFFERFILL m_pfnBufferFill;
    HINSTANCE m_hInstBuffer;

    CSPROPERTY_BUFFER_MODE m_dwMemoryModel;

} PINDEVICE, * PPINDEVICE;

typedef struct CPinInitHandle
{
    PCAMERADEVICE pCamDevice;
} PININITHANDLE, * PPININITHANDLE;

#ifdef __cplusplus
}
#endif

#endif //__PIN_DD

⌨️ 快捷键说明

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