From b26d5826ee0167c17cd1e4e2c81be0fa00329d25 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Wed, 26 Jun 2013 17:01:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E6=B7=BB=E5=8A=A0SV4000E=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=8D=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 19 + .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 28 + .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 10 + .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 8 +- .../UsbUtil/Usb_Util.vcxproj.filters | 6 + .../UsbUtility/UsbUtil/Videocard_SV4000E.cpp | 558 ++++++++++++++++++ .../UsbUtility/UsbUtil/Videocard_SV4000E.h | 58 ++ .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 12 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 2355712 -> 2355712 bytes .../Msi/Hsi/Videocard/SV4000E/DXMediaCap.h | 524 ++++++++++++++++ .../Msi/Hsi/Videocard/SV4000E/SV4000E.h | 17 + .../Msi/Hsi/Videocard/SV4000E/dataAcq.h | 307 ++++++++++ .../Msi/Hsi/Videocard/SV4000E/datastru.h | 90 +++ 13 files changed, 1633 insertions(+), 4 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV4000E.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/SV4000E.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/datastru.h 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 9d9e935c41699b473a86f5fbc0d033c25199858d..1b9fbf089e3d152b496646e6ea809f568175db63 100644 GIT binary patch delta 16989 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 delta 10713 zcmb6<3s{t8y8rwA|BM464g?b-(SRdf0vs*^lF0yr;boPS)D-2SU@8K^ct;z|&~;gw z{EXKNDG;HVYbfTJc^O=`EX_r;)>BsGnq8hfKG>mc*X^w5{r+LVZo7Lvo_GG+cYE)b z5Bv3J!A{URMS(aTraa(Vw*ScF%CZX}OOj+?)wV{7V9H+jA-leyUfsKhe+NNFpd9SiP4UrZ#v*>0@r9C21#nMw%rc&W)BUZ*8v1Gq(aFi z<w8;(H+zFZKMnX^n?sG zY+MTyu^|t1EJxzL>$YN1mb@A5g%Ant{L|>uXzFI$(d7UmHJPp8WwBZw8FL;k@cf>0UQf{U3kmOo=vU5m@G`Fe!u&yc@eYP9fVcR8 zhjctP+0vB2xXWh}mi!rv{A#ie4)dxw#4GPXF!lc(P11_(_d_FQeZzFT`;3;}K22}G z#(X1t5xXAH{LWrF<#uMiv|;H_5kh}Y@n zIKdkPCkRdwoFX_);39aJKwVXrG2$_CbAev`k)V^{BEcns_XsW%yif1}!Ji1O5d0Ux zhXfxHTqXFJ;1hyR3AzYABlxHD$$zl547(O7CQTp_qLV1s#$BKL_7R*UB@K9Jbpu{o zt}NtD3xnE%CcWbA1wt+d6Q~Nnd$K!qR(cY$-K!FhWxG{EGlSlB^S>)YdHw7h=Ko#W z?b%vjOKH}IX8dOXc;mql;LW^&pUT+{CwTs@7x?bxP~ur3jjZK|>hp<_(U6Mm^WnFu zIBJsUi;$H)@L1cOc~-?s3ZXZ_1n$*s1vPM=jZ~;uvJxzkq9q}clL?yfxyKcbzR!S` zw=UE}4L-R@c?w;z;6n;u%l#I;#G7x2a7WdAe!D1`TZ_iw^=q(&+g~*Cye|}PDN^uo zlzap&Az*-ec~z?uUGo(acPvp@vV`rIAc;2LOl#H977O|KH6vgZzqolcpHe*=jWa;u zolh8GABHVgp67Xs12pqVICqk8Zo2%Oiq1&$#1N>6X%%AIcxby_ z_O|Q=1L^hso=?2T)~TCDPiC5|mj}yz7&bl0CUNi8{;&}b1+!&5?|J~*zhVmeMB-UX zTd^z$0yM=m?wHumYwmAzfag`Va@$um==zie5n-M|I0tKa%UXXlHIN~2eXhmMzeA`- z(6tfYoyk`6^U(&p?tr4E^$ZXDLK-1*TH-tHA3~ELaw)bhf>pj zzLf&ECwW7?51iqrf1AqnC&uw{TlM@*V;x*0sUGVdR_l`aR`VKcn5~RJ7XvMAagdP2 z6TJL|+BySh<>gXE+Z_(tdkdvlO&p1vh%9pvv^jlo*]R`(t{n~!|rxTYRfe}r+8J2VA;Eum) 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 + +#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