📄 camerawindow.cpp
字号:
&CsPropStreamEx, // in buffer
sizeof(CSPROPERTY_STREAMEX_S), // in buffer size
NULL, // out buffer
0, // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored (=NULL)
LeaveCriticalSection(&m_csStill);
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: create still pin instance failed!\r\n")));
return FALSE;
}
// create capture pin instance
CsPropStreamEx.hMsgQueue = m_hCaptureMsgQ;
CsPropStreamEx.CsPin.PinId = CAPTURE; // 0=CAPTURE,1=STILL,2=PREVIEW
CsPropStreamEx.CsPin.Property.Set = CSPROPSETID_StreamEx;
CsPropStreamEx.CsPin.Property.Id = CSPROPERTY_STREAMEX_INIT;
CsPropStreamEx.CsPin.Property.Flags = CSPROPERTY_TYPE_SET;
EnterCriticalSection(&m_csCapture);
bResult = DeviceIoControl(m_hCapturePinDll, // file handle to the driver
IOCTL_STREAM_INSTANTIATE, // I/O control code
&CsPropStreamEx, // in buffer
sizeof(CSPROPERTY_STREAMEX_S), // in buffer size
NULL, // out buffer
0, // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored (=NULL)
LeaveCriticalSection(&m_csCapture);
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: create capture pin instance failed!\r\n")));
return FALSE;
}
// Get Display Info from Display driver
DISPLAY_CHARACTERISTIC displayCharacteristics;
HDC hDisplay = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
if (ExtEscape(hDisplay, VF_GET_DISPLAY_INFO, NULL, NULL,
sizeof(DISPLAY_CHARACTERISTIC), (LPSTR) &displayCharacteristics) < 0)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Get Display Info from Display driver failed!\r\n")));
return FALSE;
}
m_iPanelWidth = displayCharacteristics.width;
m_iPanelHeight = displayCharacteristics.height;
m_iPanelBpp = displayCharacteristics.bpp;
//Get pin Data ranges.
ReadPinDataRanges(PREVIEW);
ReadPinDataRanges(STILL);
ReadPinDataRanges(CAPTURE);
if (!PreviewPinStop())
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Preview pin failed.\r\n")));
return FALSE;
}
if (!CapturePinStop())
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Capture pin failed.\r\n")));
return FALSE;
}
if (!StillPinStop())
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Still pin failed.\r\n")));
return FALSE;
}
if (!ChangeResolution(PREVIEW, m_dwResolution))
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Preivew Resolution failed.\r\n")));
return FALSE;
}
if (!ChangeResolution(CAPTURE, m_dwResolution))
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Capture Resolution failed.\r\n")));
return FALSE;
}
if (!ChangeResolution(STILL, m_dwResolution))
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Still Resolution failed.\r\n")));
return FALSE;
}
/*
BOOL bDirectDisplayMode = FALSE;
bResult = DeviceIoControl(m_hPreviewPinDll, // file handle to the driver
IOCTL_SET_DIRECT_DISPLAY_MODE, // I/O control code
NULL, // in buffer
bDirectDisplayMode, // in buffer size
NULL, // out buffer
0, // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored =NULL
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: set bDirectDisplayMode failed!\r\n")));
return FALSE;
}
//So far we don't enable capture pin
BOOL bDirectCaptureMode = TRUE;
bResult = DeviceIoControl(m_hPreviewPinDll, // file handle to the driver
IOCTL_SET_DIRECT_CAPTURE_MODE, // I/O control code
&bDirectCaptureMode, // in buffer
sizeof(BOOL), // in buffer size
&bDirectCaptureMode, // out buffer
sizeof(BOOL), // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored =NULL
if (!bResult)
{
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("LoadCamDriver: set bDirectCaptureMode failed!\r\n")));
}
*/
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("LoadCamDriver: LoadCamDriver Done!\r\n")));
return TRUE;
}
/********************************************************************
*
* FUNCTION: PinStart
*
* DESCRIPTION: Start Pin
*
* PARAMETERS: None
*
* RETURNS: TRUE if successfully, otherwise return FALSE
*
********************************************************************/
BOOL CCameraWindow::PinStart(DWORD pinId)
{
CSPROPERTY IOCTLInput;
CSSTATE state;
DWORD dwBytesTransferred;
BOOL bResult;
HANDLE h_PinDll;
CRITICAL_SECTION cs_Pin;
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStart+!\r\n")));
switch (pinId)
{
case CAPTURE:
{
cs_Pin = m_csCapture;
h_PinDll = m_hCapturePinDll;
}
break;
case STILL:
{
cs_Pin = m_csStill;
h_PinDll = m_hStillPinDll;
}
break;
case PREVIEW:
{
cs_Pin = m_csPreview;
h_PinDll = m_hPreviewPinDll;
}
break;
default:
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: The pinId is incorrect!\r\n")));
return FALSE;
}
}
IOCTLInput.Set = CSPROPSETID_Connection;
IOCTLInput.Id = CSPROPERTY_CONNECTION_STATE;
IOCTLInput.Flags = CSPROPERTY_TYPE_SET;
state = CSSTATE_PAUSE;
EnterCriticalSection(&cs_Pin);
bResult = DeviceIoControl(h_PinDll, // file handle to the driver
IOCTL_CS_PROPERTY, // I/O control code
&IOCTLInput, // in buffer
sizeof(CSPROPERTY), // in buffer size
&state, // out buffer
sizeof(CSSTATE), // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored (=NULL)
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: PAUSE pin failed!\r\n")));
LeaveCriticalSection(&cs_Pin);
return FALSE;
}
state = CSSTATE_RUN;
bResult = DeviceIoControl(h_PinDll, // file handle to the driver
IOCTL_CS_PROPERTY, // I/O control code
&IOCTLInput, // in buffer
sizeof(CSPROPERTY), // in buffer size
&state, // out buffer
sizeof(CSSTATE), // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored (=NULL)
LeaveCriticalSection(&cs_Pin);
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: RUN pin failed!\r\n")));
return FALSE;
}
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStart-!\r\n")));
return TRUE;
}
/********************************************************************
*
* FUNCTION: PinPause
*
* DESCRIPTION: Pause Pin
*
* PARAMETERS: None
*
* RETURNS: TRUE if successfully, otherwise return FALSE
*
********************************************************************/
BOOL CCameraWindow::PinPause(DWORD pinId)
{
CSPROPERTY IOCTLInput;
CSSTATE state;
DWORD dwBytesTransferred;
BOOL bResult;
HANDLE h_PinDll;
CRITICAL_SECTION cs_Pin;
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinPause+!\r\n")));
switch (pinId)
{
case CAPTURE:
{
cs_Pin = m_csCapture;
h_PinDll = m_hCapturePinDll;
}
break;
case STILL:
{
cs_Pin = m_csStill;
h_PinDll = m_hStillPinDll;
}
break;
case PREVIEW:
{
cs_Pin = m_csPreview;
h_PinDll = m_hPreviewPinDll;
}
break;
default:
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinPause: The pinId is incorrect!\r\n")));
return FALSE;
}
}
IOCTLInput.Set = CSPROPSETID_Connection;
IOCTLInput.Id = CSPROPERTY_CONNECTION_STATE;
IOCTLInput.Flags = CSPROPERTY_TYPE_SET;
state = CSSTATE_PAUSE;
EnterCriticalSection(&cs_Pin);
bResult = DeviceIoControl(h_PinDll, // file handle to the driver
IOCTL_CS_PROPERTY, // I/O control code
&IOCTLInput, // in buffer
sizeof(CSPROPERTY), // in buffer size
&state, // out buffer
sizeof(CSSTATE), // out buffer size
&dwBytesTransferred, // number of bytes returned
NULL); // ignored (=NULL)
LeaveCriticalSection(&cs_Pin);
if (!bResult)
{
RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinPause: PAUSE pin failed!\r\n")));
return FALSE;
}
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinPause-!\r\n")));
return TRUE;
}
/********************************************************************
*
* FUNCTION: PinStop
*
* DESCRIPTION: Stop Pin
*
* PARAMETERS: None
*
* RETURNS: TRUE if successfully, otherwise return FALSE
*
********************************************************************/
BOOL CCameraWindow::PinStop(DWORD pinId)
{
CSPROPERTY IOCTLInput;
CSSTATE state;
DWORD dwBytesTransferred;
BOOL bResult;
HANDLE h_PinDll;
CRITICAL_SECTION cs_Pin;
RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStop+!\r\n")));
switch (pinId)
{
case CAPTURE:
{
cs_Pin = m_csCapture;
h_PinDll = m_hCapturePinDll;
}
break;
case STILL:
{
cs_Pin = m_csStill;
h_PinDll = m_hStillPinDll;
}
break;
case PREVIEW:
{
cs_Pin = m_csPreview;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -