📄 camerapdd.cpp
字号:
//
// 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
//
#include "pdd_private.h"
#include "SensorFormats.h"
#include "SensorProperties.h"
#include "wchar.h"
#include "string.h"
#include <Devload.h>
#include "sensor.h"
#include "ov7660.h"
#include "ov2630.h"
#include "qci.h"
#include "CI.h"
#include "args.h"
#include "ioctl_cfg.h"
PDDFUNCTBL FuncTbl = {
sizeof(PDDFUNCTBL),
PDD_Init,
PDD_DeInit,
PDD_GetAdapterInfo,
PDD_HandleVidProcAmpChanges,
PDD_HandleCamControlChanges,
PDD_HandleVideoControlCapsChanges,
PDD_SetPowerState,
PDD_HandleAdapterCustomProperties,
PDD_InitSensorMode,
PDD_DeInitSensorMode,
PDD_SetSensorState,
PDD_TakeStillPicture,
PDD_GetSensorModeInfo,
PDD_SetSensorModeFormat,
PDD_AllocateBuffer,
PDD_DeAllocateBuffer,
PDD_RegisterClientBuffer,
PDD_UnRegisterClientBuffer,
PDD_FillBuffer,
PDD_HandleModeCustomProperties
};
CCameraPdd::CCameraPdd()
{
m_ulCTypes = 2;
m_bStillCapInProgress = false;
m_hContext = NULL;
m_pModeVideoFormat = NULL;
m_pModeVideoCaps = NULL;
m_ppModeContext = NULL;
m_pCurrentFormat = NULL;
memset( &m_CsState, 0x0, sizeof(m_CsState));
memset( &m_SensorModeInfo, 0x0, sizeof(m_SensorModeInfo));
memset( &m_SensorProps, 0x0, sizeof(m_SensorProps));
memset( &PowerCaps, 0x0, sizeof(PowerCaps));
is_qci_capturing = FALSE;
qci_bus = NULL;
}
CCameraPdd::~CCameraPdd()
{
if( NULL != m_pModeVideoCaps )
{
delete [] m_pModeVideoCaps;
m_pModeVideoCaps = NULL;
}
if( NULL != m_pCurrentFormat )
{
delete [] m_pCurrentFormat;
m_pCurrentFormat = NULL;
}
if( NULL != m_pModeVideoFormat )
{
delete [] m_pModeVideoFormat;
m_pModeVideoFormat = NULL;
}
if( NULL != m_ppModeContext )
{
delete [] m_ppModeContext;
m_ppModeContext = NULL;
}
if (qci_bus)
CloseBusAccessHandle(qci_bus);
}
bool use_cmu = 1;
LPCTSTR ov7660_name = L"ov7660";
LPCTSTR ov2630_name = L"ov2630";
DWORD CCameraPdd::PDDInit( PVOID MDDContext, PPDDFUNCTBL pPDDFuncTbl )
{
m_hContext = (HANDLE)MDDContext;
// Real drivers may want to create their context
m_ulCTypes = 2; // Default number of Sensor Modes is 2
// Read registry to override the default number of Sensor Modes.
ReadMemoryModelFromRegistry();
if( pPDDFuncTbl->dwSize > sizeof( PDDFUNCTBL ) )
{
return ERROR_INSUFFICIENT_BUFFER;
}
memcpy( pPDDFuncTbl, &FuncTbl, sizeof( PDDFUNCTBL ) );
memset( m_SensorProps, 0x0, sizeof(m_SensorProps) );
PowerCaps.DeviceDx = 0x11;
DWORD ret;
DWORD sensor_size;
BSP_ARGS args;
qci_bus = CreateBusAccessHandle((LPCTSTR)m_hContext);
if (qci_bus == NULL)
{
ret = GetLastError();
DEBUGMSG(1, (_T("CAM: Camera PDD Could not CreateBusAccessHandle. Error %u\r\n"),ret));
return ret;
}
HKEY key;
key = OpenDeviceKey((LPCTSTR)m_hContext);
DWORD type;
#define MAX_SENSOR_NAME_LENTH 20
wchar_t sensor_name[MAX_SENSOR_NAME_LENTH];
DWORD size = sizeof(sensor_name);
if (KernelIoControl(IOCTL_GET_BSP_ARGS, NULL, 0, &args, sizeof(args), &sensor_size))
{
RETAILMSG(1, (_T("CAM: EBOOT set sensor type. \r\n")));
}
if (ERROR_SUCCESS == RegQueryValueEx(key, L"Sensor", 0, &type, (BYTE*)sensor_name, &size))
{
sensor_name[MAX_SENSOR_NAME_LENTH - 1] = 0;
}
RegCloseKey(key);
if (args.DefaultSensor == BSP_ARGS_OV7660)
sensor = new Ov7660();
else if (args.DefaultSensor == BSP_ARGS_OV2630)
sensor = new Ov2630();
else
DEBUGMSG(ZONE_ERROR,(L"CAM: Error unknow sensor\r\n"));
init_ipm_client();
if (!sensor)
{
DEBUGMSG(ZONE_ERROR,(L"CAM: camera pdd fatal error: no valid sensor name!!!\r\n"));
return E_FAIL;
}
if (!detect_sensor())
{
power_off();
return E_FAIL;
}
power_off();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Set all VideoProcAmp and CameraControl properties.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//VideoProcAmp
m_SensorProps[ENUM_BRIGHTNESS].ulCurrentValue = BrightnessDefault;
m_SensorProps[ENUM_BRIGHTNESS].ulDefaultValue = BrightnessDefault;
m_SensorProps[ENUM_BRIGHTNESS].pRangeNStep = &BrightnessRangeAndStep[0];
m_SensorProps[ENUM_BRIGHTNESS].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
m_SensorProps[ENUM_BRIGHTNESS].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL|CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_BRIGHTNESS].fSetSupported = VideoProcAmpProperties[ENUM_BRIGHTNESS].SetSupported;
m_SensorProps[ENUM_BRIGHTNESS].fGetSupported = VideoProcAmpProperties[ENUM_BRIGHTNESS].GetSupported;
m_SensorProps[ENUM_BRIGHTNESS].pCsPropValues = &BrightnessValues;
m_SensorProps[ENUM_CONTRAST].ulCurrentValue = ContrastDefault;
m_SensorProps[ENUM_CONTRAST].ulDefaultValue = ContrastDefault;
m_SensorProps[ENUM_CONTRAST].pRangeNStep = &ContrastRangeAndStep[0];
m_SensorProps[ENUM_CONTRAST].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
m_SensorProps[ENUM_CONTRAST].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL|CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_CONTRAST].fSetSupported = VideoProcAmpProperties[ENUM_CONTRAST].SetSupported;
m_SensorProps[ENUM_CONTRAST].fGetSupported = VideoProcAmpProperties[ENUM_CONTRAST].GetSupported;
m_SensorProps[ENUM_CONTRAST].pCsPropValues = &ContrastValues;
m_SensorProps[ENUM_HUE].ulCurrentValue = HueDefault;
m_SensorProps[ENUM_HUE].ulDefaultValue = HueDefault;
m_SensorProps[ENUM_HUE].pRangeNStep = &HueRangeAndStep[0];
m_SensorProps[ENUM_HUE].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_HUE].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_HUE].fSetSupported = VideoProcAmpProperties[ENUM_HUE].SetSupported;
m_SensorProps[ENUM_HUE].fGetSupported = VideoProcAmpProperties[ENUM_HUE].GetSupported;
m_SensorProps[ENUM_HUE].pCsPropValues = &HueValues;
m_SensorProps[ENUM_SATURATION].ulCurrentValue = SaturationDefault;
m_SensorProps[ENUM_SATURATION].ulDefaultValue = SaturationDefault;
m_SensorProps[ENUM_SATURATION].pRangeNStep = &SaturationRangeAndStep[0];
m_SensorProps[ENUM_SATURATION].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_SATURATION].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL|CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_SATURATION].fSetSupported = VideoProcAmpProperties[ENUM_SATURATION].SetSupported;
m_SensorProps[ENUM_SATURATION].fGetSupported = VideoProcAmpProperties[ENUM_SATURATION].GetSupported;
m_SensorProps[ENUM_SATURATION].pCsPropValues = &SaturationValues;
m_SensorProps[ENUM_SHARPNESS].ulCurrentValue = SharpnessDefault;
m_SensorProps[ENUM_SHARPNESS].ulDefaultValue = SharpnessDefault;
m_SensorProps[ENUM_SHARPNESS].pRangeNStep = &SharpnessRangeAndStep[0];
m_SensorProps[ENUM_SHARPNESS].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_SHARPNESS].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_SHARPNESS].fSetSupported = VideoProcAmpProperties[ENUM_SHARPNESS].SetSupported;
m_SensorProps[ENUM_SHARPNESS].fGetSupported = VideoProcAmpProperties[ENUM_SHARPNESS].GetSupported;
m_SensorProps[ENUM_SHARPNESS].pCsPropValues = &SharpnessValues;
m_SensorProps[ENUM_GAMMA].ulCurrentValue = GammaDefault;
m_SensorProps[ENUM_GAMMA].ulDefaultValue = GammaDefault;
m_SensorProps[ENUM_GAMMA].pRangeNStep = &GammaRangeAndStep[0];
m_SensorProps[ENUM_GAMMA].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_GAMMA].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_GAMMA].fSetSupported = VideoProcAmpProperties[ENUM_GAMMA].SetSupported;
m_SensorProps[ENUM_GAMMA].fGetSupported = VideoProcAmpProperties[ENUM_GAMMA].GetSupported;
m_SensorProps[ENUM_GAMMA].pCsPropValues = &GammaValues;
m_SensorProps[ENUM_COLORENABLE].ulCurrentValue = ColorEnableDefault;
m_SensorProps[ENUM_COLORENABLE].ulDefaultValue = ColorEnableDefault;
m_SensorProps[ENUM_COLORENABLE].pRangeNStep = &ColorEnableRangeAndStep[0];
m_SensorProps[ENUM_COLORENABLE].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_COLORENABLE].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL|CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_COLORENABLE].fSetSupported = VideoProcAmpProperties[ENUM_COLORENABLE].SetSupported;
m_SensorProps[ENUM_COLORENABLE].fGetSupported = VideoProcAmpProperties[ENUM_COLORENABLE].GetSupported;
m_SensorProps[ENUM_COLORENABLE].pCsPropValues = &ColorEnableValues;
m_SensorProps[ENUM_WHITEBALANCE].ulCurrentValue = WhiteBalanceDefault;
m_SensorProps[ENUM_WHITEBALANCE].ulDefaultValue = WhiteBalanceDefault;
m_SensorProps[ENUM_WHITEBALANCE].pRangeNStep = &WhiteBalanceRangeAndStep[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -