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