新增SV200E视频卡多设备测试

This commit is contained in:
TAO Cheng
2013-05-29 18:08:32 +08:00
parent 11bbcb77bb
commit bd4858888a
5 changed files with 62 additions and 13 deletions
@@ -395,6 +395,8 @@ BEGIN
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
END
IDD_SO7_UTIL_SETUP_CONFIGURE DIALOGEX 0, 0, 476, 451
@@ -17,6 +17,8 @@ static const long HueDefault = 5000;
static const long SharpnessDefault = 4;
static BYTE g_DataBuffer[640*480*2];
static BYTE g_DataBuffer_NAV[640*480*2];
// CVideocard_SV2000E dialog
IMPLEMENT_DYNAMIC(CVideocard_SV2000E, CDialog)
@@ -52,6 +54,7 @@ BEGIN_MESSAGE_MAP(CVideocard_SV2000E, CDialog)
ON_BN_CLICKED(IDOK, &CVideocard_SV2000E::OnBnClickedOk)
ON_BN_CLICKED(IDC_RADIO_SV2000E_CHANNEL1, &CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel1)
ON_BN_CLICKED(IDC_RADIO_SV2000E_CHANNEL2, &CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel2)
ON_CBN_SELCHANGE(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER, &CVideocard_SV2000E::OnCbnSelchangeComboSv2000eSelectDevNumber)
END_MESSAGE_MAP()
@@ -82,8 +85,9 @@ BOOL CVideocard_SV2000E::OnInitDialog()
}
((CButton *)GetDlgItem(IDC_RADIO_SV2000E_RGB))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO_SV2000E_GRAY))->SetCheck(FALSE);
bInitSdk=123;
m_Channel=1;
m_OpenDevNo=0;
((CButton *)GetDlgItem(IDC_RADIO_SV2000E_CHANNEL1))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO_SV2000E_CHANNEL2))->SetCheck(FALSE);
@@ -92,6 +96,7 @@ BOOL CVideocard_SV2000E::OnInitDialog()
//===================================================
void CVideocard_SV2000E::OnBnClickedOk()
{
bInitSdk=DXInitialize();
LoadVideocard();
SetTimer(1,50,NULL);
GetDlgItem(IDOK)->EnableWindow(false);
@@ -101,6 +106,7 @@ void CVideocard_SV2000E::OnBnClickedCancel()
{
KillTimer(1);
UnloadVideocard();
DXUninitialize();
CDialog::OnCancel();
}
//===================================================
@@ -130,7 +136,7 @@ void CVideocard_SV2000E::OnBnClickedCheckSv2000eMirrorVertically()
//===================================================
void CVideocard_SV2000E::OnBnClickedButtonSv2000eSavefile()
{
CString CTmpString;
CString CTmpString;
CString PathName;
CString path_and_fileName;
@@ -159,11 +165,16 @@ void CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel2()
m_Channel=2;
LoadVideocard();
}
//===================================================
void CVideocard_SV2000E::OnCbnSelchangeComboSv2000eSelectDevNumber()
{
m_OpenDevNo=((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->GetCurSel();
CloseDevice();
OpenDevice(m_OpenDevNo);
}
//=======================================
BOOL CVideocard_SV2000E::LoadVideocard()
{
unsigned int bInitSdk=DXInitialize();
DEVICE_TAG devTags[100];
unsigned num = 100;
DXEnumVideoCodecs(devTags, num);
@@ -173,13 +184,29 @@ BOOL CVideocard_SV2000E::LoadVideocard()
//DXEnumSoundDevices(devTags, num);
m_nDevNum = DXGetDeviceCount();
m_device= DXOpenDevice(0, NULL);
CString csTmp=_T("");
((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->ResetContent();
for(int i=0;i<m_nDevNum;i++)
{
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))->SetCurSel(0);
m_OpenDevNo=0;
OpenDevice(m_OpenDevNo);
if((bInitSdk!=0)||(m_nDevNum<1)||(m_device==NULL))
{
::AfxMessageBox(_T("SV2000E卡初始化失败!"));
return FALSE;
}
return TRUE;
}
//=======================================
void CVideocard_SV2000E::OpenDevice(unsigned int _DevNo)
{
m_device= DXOpenDevice(_DevNo, NULL);
unsigned standard(VideoStandard_PAL_D);
unsigned colorspace(cs_yuy2);//cs_rgb24
unsigned width(640);//640
@@ -203,11 +230,12 @@ BOOL CVideocard_SV2000E::LoadVideocard()
m_status=DXSetRawVideoCallback(m_device, SVAPrcVidCapCallBack, this);
m_status=DXStartRawVideoCallback(m_device,SVAPrcVidCapCallBack,this);
return true;
return TRUE;
}
};
//=======================================
void CVideocard_SV2000E::CloseDevice()
{
UnloadVideocard();
};
//=======================================
BOOL CVideocard_SV2000E::UnloadVideocard()
{
@@ -217,7 +245,6 @@ BOOL CVideocard_SV2000E::UnloadVideocard()
m_status=DXSetRawVideoCallback(m_device, NULL, NULL);
m_status=DXDeviceStop(m_device);
DXCloseDevice(m_device);
DXUninitialize();
}
return TRUE;
}
@@ -475,6 +502,16 @@ unsigned CALLBACK SVAPrcVidCapCallBack(unsigned char* buffer, unsigned colorSpac
memcpy(g_DataBuffer,(BYTE*)buffer,width*height*2);
return 0;
}
//==================================SV2000E=====================================
unsigned CALLBACK SVAPrcVidCapCallBackNav(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void* context)
{
UNREFERENCED_PARAMETER(colorSpace);
UNREFERENCED_PARAMETER(context);
UNREFERENCED_PARAMETER(bytesWidth);
memcpy(g_DataBuffer_NAV,(BYTE*)buffer,width*height*2);
return 0;
};
@@ -3,6 +3,8 @@
// CVideocard_SV2000E dialog
unsigned CALLBACK SVAPrcVidCapCallBack(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void* context);
unsigned CALLBACK SVAPrcVidCapCallBackNav(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void* context);
class CVideocard_SV2000E : public CDialog
{
DECLARE_DYNAMIC(CVideocard_SV2000E)
@@ -30,6 +32,8 @@ public:
protected:
unsigned int m_status;
device_handle m_device;
device_handle m_device_Nav;
int m_nDevNum;
DWORD m_dwCard;
Image_Buffer m_ImageBuffer;
@@ -38,12 +42,17 @@ protected:
BOOL m_bSaveFile;
CString m_SaveFile;
unsigned int m_Channel;
unsigned int bInitSdk;
unsigned int m_OpenDevNo;
public:
BOOL LoadVideocard();
BOOL UnloadVideocard();
void OpenDevice(unsigned int _DevNo);
void CloseDevice();
void ConvertVideoSubType(const Image_Buffer& _ImageBuffer, BYTE *pSrcData,ConvertColorType _type,BOOL _bMirror);
BOOL SaveBitmapToFile(const CBitmap& bitmap, CString lpFileName);
afx_msg void OnBnClickedRadioSv2000eChannel1();
afx_msg void OnBnClickedRadioSv2000eChannel2();
afx_msg void OnCbnSelchangeComboSv2000eSelectDevNumber();
};
@@ -665,9 +665,10 @@
#define IDC_RADIO_TC4000_CHANNEL2 1567
#define IDC_RADIO_TC4000_CHANNEL3 1568
#define IDC_RADIO_TC4000_CHANNEL4 1569
#define IDC_RADIO1 1570
#define IDC_RADIO_SV2000E_CHANNEL1 1570
#define IDC_RADIO_SV2000E_CHANNEL2 1571
#define IDC_COMBO_SV200E 1573
#define IDC_COMBO_SV2000E_SELECT_DEV_NUMBER 1573
// Next default values for new objects
//
@@ -675,7 +676,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 166
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1572
#define _APS_NEXT_CONTROL_VALUE 1574
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif