增加MV900视频卡测试功能。

This commit is contained in:
TAO Cheng
2014-08-12 13:56:06 +08:00
parent c69fd170d9
commit 23071b39dc
15 changed files with 1059 additions and 7 deletions
@@ -4768,3 +4768,10 @@ Usb Port Initialized.
Init:Open device succeed . Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
@@ -405,8 +405,8 @@ BEGIN
CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,24,48,69,10 CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,24,48,69,10
CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,24,64,68,10 CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,24,64,68,10
CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,24,80,69,10 CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,24,80,69,10
CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,24,96,62,10 CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,195,96,62,10
CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,24,112,62,10 CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,195,112,62,10
CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,100,32,76,10 CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,100,32,76,10
CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,100,48,76,10 CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,100,48,76,10
CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET, CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET,
@@ -423,6 +423,7 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,145,142,50,14 DEFPUSHBUTTON "OK",IDOK,145,142,50,14
PUSHBUTTON "Cancel",IDCANCEL,225,142,50,14 PUSHBUTTON "Cancel",IDCANCEL,225,142,50,14
GROUPBOX "测试选项",IDC_STATIC,10,8,265,123 GROUPBOX "测试选项",IDC_STATIC,10,8,265,123
CONTROL "MV900视频卡",IDC_RADIO_VIDEOCARD_MV900,"Button",BS_AUTORADIOBUTTON,24,96,69,10
END END
IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316 IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316
@@ -1015,6 +1016,22 @@ BEGIN
PUSHBUTTON "Clear",IDC_BUTTON_SO7_EXTRIG_CLEAR_MSG,222,295,50,14,BS_CENTER PUSHBUTTON "Clear",IDC_BUTTON_SO7_EXTRIG_CLEAR_MSG,222,295,50,14,BS_CENTER
END END
IDD_SO7_VIDEOCARD_MV900 DIALOGEX 0, 0, 575, 356
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "MV900视频卡"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "开始",IDOK,520,309,53,14
PUSHBUTTON "退出",IDCANCEL,520,338,53,14
CONTROL "彩色图像",IDC_RADIO_MV900_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,520,22,53,10
CONTROL "黑白图像",IDC_RADIO_MV900_GRAY,"Button",BS_AUTORADIOBUTTON,520,40,53,10
CONTROL "垂直镜像",IDC_MV900_CHECK_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,520,66,53,10
PUSHBUTTON "保存图片",IDC_BUTTON_MV900_SAVEFILE,520,163,53,14
CONTROL "",IDC_STATIC_SV4000E_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,225,340,71,12
PUSHBUTTON "调节参数",IDC_BUTTON_MV900_SET_PARA,520,97,53,14
PUSHBUTTON "默认参数",IDC_BUTTON_MV900_DEFAULT_PARA,520,130,53,14
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@@ -1186,6 +1203,15 @@ BEGIN
TOPMARGIN, 7 TOPMARGIN, 7
BOTTOMMARGIN, 309 BOTTOMMARGIN, 309
END END
IDD_SO7_VIDEOCARD_MV900, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 573
VERTGUIDE, 520
TOPMARGIN, 7
BOTTOMMARGIN, 352
END
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
@@ -23,6 +23,10 @@
#include "Videocard_TC4000.h" #include "Videocard_TC4000.h"
#include "..\..\..\Videocard\SV4000E\SV4000E.h" #include "..\..\..\Videocard\SV4000E\SV4000E.h"
#include "Videocard_SV4000E.h" #include "Videocard_SV4000E.h"
#include "..\..\..\Videocard\MV900\COMM.h"
#include "..\..\..\Videocard\MV900\Convert.h"
#include "..\..\..\Videocard\MV900\MVSDK.h"
#include "Videocard_MV900.h"
#endif //_RELEASE_FULL_VERSION #endif //_RELEASE_FULL_VERSION
#include "..\..\..\STIL\Common\inc\cAcqEasy.h" #include "..\..\..\STIL\Common\inc\cAcqEasy.h"
@@ -129,6 +133,7 @@ BOOL CSo7_Option::OnInitDialog()
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE);
@@ -142,6 +147,7 @@ BOOL CSo7_Option::OnInitDialog()
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_USB_CAMERA))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_USB_CAMERA))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->EnableWindow(FALSE);
@@ -399,6 +405,14 @@ void CSo7_Option::OnBnClickedOk()
delete pVideocard_TC4000; delete pVideocard_TC4000;
#endif //_RELEASE_FULL_VERSION #endif //_RELEASE_FULL_VERSION
} }
else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->GetCheck())
{
#ifdef _RELEASE_FULL_VERSION
CVideocard_MV900* pVideocard_MV900=new CVideocard_MV900();
pVideocard_MV900->DoModal();
delete pVideocard_MV900;
#endif //_RELEASE_FULL_VERSION
}
else if(((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->GetCheck()) else if(((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->GetCheck())
{ {
if (!m_pSo7_Interface) if (!m_pSo7_Interface)
@@ -145,7 +145,7 @@
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile> </ResourceCompile>
<Link> <Link>
<AdditionalDependencies>..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;..\..\..\Videocard\MV900\Convert.lib;..\..\..\Videocard\MV900\MVSDK.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
@@ -206,7 +206,7 @@
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
<AdditionalDependencies>..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;..\..\..\Videocard\MV900\Convert.lib;..\..\..\Videocard\MV900\MVSDK.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseSO7|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseSO7|Win32'">
@@ -380,6 +380,7 @@
</ClCompile> </ClCompile>
<ClCompile Include="STIL_CCS_PRIMA_Dlg.cpp" /> <ClCompile Include="STIL_CCS_PRIMA_Dlg.cpp" />
<ClCompile Include="TestTesaStarEDialog.cpp" /> <ClCompile Include="TestTesaStarEDialog.cpp" />
<ClCompile Include="Videocard_MV900.cpp" />
<ClCompile Include="Videocard_SDK3000.cpp" /> <ClCompile Include="Videocard_SDK3000.cpp" />
<ClCompile Include="Videocard_SV2000E.cpp" /> <ClCompile Include="Videocard_SV2000E.cpp" />
<ClCompile Include="Videocard_SV4000E.cpp" /> <ClCompile Include="Videocard_SV4000E.cpp" />
@@ -466,6 +467,7 @@
<ClInclude Include="targetver.h" /> <ClInclude Include="targetver.h" />
<ClInclude Include="TestTesaStarEDialog.h" /> <ClInclude Include="TestTesaStarEDialog.h" />
<ClInclude Include="VideoCardDefine.h" /> <ClInclude Include="VideoCardDefine.h" />
<ClInclude Include="Videocard_MV900.h" />
<ClInclude Include="Videocard_SDK3000.h" /> <ClInclude Include="Videocard_SDK3000.h" />
<ClInclude Include="Videocard_SV2000E.h" /> <ClInclude Include="Videocard_SV2000E.h" />
<ClInclude Include="Videocard_SV4000E.h" /> <ClInclude Include="Videocard_SV4000E.h" />
@@ -220,6 +220,7 @@
<ClCompile Include="So7_Util_External_Trig.cpp"> <ClCompile Include="So7_Util_External_Trig.cpp">
<Filter>Sources Files</Filter> <Filter>Sources Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Videocard_MV900.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="CaptureDataDlg.h"> <ClInclude Include="CaptureDataDlg.h">
@@ -474,6 +475,7 @@
<ClInclude Include="So7_Util_External_Trig.h"> <ClInclude Include="So7_Util_External_Trig.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Videocard_MV900.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="ReadMe.txt" /> <None Include="ReadMe.txt" />
@@ -21,4 +21,18 @@ typedef struct Image_Buffer
} }
} }
}; };
}Image_Buffer; }Image_Buffer;
typedef struct Image_Buffer2
{
unsigned char ScanLine[576][768*3];
Image_Buffer2()
{
for (int i=0;i<576;i++)
{
for (int j=0;j<768*3;j++)
{
ScanLine[i][j]=0;
}
}
};
}Image_Buffer2;
@@ -0,0 +1,516 @@
// Videocard_MV900.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "VideoCardDefine.h"
#include "..\..\..\Videocard\MV900\COMM.h"
#include "..\..\..\Videocard\MV900\Convert.h"
#include "..\..\..\Videocard\MV900\MVSDK.h"
#include "Videocard_MV900.h"
#include "afxdialogex.h"
#define WM_UPDATE_IMAGE WM_USER+100
static BYTE g_DataBuffer[640*480*3];
int m_VideoWidth=640;//640;
int m_VideoHeight=480;//480;
int m_VideoBitcount=3;
int m_DisplayWidth=640;
int m_DisplayHeight=480;
// CVideocard_MV900 dialog
HWND Msg_Hwnd=NULL;
IMPLEMENT_DYNAMIC(CVideocard_MV900, CDialog)
CVideocard_MV900::CVideocard_MV900(CWnd* pParent /*=NULL*/)
: CDialog(CVideocard_MV900::IDD, pParent)
{
m_ConvertColorType=RGB24TORGB;
m_bSaveFile=FALSE;
m_bMirror=FALSE;
m_status=FALSE;
m_hDev=NULL;
m_nSharpness=0;
m_nSaturation=0;
m_nHue=0;
m_nContrast=0;
m_nBrightness=0;
Msg_Hwnd=m_hWndTop;
}
CVideocard_MV900::~CVideocard_MV900()
{
}
void CVideocard_MV900::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CVideocard_MV900, CDialog)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_RADIO_MV900_RGB, &CVideocard_MV900::OnBnClickedRadioMv900Rgb)
ON_BN_CLICKED(IDC_RADIO_MV900_GRAY, &CVideocard_MV900::OnBnClickedRadioMv900Gray)
ON_BN_CLICKED(IDC_MV900_CHECK_MIRROR_VERTICALLY, &CVideocard_MV900::OnBnClickedMv900CheckMirrorVertically)
ON_BN_CLICKED(IDC_BUTTON_MV900_SET_PARA, &CVideocard_MV900::OnBnClickedButtonMv900SetPara)
ON_BN_CLICKED(IDC_BUTTON_MV900_SAVEFILE, &CVideocard_MV900::OnBnClickedButtonMv900Savefile)
ON_BN_CLICKED(IDOK, &CVideocard_MV900::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CVideocard_MV900::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BUTTON_MV900_DEFAULT_PARA, &CVideocard_MV900::OnBnClickedButtonMv900DefaultPara)
ON_MESSAGE(WM_UPDATE_IMAGE, &CVideocard_MV900::OnUpdateImage)
END_MESSAGE_MAP()
// CVideocard_MV900 message handlers
//==============================================================================
BOOL CVideocard_MV900::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
Msg_Hwnd=AfxGetApp()->GetMainWnd()->m_hWnd;
((CButton *)GetDlgItem(IDC_RADIO_MV900_RGB))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO_MV900_GRAY))->SetCheck(FALSE);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
//==============================================================================
void CVideocard_MV900::OnBnClickedRadioMv900Rgb()
{
m_ConvertColorType=RGB24TORGB;
}
//==============================================================================
void CVideocard_MV900::OnBnClickedRadioMv900Gray()
{
m_ConvertColorType=RGB24TOGRAY;
}
//==============================================================================
void CVideocard_MV900::OnBnClickedMv900CheckMirrorVertically()
{
if (((CButton *)GetDlgItem(IDC_MV900_CHECK_MIRROR_VERTICALLY))->GetCheck())
{
m_bMirror=TRUE;
}
else
{
m_bMirror=FALSE;
}
}
//==============================================================================
void CVideocard_MV900::OnBnClickedButtonMv900DefaultPara()
{
SetVideocardDefaultPara();
}
//==============================================================================
void CVideocard_MV900::OnBnClickedButtonMv900SetPara()
{
SetVideocardPara();
}
//==============================================================================
void CVideocard_MV900::OnBnClickedButtonMv900Savefile()
{
CString CTmpString;
CString PathName;
CString path_and_fileName;
PathName=_T("MV900.bmp");
CString szFilter=_T("BMP Files(*.bmp)|*.bmp|ALL Files(*.*)|*.*||");
CFileDialog fdlg(FALSE,_T("BMP"),PathName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if( fdlg.DoModal()==IDOK)
{
m_SaveFile=fdlg.GetPathName();
m_bSaveFile=TRUE;
}
delete fdlg;
}
//==============================================================================
void CVideocard_MV900::OnBnClickedOk()
{
LoadVideocard();
SetTimer(1,50,NULL);
GetDlgItem(IDOK)->EnableWindow(false);
}
//==============================================================================
void CVideocard_MV900::OnBnClickedCancel()
{
KillTimer(1);
UnloadVideocard();
CDialog::OnCancel();
}
//==============================================================================
BOOL CVideocard_MV900::LoadVideocard()
{
#ifdef _RELEASE_FULL_VERSION
long m_dwCard(0);
m_dwCard=MV_GetCardNumber();
m_hDev = Cap_Create("MVVGA", 0);
int m_Yoff(0),m_Xoff(0),m_Xmax(0),m_Ymax(0);
m_Yoff = Cap_GetPropery( m_hDev, SIG_YOFF );
m_Xoff = Cap_GetPropery( m_hDev, SIG_XOFF );
m_Xmax = Cap_GetPropery( m_hDev, SIG_WIDTH);
m_Ymax = Cap_GetPropery( m_hDev, SIG_HIGH );
m_status=Cap_SetPropery(m_hDev,SIG_FRAME,25);
m_status=Cap_SetPropery(m_hDev,PIEXL_BIT,24);
m_status=Cap_SetOutSize(m_hDev,m_DisplayHeight,m_DisplayWidth);
Cap_SetCallBack(m_hDev, (PUSERCALL)MV900_PrcVidCapCallBack, this );
m_status=Cap_Start(m_hDev);
#endif //_RELEASE_FULL_VERSION
return TRUE;
}
//==============================================================================
BOOL CVideocard_MV900::UnloadVideocard()
{
#ifdef _RELEASE_FULL_VERSION
if (m_hDev)
{
Cap_Stop( m_hDev );
Cap_Destroy(m_hDev);
m_hDev=NULL;
}
#endif //_RELEASE_FULL_VERSION
return TRUE;
}
//==============================================================================
BOOL CVideocard_MV900::SetVideocardDefaultPara()
{
#ifdef _RELEASE_FULL_VERSION
long min,max,def;
Cap_GetProperyRange(m_hDev,_SHARPNESS,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_SHARPNESS,def);
Cap_GetProperyRange(m_hDev,_SATURATION,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_SATURATION,def);
Cap_GetProperyRange(m_hDev,_HUE,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_HUE,def);
Cap_GetProperyRange(m_hDev,_CONTRAST,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_CONTRAST,def);
Cap_GetProperyRange(m_hDev,_BRIGHTNESS,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_BRIGHTNESS,def);
Cap_GetProperyRange(m_hDev,_R_GRAY,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_R_GRAY,def);
Cap_GetProperyRange(m_hDev,_R_CONTRAST,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_R_CONTRAST,def);
Cap_GetProperyRange(m_hDev,_G_GRAY,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_G_GRAY,def);
Cap_GetProperyRange(m_hDev,_G_CONTRAST,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_G_CONTRAST,def);
Cap_GetProperyRange(m_hDev,_B_GRAY,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_B_GRAY,def);
Cap_GetProperyRange(m_hDev,_B_CONTRAST,&min,&max,&def);
m_status=Cap_SetPropery(m_hDev,_B_CONTRAST,def);
m_nSharpness = Cap_GetPropery( m_hDev, _SHARPNESS );
m_nSaturation = Cap_GetPropery( m_hDev, _SATURATION );
m_nHue = Cap_GetPropery( m_hDev, _HUE );
m_nContrast = Cap_GetPropery( m_hDev, _CONTRAST );
m_nBrightness = Cap_GetPropery( m_hDev, _BRIGHTNESS );
#endif //_RELEASE_FULL_VERSION
return TRUE;
}
//==============================================================================
BOOL CVideocard_MV900::SetVideocardPara()
{
#ifdef _RELEASE_FULL_VERSION
m_status=Cap_ShowOutputControl(m_hDev);
#endif //_RELEASE_FULL_VERSION
return TRUE;
}
//================================================================
void CVideocard_MV900::ConvertVideoSubType(const Image_Buffer& _ImageBuffer,
BYTE *_pSrcData,ConvertColorType _type,BOOL _bMirror)
{
int x=0;
int y=0;
long lCnt1=0;
long lCnt2=0;
long lCnt3=0;
int Color_R=0,Color_G=0,Color_B=0;
BYTE *pDstData=NULL;
for(y=0;y<m_DisplayHeight;y++)
{
lCnt1=0;
if(!_bMirror)
pDstData=(BYTE*)_ImageBuffer.ScanLine[y];
else
pDstData=(BYTE*)_ImageBuffer.ScanLine[m_DisplayHeight-1-y];
for(x=0;x<m_DisplayWidth*3;x+=3)
{
switch(_type)
{
case RGB24TORGB:
{
pDstData[x+2]=_pSrcData[y*m_VideoWidth*3+x+2];
pDstData[x+1]=_pSrcData[y*m_VideoWidth*3+x+1];
pDstData[x]=_pSrcData[y*m_VideoWidth*3+x];
break;
}
case YUY2TORGB:
{
Color_R=(1164*(_pSrcData[lCnt2*2]-16)+1596*(_pSrcData[lCnt3+3]-128))/1000;
if(Color_R>255)Color_R=255;
if(Color_R<0)Color_R=0;
pDstData[x+2]=static_cast<BYTE>(Color_R);
Color_G=(1164*(_pSrcData[lCnt2*2]-16)-813*(_pSrcData[lCnt3+1]-128)-392*(_pSrcData[lCnt3+3]-128))/1000;
if(Color_G>255)Color_G=255;
if(Color_G<0)Color_G=0;
pDstData[x+1]=static_cast<BYTE>(Color_G);
Color_B=(1164*(_pSrcData[lCnt2*2]-16)+2017*(_pSrcData[lCnt3+1]-128))/1000;
if(Color_B>255)Color_B=255;
if(Color_B<0)Color_B=0;
pDstData[x]=static_cast<BYTE>(Color_B);
break;
}
case RGB24TOGRAY:
{
pDstData[x+2]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3;
pDstData[x+1]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3;
pDstData[x]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3;
break;
}
case YUY2TOGRAY:
{
pDstData[x+2]=_pSrcData[2*lCnt2];
pDstData[x+1]=_pSrcData[2*lCnt2];
pDstData[x]=_pSrcData[2*lCnt2];
break;
}
}
if((lCnt1%2)==1)
lCnt3=lCnt3+4;
lCnt2++;
lCnt1++;
}
}
}
//================================================================
BOOL CVideocard_MV900::SaveBitmapToFile(const CBitmap& _bitmap, CString _lpFileName)
{
HBITMAP hBitmap; // 为刚才的屏幕位图句柄
HDC hDC; //设备描述表
int iBits; //当前显示分辨率下每个像素所占字节数
WORD wBitCount(24); //位图中每个像素所占字节数
DWORD dwPaletteSize = 0, //定义调色板大小
dwBmBitsSize, //位图中像素字节大小
dwDIBSize, //位图文件大小
dwWritten; //写入文件字节数
BITMAP Bitmap; //位图属性结构
BITMAPFILEHEADER bmhFiledr; //位图文件头结构
BITMAPINFOHEADER bi; //位图信息头结构
LPBITMAPINFOHEADER lpbi; //指向位图信息头结构
HANDLE hFile, //定义文件
hDib, //分配内存句柄
hPal, //调色板句柄
hOldPal = NULL;
//计算位图文件每个像素所占字节数
hBitmap = (HBITMAP)_bitmap;
hDC = CreateDC(_T("DISPLAY"),NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1)
wBitCount = 1;
else if (iBits <= 4)
wBitCount = 4;
else if (iBits <= 8)
wBitCount = 8;
else if (iBits <= 24)
wBitCount = 24;
else if (iBits <= 32)
wBitCount = 32;
//计算调色板大小
if (wBitCount <= 8)
dwPaletteSize = (1 << wBitCount) * sizeof (RGBQUAD);
//设置位图信息头结构
GetObject(hBitmap, sizeof (BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof (BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31) / 32) * 4 * Bitmap.bmHeight;
//为位图内容分配内存
hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize + sizeof (BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof (BITMAPINFOHEADER) + dwPaletteSize, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
hFile = CreateFile(_lpFileName, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return FALSE;
// 设置位图文件头
bmhFiledr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmhFiledr.bfSize = dwDIBSize;
bmhFiledr.bfReserved1 = 0;
bmhFiledr.bfReserved2 = 0;
bmhFiledr.bfOffBits = (DWORD)sizeof (BITMAPFILEHEADER) + (DWORD)sizeof (BITMAPINFOHEADER) + dwPaletteSize;
// 写入位图文件头
WriteFile(hFile, (LPSTR)&bmhFiledr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(hFile, (LPSTR)lpbi, dwDIBSize,&dwWritten, NULL);
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(hFile);
return TRUE;
};
//================================================================
void CVideocard_MV900::OnPaint()
{
CDC* dc= this->GetDC();
int nMode;
CDC* pMemDC = new CDC;
CBitmap pBitBmp;
CBitmap pBitBmpNav;
BYTE *pData;
CBitmap* pOldBitmap;
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = m_DisplayWidth;
bmpInfo.bmiHeader.biHeight = m_DisplayHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 24;//X位色
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biSizeImage = 0;
bmpInfo.bmiHeader.biXPelsPerMeter = 30000;
bmpInfo.bmiHeader.biYPelsPerMeter = 30000;
bmpInfo.bmiHeader.biClrUsed = 0;
bmpInfo.bmiHeader.biClrImportant = 0;
ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror);
pData = (BYTE *)m_ImageBuffer.ScanLine;
pBitBmp.CreateCompatibleBitmap(dc,m_DisplayWidth,m_DisplayHeight);
SetDIBits(dc->m_hDC,pBitBmp,0,m_DisplayHeight,pData,&bmpInfo,DIB_RGB_COLORS);
if (m_bSaveFile)
{
SaveBitmapToFile(pBitBmp,m_SaveFile);
//CImage imgTemp;
//imgTemp.Attach(pBitBmp.operator HBITMAP());
//imgTemp.Save(m_SaveFile);
m_bSaveFile=FALSE;
}
if (!pMemDC->m_hDC)
{
pMemDC->CreateCompatibleDC(dc);
}
pOldBitmap = pMemDC->SelectObject(&pBitBmp);
nMode = pMemDC->SetBkMode(TRANSPARENT);
dc->BitBlt(0, 0, m_DisplayWidth, m_DisplayHeight, pMemDC,0,0, SRCCOPY);
pMemDC->SetBkMode(nMode);
pMemDC->SelectObject(pOldBitmap);
ReleaseDC(pMemDC);
delete pMemDC;
ReleaseDC(dc);
}
afx_msg LRESULT CVideocard_MV900::OnUpdateImage(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
OnPaint();
return 0;
}
//================================================================================================
void CVideocard_MV900::OnTimer(UINT_PTR nIDEvent)
{
switch(nIDEvent)
{
case 1:
{
OnPaint();
break;
}
}
CDialog::OnTimer(nIDEvent);
}
const int iStartX(0);
const int iStartY(0);
//==================================SV4000E=====================================
VOID CALLBACK MV900_PrcVidCapCallBack( PUCHAR pData, ULONG Length, PVOID pUserData)
{
UNREFERENCED_PARAMETER(Length);
UNREFERENCED_PARAMETER(pUserData);
//memcpy(g_DataBuffer,(BYTE*)pData,Length);//640*480*m_VideoBitcount
for(int y=iStartY;y<iStartY+480;y++)
{
for(int x=iStartX*3;x<(iStartX+640)*3;x++)
{
g_DataBuffer[(y-iStartY)*640*3+(x-iStartX)]=(BYTE)pData[y*768*3+x];
}
}
//PostMessage(Msg_Hwnd,WM_UPDATE_IMAGE,0,0);
}
@@ -0,0 +1,54 @@
#pragma once
VOID CALLBACK MV900_PrcVidCapCallBack( PUCHAR pData, ULONG Length, PVOID pUserData );
// CVideocard_MV900 dialog
class CVideocard_MV900 : public CDialog
{
DECLARE_DYNAMIC(CVideocard_MV900)
public:
CVideocard_MV900(CWnd* pParent = NULL); // standard constructor
virtual ~CVideocard_MV900();
// Dialog Data
enum { IDD = IDD_SO7_VIDEOCARD_MV900 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg void OnTimer(UINT_PTR nIDEvent);
DECLARE_MESSAGE_MAP()
private:
Image_Buffer m_ImageBuffer;
ConvertColorType m_ConvertColorType;
BOOL m_bMirror;
BOOL m_bSaveFile;
CString m_SaveFile;
void ConvertVideoSubType(const Image_Buffer& _ImageBuffer, BYTE *pSrcData,ConvertColorType _type,BOOL _bMirror);
BOOL SaveBitmapToFile(const CBitmap& bitmap, CString lpFileName);
BOOL LoadVideocard();
BOOL UnloadVideocard();
BOOL SetVideocardPara();
BOOL SetVideocardDefaultPara();
BOOL m_status;
HANDLE m_hDev;
int m_nSharpness;
int m_nSaturation;
int m_nHue;
int m_nContrast;
int m_nBrightness;
public:
afx_msg void OnBnClickedRadioMv900Rgb();
afx_msg void OnBnClickedRadioMv900Gray();
afx_msg void OnBnClickedMv900CheckMirrorVertically();
afx_msg void OnBnClickedButtonMv900SetPara();
afx_msg void OnBnClickedButtonMv900Savefile();
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedButtonMv900DefaultPara();
protected:
afx_msg LRESULT OnUpdateImage(WPARAM wParam, LPARAM lParam);
};
@@ -684,6 +684,7 @@
#define IDC_BUTTON_SETTINGS 1558 #define IDC_BUTTON_SETTINGS 1558
#define IDC_RADIO_VIDEOCARD_TC4000 1559 #define IDC_RADIO_VIDEOCARD_TC4000 1559
#define IDC_BUTTON_READ_SETTINGS 1560 #define IDC_BUTTON_READ_SETTINGS 1560
#define IDC_RADIO_VIDEOCARD_MV900 1560
#define IDC_BUTTON_WRITE_SETTINGS 1561 #define IDC_BUTTON_WRITE_SETTINGS 1561
#define IDC_STATIC_SDK3000_PICTURE 1562 #define IDC_STATIC_SDK3000_PICTURE 1562
#define IDC_RADIO_GRAY 1563 #define IDC_RADIO_GRAY 1563
@@ -832,7 +833,10 @@
#define IDC_RADIO_SV4000E_CHANNEL5 1685 #define IDC_RADIO_SV4000E_CHANNEL5 1685
#define IDC_RADIO_SV4000E_CHANNEL_ALL 1685 #define IDC_RADIO_SV4000E_CHANNEL_ALL 1685
#define IDC_MFCBUTTON_SO7_PROGRAM_X_LEFT 1686 #define IDC_MFCBUTTON_SO7_PROGRAM_X_LEFT 1686
#define IDC_BUTTON_MV900_SET_PARA 1686
#define IDC_MFCBUTTON_SO7_PROGRAM_X_RIGHT 1687 #define IDC_MFCBUTTON_SO7_PROGRAM_X_RIGHT 1687
#define IDC_BUTTON_MV900_SET_PARA2 1687
#define IDC_BUTTON_MV900_DEFAULT_PARA 1687
#define IDC_MFCBUTTON_SO7_PROGRAM_Y_FRONTWARD 1688 #define IDC_MFCBUTTON_SO7_PROGRAM_Y_FRONTWARD 1688
#define IDC_MFCBUTTON_SO7_PROGRAM_Y_BACKWARD 1689 #define IDC_MFCBUTTON_SO7_PROGRAM_Y_BACKWARD 1689
#define IDC_MFCBUTTON_SO7_PROGRAM_Z_UP 1690 #define IDC_MFCBUTTON_SO7_PROGRAM_Z_UP 1690
@@ -866,6 +870,7 @@
#define IDD_SO7_UTIL_SETUP_SO7_CONFIG_MOTION 1720 #define IDD_SO7_UTIL_SETUP_SO7_CONFIG_MOTION 1720
#define IDD_SO7_ART_PCI8622 1721 #define IDD_SO7_ART_PCI8622 1721
#define IDD_DIALOG_STIL_CCS_PRIMA 1722 #define IDD_DIALOG_STIL_CCS_PRIMA 1722
#define IDD_SO7_VIDEOCARD_MV900 1723
#define IDC_RADIO_SPEED_SLOW 1770 #define IDC_RADIO_SPEED_SLOW 1770
#define IDC_RADIO_SCALE 1772 #define IDC_RADIO_SCALE 1772
#define IDC_EDIT_SPEED_X 1773 #define IDC_EDIT_SPEED_X 1773
@@ -1029,8 +1034,11 @@
#define IDC_EDIT_ART_PCI8622_LAST_CHANNEL 1875 #define IDC_EDIT_ART_PCI8622_LAST_CHANNEL 1875
#define IDC_EDIT_ART_PCI8622_FIRST_CHANNEL 1876 #define IDC_EDIT_ART_PCI8622_FIRST_CHANNEL 1876
#define IDC_LIST_SO7_MOTION_SEGMENT_DIS 1877 #define IDC_LIST_SO7_MOTION_SEGMENT_DIS 1877
#define IDC_CHECK4 1878
#define IDC_CHECK_SO7_CONTROL_MODE_Z 1878 #define IDC_CHECK_SO7_CONTROL_MODE_Z 1878
#define IDC_BUTTON_MV900_SAVEFILE 1879
#define IDC_MV900_CHECK_MIRROR_VERTICALLY 1880
#define IDC_RADIO_MV900_GRAY 1881
#define IDC_RADIO_MV900_RGB 1882
#define IDC_BUTTON_DIY_EXIT_BUTTON 32740 #define IDC_BUTTON_DIY_EXIT_BUTTON 32740
#define ID_EDIT_SO7_CONFIG_MOTION 32741 #define ID_EDIT_SO7_CONFIG_MOTION 32741
@@ -1040,7 +1048,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 193 #define _APS_NEXT_RESOURCE_VALUE 193
#define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1879 #define _APS_NEXT_CONTROL_VALUE 1883
#define _APS_NEXT_SYMED_VALUE 104 #define _APS_NEXT_SYMED_VALUE 104
#endif #endif
#endif #endif
@@ -0,0 +1,94 @@
#ifndef __COMM_H__
#define __COMM_H__
#include "Windows.h"
#ifdef __cplusplus
#define MVVGA extern "C" __declspec (dllexport)
#else
#define MVVGA __declspec (dllexport)
#endif
// 图像内容动态改变消息, WPARAM, LPARAM参数不使用
#define VGA_IMAGECHANGE WM_USER + 1011
// 信号丢失消息, WPARAM, LPARAM参数不使用
#define VGA_SIGNALLOST WM_USER + 1012
// 信号改变消息, WPARAM的高16位为信号有效的高, 低16位为信号有效的宽;
// LPARAM的高16位为信号垂直偏移, 低16位为信号水平偏移;
#define VGA_SIGNALCHANGE WM_USER + 1013
enum VGAPROPERY{ DRV_INDX=0, // 仅读, 返回当前卡的驱动下标
GET_TYPE, // 仅读, 返回当前卡类型
SIG_SOURCE, // 读写, 同步源选择,0--行场分离,1--绿路同步, I/III型卡有效,II/IV型卡无效
SIG_VHZ, // 仅读, 输入信号的场频
SIG_HHZ, // 仅读, 行频率
SIG_HTOTAL, // 读写, 当前信号行内总点数
SIG_VTOTAL, // 读写, 当前信号场内总行数, I/III型卡有效,II/IV型卡无效
SIG_VPOLAR, // 读写, 当前信号场极性, I/III型卡有效,II/IV型卡无效
SIG_PLLV, // 读写, 当前信号PLL电压
SIG_PLLI, // 读写, 当前信号PLL电流
SIG_XOFF, // 读写, 当前信号的水平偏移
SIG_YOFF, // 读写, 当前信号的垂直偏移
SIG_HIGH, // 读写, 当前信号的垂直高度
SIG_WIDTH, // 读写, 当前信号的水平宽度
SIG_FRAME, // 读写, 采集时的桢间隔时间ms级
SIG_UPDOWN, // 读写, 采集时上下翻转
// 设置/得到当前采集图像的尺寸, 但不一定为输入图像信号的大小. 输入的大小如果和
// 输入图像信号的大小对应, 则采集到的图像是未被缩放的原始图像, 否则采集到的图
// 像将被缩放.
OUT_HIGH, // 读写, DSHOW输出窗口高
OUT_WIDTH, // 读写, DSHOW输出窗口宽
OUT_QUALITY, // 读写, 缩放质量选择
CHK_DOING, // 仅写, 手动行场频测试,I型卡有效,II型卡无效
USER_EVENT, // 信号改变/丢失事件,写时初始化,读时反初始化,I型卡无效,II型卡有效
USER_CAUSE, // 被有事件的原因,写无效,读时有效,0-信号正常,1-信号丢失,2-信号改变
RESET_SAVE, // Get 信号文件保存 = 1; 恢复 = 0;
GET_SIGIMAGE, // 未实现,仅为占位,用函数Cap_GetOutImage()和Cap_GetSignalImage()代替
GET_NUMBER, // Get 得当前采集的桢率
SIG_CAPMODE, // 设置板卡采集模式;1 -- 快速模式;0 -- 普通模式
// 调节属性量, 对当前图像的R/G/B分量进行调节, 每个分量都有亮度和对比度两项,
// 值越小表现越明显. 最小的值0, 代表最大的对比度或最大的亮度.
_BRIGHTNESS, // 亮度
_HUE, // 色度
_SATURATION, // 饱和度
_CONTRAST, // 对比度
_GAMMA, //
_SHARPNESS, // 锐利度
_R_GRAY, // VGA卡的R分量的亮度
_G_GRAY, // VGA卡的G分量的亮度
_B_GRAY, // VGA卡的B分量的亮度
_R_CONTRAST, // VGA卡的R分量的对比度
_G_CONTRAST, // VGA卡的G分量的对比度
_B_CONTRAST, // VGA卡的B分量的对比度
//
PIEXL_BIT, // 得到或设置当前采集图像的像素位数, 取值为32(32位RGBa888)/24
// (24位RGB888)/16(16位YUV422)/8(8位灰度图); 能否采集到8位灰
// 度图要根据卡型决定; 对于黑白医疗/雷达信号卡,采集32位/24位
// 时是将8位的图像扩展到真彩色方式输出, 这样不丢失灰度级.
NOTIFY_HWND, // 为VGA_SIGNALLOST和VGA_SIGNALCHANGE消息设置接收窗口句柄
DEV_AVI,
DEV_RAW,
};
typedef struct _DATAGET_{ ULONG Width;
ULONG High;
USHORT nColor;
USHORT bWait;
PUCHAR pData;
}DATAGET, *PDATAGET;
// 画笔样式
enum PEN_STYLE{ _SOLID = 0, _DASH, _DOT, _DASHDOT, _DASHDOTDOT };
// 用户回调函数的原型
// pData : 当该用户回调函数被调用时,该参数为图像数据的缓冲区地址
// Length : 当该用户回调函数被调用时,该参数为图像数据的缓冲区长度
// pUserData: 在设置用户回调函数时传入的用户上下文的指针
typedef VOID (WINAPI *PUSERCALL)( PUCHAR pData, ULONG Length, PVOID pUserData );
// 初始化显示模块时传入的使用DRAW方式的显示的用户回调函数的原型,使用DRAW方式可以在原图像上
// 进行绘制文字和图形体,绘制的时机和过程在该回调函数中完成; 进行绘制使用WINDOWS的点, 线,
// TextOut API绘制.
typedef VOID (WINAPI *USERDRAW)( HDC hDC, PVOID pContext );
#endif //__COMM_H__
@@ -0,0 +1,34 @@
#ifndef __CONVERT_H__
#define __CONVERT_H__
#include "windows.h"
#ifdef __cplusplus
#define CONVERT extern "C" __declspec (dllexport)
#else
#define CONVERT __declspec (dllexport)
#endif
#ifndef UINT32
#define UINT32 unsigned long
#endif
#ifndef SINT32
#define SINT32 long
#endif
#ifndef UINT16
#define UINT16 unsigned short
#endif
#ifndef SINT16
#define SINT16 short
#endif
#ifndef UINT8
#define UINT8 unsigned char
#endif
CONVERT VOID WINAPI InitTables(); //³õʼ»¯YUV422ת»»±í
//YUV422תRGB24
CONVERT VOID WINAPI Convert422(UINT32 XSize,UINT32 YSize,UINT8 *pBuf,UINT8 *pBGR);
#endif
@@ -0,0 +1,281 @@
#ifndef __MVVGA_H__
#define __MVVGA_H__
#include "COMM.h"
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// 设 备 相 关 控 制 部 件 /////////////////////////////////////
MVVGA long WINAPI MV_GetCardNumber();
/*******************************************************************************************/
/* 描述 : 创建/释放 MVVGA捕获设备 */
/* Description: "MVVGA" */
/* Index : 以0为下标的卡号, 最大支持一机4卡 */
/* hCap : 由Cap_Create()创建的MVVGA设备句柄 */
/* 返回值 : 返回设备的句柄, 下面的函数中对该设备的操作都需要该设备句柄. */
MVVGA HANDLE WINAPI Cap_Create( char *Description, ULONG Index );
MVVGA VOID WINAPI Cap_Destroy( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 运行/停止设备, 开始捕获图像数据, 如果希望用消息方式来获得图像数据则hWnd参数*/
/* 不为NULL, 是接收VGA_IMAGEDATA消息的窗口句柄, 该消息的WPARAM参数为图像缓冲指*/
/* 针, LPARAM参数为图像缓冲的字节大小. */
/* 强烈建议使用回调方式来获得图像数据, 而将该hWnd置为NULL; 消息方式获得图像数 */
/* 据是一种辅助手段. 当你的处理时间大于MVVGA设备回调时间时消息方式才是最有效的*/
/* hCap : 要运行的MVVGA设备句柄 */
/* hWnd : 接收VGA_IMAGEDATA消息的窗口句柄, 一般设置为NULL, 不使能消息方式. */
/* 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI Cap_Start( HANDLE hCap );
MVVGA VOID WINAPI Cap_Stop( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 设置MVVGA捕获设备的图像数据的用户回调函数,当每一桢图像到达时该回调被调用. */
/* 回调函数可在任意时刻被设置,一旦设置即被生效. 要注意的是回调函数是用户写的代*/
/* 码被嵌入到系统中, 由中断驱动的,所以要尽可能的精悍, 尽量不要超过一帧的时间; */
/* 否则将严重拉慢系统. 如果采集回调不能满足上面的时间要求你可用消息方式 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* pCall : 设备的用户回调函数,回调函数的原型在COMM.h中 */
/* pContext : 传入用户回调函数中的用户定义的上下文指针 */
/* 返回值 : 无 */
MVVGA VOID WINAPI Cap_SetCallBack( HANDLE hCap, PUSERCALL pCall, PVOID pContext );
/*******************************************************************************************/
/* 描述 : 设置输出高和宽, 得到输出高和宽用Cap_GetPropery来完成 */
/* High, Width: 输出图像高, 宽 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* 返回值 : TRUE成功; FALSE失败; */
MVVGA BOOL WINAPI Cap_SetOutSize( HANDLE hCap, ULONG High, ULONG Width );
/*******************************************************************************************/
/* 描述 : 设置/得到板卡和输入信号/缩放/图像R/G/B分量进行调节控制属性 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* Propery : 控制属性的类型; 看COMM.h */
/* Val : 设置该类型参数的值 */
/* Set返回值 : TRUE成功; FALSE失败; */
/* Get返回值 : 返回该类型参数的值 */
MVVGA BOOL WINAPI Cap_SetPropery( HANDLE hCap, VGAPROPERY Propery, ULONG Val );
MVVGA LONG WINAPI Cap_GetPropery( HANDLE hCap, VGAPROPERY Propery );
MVVGA LONG WINAPI Cap_GetProperyRange( HANDLE hCap, VGAPROPERY Propery,PLONG pMin,PLONG pMax,PLONG pDefault);
/*******************************************************************************************/
// 描述 : 弹出设备的图像输出控制调节对话框, 方便编程 */
// hCap : 已经创建的MVVGA设备句柄 */
// 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI Cap_ShowOutputControl( HANDLE hCap );
/*******************************************************************************************/
/* 描述 : 手动同步方式得到一帧图像的数据, 直到得到图像后该函数才返回 */
/* hCap : 已经创建的MVVGA设备句柄 */
/* pBuf : 你传入的缓冲区指针; 如果为NULL, 则在该函数返回时得到的是内部缓冲区的指针 */
/* Len : 输入时是你传入的缓冲区的大小, 如果该长度小于当前图像的长度则, 则在该函数返 */
/* 回时得到的是内部缓冲区的指针. */
/* 返回值 : 返回你传入的缓冲区指针, 或内部的内部缓冲区指针, 或出错为NULL; */
/* *Len返回为实际的图像的大小. */
MVVGA PVOID WINAPI Cap_GetOutImage( HANDLE hCap, PUCHAR pBuf, ULONG* Len );
MVVGA PVOID WINAPI Cap_GetSignalImage( HANDLE hCap, PULONG pHigh, PULONG pWidth, PULONG pColor );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 显 示 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建MVVGA的显示部件. 可以创建任意个该部件, 创建的显示部件分为Show和Draw两种,*/
/* Show方式只能显示不能在图像上叠加/OSD/重画, Draw方式能显示能在图像上叠加/OSD/*/
/* 重画. 每一种显示都可进行按照不同的缩放质量缩放. */
/* hWnd : 待显示的窗口句柄 */
/* High,Width: 输入的图像缓冲的原始高度, 宽度 */
/* nColor : 像素的位数(bits) */
/* pDrawCall : 用户重画的回调函数, 任选的可为NULL, 如果非NULL则在显示之前调用该回调, 回调中*/
/* 给你了一个HDC, 你可用它来重画希望的点/线/弧/圆/字串 */
/* pContext : 回调函数的参数, 任选的可为NULL, 在回调发生时传入用户回调 */
/* 返回值 : 返回创建的显示部件的句柄 */
MVVGA HANDLE WINAPI Disp_Create( HWND hWnd, ULONG High, ULONG Width, ULONG nColor,
USERDRAW pDrawCall, PVOID pContext );
MVVGA VOID WINAPI Disp_Destroy( HANDLE hShow ); // 释放MVVGA的显示部件
/*******************************************************************************************/
/* 描述 : 直接显示Show函数, 将pImage中的图像数据直接从左上角指定的位置显示, 无缩放 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left: 显示位置的左上方位置 */
MVVGA VOID WINAPI Disp_ShowDirect( HANDLE hShow, PVOID pImage, int Top, int Left );
/*******************************************************************************************/
/* 描述 : 直接显示Draw函数, 将pImage的图像数据直接从左上角指定的位置显示, 无缩放可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left: 显示位置的左上方位置 */
MVVGA VOID WINAPI Disp_DrawDirect( HANDLE hShow, int Top, int Left );
/*******************************************************************************************/
/* 描述 : 使用Draw或Show的缩放版函数时控制缩放质量的,注意越好的质量越暂用CPU */
/* hShow : 显示部件句柄 */
/* Quality : 显示质量,有四级显示质量: {0, 1, 2, 3} */
MVVGA VOID WINAPI Disp_ZoomQuality( HANDLE hShow, ULONG Quality );
/*******************************************************************************************/
/* 描述 : 缩放版的显示Show函数, 不可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left : 显示位置的左上方位置 */
/* High,Width: 要缩放显示的高度, 宽度 */
MVVGA VOID WINAPI Disp_ShowZoom( HANDLE hShow, PVOID pImage, int Top, int Left, int High,
int Width );
/*******************************************************************************************/
/* 描述 : 缩放版的显示Draw函数, 可叠加 */
/* hShow : 显示部件句柄 */
/* pImage : 图像数据指针 */
/* Top, Left : 显示位置的左上方位置 */
/* High,Width: 要缩放显示的高度, 宽度 */
MVVGA VOID WINAPI Disp_DrawZoom( HANDLE hShow, int Top, int Left, int High, int Width );
/*******************************************************************************************/
/* 描述 : 得到显示部件的显示表面的地址, 一般用Draw显示时, 在显示之前需要用户自己象该空*/
/* 间填充显示数据, 用该函数得到显示表面的地址然后用Disp_HelpDrawFill来填充它 */
/* hShow : 显示部件句柄 */
/* pLength : 调用返回时返回显示表面缓冲区的长度 */
/* bShow : 希望得到Draw方式还是Show方式的显示表面缓冲区                */
/* 返回值 : 返回显示表面缓冲区指针 */
MVVGA PVOID WINAPI Disp_HelpBuffer( HANDLE hShow, PULONG pLength, BOOL bShow );
/*******************************************************************************************/
/* 描述 : 帮助函数, 帮助象显示表面缓冲区填充要显示的数据,内部实际为memcpy */
/* hShow : 显示句柄 */
/* pImage : 显示内容 */
MVVGA VOID WINAPI Disp_HelpDrawFill( HANDLE hShow, PVOID pImage );
/*******************************************************************************************/
// 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体的颜色    */
// hShow : 显示句柄 */
// R/G/B : R分量/G分量/B分量 */
MVVGA VOID WINAPI Disp_HelpDrawTextColor( HANDLE hShow, UCHAR R, UCHAR G, UCHAR B );
/*******************************************************************************************/
/* 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体格式, 该函数 */
/* 被调用时将弹出Windows字体选择对话框                    */
/* hShow : 显示句柄 */
MVVGA VOID WINAPI Disp_HelpDrawTextFormat( HANDLE hShow );
/*******************************************************************************************/
/* 描述 : 帮助函数, 在使用Draw时可以叠加点/线/弧/圆/字串,用该帮助函数设置画线的宽度/ */
/* 样式和颜色                                  */
/* hShow : 显示句柄 */
/* Style : 画笔风格 */
/* Width : 画笔宽度 */
/* R/G/B : R分量/G分量/B分量 */
MVVGA VOID WINAPI Disp_HelpDrawPen( HANDLE hShow, PEN_STYLE Style, int Width, UCHAR R,
UCHAR G, UCHAR B );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 文 件 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建文件部件,可创建任意多个.用来将图像存为Raw/JPG/BMP文件         */
/* FileName : 包含路径的文件名字串                            */
/* High,Width: 要存图像的高和宽 */
/* nColor : 要存图像的像素位宽32/24/16/8                   */
/* bFlip : 存储时是否上下翻转,注意Windows中BMP图像在显示和存放时是上下颠倒的     */
/* bColor  : 存储为JPG文件时是否将颜色去掉                        */
/* Quality : 存储为JPG文件时的压缩质量1- 100                      */
/* 返回值 : 返回创建的文件部件句柄 */
MVVGA HANDLE WINAPI File_Create( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor,
BOOL bFlip, BOOL bColor, ULONG Quality );
MVVGA VOID WINAPI File_Destroy( HANDLE hFile ); // 释放创建的文件部件
/*******************************************************************************************/
/* 描述 : 写为Raw/Bmp/Jpg文件                             */
/* hFile : 文件部件句柄 */
/* pData   : 要存图像的缓冲区指针 */
/* nImage : pData中存在几幅图像                           */
MVVGA VOID WINAPI File_WriteRaw( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为文件Raw
MVVGA VOID WINAPI File_WriteBmp( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Bmp文件
MVVGA VOID WINAPI File_WriteJpg( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Jpg文件
MVVGA VOID WINAPI VGA_ToBmp( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip );
MVVGA VOID WINAPI VGA_ToJpeg( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip, BOOL bColor, ULONG Quality );
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// MVVGA AVI 文 件 部 件 ////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建AVI文件部件,可选择压缩或不压缩,可创建任意多个.可将创建的监控部件句柄 */
/* 用Cap_SetPropery(hCap,DEV_AVI, (ULONG)hAvi)来嵌入到设备中, 强烈不建议这样做 */
/* 但如果你能保证AVIStream_Write占用的时间小于设备桢回调的时间(要压缩, 且CPU够)*/
/* 强大,或用Raid双速系统)用迁入的方法将是首选的方法 */
/* bUpDown : 存储时是否上下翻转                             */
/* High,Width: 要存图像的高和宽 */
/* nColor : 要存图像的像素位宽32/24/16/8                   */
/* 返回值 : 返回创建的文件部件句柄 */
MVVGA HANDLE WINAPI AVIStream_Create( BOOL bUpDown, ULONG High, ULONG Width, ULONG nColor );
// 注意: 在调用AVIStream_Destroy之前为保险要用Cap_SetPropery( hCap, DEV_AVI, NULL );
MVVGA VOID WINAPI AVIStream_Destroy( HANDLE hAvi ); // 释放创建的文件部件
/*******************************************************************************************/
/* 描述 : 开始写AVI文件,在这之后的每一次对AVIStream_Write的调用都将向AVI文件中写入一 */
/* 桢图像                            */
/* hAvi : Avi文件部件句柄                            */
/* FileName : 包含路径的文件名字串                            */
/* dwRate : 写Avi文件的桢速率                           */
/* 返回值 : TRUE成功; FALSE失败 */
MVVGA BOOL WINAPI AVIStream_StartAviStream( HANDLE hAvi, char* FileName, ULONG dwRate );
MVVGA VOID WINAPI AVIStream_StopAviStream( HANDLE hAvi ); // 停止写AVI文件
/*******************************************************************************************/
/* 描述 : 开始写AVI文件之前可以用该函数选择是否使用压缩器,选择的压缩器是今后默认的, */
/* 直到用该函数又进行其它的选择.                      */
/* hAvi : Avi文件部件句柄                            */
MVVGA VOID WINAPI AVIStream_Select( HANDLE hAvi );
/*******************************************************************************************/
/* 描述 : 写AVI文件的主工作函数,它将你按照之前设置的方式工作,每调一次写入一桢图像  */
/* 如果你在创建hAvi之后将hAvi嵌入到MVVGA设备部件中则你不需调用该函数      */
/* hAvi : Avi文件部件句柄                            */
/* pData : 图像数据指针                              */
MVVGA BOOL WINAPI AVIStream_Write( HANDLE hAvi, PUCHAR pData );
/////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// MVVGA 很 少 使 用 的 文 件 部 件 //////////////////////////////
/*******************************************************************************************/
MVVGA HANDLE WINAPI RawStream_Create();
MVVGA VOID WINAPI RawStream_Destroy( HANDLE hRaw );
MVVGA VOID WINAPI RawStream_Stop( HANDLE hRaw );
MVVGA BOOL WINAPI RawStream_New( HANDLE hRaw, ULONG High, ULONG Width, ULONG nColor,
char* FileName );
MVVGA ULONG WINAPI RawStream_Open( HANDLE hRaw, PULONG High, PULONG Width, PULONG nColor,
char* FileName );
MVVGA ULONG WINAPI RawStream_Read( HANDLE hRaw, ULONG ImageIndex, PUCHAR pData );
MVVGA VOID WINAPI RawStream_Write( HANDLE hRaw, PUCHAR pData );
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// MVVGA 缩 放 部 件 //////////////////////////////////////
/*******************************************************************************************/
/* 描述 : 创建MVVGA的缩放部件. 可以创建任意个该部件, 可进行按照不同的缩放质量缩放   */
/* nColor : 图像的像素位宽                 */
/* High,Width: 图像原始的高度宽度               */
/* DecsHigh : 图像被缩放后高度                */
/* DecsWidth : 图像被缩放后宽度                */
/* Quality : 缩放的质量,有四级显示质量: {0, 1, 2, 3} */
/* 返回值 : 返回创建的缩放部件句柄 */
MVVGA HANDLE WINAPI Stretch_Create( ULONG nColor, ULONG High, ULONG Width, ULONG DecsHigh,
ULONG DecsWidth, ULONG Quality );
MVVGA VOID WINAPI Stretch_Destroy( HANDLE hStretch ); // 释放创建的缩放部件
/*******************************************************************************************/
/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */
/* hStretch : 缩放部件句柄                             */
/* pIn   : 输入图像缓冲区指针               */
/* pOut  : 输出图像缓冲区指针               */
MVVGA VOID WINAPI Stretch_Half( HANDLE hStretch, PUCHAR pIn, PUCHAR pOut );
/*******************************************************************************************/
/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */
/* hStretch : 缩放部件句柄                             */
/* pIn   : 输入图像缓冲区指针               */
/* 返回值 : 返回被缩放的图像缓冲区指针  */
MVVGA PVOID WINAPI Stretch_Do( HANDLE hStretch, PUCHAR pIn );
//目前支持RGB24和RGB32
MVVGA VOID WINAPI Rotate_Hflip(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang90(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang180(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
MVVGA VOID WINAPI Rotate_Ang270(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width);
#endif //__MVVGA_H__