📄 pindriver.h
字号:
//-----------------------------------------------------------------------------
//
// Copyright (C) 2003-2004, MOTOROLA, INC. All Rights Reserved
// THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
// BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
// MOTOROLA, INC.
//
//------------------------------------------------------------------------------
//
// Copyright (C) 2004-2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------
//
// File: PinDriver.h
//
// Header file for PinDevice class
//
//------------------------------------------------------------------------------
#include "CameraDriver.h"
#ifndef __PIN_DD
#define __PIN_DD
#include "marshal.hpp" //helper classes to marshal/alloc embedded/async buffer
#ifdef __cplusplus
extern "C" {
#endif
//------------------------------------------------------------------------------
// Defines
#define PIN_TIMEOUT 250 //Amount of time, in milliseconds, before the WriteMsgQueue operation will time out
#define BUFFER_COUNT 4 // Increasing the buffer count from 3 to 4.
#define MAX_BUFFER_COUNT 100
#define WAIT_BUFFER_TIMEOUT 10000 //Timeout for receive a buffer from Prp module.
//------------------------------------------------------------------------------
// Types
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 struct CPinInitHandle
{
PCAMERADEVICE pCamDevice;
} PININITHANDLE, * PPININITHANDLE;
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;
MarshalledBuffer_t *m_pMarshalledDataBuffer; //Marshalled/Async allocated data buffer when the memory model is not CSPROPERTY_BUFFER_DRIVER
MarshalledBuffer_t *m_pMarshalledStreamDesc; //Marshalled/Async allocated stream Desc when the memory model is not CSPROPERTY_BUFFER_DRIVER
PCS_STREAM_DESCRIPTOR m_pUnMarshalledStreamDesc; //driver maintains the unmarshalled buffer value to instruct the client where to read data from
} CS_STREAM_DESCRIPTOR_SHADOW, * PCS_STREAM_DESCRIPTOR_SHADOW;
typedef class CPinDevice
{
public:
CPinDevice();
~CPinDevice();
BOOL InitializeSubDevice(PCAMERADEVICE pCamDevice);
DWORD StreamInstantiate(
PCSPROPERTY_STREAMEX_S pCsPropStreamEx,
PUCHAR pOutBuf,
DWORD OutBufLen,
PDWORD pdwBytesTransferred
);
DWORD PinHandleConnectionRequests(
PCSPROPERTY pCsProp,
PUCHAR pOutBuf, // Unsafe, use with caution
DWORD OutBufLen,
PDWORD pdwBytesTransferred // Unsafe, use with caution
);
DWORD
PinHandleBufferRequest(
CSBUFFER_INFO csBufferInfo,
PUCHAR pOutBuf,
DWORD OutBufLen,
DWORD *pdwBytesTransferred
);
DWORD PinSetDirectDisplayMode(BOOL bDirectDisplayMode);
DWORD PinSetDirectCaptureMode(BOOL bDirectCaptureMode);
void SetPowerState(CEDEVICE_POWER_STATE power_state);
CEDEVICE_POWER_STATE GetPowerState();
void HandlePinIO( );
void FlushBufferQueue();
DWORD 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;
UINT PinBufferFill(
PUCHAR pImage,
PCS_VIDEOINFOHEADER pCsVideoInfoHdr,
IMAGECOMMAND Command,
BOOL FlipHorizontal,
LPVOID lpParam
);
CS_DATARANGE_VIDEO m_CsDataRangeVideo;
CSSTATE m_CsState;
bool m_fPrpChannelEnabled;
bool m_fJustEnablePrp;
HANDLE m_hPrPBuffFilled;
UINT8 m_BufferFilled;
ULONG m_ulCurrNumOfBuffers;
private:
BOOL CreateTimer( );
DWORD
AllocateBuffer(
PCS_STREAM_DESCRIPTOR pCsDescriptor,
LPVOID pOutBuf,
DWORD OutBufLen,
DWORD *pdwBytesTransferred
);
DWORD
DeallocateBuffer(
PCS_STREAM_DESCRIPTOR pCsDescriptor
);
DWORD
EnqueueDescriptor(
PCS_STREAM_DESCRIPTOR pCsDescriptor
);
BOOL RemoveBufferFromList(
PCS_STREAM_DESCRIPTOR * ppCsStreamDesc,
PVOID * ppMappedData,
PVOID * ppUnmappedData
);
BOOL ResetBufferList( );
BOOL AllocateDriverBuffers();
BOOL DeleteDriverBuffers();
DWORD PinHandleConnStateSubReqs(
ULONG ulReqFlags,
PUCHAR pOutBuf,
DWORD OutBufLen,
PDWORD pdwBytesTransferred
);
DWORD PinHandleConnDataFormatSubReqs(
ULONG ulReqFlags,
PCS_DATAFORMAT_VIDEOINFOHEADER pCsDataFormatVidInfoHdr,
PDWORD pdwBytesTransferred
);
BOOL InitMsgQueueDescriptor(
PCS_MSGQUEUE_BUFFER pCsMsgQBuff,
PCS_STREAM_DESCRIPTOR pCsStreamDesc,
PVOID pMappedData,
PVOID pUnmappedData,
BOOL bFillBuffer
);
DWORD GetIndexFromHandle(
DWORD dwHandle,
LPVOID pBuffer
);
DWORD CreateHandle(
DWORD dwIndex,
LPVOID pBuffer
);
DWORD HwSetupStreamDescriptor(DWORD dwIndex);
DWORD SwSetupStreamDescriptor(
DWORD dwIndex,
PCS_STREAM_DESCRIPTOR pCsStreamDesc,
LPVOID pBuffer
);
CSPROPERTY_BUFFER_MODE GetCurrentMemoryModel();
DWORD GetMaxBufferCount();
BOOL ReadMemoryModelFromRegistry();
LPVOID RemoteLocalAlloc_I(UINT uFlags, ULONG ulBytes);
VOID RemoteLocalFree_I(LPVOID lpData);
ULONG m_ulPinId;
ULONG m_ulMaxNumOfBuffers;
ULONG m_ulFrameSize;
ULONG m_ulFramesDropped;
ULONG m_ulPictureNumber;
FNTIMESETEVENT m_pfnTimeSetEvent;
FNTIMEKILLEVENT m_pfnTimeKillEvent;
PCAMERADEVICE m_pCamAdapter;
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;
BOOL m_fClientAllocateBuffers;
BOOL m_fClientInitialized;
BOOL m_fDiscontinuity;
BOOL m_bStillPinActive;
HANDLE m_pHeap;
// If TRUE, only return the physics address of a frame buffer to application for further processing.
// If FALSE, return the frame buffer to application for display/capture.(default.)
BOOL m_bDirectMode;
PFNBUFFERFILL m_pfnBufferFill;
HINSTANCE m_hInstBuffer;
CSPROPERTY_BUFFER_MODE m_dwMemoryModel;
} PINDEVICE, * PPINDEVICE;
//------------------------------------------------------------------------------
// Functions
#ifdef __cplusplus
}
#endif
#endif //__PIN_DD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -