www.pudn.com > camera.rar > pdd_private.h
// // Copyright (c) Microsoft Corporation. All rights reserved. // // // Use of this sample source code is subject to the terms of the Microsoft // license agreement under which you licensed this sample source code. If // you did not accept the terms of the license agreement, you are not // authorized to use this sample source code. For the terms of the license, // please see the license agreement between you and Microsoft or, if applicable, // see the LICENSE.RTF on your install media or the root of your tools installation. // THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES. // // // (C) Copyright 2006 Marvell International Ltd. // All Rights Reserved // #ifndef __PDD_PRIVATE_H__ #define __PDD_PRIVATE_H__ #include#include #include #include "Cs.h" #include "Csmedia.h" #include "CameraPDDProps.h" #include "dstruct.h" #include "dbgsettings.h" #include #include "CameraDriver.h" #include "PinDriver.h" #include "CameraPDD.h" #include "ipm_api.h" #ifdef __cplusplus extern "C" { #endif typedef MMRESULT (WINAPI *FNTIMEKILLEVENT)(UINT32); typedef MMRESULT (WINAPI *FNTIMESETEVENT)(UINT32, UINT32, LPTIMECALLBACK, DWORD, UINT32 ); #include "qci.h" #include "sensor.h" typedef class CCameraPdd { public: friend class CCameraDevice; CCameraPdd(); ~CCameraPdd(); DWORD PDDInit( PVOID MDDContext, PPDDFUNCTBL pPDDFuncTbl ); DWORD GetAdapterInfo( PADAPTERINFO pAdapterInfo ); DWORD HandleVidProcAmpChanges( DWORD dwPropId, LONG lFlags, LONG lValue ); DWORD HandleCamControlChanges( DWORD dwPropId, LONG lFlags, LONG lValue ); DWORD HandleVideoControlCapsChanges( LONG lModeType , ULONG ulCaps ); DWORD SetPowerState( CEDEVICE_POWER_STATE PowerState ); DWORD HandleAdapterCustomProperties( PUCHAR pInBuf, DWORD InBufLen, PUCHAR pOutBuf, DWORD OutBufLen, PDWORD pdwBytesTransferred ); DWORD InitSensorMode( ULONG ulModeType, LPVOID ModeContext ); DWORD DeInitSensorMode( ULONG ulModeType ); DWORD SetSensorState( ULONG lPinId, CSSTATE csState ); DWORD TakeStillPicture( LPVOID pBurstModeInfo ); DWORD GetSensorModeInfo( ULONG ulModeType, PSENSORMODEINFO pSensorModeInfo ); DWORD SetSensorModeFormat( ULONG ulModeType, PCS_DATARANGE_VIDEO pCsDataRangeVideo ); PVOID AllocateBuffer( ULONG ulModeType ); DWORD DeAllocateBuffer( ULONG ulModeType, PVOID pBuffer ); DWORD RegisterClientBuffer( ULONG ulModeType, PVOID pBuffer ); DWORD UnRegisterClientBuffer( ULONG ulModeType, PVOID pBuffer ); DWORD FillBuffer( ULONG ulModeType, PUCHAR pImage ); DWORD HandleSensorModeCustomProperties( ULONG ulModeType, PUCHAR pInBuf, DWORD InBufLen, PUCHAR pOutBuf, DWORD OutBufLen, PDWORD pdwBytesTransferred ); static void CaptureInterruptCallBack( ULONG user, ULONG mode ); frame_t* qci_frame; private: void HandleCaptureInterrupt( ULONG mode ); DWORD YUVBufferFill( ULONG ulModeType, PUCHAR pImage ); bool ReadMemoryModelFromRegistry(); bool detect_sensor(); BOOL prepare_format(PCS_VIDEOINFOHEADER pCsVideoInfoHdr, ULONG mode); void set_capture_format(int sensor_format, FrameSize sensor_size, format_t* qci_format); void start_capture(ULONG mode); void stop_capture(); void qci_clock_enable(BOOL is_on); void qci_enable(); void qci_start_capture(int still_skips); void qci_stop_capture(); void qci_set_master_timing(qci_master_timing_t* timing); void qci_set_image_format(int in_format, int out_format); void qci_set_interface(qci_interface_t* qci_interface); void qci_set_capture_callback(capture_callback_t callback, ULONG user, ULONG mode); void qci_notify_formats(format_t* format); void qci_set_frame_format(format_t* format); void qci_set_image_proc_cfg(qci_image_proc_cfg_t* cfg); void power_on(); void power_off(); void init_ipm_client(); void set_ipm_block(BOOL is_on); private: bool m_bStillCapInProgress; HANDLE m_hContext; CSSTATE m_CsState[MAX_SUPPORTED_PINS]; SENSORMODEINFO m_SensorModeInfo[MAX_SUPPORTED_PINS]; // Total number of pins implemented by this camera ULONG m_ulCTypes; // Power Capabilities POWER_CAPABILITIES PowerCaps; // All ProcAmp and CameraControl props SENSOR_PROPERTY m_SensorProps[NUM_PROPERTY_ITEMS]; // All the Video Formats supported by all the pins PPINVIDEOFORMAT m_pModeVideoFormat; // VideoControl Caps corresponding to all the pins VIDCONTROLCAPS *m_pModeVideoCaps; // Pointer to the MDD Pin Object corresponding to all the pins. // HandlePinIO() method of this object is then called whenever // an image is ready. HandlePinIO() internally calls // FillPinBuffer() of PDD interface. LPVOID *m_ppModeContext; // Currently selected video format for each pin PCS_DATARANGE_VIDEO m_pCurrentFormat; Sensor* sensor; camera_cfg_t* camera_cfg; HANDLE qci_bus; BOOL is_qci_capturing; BOOL is_sensor_on; BOOL is_ipm_enabled; CLIENT_ID ipm_client_id; unsigned ipm_block_ref_count; } CAMERAPDD, * PCAMERAPDD; IppiRawPixProcSpec_P3R *rggb2yuv_init(UINT32 width, UINT32 height, format_t* qci_format, float* coe); BOOL rggb2yuv_convert(PUCHAR* dest, frame_t* frame, IppiRawPixProcSpec_P3R *ippiRPPSpec); void rggb2yuv_deinit(IppiRawPixProcSpec_P3R *ippiRPPSpec); void convert_rggb10_rgb565(UINT16 *dst, UINT16 *src, UINT32 dst_width, UINT32 dst_height, UINT32 src_width, UINT32 src_height); #define IPP_COE_CONVERT(x) ((short)((x) * (1UL << 8) + 0.5)) #define QCI_COE_CONVERT(x) (((short)((x) * (1UL << 7))) & 0x3ff) #ifdef __cplusplus } #endif #endif