新增SV200E视频卡多设备测试

This commit is contained in:
TAO Cheng
2013-05-29 20:07:33 +08:00
parent bd4858888a
commit 9ef689299f
4 changed files with 132 additions and 49 deletions
@@ -381,22 +381,22 @@ BEGIN
CONTROL "",IDC_STATIC_SDK3000_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,228,296,68,16
END
IDD_SO7_VIDEOCARD_SV2000E DIALOGEX 0, 0, 488, 316
IDD_SO7_VIDEOCARD_SV2000E DIALOGEX 0, 0, 910, 317
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "SV2000视频卡"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "彩色图像",IDC_RADIO_SV2000E_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,435,37,48,10
CONTROL "黑白图像",IDC_RADIO_SV2000E_GRAY,"Button",BS_AUTORADIOBUTTON,435,58,48,10
CONTROL "垂直镜像",IDC_CHECK_SV2000E_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,435,85,48,10
PUSHBUTTON "保存图片",IDC_BUTTON_SV2000E_SAVEFILE,435,115,50,14
DEFPUSHBUTTON "开始",IDOK,372,298,50,14
PUSHBUTTON "退出",IDCANCEL,435,298,50,14
GROUPBOX "通道选择",IDC_STATIC,439,140,42,61
CONTROL "1",IDC_RADIO_SV2000E_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,450,160,23,10
CONTROL "2",IDC_RADIO_SV2000E_CHANNEL2,"Button",BS_AUTORADIOBUTTON,450,182,26,10
GROUPBOX "设备选择",IDC_STATIC,438,207,42,61
COMBOBOX IDC_COMBO_SV2000E_SELECT_DEV_NUMBER,443,222,31,35,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "彩色图像",IDC_RADIO_SV2000E_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,861,38,48,10
CONTROL "黑白图像",IDC_RADIO_SV2000E_GRAY,"Button",BS_AUTORADIOBUTTON,861,59,48,10
CONTROL "垂直镜像",IDC_CHECK_SV2000E_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,861,86,48,10
PUSHBUTTON "保存图片",IDC_BUTTON_SV2000E_SAVEFILE,859,116,50,14
DEFPUSHBUTTON "开始",IDOK,793,300,50,14
PUSHBUTTON "退出",IDCANCEL,854,300,50,14
GROUPBOX "通道选择",IDC_STATIC,864,142,42,61
CONTROL "1",IDC_RADIO_SV2000E_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,876,161,23,10
CONTROL "2",IDC_RADIO_SV2000E_CHANNEL2,"Button",BS_AUTORADIOBUTTON,876,183,26,10
GROUPBOX "设备选择",IDC_STATIC,863,208,42,61
COMBOBOX IDC_COMBO_SV2000E_SELECT_DEV_NUMBER,868,223,31,35,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
IDD_SO7_UTIL_SETUP_CONFIGURE DIALOGEX 0, 0, 476, 451
@@ -597,8 +597,10 @@ BEGIN
IDD_SO7_VIDEOCARD_SV2000E, DIALOG
BEGIN
LEFTMARGIN, 1
RIGHTMARGIN, 485
RIGHTMARGIN, 909
VERTGUIDE, 435
VERTGUIDE, 853
BOTTOMMARGIN, 314
END
IDD_SO7_UTIL_SETUP_CONFIGURE, DIALOG
@@ -105,7 +105,8 @@ void CVideocard_SV2000E::OnBnClickedOk()
void CVideocard_SV2000E::OnBnClickedCancel()
{
KillTimer(1);
UnloadVideocard();
UnloadVideocard(m_device);
UnloadVideocard(m_device_Nav);
DXUninitialize();
CDialog::OnCancel();
}
@@ -153,24 +154,66 @@ void CVideocard_SV2000E::OnBnClickedButtonSv2000eSavefile()
}
//===================================================
void CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel1()
{
UnloadVideocard();
{
m_Channel=1;
LoadVideocard();
if (m_OpenDevNo==0)
{
CloseDevice(m_device);
CloseDevice(m_device_Nav);
OpenDevice(0,m_device);
}
else if (m_OpenDevNo==1)
{
CloseDevice(m_device);
CloseDevice(m_device_Nav);
OpenDevice(1,m_device_Nav);
}
else
{
UnloadVideocard(m_device);
UnloadVideocard(m_device_Nav);
LoadVideocard();
}
}
//===================================================
void CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel2()
{
UnloadVideocard();
m_Channel=2;
LoadVideocard();
if (m_OpenDevNo==0)
{
CloseDevice(m_device);
CloseDevice(m_device_Nav);
OpenDevice(0,m_device);
}
else if (m_OpenDevNo==1)
{
CloseDevice(m_device);
CloseDevice(m_device_Nav);
OpenDevice(1,m_device_Nav);
}
else
{
UnloadVideocard(m_device);
UnloadVideocard(m_device_Nav);
LoadVideocard();
}
}
//===================================================
void CVideocard_SV2000E::OnCbnSelchangeComboSv2000eSelectDevNumber()
{
m_OpenDevNo=((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->GetCurSel();
CloseDevice();
OpenDevice(m_OpenDevNo);
if (m_OpenDevNo==2)//both
{
CloseDevice(m_device);
OpenDevice(0,m_device);
OpenDevice(1,m_device_Nav);
}
else
{
CloseDevice(m_device);
CloseDevice(m_device_Nav);
OpenDevice(m_OpenDevNo,m_device);
}
}
//=======================================
BOOL CVideocard_SV2000E::LoadVideocard()
@@ -191,9 +234,13 @@ BOOL CVideocard_SV2000E::LoadVideocard()
csTmp.Format(_T("%d"),i+1);
((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->InsertString(i,csTmp);
}
if (m_nDevNum>1)
{
((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->InsertString(m_nDevNum,_T("Both"));
}
((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->SetCurSel(0);
m_OpenDevNo=0;
OpenDevice(m_OpenDevNo);
OpenDevice(m_OpenDevNo,m_device);
if((bInitSdk!=0)||(m_nDevNum<1)||(m_device==NULL))
{
::AfxMessageBox(_T("SV2000E卡初始化失败!"));
@@ -203,48 +250,56 @@ BOOL CVideocard_SV2000E::LoadVideocard()
return TRUE;
}
//=======================================
void CVideocard_SV2000E::OpenDevice(unsigned int _DevNo)
void CVideocard_SV2000E::OpenDevice(unsigned int _DevNo,device_handle &_OpenedDevice)
{
m_device= DXOpenDevice(_DevNo, NULL);
_OpenedDevice= DXOpenDevice(_DevNo, NULL);
unsigned standard(VideoStandard_PAL_D);
unsigned colorspace(cs_yuy2);//cs_rgb24
unsigned width(640);//640
unsigned height(480);//480
float framerate(25);
m_status=DXSetVideoPara(m_device,standard,colorspace,width,height,framerate);
m_status=DXSetVideoPara(_OpenedDevice,standard,colorspace,width,height,framerate);
DXDeviceRun(m_device);
DXDeviceRun(_OpenedDevice);
m_dwCard=2;
m_status=DXSetVideoSource(m_device, m_Channel);
m_status=DXSetVideoSource(_OpenedDevice, m_Channel);
//==============================消除隔行=========================================
m_status=DXSetVideoPara(m_device,standard,colorspace,width,height,framerate);
m_status=DXSetVideoPara(_OpenedDevice,standard,colorspace,width,height,framerate);
//================================================================================
m_status=DXSetDisplayPara( m_device, BRIGHTNESS, 5000,2);
m_status=DXSetDisplayPara( m_device, SATURATION, 5000,2);
m_status=DXSetDisplayPara( m_device, CONTRAST, 5000,2);
m_status=DXSetDisplayPara( m_device, HUE, 5000,2);
m_status=DXSetDisplayPara( m_device, SHARPNESS, 4,2);
m_status=DXSetDisplayPara( _OpenedDevice, BRIGHTNESS, 5000,2);
m_status=DXSetDisplayPara( _OpenedDevice, SATURATION, 5000,2);
m_status=DXSetDisplayPara( _OpenedDevice, CONTRAST, 5000,2);
m_status=DXSetDisplayPara( _OpenedDevice, HUE, 5000,2);
m_status=DXSetDisplayPara( _OpenedDevice, SHARPNESS, 4,2);
if (_DevNo==0)
{
m_status=DXSetRawVideoCallback(_OpenedDevice, SVAPrcVidCapCallBack, this);
m_status=DXStartRawVideoCallback(_OpenedDevice,SVAPrcVidCapCallBack,this);
}
else
{
m_status=DXSetRawVideoCallback(_OpenedDevice, SVAPrcVidCapCallBackNav, this);
m_status=DXStartRawVideoCallback(_OpenedDevice,SVAPrcVidCapCallBackNav,this);
}
m_status=DXSetRawVideoCallback(m_device, SVAPrcVidCapCallBack, this);
m_status=DXStartRawVideoCallback(m_device,SVAPrcVidCapCallBack,this);
};
//=======================================
void CVideocard_SV2000E::CloseDevice()
void CVideocard_SV2000E::CloseDevice(device_handle _Device)
{
UnloadVideocard();
UnloadVideocard(_Device);
};
//=======================================
BOOL CVideocard_SV2000E::UnloadVideocard()
BOOL CVideocard_SV2000E::UnloadVideocard(device_handle _Device)
{
if (m_device)
if (_Device)
{
m_status=DXStopRawVideoCallback(m_device);
m_status=DXSetRawVideoCallback(m_device, NULL, NULL);
m_status=DXDeviceStop(m_device);
DXCloseDevice(m_device);
m_status=DXStopRawVideoCallback(_Device);
m_status=DXSetRawVideoCallback(_Device, NULL, NULL);
m_status=DXDeviceStop(_Device);
DXCloseDevice(_Device);
}
return TRUE;
}
@@ -437,7 +492,17 @@ void CVideocard_SV2000E::OnPaint()
int nMode;
CDC* pMemDC = new CDC;
CBitmap pBitBmp;
ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror);
CBitmap pBitBmpNav;
if (m_OpenDevNo==1)
{
ConvertVideoSubType(m_ImageBuffer,g_DataBuffer_NAV,m_ConvertColorType,m_bMirror);
}
else
{
ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror);
}
BYTE *pData = (BYTE *)m_ImageBuffer.ScanLine;
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
@@ -454,6 +519,13 @@ void CVideocard_SV2000E::OnPaint()
pBitBmp.CreateCompatibleBitmap(dc,640,480);
SetDIBits(dc->m_hDC,pBitBmp,0,480,pData,&bmpInfo,DIB_RGB_COLORS);
if (m_OpenDevNo==2)//both
{
ConvertVideoSubType(m_ImageBuffer_Nav,g_DataBuffer_NAV,m_ConvertColorType,m_bMirror);
BYTE *pDataNav = (BYTE *)m_ImageBuffer_Nav.ScanLine;
pBitBmpNav.CreateCompatibleBitmap(dc,640,480);
SetDIBits(dc->m_hDC,pBitBmpNav,0,480,pDataNav,&bmpInfo,DIB_RGB_COLORS);
}
if (m_bSaveFile)
{
SaveBitmapToFile(pBitBmp,m_SaveFile);
@@ -469,8 +541,16 @@ void CVideocard_SV2000E::OnPaint()
}
CBitmap* pOldBitmap = pMemDC->SelectObject(&pBitBmp);
nMode = pMemDC->SetBkMode(TRANSPARENT);
dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY);
if (m_OpenDevNo==2)//both
{
dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY);
pMemDC->SelectObject(&pBitBmpNav);
dc->BitBlt(645, 0, 640, 480, pMemDC,0,0, SRCCOPY);
}
else
{
dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY);
}
pMemDC->SetBkMode(nMode);
pMemDC->SelectObject(pOldBitmap);
@@ -37,6 +37,7 @@ protected:
int m_nDevNum;
DWORD m_dwCard;
Image_Buffer m_ImageBuffer;
Image_Buffer m_ImageBuffer_Nav;
ConvertColorType m_ConvertColorType;
BOOL m_bMirror;
BOOL m_bSaveFile;
@@ -46,9 +47,9 @@ protected:
unsigned int m_OpenDevNo;
public:
BOOL LoadVideocard();
BOOL UnloadVideocard();
void OpenDevice(unsigned int _DevNo);
void CloseDevice();
BOOL UnloadVideocard(device_handle _Device);
void OpenDevice(unsigned int _DevNo,device_handle &_OpenedDevice);
void CloseDevice(device_handle _Device);
void ConvertVideoSubType(const Image_Buffer& _ImageBuffer, BYTE *pSrcData,ConvertColorType _type,BOOL _bMirror);
BOOL SaveBitmapToFile(const CBitmap& bitmap, CString lpFileName);