📄 pindriver.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 + -