📄 camerapdd.cpp
字号:
m_SensorProps[ENUM_WHITEBALANCE].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_WHITEBALANCE].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL|CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_WHITEBALANCE].fSetSupported = VideoProcAmpProperties[ENUM_WHITEBALANCE].SetSupported;
m_SensorProps[ENUM_WHITEBALANCE].fGetSupported = VideoProcAmpProperties[ENUM_WHITEBALANCE].GetSupported;
m_SensorProps[ENUM_WHITEBALANCE].pCsPropValues = &WhiteBalanceValues;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].ulCurrentValue = BackLightCompensationDefault;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].ulDefaultValue = BackLightCompensationDefault;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].pRangeNStep = &BackLightCompensationRangeAndStep[0];
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].fSetSupported = VideoProcAmpProperties[ENUM_BACKLIGHT_COMPENSATION].SetSupported;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].fGetSupported = VideoProcAmpProperties[ENUM_BACKLIGHT_COMPENSATION].GetSupported;
m_SensorProps[ENUM_BACKLIGHT_COMPENSATION].pCsPropValues = &BackLightCompensationValues;
m_SensorProps[ENUM_GAIN].ulCurrentValue = GainDefault;
m_SensorProps[ENUM_GAIN].ulDefaultValue = GainDefault;
m_SensorProps[ENUM_GAIN].pRangeNStep = &GainRangeAndStep[0];
m_SensorProps[ENUM_GAIN].ulFlags = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_GAIN].ulCapabilities = CSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
m_SensorProps[ENUM_GAIN].fSetSupported = VideoProcAmpProperties[ENUM_GAIN].SetSupported;
m_SensorProps[ENUM_GAIN].fGetSupported = VideoProcAmpProperties[ENUM_GAIN].GetSupported;
m_SensorProps[ENUM_GAIN].pCsPropValues = &GainValues;
//CameraControl
m_SensorProps[ENUM_PAN].ulCurrentValue = PanDefault;
m_SensorProps[ENUM_PAN].ulDefaultValue = PanDefault;
m_SensorProps[ENUM_PAN].pRangeNStep = &PanRangeAndStep[0];
m_SensorProps[ENUM_PAN].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_PAN].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_PAN].fSetSupported = VideoProcAmpProperties[ENUM_PAN-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_PAN].fGetSupported = VideoProcAmpProperties[ENUM_PAN-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_PAN].pCsPropValues = &PanValues;
m_SensorProps[ENUM_TILT].ulCurrentValue = TiltDefault;
m_SensorProps[ENUM_TILT].ulDefaultValue = TiltDefault;
m_SensorProps[ENUM_TILT].pRangeNStep = &TiltRangeAndStep[0];
m_SensorProps[ENUM_TILT].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_TILT].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_TILT].fSetSupported = VideoProcAmpProperties[ENUM_TILT-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_TILT].fGetSupported = VideoProcAmpProperties[ENUM_TILT-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_TILT].pCsPropValues = &TiltValues;
m_SensorProps[ENUM_ROLL].ulCurrentValue = RollDefault;
m_SensorProps[ENUM_ROLL].ulDefaultValue = RollDefault;
m_SensorProps[ENUM_ROLL].pRangeNStep = &RollRangeAndStep[0];
m_SensorProps[ENUM_ROLL].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_ROLL].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_ROLL].fSetSupported = VideoProcAmpProperties[ENUM_ROLL-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_ROLL].fGetSupported = VideoProcAmpProperties[ENUM_ROLL-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_ROLL].pCsPropValues = &RollValues;
m_SensorProps[ENUM_ZOOM].ulCurrentValue = ZoomDefault;
m_SensorProps[ENUM_ZOOM].ulDefaultValue = ZoomDefault;
m_SensorProps[ENUM_ZOOM].pRangeNStep = &ZoomRangeAndStep[0];
m_SensorProps[ENUM_ZOOM].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_ZOOM].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_ZOOM].fSetSupported = VideoProcAmpProperties[ENUM_ZOOM-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_ZOOM].fGetSupported = VideoProcAmpProperties[ENUM_ZOOM-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_ZOOM].pCsPropValues = &ZoomValues;
m_SensorProps[ENUM_IRIS].ulCurrentValue = IrisDefault;
m_SensorProps[ENUM_IRIS].ulDefaultValue = IrisDefault;
m_SensorProps[ENUM_IRIS].pRangeNStep = &IrisRangeAndStep[0];
m_SensorProps[ENUM_IRIS].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_IRIS].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_IRIS].fSetSupported = VideoProcAmpProperties[ENUM_IRIS-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_IRIS].fGetSupported = VideoProcAmpProperties[ENUM_IRIS-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_IRIS].pCsPropValues = &IrisValues;
m_SensorProps[ENUM_EXPOSURE].ulCurrentValue = ExposureDefault;
m_SensorProps[ENUM_EXPOSURE].ulDefaultValue = ExposureDefault;
m_SensorProps[ENUM_EXPOSURE].pRangeNStep = &ExposureRangeAndStep[0];
m_SensorProps[ENUM_EXPOSURE].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_EXPOSURE].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL|CSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
m_SensorProps[ENUM_EXPOSURE].fSetSupported = VideoProcAmpProperties[ENUM_EXPOSURE-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_EXPOSURE].fGetSupported = VideoProcAmpProperties[ENUM_EXPOSURE-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_EXPOSURE].pCsPropValues = &ExposureValues;
m_SensorProps[ENUM_FOCUS].ulCurrentValue = FocusDefault;
m_SensorProps[ENUM_FOCUS].ulDefaultValue = FocusDefault;
m_SensorProps[ENUM_FOCUS].pRangeNStep = &FocusRangeAndStep[0];
m_SensorProps[ENUM_FOCUS].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
m_SensorProps[ENUM_FOCUS].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
m_SensorProps[ENUM_FOCUS].fSetSupported = VideoProcAmpProperties[ENUM_FOCUS-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_FOCUS].fGetSupported = VideoProcAmpProperties[ENUM_FOCUS-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_FOCUS].pCsPropValues = &FocusValues;
m_SensorProps[ENUM_FLASH].ulCurrentValue = FlashDefault;
m_SensorProps[ENUM_FLASH].ulDefaultValue = FlashDefault;
m_SensorProps[ENUM_FLASH].pRangeNStep = &FlashRangeAndStep[0];
m_SensorProps[ENUM_FLASH].ulFlags = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
m_SensorProps[ENUM_FLASH].ulCapabilities = CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
m_SensorProps[ENUM_FLASH].fSetSupported = VideoProcAmpProperties[ENUM_FLASH-NUM_VIDEOPROCAMP_ITEMS].SetSupported;
m_SensorProps[ENUM_FLASH].fGetSupported = VideoProcAmpProperties[ENUM_FLASH-NUM_VIDEOPROCAMP_ITEMS].GetSupported;
m_SensorProps[ENUM_FLASH].pCsPropValues = &FlashValues;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
m_pModeVideoFormat = NULL;
// Allocate Video Format specific array.
m_pModeVideoFormat = new PINVIDEOFORMAT[m_ulCTypes];
if( NULL == m_pModeVideoFormat )
{
return ERROR_INSUFFICIENT_BUFFER;
}
// Video Format initialization
m_pModeVideoFormat[CAPTURE].categoryGUID = PINNAME_VIDEO_CAPTURE;
m_pModeVideoFormat[STILL].categoryGUID = PINNAME_VIDEO_STILL;
if( 3 == m_ulCTypes )
m_pModeVideoFormat[PREVIEW].categoryGUID = PINNAME_VIDEO_PREVIEW;
for (ULONG i = 0; i < m_ulCTypes; i++)
{
UINT32 nformats;
PCS_DATARANGE_VIDEO** formats;
formats = &m_pModeVideoFormat[i].pCsDataRangeVideo;
nformats = sensor->get_formats(i, formats);
m_pModeVideoFormat[i].ulAvailFormats = nformats;
if ( NULL == m_pModeVideoFormat[i].pCsDataRangeVideo )
return ERROR_INSUFFICIENT_BUFFER;
}
for (ULONG i = 0; i < m_ulCTypes; i++)
{
for (ULONG j = 0; j < m_pModeVideoFormat[i].ulAvailFormats; j++)
{
PCS_VIDEOINFOHEADER pCsVideoInfoHdr;
pCsVideoInfoHdr = &m_pModeVideoFormat[i].pCsDataRangeVideo[j]->VideoInfoHeader;
camera_cfg_t* cfg = sensor->get_camera_cfg(pCsVideoInfoHdr, i);
if (!cfg)
DEBUGMSG( ZONE_IOCTL, ( _T("CAM: failed to get camera configuration!!!\r\n")) );
sensor->init_camera_cfg(cfg, i);
qci_notify_formats(&cfg->qci_format);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
m_pModeVideoCaps = NULL;
// Allocate Video Control Caps specific array.
m_pModeVideoCaps = new VIDCONTROLCAPS[m_ulCTypes];
if( NULL == m_pModeVideoCaps )
{
return ERROR_INSUFFICIENT_BUFFER;
}
// Video Control Caps
m_pModeVideoCaps[CAPTURE].DefaultVideoControlCaps = DefaultVideoControlCaps[CAPTURE];
m_pModeVideoCaps[CAPTURE].CurrentVideoControlCaps = DefaultVideoControlCaps[CAPTURE];;
m_pModeVideoCaps[STILL].DefaultVideoControlCaps = DefaultVideoControlCaps[STILL];
m_pModeVideoCaps[STILL].CurrentVideoControlCaps = DefaultVideoControlCaps[STILL];;
if( 3 == m_ulCTypes )
{
// Note PREVIEW control caps are the same, so we don't differentiate
m_pModeVideoCaps[PREVIEW].DefaultVideoControlCaps = DefaultVideoControlCaps[PREVIEW];
m_pModeVideoCaps[PREVIEW].CurrentVideoControlCaps = DefaultVideoControlCaps[PREVIEW];;
}
m_SensorModeInfo[CAPTURE].MemoryModel = CSPROPERTY_BUFFER_CLIENT_UNLIMITED;
m_SensorModeInfo[CAPTURE].MaxNumOfBuffers = 1;
m_SensorModeInfo[CAPTURE].PossibleCount = 1;
m_SensorModeInfo[STILL].MemoryModel = CSPROPERTY_BUFFER_CLIENT_UNLIMITED;
m_SensorModeInfo[STILL].MaxNumOfBuffers = 1;
m_SensorModeInfo[STILL].PossibleCount = 1;
if( 3 == m_ulCTypes )
{
m_SensorModeInfo[PREVIEW].MemoryModel = CSPROPERTY_BUFFER_CLIENT_UNLIMITED;
m_SensorModeInfo[PREVIEW].MaxNumOfBuffers = 1;
m_SensorModeInfo[PREVIEW].PossibleCount = 1;
}
m_ppModeContext = new LPVOID[m_ulCTypes];
if ( NULL == m_ppModeContext )
{
return ERROR_INSUFFICIENT_BUFFER;
}
m_pCurrentFormat = new CS_DATARANGE_VIDEO[m_ulCTypes];
if( NULL == m_pCurrentFormat )
{
return ERROR_INSUFFICIENT_BUFFER;
}
return ERROR_SUCCESS;
}
DWORD CCameraPdd::GetAdapterInfo( PADAPTERINFO pAdapterInfo )
{
pAdapterInfo->ulCTypes = m_ulCTypes;
pAdapterInfo->PowerCaps = PowerCaps;
pAdapterInfo->ulVersionID = DRIVER_VERSION; //Camera MDD and DShow support DRIVER_VERSION and DRIVER_VERSION_2. Defined in camera.h
memcpy( &pAdapterInfo->SensorProps, &m_SensorProps, sizeof(m_SensorProps));
return ERROR_SUCCESS;
}
DWORD CCameraPdd::HandleVidProcAmpChanges( DWORD dwPropId, LONG lFlags, LONG lValue )
{
PSENSOR_PROPERTY pDevProp = NULL;
pDevProp = m_SensorProps + dwPropId;
if( CSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL == lFlags )
{
pDevProp->ulCurrentValue = lValue;
}
pDevProp->ulFlags = lFlags;
return ERROR_SUCCESS;
}
DWORD CCameraPdd::HandleCamControlChanges( DWORD dwPropId, LONG lFlags, LONG lValue )
{
PSENSOR_PROPERTY pDevProp = NULL;
pDevProp = m_SensorProps + dwPropId;
if( CSPROPERTY_CAMERACONTROL_FLAGS_MANUAL == lFlags )
{
pDevProp->ulCurrentValue = lValue;
}
pDevProp->ulFlags = lFlags;
return ERROR_SUCCESS;
}
DWORD CCameraPdd::HandleVideoControlCapsChanges( LONG lModeType ,ULONG ulCaps )
{
m_pModeVideoCaps[lModeType].CurrentVideoControlCaps = ulCaps;
return ERROR_SUCCESS;
}
DWORD CCameraPdd :: SetPowerState( CEDEVICE_POWER_STATE PowerState )
{
if (PowerState != D0 && PowerState != D1)
if (is_sensor_on)
power_off();
return ERROR_SUCCESS;
}
DWORD CCameraPdd::HandleAdapterCustomProperties( PUCHAR pInBuf, DWORD InBufLen, PUCHAR pOutBuf, DWORD OutBufLen, PDWORD pdwBytesTransferred )
{
DEBUGMSG( ZONE_IOCTL, ( _T("CAM: IOControl Adapter PDD: Unsupported PropertySet Request\r\n")) );
return ERROR_NOT_SUPPORTED;
}
DWORD CCameraPdd::InitSensorMode( ULONG ulModeType, LPVOID ModeContext )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -