diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log
index 22188a1..0204813 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log
@@ -1462,3 +1462,22 @@ Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
+Construct Cso7_Proto.
+Init:Open device succeed .
+_start_machine
+Exit: Exit_SO7Usb
+Destruct Cso7_Proto.
+Construct Cso7_Proto.
+Init:Open device succeed .
+_start_machine
+Exit: Exit_SO7Usb
+Destruct Cso7_Proto.
+Construct Cso7_Proto.
+Init:Open device succeed .
+_start_machine
+Exit: Exit_SO7Usb
+Destruct Cso7_Proto.
+Construct Cso7_Proto.
+Destruct Cso7_Proto.
+Construct Cso7_Proto.
+Destruct Cso7_Proto.
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc
index 9af9bca..060de3b 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc
@@ -721,6 +721,25 @@ BEGIN
LTEXT "Standard",IDC_STATIC,523,68,30,8
END
+IDD_SO7_VIDEOCARD_SV4000E DIALOGEX 0, 0, 488, 316
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "SV4000E视频卡"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "开始",IDOK,372,298,50,14
+ PUSHBUTTON "退出",IDCANCEL,435,298,50,14
+ CONTROL "彩色图像",IDC_RADIO_SV4000E_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,435,49,48,10
+ CONTROL "黑白图像",IDC_RADIO_SV4000E_GRAY,"Button",BS_AUTORADIOBUTTON,435,67,48,10
+ CONTROL "垂直镜像",IDC_SV4000E_CHECK_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,435,93,48,10
+ PUSHBUTTON "保存图片",IDC_BUTTON_SV4000E_SAVEFILE,435,117,50,14
+ GROUPBOX "通道选择",IDC_STATIC,438,145,43,87
+ CONTROL "",IDC_STATIC_SV4000E_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,225,300,71,12
+ CONTROL "1",IDC_RADIO_SV4000E_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,451,162,20,10
+ CONTROL "2",IDC_RADIO_SV4000E_CHANNEL2,"Button",BS_AUTORADIOBUTTON,451,179,20,10
+ CONTROL "3",IDC_RADIO_SV4000E_CHANNEL3,"Button",BS_AUTORADIOBUTTON,451,196,20,10
+ CONTROL "4",IDC_RADIO_SV4000E_CHANNEL4,"Button",BS_AUTORADIOBUTTON,451,213,20,10
+END
+
/////////////////////////////////////////////////////////////////////////////
//
@@ -827,6 +846,15 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 247
END
+
+ IDD_SO7_VIDEOCARD_SV4000E, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 485
+ VERTGUIDE, 435
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 312
+ END
END
#endif // APSTUDIO_INVOKED
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp
index ed9a716..f543444 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp
@@ -19,6 +19,8 @@
#include "Videocard_SV2000E.h"
#include "..\..\..\Videocard\TC4000\Sa7134Capture.h"
#include "Videocard_TC4000.h"
+#include "..\..\..\Videocard\SV4000E\SV4000E.h"
+#include "Videocard_SV4000E.h"
#endif //_RELEASE_FULL_VERSION
#include "SO7_UtilDlg.h"
@@ -221,6 +223,14 @@ void CSo7_Option::OnBnClickedOk()
delete pVideocard_SV2000E;
#endif //_RELEASE_FULL_VERSION
}
+ else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->GetCheck())
+ {
+#ifdef _RELEASE_FULL_VERSION
+ CVideocard_SV4000E* pVideocard_SV4000E=new CVideocard_SV4000E();
+ pVideocard_SV4000E->DoModal();
+ delete pVideocard_SV4000E;
+#endif //_RELEASE_FULL_VERSION
+ }
else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->GetCheck())
{
#ifdef _RELEASE_FULL_VERSION
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj
index 1a93509..77c270e 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj
@@ -43,7 +43,7 @@
Application
- Dynamic
+ Static
Unicode
true
@@ -142,7 +142,7 @@
$(IntDir);%(AdditionalIncludeDirectories)
- ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;%(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;%(AdditionalDependencies)
true
Windows
MachineX86
@@ -185,7 +185,7 @@
true
WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_FULL_VERSION;%(PreprocessorDefinitions)
false
- MultiThreadedDLL
+ MultiThreaded
true
Use
Level4
@@ -351,6 +351,7 @@
+
@@ -407,6 +408,7 @@
+
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters
index 3b180de..098bad4 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters
@@ -133,6 +133,9 @@
Sources Files
+
+ Sources Files
+
@@ -297,6 +300,9 @@
Header Files
+
+ Header Files
+
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.cpp
new file mode 100644
index 0000000..a8f618c
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.cpp
@@ -0,0 +1,558 @@
+// Videocard_SV4000E.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "resource.h"
+#include "VideoCardDefine.h"
+#include "..\..\..\Videocard\SV4000E\SV4000E.h"
+#include "Videocard_SV4000E.h "
+#include "afxdialogex.h"
+
+static const long BrightnessDefault = 5000;
+static const long ContrastDefault = 5000;
+static const long SaturationDefault = 5000;
+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_SV4000E dialog
+
+IMPLEMENT_DYNAMIC(CVideocard_SV4000E, CDialog)
+
+ CVideocard_SV4000E::CVideocard_SV4000E(CWnd* pParent /*=NULL*/)
+ : CDialog(CVideocard_SV4000E::IDD, pParent)
+{
+ m_dwCard=0;
+ m_nDevNum=0;
+ m_bMirror=FALSE;
+ m_ConvertColorType=YUY2TORGB;
+ m_bSaveFile=FALSE;
+}
+
+CVideocard_SV4000E::~CVideocard_SV4000E()
+{
+}
+
+void CVideocard_SV4000E::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CVideocard_SV4000E, CDialog)
+ ON_WM_TIMER()
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_RGB, &CVideocard_SV4000E::OnBnClickedRadioSV4000ERgb)
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_GRAY, &CVideocard_SV4000E::OnBnClickedRadioSV4000EGray)
+ ON_BN_CLICKED(IDC_SV4000E_CHECK_MIRROR_VERTICALLY, &CVideocard_SV4000E::OnBnClickedCheckSV4000EMirrorVertically)
+ ON_BN_CLICKED(IDC_BUTTON_SV4000E_SAVEFILE, &CVideocard_SV4000E::OnBnClickedButtonSV4000ESavefile)
+ ON_BN_CLICKED(IDCANCEL, &CVideocard_SV4000E::OnBnClickedCancel)
+ ON_BN_CLICKED(IDOK, &CVideocard_SV4000E::OnBnClickedOk)
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_CHANNEL1, &CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel1)
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_CHANNEL2, &CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel2)
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_CHANNEL3, &CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel3)
+ ON_BN_CLICKED(IDC_RADIO_SV4000E_CHANNEL4, &CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel4)
+END_MESSAGE_MAP()
+
+
+// CVideocard_SV4000E message handlers
+//====================================
+BOOL CVideocard_SV4000E::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);
+ }
+ }
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_RGB))->SetCheck(TRUE);
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_GRAY))->SetCheck(FALSE);
+ bInitSdk=123;
+ m_Channel=0;
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_CHANNEL1))->SetCheck(TRUE);
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_CHANNEL2))->SetCheck(FALSE);
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_CHANNEL3))->SetCheck(FALSE);
+ ((CButton *)GetDlgItem(IDC_RADIO_SV4000E_CHANNEL4))->SetCheck(FALSE);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedOk()
+{
+ for (int i=0;i<4;i++)
+ {
+ m_device[i]=NULL;
+ }
+ LoadVideocard();
+ SetTimer(1,50,NULL);
+ GetDlgItem(IDOK)->EnableWindow(false);
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedCancel()
+{
+ KillTimer(1);
+ UnloadVideocard();
+ CDialog::OnCancel();
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000ERgb()
+{
+ m_ConvertColorType=YUY2TORGB;
+}
+
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000EGray()
+{
+ m_ConvertColorType=YUY2TOGRAY;
+}
+
+//===================================================
+void CVideocard_SV4000E::OnBnClickedCheckSV4000EMirrorVertically()
+{
+ if (((CButton *)GetDlgItem(IDC_SV4000E_CHECK_MIRROR_VERTICALLY))->GetCheck())
+ {
+ m_bMirror=TRUE;
+ }
+ else
+ {
+ m_bMirror=FALSE;
+ }
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedButtonSV4000ESavefile()
+{
+ CString CTmpString;
+ CString PathName;
+ CString path_and_fileName;
+
+ PathName=_T("SV4000E.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();
+ }
+ delete fdlg;
+ m_bSaveFile=TRUE;
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel1()
+{
+#ifdef _RELEASE_FULL_VERSION
+ m_status=DXStopRawVideoCallback(m_device[m_Channel]);
+ m_Channel=0;
+ m_status=DXSetRawVideoCallback(m_device[m_Channel], SV4000EAPrcVidCapCallBack, this);
+ m_status=DXStartRawVideoCallback(m_device[m_Channel],SV4000EAPrcVidCapCallBack,this);
+ //m_status=DXStartPreview(m_device[m_Channel], GetDlgItem(IDC_STATIC_SV4000E_PICTURE)->GetSafeHwnd(), NULL, 0);
+
+
+#endif //_RELEASE_FULL_VERSION
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel2()
+{
+#ifdef _RELEASE_FULL_VERSION
+ m_status=DXStopRawVideoCallback(m_device[m_Channel]);
+ m_Channel=1;
+ m_status=DXSetRawVideoCallback(m_device[m_Channel], SV4000EAPrcVidCapCallBack, this);
+ m_status=DXStartRawVideoCallback(m_device[m_Channel],SV4000EAPrcVidCapCallBack,this);
+ //m_status=DXStartPreview(m_device[m_Channel], GetDlgItem(IDC_STATIC_SV4000E_PICTURE)->GetSafeHwnd(), NULL, 0);
+
+#endif //_RELEASE_FULL_VERSION
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel3()
+{
+#ifdef _RELEASE_FULL_VERSION
+ m_status=DXStopRawVideoCallback(m_device[m_Channel]);
+ m_Channel=2;
+ m_status=DXSetRawVideoCallback(m_device[m_Channel], SV4000EAPrcVidCapCallBack, this);
+ m_status=DXStartRawVideoCallback(m_device[m_Channel],SV4000EAPrcVidCapCallBack,this);
+ //m_status=DXStartPreview(m_device[m_Channel], GetDlgItem(IDC_STATIC_SV4000E_PICTURE)->GetSafeHwnd(), NULL, 0);
+
+#endif //_RELEASE_FULL_VERSION
+}
+//===================================================
+void CVideocard_SV4000E::OnBnClickedRadioSV4000EChannel4()
+{
+#ifdef _RELEASE_FULL_VERSION
+ m_status=DXStopRawVideoCallback(m_device[m_Channel]);
+ m_Channel=3;
+ m_status=DXSetRawVideoCallback(m_device[m_Channel], SV4000EAPrcVidCapCallBack, this);
+ m_status=DXStartRawVideoCallback(m_device[m_Channel],SV4000EAPrcVidCapCallBack,this);
+ //m_status=DXStartPreview(m_device[m_Channel], GetDlgItem(IDC_STATIC_SV4000E_PICTURE)->GetSafeHwnd(), NULL, 0);
+#endif //_RELEASE_FULL_VERSION
+}
+
+//=======================================
+BOOL CVideocard_SV4000E::LoadVideocard()
+{
+ BOOL rStatus(FALSE);
+#ifdef _RELEASE_FULL_VERSION
+ bInitSdk=DXInitialize();
+
+ m_nDevNum = DXGetDeviceCount();
+
+ if ((bInitSdk==0)&&(m_nDevNum>=4))
+ {
+ for (int i=0;i255)Color_R=255;
+ if(Color_R<0)Color_R=0;
+ pDstData[x+2]=static_cast(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(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(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_SV4000E::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_SV4000E::OnPaint()
+{
+ CDC* dc= this->GetDC();
+ int nMode;
+ CDC* pMemDC = new CDC;
+ CBitmap pBitBmp;
+ CBitmap pBitBmpNav;
+
+ ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror);
+
+ BYTE *pData = (BYTE *)m_ImageBuffer.ScanLine;
+ BITMAPINFO bmpInfo;
+ bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ bmpInfo.bmiHeader.biWidth = 640;
+ bmpInfo.bmiHeader.biHeight = 480;
+ 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;
+
+ pBitBmp.CreateCompatibleBitmap(dc,640,480);
+ SetDIBits(dc->m_hDC,pBitBmp,0,480,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);
+ }
+ CBitmap* pOldBitmap = pMemDC->SelectObject(&pBitBmp);
+ nMode = pMemDC->SetBkMode(TRANSPARENT);
+
+ dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY);
+
+ pMemDC->SetBkMode(nMode);
+ pMemDC->SelectObject(pOldBitmap);
+ ReleaseDC(pMemDC);
+ delete pMemDC;
+ ReleaseDC(dc);
+}
+//================================================================================================
+void CVideocard_SV4000E::OnTimer(UINT_PTR nIDEvent)
+{
+ switch(nIDEvent)
+ {
+ case 1:
+ {
+ OnPaint();
+ break;
+ }
+ }
+
+ CDialog::OnTimer(nIDEvent);
+}
+
+//==================================SV4000E=====================================
+unsigned CALLBACK SV4000EAPrcVidCapCallBack(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,(BYTE*)buffer,width*height*2);
+ return 0;
+}
+//==================================SV4000E=====================================
+unsigned CALLBACK SV4000EAPrcVidCapCallBackNav(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;
+};
+
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.h
new file mode 100644
index 0000000..3ca620a
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.h
@@ -0,0 +1,58 @@
+#pragma once
+
+// CVideocard_SV4000E dialog
+unsigned CALLBACK SV4000EAPrcVidCapCallBack(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void* context);
+unsigned CALLBACK SV4000EAPrcVidCapCallBackNav(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void* context);
+
+class CVideocard_SV4000E : public CDialog
+{
+ DECLARE_DYNAMIC(CVideocard_SV4000E)
+
+public:
+ CVideocard_SV4000E(CWnd* pParent = NULL); // standard constructor
+ virtual ~CVideocard_SV4000E();
+
+ // Dialog Data
+ enum { IDD = IDD_SO7_VIDEOCARD_SV4000E };
+
+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()
+public:
+ afx_msg void OnBnClickedRadioSV4000ERgb();
+ afx_msg void OnBnClickedRadioSV4000EGray();
+ afx_msg void OnBnClickedCheckSV4000EMirrorVertically();
+ afx_msg void OnBnClickedButtonSV4000ESavefile();
+ afx_msg void OnBnClickedCancel();
+ afx_msg void OnBnClickedOk();
+protected:
+ unsigned int m_status;
+ device_handle m_device[4];
+
+ int m_nDevNum;
+ DWORD m_dwCard;
+ Image_Buffer m_ImageBuffer;
+ Image_Buffer m_ImageBuffer_Nav;
+ ConvertColorType m_ConvertColorType;
+ BOOL m_bMirror;
+ BOOL m_bSaveFile;
+ CString m_SaveFile;
+ unsigned int m_Channel;
+ unsigned int bInitSdk;
+public:
+ BOOL LoadVideocard();
+ BOOL UnloadVideocard();
+ 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);
+
+ afx_msg void OnBnClickedRadioSV4000EChannel1();
+ afx_msg void OnBnClickedRadioSV4000EChannel2();
+ afx_msg void OnBnClickedRadioSV4000EChannel3();
+ afx_msg void OnBnClickedRadioSV4000EChannel4();
+
+};
\ No newline at end of file
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h
index 2b55c23..52f7fb9 100644
--- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h
@@ -45,6 +45,7 @@
#define IDD_SO7_VIDEOCARD_TC4000 166
#define IDD_SO7_UTIL_MANUAL_MACHINE 167
#define IDD_SO7_UTIL_VERIFICATION_ALGORITHM 168
+#define IDD_SO7_VIDEOCARD_SV4000E 169
#define IDC_BUTTON_INIT_MVUSB 1001
#define IDC_BUTTON_START_MACHINE 1002
#define IDC_BUTTON_START_POLL_58 1004
@@ -758,7 +759,16 @@
#define IDC_RADIO_SPEED_GEAR5 1666
#define IDC_EDIT_SO7_READ_IO_STATUS_ADDRESS 1667
#define IDC_RADIO_VIDEOCARD_SV4000E 1668
+#define IDC_RADIO_SV4000E_RGB 1669
#define IDC_MFCBUTTON_STATUS_IN_PORT6 1670
+#define IDC_RADIO_SV4000E_GRAY 1670
+#define IDC_RADIO_SV4000E_CHANNEL1 1671
+#define IDC_RADIO_SV4000E_CHANNEL2 1672
+#define IDC_RADIO_SV4000E_CHANNEL3 1673
+#define IDC_RADIO_SV4000E_CHANNEL4 1674
+#define IDC_SV4000E_CHECK_MIRROR_VERTICALLY 1675
+#define IDC_BUTTON_SV4000E_SAVEFILE 1676
+#define IDC_STATIC_SV4000E_PICTURE 1677
// Next default values for new objects
//
@@ -766,7 +776,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 169
#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1669
+#define _APS_NEXT_CONTROL_VALUE 1678
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo
index 9d9e935..1b9fbf0 100644
Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.h
new file mode 100644
index 0000000..03a69b6
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.h
@@ -0,0 +1,524 @@
+
+#ifndef __DXMEDIACAP_2011__
+#define __DXMEDIACAP_2011__
+
+#include "datastru.h"
+
+/*
+描述:
+ 初始化 SDK ,必须在调用其他函数之前调用
+参数:
+ 无
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXInitialize();
+void __stdcall DXUninitialize();
+
+/*
+描述:
+ 获取初始化成功的设备总数
+参数:
+ 无
+返回值:
+ 匹配的设备总数
+// */
+unsigned __stdcall DXGetDeviceCount();
+
+/*
+描述:
+ 枚举音视频编码过滤器
+参数:
+ devTags - [out] 用于返回获得的过滤器的 TAG 的数组
+ num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnumVideoCodecs(PDEVICE_TAG devTags, unsigned& num);
+unsigned __stdcall DXEnumAudioCodecs(PDEVICE_TAG devTags, unsigned& num);
+
+/*
+描述:
+ 枚举视频捕捉设备过滤器
+参数:
+ devTags - [out] 用于返回获得的过滤器的 TAG 的数组
+ num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnumVideoDevices(PDEVICE_TAG devTags, unsigned& num);
+
+/*
+描述:
+ 枚举音频捕捉和渲染设备过滤器
+参数:
+ devTags - [out] 用于返回获得的过滤器的 TAG 的数组
+ num - [in/out] 指定 devTags 数组的元素个数,返回时则是实际上获得的过滤器的 TAG 的个数
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnumAudioDevices(PDEVICE_TAG devTags, unsigned& num);
+unsigned __stdcall DXEnumSoundDevices(PDEVICE_TAG devTags, unsigned& num);
+
+/*
+描述:
+ 占用采集设备
+参数:
+ idx - [in] 设备在枚举过程中的序号
+ err - [out] 返回错误代码
+返回值:
+ 成功则返回设备句柄,否则返回 NULL。可通过 err 获得错误代码
+// */
+device_handle __stdcall DXOpenDevice(unsigned idx, unsigned* err = NULL);
+void __stdcall DXCloseDevice(device_handle device);
+
+/*
+描述:
+ 将属性页显示在制定窗体的指定区域
+参数:
+ device - [in] 设备句柄
+ attrID - [in] 属性类别
+ hOwner - [in] 父窗体的句柄。NULL - 隐藏属性页
+ rect - [in] 在父窗体上显示的区域。NULL - 表示父窗体的整个客户区
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXShowDeviceAttr(device_handle device, unsigned attrID, HWND hOwner, RECT* rect);
+
+// unsigned __stdcall DXShowDeviceAttr(device_handle device, HWND XBar, HWND Capture, HWND stream, HWND codec);
+
+/*
+描述:
+ 获取视频属性
+参数:
+ device - [in] 设备句柄
+ standard - [out] 视频制式
+ colorspace - [out] 色彩空间
+ width - [out] 视频宽度(单位:像素)
+ height - [out] 视频高度(单位:像素)
+ framerate - [out] 视频帧率(单位:帧/秒)
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetVideoPara(device_handle device, unsigned& standard, unsigned& colorspace,
+ unsigned& width, unsigned& height, float& framerate);
+
+/*
+描述:
+ 设置视频属性
+参数:
+ device - [in] 设备句柄
+ standard - [in] 视频制式
+ colorspace - [in] 色彩空间
+ width - [in] 视频宽度(单位:像素)
+ height - [in] 视频高度(单位:像素)
+ framerate - [in] 视频帧率(单位:帧/秒)
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetVideoPara(device_handle device, unsigned standard, unsigned colorspace,
+ unsigned width, unsigned height, float framerate);
+
+/*
+描述:
+ 获取显示属性的取值范围、默认值、步长、标志
+参数:
+ device - [in] 设备句柄
+ paraType - [in] 参数类型
+ 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度
+ pMin - [in] 最小值
+ pMax - [in] 最大值
+ pSteppingDelta - [in] 步长
+ pDefault - [in] 默认值
+ pCapsFlags - [in] 自动/手动标志
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetDisplayParaRange(device_handle device, unsigned paraType,
+ long* pMin, long* pMax, long* pSteppingDelta, long* pDefault, long* pCapsFlags);
+
+/*
+描述:
+ 获取显示属性
+参数:
+ device - [in] 设备句柄
+ paraType - [in] 参数类型
+ 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度
+ value - [out] 参数值
+ flag - [out] 自动/手动标志
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetDisplayPara(device_handle device, unsigned paraType, long& value, long& flags);
+
+/*
+描述:
+ 设置显示属性
+参数:
+ device - [in] 设备句柄
+ paraType - [in] 参数类型
+ 0 - 亮度,1 - 对比度,2 - 饱和度,3 - 色度,4 - 锐度
+ value - [in] 参数值
+ flag - [in] 自动/手动标志
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetDisplayPara(device_handle device, unsigned paraType, long value, long flags);
+
+/*
+描述:
+ 获取视频编码器属性
+参数:
+ device - [in] 设备句柄
+ mode - [out] 编码模式
+ bitrate - [out] 码率(单位:kbps)
+ keyinterval - [out] 关键帧间隔
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetVideoCodecPara(device_handle device, unsigned& mode, unsigned& bitrate, unsigned& keyinterval);
+
+/*
+描述:
+ 设置视频编码器属性
+参数:
+ device - [in] 设备句柄
+ mode - [in] 编码模式
+ bitrate - [in] 码率(单位:kbps)
+ keyinterval - [in] 关键帧间隔
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetVideoCodecPara(device_handle device, unsigned mode, unsigned bitrate, unsigned keyinterval);
+
+/*
+描述:
+ 获取设备当前选择的端子和包含的输入端子
+参数:
+ device - [in] 设备句柄
+ curSource - [out] 当前选择的输入端子的序号。NULL - 忽略
+ sources - [out] 包含的输入端子的类型数组(比如:S-VIDEO、DV...)。NULL - 忽略
+ num - [in/out] 端子数量。NULL - 忽略,此时尽可获取当前选择的输入端子
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetVideoSources(device_handle device, unsigned* curSource, unsigned* sources = NULL, unsigned char* num = NULL);
+
+/*
+描述:
+ 设置设备的输入端子
+参数:
+ device - [in] 设备句柄
+ source - [in] 当前选择的输入端子的序号
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetVideoSource(device_handle device, unsigned source);
+
+/*
+描述:
+ 获取设备的信号状态
+参数:
+ device - [in] 设备句柄
+ signal - [out] 信号状态。0 - 信号丢失;1 - 信号正常
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetSignalPresent(device_handle device, unsigned& signal);
+
+/*
+描述:
+ 控制设备运行状态
+参数:
+ device - [in] 设备句柄
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXDeviceRun(device_handle device);
+unsigned __stdcall DXDevicePause(device_handle device);
+unsigned __stdcall DXDeviceStop(device_handle device);
+
+/*
+描述:
+ 获取设备运行状态
+参数:
+ device - [in] 设备句柄
+ state - [out] 设备运行状态
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetDeviceState(device_handle device, unsigned& state);
+
+/*
+描述:
+ 将视频显示在指定窗体的矩形区域内
+参数:
+ device - [in] 设备句柄
+ hWnd - [in] 显示视频的窗体句柄。NULL - 停止显示视频
+ rect - [in] 视频显示的矩形区域。NULL - 占用整个窗体
+ vmrtype - [in] 该保留参数。(准备做指定显示过滤器只用)
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStartPreview(device_handle device, HWND hWnd, PRECT rect, unsigned vmrtype);
+
+/*
+描述:
+ 停止预览
+参数:
+ device - [in] 设备句柄
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStopPreview(device_handle device);
+
+/*
+描述:
+ 冻结视频显示部分
+参数:
+ device - [in] 设备句柄
+ bFreeze - [in] TRUE - 冻结显示,FALSE - 解冻显示
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXFreezePreview(device_handle device, BOOL bFreeze);
+
+/*
+描述:
+ 检查设备是否包含音频
+参数:
+ device - [in] 设备句柄
+ bHasAudio - [out] TRUE - 包含音频,FALSE - 没有音频
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXHasAudio(device_handle device, BOOL& bHasAudio);
+
+/*
+描述:
+ 为设备分配音频采集设备。
+ 注意:!!! 只能在 state_stopped 状态下调用
+参数:
+ device - [in] 设备句柄
+ bSound - [in] TRUE - 开始声音输出,FALSE - 终止声音输出
+ audioDevice - [in] 音频采集设备。NULL - 使用设备自带的音频
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetAudioDevice(device_handle device, PDEVICE_TAG audioDevice = NULL);
+
+/*
+描述:
+ 开始或者终止声音输出。
+ 注意:!!! 只有开始了声音输出,静音操作、音量调节、录像时包含音频等操作才能成功
+参数:
+ device - [in] 设备句柄
+ bSound - [in] TRUE - 开始声音输出,FALSE - 终止声音输出
+ soundDevice - [in] 声音输出设备。NULL - 使用默认设备
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetSoundOut(device_handle device, BOOL bSound/*, PDEVICE_TAG soundDevice = NULL*/);
+
+/*
+描述:
+ 静音操作
+参数:
+ device - [in] 设备句柄
+ bMute - [in] TRUE - 静音,FALSE - 非静音
+返回值:
+ 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出
+// */
+unsigned __stdcall DXEnableMute(device_handle device, BOOL bMute);
+
+/*
+描述:
+ 设置音量和平衡
+参数:
+ device - [in] 设备句柄
+ volume - [in] 音量大小,取值范围(0, 100]
+ balance - [in] 左右平衡,取值范围[-10, 10],负数表示左声道强,正数表述右声道强,0 - 左右平衡
+ 注意:!!! NULL - 表示不设置平衡
+返回值:
+ 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出
+// */
+unsigned __stdcall DXSetAudioVolume(device_handle device, unsigned char volume, unsigned char* const balance = NULL);
+
+/*
+描述:
+ 获取音量和平衡
+参数:
+ device - [in] 设备句柄
+ volume - [out] 音量大小,取值范围(0, 100]
+ 注意:!!! NULL - 表示不获取音量
+ balance - [out] 左右平衡,取值范围[-10, 10],负数表示左声道强,正数表述右声道强,0 - 左右平衡
+ 注意:!!! NULL - 表示不获取平衡
+返回值:
+ 0 - 成功;失败则返回错误代码,一般失败原因是因为没有开始声音输出
+// */
+unsigned __stdcall DXGetAudioVolume(device_handle device, unsigned char* volume, unsigned char* balance = NULL);
+
+/*
+描述:
+ 更换视频编码器
+ 注意:!!! 当正在进行录像时,则操作失败
+参数:
+ device - [in] 设备句柄
+ videoEncoder - [in] 视频编码器的 TAG,NULL - 表示不用编码,即录像时采用原始数据
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetVideoCodec(device_handle device, PDEVICE_TAG videoEncoder);
+
+/*
+描述:
+ 更换音频编码器
+ 注意:!!! 当正在进行录像时,则操作失败
+参数:
+ device - [in] 设备句柄
+ audioEncoder - [in] 音频编码器的 TAG,NULL - 表示不用编码,即录像时采用原始数据
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetAudioCodec(device_handle device, PDEVICE_TAG audioEncoder);
+
+/*
+描述:
+ 开始录像
+参数:
+ device - [in] 设备句柄
+ szFileName - [in] 指定录像文件全路径。NULL - 停止录像
+ saveAudio - [in] 是否将音频也录制到文件中
+ timeSize - [in] 限定录像文件的时间长度(单位:秒),NULL - 不限制
+ dataSize - [in] 限定录像文件的数据长度(单位:字节),NULL - 不限制
+ saveNotify - [in] 录像事件通知接口指针
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStartCapture(device_handle device, TCHAR* szFileName, BOOL saveAudio,
+ unsigned* timeSize = NULL, unsigned* dataSize = NULL,
+ ISaveNotify* saveNotify = NULL);
+
+/*
+描述:
+ 停止录像
+参数:
+ device - [in] 设备句柄
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStopCapture(device_handle device);
+
+/*
+描述:
+ 冻结录像部分(包括视频和音频)
+ 注意:!!! 适用于需要多段时间录像的情况
+参数:
+ device - [in] 设备句柄
+ bFreeze - [in] TRUE - 冻结录像,FALSE - 解冻录像
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXFreezeCaputre(device_handle device, BOOL bFreeze);
+
+/*
+描述:
+ 插入视频效果(针对原始视频数据)
+ 参数:
+ device - [in] 设备句柄
+ ispTask - [in] 新插入的视频效果的接口指针
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXAttachIspTask(device_handle device, IispTask* ispTask);
+unsigned __stdcall DXDetachIspTask(device_handle device, IispTask* ispTask);
+
+/*
+描述:
+ 编码视频数据回调的函数原型
+参数:
+ fourcc - [in] 获取的编码数据的编码器的FOURCC
+ buffer - [in] 缓冲区指针
+ bufferSize - [out] 获取的编码数据的缓冲区大小(单位:字节)
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+typedef unsigned (__stdcall *fnEncVideoCallback)(unsigned fourcc, unsigned char* buffer, unsigned bufferSize, void* context);
+
+/*
+描述:
+ 设置编码视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetEncVideoCallback(device_handle device, fnEncVideoCallback fn, void* context);
+
+/*
+描述:
+ 开始编码视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStartEncVideoCallback(device_handle device, fnEncVideoCallback fn, void* context);
+
+/*
+描述:
+ 停止编码视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStopEncVideoCallback(device_handle device);
+
+/*
+描述:
+ 使能去隔行功能
+参数:
+ device - [in] 设备句柄
+ deinterlace - [in] 去隔行的算法类型
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnableDeinterlace(device_handle device, unsigned deinterlace);
+
+/*
+描述:
+ 使能去噪功能
+参数:
+ device - [in] 设备句柄
+ denoise - [in] 去噪的算法类型
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnableDenoise(device_handle device, unsigned denoise);
+
+/*
+描述:
+ 使能伪彩功能
+参数:
+ device - [in] 设备句柄
+ szPColorTemplateFile - [in] 伪彩的模板文件。NULL - 停止使用伪彩
+ pcolorDepth - [in] 伪彩的色深。此参数保留。
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnablePColor(device_handle device, TCHAR* szPColorTemplateFile, unsigned pcolorDepth);
+
+unsigned __stdcall DXConvertYUVtoRGB(device_handle device, void* pYUVBuf,
+ void* pRGBBuf,
+ long lImgWidth,
+ long lImgHeight,
+ BOOL bInverted,
+ BOOL bInvertColor);
+
+#endif // __DXMEDIACAP_2011__
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/SV4000E.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/SV4000E.h
new file mode 100644
index 0000000..24f75f6
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/SV4000E.h
@@ -0,0 +1,17 @@
+
+#ifndef __SV4000E_H_2011__
+#define __SV4000E_H_2011__
+
+#include "..\SV2000E\dataAcq.h"
+//#include "..\SV2000E\DXMediaCap.h"
+//#include "..\SV2000E\datastru.h"
+
+// __DXMEDIACAP_2011__
+unsigned __stdcall DXConvertYUVtoRGB(device_handle device, void* pYUVBuf,
+ void* pRGBBuf,
+ long lImgWidth,
+ long lImgHeight,
+ BOOL bInverted,
+ BOOL bInvertColor);
+
+#endif
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.h
new file mode 100644
index 0000000..857c65a
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.h
@@ -0,0 +1,307 @@
+
+#ifndef __DATA_ACQ_2011__
+#define __DATA_ACQ_2011__
+
+#include
+
+#include "DXMediaCap.h"
+
+/*
+描述:
+ 获取指定区域的原始视频帧数据到缓冲区
+参数:
+ device - [in] 设备句柄
+ buffer - [in] 指向缓冲区。NULL - 后续参数返回相应的数据,比如,所需缓冲区的大小、颜色空间、视频尺寸
+ bufferLen - [in] 指向的缓冲区的大小(单位:字节)
+ gotBufferLen - [out] 实际获取的数据的大小(单位:字节)
+ colorSpace - [out] 获取的原始数据的色彩空间类型
+ width - [out] 获取的原始数据的像素宽度
+ height - [out] 获取的原始数据的像素高度
+ bytesWidth - [out] 获取的原始数据的字节宽度
+ rect - [in] 指定获取数据的区域
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXGetFrameBuffer(device_handle device, unsigned char* buffer, unsigned bufferLen, unsigned* gotBufferLen = NULL,
+ unsigned* colorSpace = NULL, unsigned* width = NULL, unsigned* height = NULL, unsigned* bytesWidth = NULL,
+ PRECT rect = NULL);
+
+/*
+描述:
+ 保存原始视频帧数据到 BMP文件
+参数:
+ szFileName - [in] BMP文件路径
+ buffer - [in] 指向缓冲区
+ bufferLen - [in] 指向的缓冲区的大小(单位:字节)
+ colorSpace - [in] 获取的原始数据的色彩空间类型
+ width - [in] 获取的原始数据的像素宽度
+ height - [in] 获取的原始数据的像素高度
+ bytesWidth - [in] 获取的原始数据的字节宽度
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSaveBMPFile(TCHAR* szFileName, unsigned char* buffer, unsigned bufferLen,
+ unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth);
+
+/*
+描述:
+ 保存原始视频帧数据到 JPG文件
+参数:
+ szFileName - [in] JPG文件路径
+ buffer - [in] 指向缓冲区
+ bufferLen - [in] 指向的缓冲区的大小(单位:字节)
+ colorSpace - [in] 获取的原始数据的色彩空间类型
+ width - [in] 获取的原始数据的像素宽度
+ height - [in] 获取的原始数据的像素高度
+ bytesWidth - [in] 获取的原始数据的字节宽度
+ quality - [in] JPG文件的画面质量
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSaveJPGFile(TCHAR* szFileName, unsigned char* buffer, unsigned bufferLen,
+ unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, unsigned quality);
+
+/*
+描述:
+ 直接抓取原始视频帧数据到 BMP文件
+参数:
+ device - [in] 设备句柄
+ szFileName - [in] BMP文件路径
+ rect - [in] 指定获取数据的区域
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSnapToBMPFile(device_handle device, TCHAR* szFileName, PRECT rect = NULL);
+
+/*
+描述:
+ 直接抓取原始视频帧数据到 BMP文件
+参数:
+ device - [in] 设备句柄
+ szFileName - [in] BMP文件路径
+ buffer - [in] 指向缓冲区
+ bufferLen - [in] 指向的缓冲区的大小(单位:字节)
+ colorSpace - [in] 获取的原始数据的色彩空间类型
+ width - [in] 获取的原始数据的像素宽度
+ height - [in] 获取的原始数据的像素高度
+ bytesWidth - [in] 获取的原始数据的字节宽度
+ rect - [in] 指定获取数据的区域
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSnapToJPGFile(device_handle device, TCHAR* szFileName, unsigned quality, PRECT rect = NULL);
+
+/*
+描述:
+ 原始视频数据回调的函数原型
+参数:
+ buffer - [in] 缓冲区指针
+ colorSpace - [in] 获取的原始数据的色彩空间类型
+ width - [in] 获取的原始数据的像素宽度
+ height - [in] 获取的原始数据的像素高度
+ bytesWidth - [in] 获取的原始数据的字节宽度
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+typedef unsigned (__stdcall *fnRawVideoCallback)(unsigned char* buffer, unsigned colorSpace,
+ unsigned width, unsigned height, unsigned bytesWidth, void* context);
+
+/*
+描述:
+ 设置原始视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetRawVideoCallback(device_handle device, fnRawVideoCallback fn, void* context);
+
+/*
+描述:
+ 开始原始视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStartRawVideoCallback(device_handle device, fnRawVideoCallback fn, void* context);
+
+/*
+描述:
+ 停止原始视频数据回调的函数
+参数:
+ device - [in] 设备句柄
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXStopRawVideoCallback(device_handle device);
+
+/*
+描述:
+ 原始音频数据回调的函数原型
+参数:
+ buffer - [in] 缓冲区指针
+ bufferLen - [in] 指向的缓冲区的大小(单位:字节)
+ wfx - [in] 音频数据格式
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+typedef unsigned (__stdcall *fnRawAudioCallback)(unsigned char* buffer, unsigned bufferLen, WAVEFORMATEX* wfx, void* context);
+
+/*
+描述:
+ 设置原始音频数据回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetRawAudioCallback(device_handle device, fnRawAudioCallback fn, void* context);
+
+
+/*
+描述:
+ 原始视频数据叠加回调的函数原型
+参数:
+ hdc - [in] 视频叠加的HDC
+ width - [in] 能够叠加的宽度(单位:像素)
+ height - [in] 能够叠加的高度(单位:像素)
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+typedef unsigned (__stdcall *fnOSDCallback)(HDC hdc, unsigned width, unsigned height, void* context);
+
+/*
+描述:
+ 设置视频数据叠加回调的函数
+参数:
+ device - [in] 设备句柄
+ fn - [in] 回调函数指针,NULL - 停止回调
+ context - [in] 回调函数的上下文
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetOSDCallback(device_handle device, fnOSDCallback fn, void* context);
+
+enum {osd_text, osd_time, osd_image};
+#define MAX_OSD_TEXT_LEN 16
+/*
+描述:
+ 设置原始视频帧数据的OSD
+参数:
+ device - [in] 设备句柄
+ osdType - [in] OSD的类型
+ x - [in] 指定OSD的左上角横坐标
+ x - [in] 指定OSD的左上角竖坐标
+ osdData - [in] OSD的数据,NULL - 取消OSD
+ osdType = osd_text,最大MAX_OSD_TEXT_LEN个字符
+ osdType = osd_time,指定时间格式
+ osdType = osd_image,指定图片路径
+ pointSize - [in] 字体大小
+ faceName - [in] 字体名称
+ color - [in] 针对 osd_text, osd_time 两种类型的OSD的前景色,默认值:白色(RGB(255, 255, 255))
+ bgcolor - [in] OSD的背景色,默认值:黑色(RGB(0, 0, 0))
+ opaque - [in] OSD的背景色是否不透明,默认值:是。当选择透明时,则以 bgcolor 进行透明处理
+ alpha - [in] alpha运算值。取值[0 ~ 255],0 - OSD透明,255 - OSD不透明,中间值 - OSD与视频数据进行alpha运算
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXSetOSD(device_handle device, unsigned osdType, int x, int y, char* osdData, int pointSize = 120, LPCTSTR faceName = TEXT("Arial"),
+ COLORREF color = RGB(255, 255, 255), COLORREF bgcolor = RGB(0, 0, 0), BOOL opaque = TRUE,
+ unsigned char alpha = 255);
+
+/*
+描述:
+ 启用/禁用原始视频帧数据的OSD
+参数:
+ device - [in] 设备句柄
+ osdType - [in] OSD的类型
+ enable - [in] TRUE - 启用OSD,FALSE - 禁用OSD
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXEnableOSD(device_handle device, unsigned osdType, BOOL enable);
+
+/*
+描述:
+ 由图片缓冲创建预览对象
+参数:
+ imgbuffer - [in] 图片缓冲区
+ buffersize - [in] 图片缓冲区的大小(单位:字节)
+ colorspace - [in] 图片缓冲的数据的色彩空间
+ width - [in] 图片的宽度(单位:像素)
+ height - [in] 图片的高度(单位:像素)
+ err - [out] 返回错误代码
+返回值:
+ 成功则返回图像句柄,否则返回 NULL。可通过 err 获得错误代码
+// */
+image_handle __stdcall DXCreateBufferImg(unsigned char* imgbuffer, unsigned buffersize,
+ unsigned colorspace, unsigned width, unsigned height,
+ unsigned* err);
+
+/*
+描述:
+ 由图片文件创建预览对象
+参数:
+ szImgFile - [in] 图片文件全路径
+ err - [out] 返回错误代码
+返回值:
+ 成功则返回图像句柄,否则返回 NULL。可通过 err 获得错误代码
+// */
+image_handle __stdcall DXCreateFileImg(TCHAR* szImgFile, unsigned* err);
+
+/*
+描述:
+ 由更新预览对象到指定的窗体的相应区域
+参数:
+ img - [in] 预览对象
+ hPrevWnd - [in] 预览的窗体
+ rect - [in] 预览的区域
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXUpdateImg(image_handle img, HWND hPrevWnd, RECT* rect);
+
+/*
+描述:
+ 删除预览对象
+参数:
+ img - [in] 预览对象
+返回值:
+ 无
+// */
+void __stdcall DXDestroyImg(image_handle img);
+
+/*
+描述:
+ 翻转视频
+参数:
+ device - [in] 设备句柄
+ flip - [in] TRUE - 启用翻转,FALSE - 禁用翻转
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXFlipVideo(device_handle device, BOOL flip);
+
+/*
+描述:
+ 镜像视频
+参数:
+ device - [in] 设备句柄
+ mirror - [in] TRUE - 启用镜像,FALSE - 禁用镜像
+返回值:
+ 0 - 成功;失败则返回错误代码
+// */
+unsigned __stdcall DXMirrorVideo(device_handle device, BOOL mirror);
+
+
+#endif // __DATA_ACQ_2011__
\ No newline at end of file
diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/datastru.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/datastru.h
new file mode 100644
index 0000000..c470ac4
--- /dev/null
+++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/datastru.h
@@ -0,0 +1,90 @@
+/********************************************************************
+ created: 2011/08/05
+ created: 5:8:2011 9:31
+ filename: .\libDXCap\datastru.h
+ file path: .\libDXCap
+ file base: datastru
+ file ext: h
+ author: 34973832@qq.com
+
+ purpose:
+*********************************************************************/
+
+#ifndef __LIBDXCAP_DATASTRU__20110805__
+#define __LIBDXCAP_DATASTRU__20110805__
+
+typedef void* device_handle;
+typedef void* image_handle;
+
+// 运行状态
+enum {state_stopped, state_paused, state_running};
+
+// 去隔行模式
+enum {di_none, di_weave, di_blend, di_bob};
+
+// 降噪模式
+enum {dn_none, dn_b};
+
+// 视频颜色空间
+enum {cs_rgb24, cs_rgb32, cs_yuy2};
+
+// 设备属性页
+enum {attr_video, attr_audio, attr_encode};
+
+// 设备信息
+#define MAX_DEVICE_NAME 128
+typedef struct _device_tag
+{
+ unsigned idx; // 过滤器在枚举过程中的序号
+ TCHAR deviceName[MAX_DEVICE_NAME]; // 过滤器的名称
+} DEVICE_TAG, *PDEVICE_TAG;
+
+// 录像通知
+EXTERN_C const IID IID_ISaveNotify;
+/*
+// {BAE74021-AFEC-4336-8497-658ED4432F65}
+DEFINE_GUID(IID_ISaveNotify,
+ 0xbae74021, 0xafec, 0x4336, 0x84, 0x97, 0x65, 0x8e, 0xd4, 0x43, 0x2f, 0x65);
+ // */
+class ISaveNotify : public IUnknown// 录像的事件通知
+{
+public:
+ virtual HRESULT foo() = 0;
+};
+
+// isp接口
+//EXTERN_C const IID IID_IispTask;
+/*
+/// {BC7DE54C-F483-4768-9CBA-3228D81600CD}
+DEFINE_GUID(IID_IispTask,
+ 0xbc7de54c, 0xf483, 0x4768, 0x9c, 0xba, 0x32, 0x28, 0xd8, 0x16, 0x0, 0xcd);
+ // */
+
+//class IispTask : public IUnknown // 视频处理接口
+//{
+//public:
+// virtual HRESULT QueryAccept(/*AM_MEDIA_TYPE**/void* mt) = 0;
+
+// virtual HRESULT BeginIsp() = 0;
+// virtual HRESULT IspTask(/*IMediaSample**/void* pMS) = 0;
+// virtual HRESULT EndIsp() = 0;
+//};
+EXTERN_C const IID IID_IispTask;
+class IispTask : public IUnknown
+{
+public:
+ virtual /* [local][id] */ HRESULT STDMETHODCALLTYPE QueryAccept(
+ void *mt) = 0;
+
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE BeginIsp( void) = 0;
+
+ virtual /* [local][id] */ HRESULT STDMETHODCALLTYPE IspTask(
+ void *pMS) = 0;
+
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE EndIsp( void) = 0;
+
+};
+
+
+
+#endif // __LIBDXCAP_DATASTRU__20110805__
\ No newline at end of file