新添加SV4000E视频卡。
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>Dynamic</UseOfMfc>
|
||||
<UseOfMfc>Static</UseOfMfc>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
@@ -142,7 +142,7 @@
|
||||
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>..\..\..\..\..\..\..\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)</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;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
@@ -185,7 +185,7 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_FULL_VERSION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
@@ -351,6 +351,7 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="Videocard_SDK3000.cpp" />
|
||||
<ClCompile Include="Videocard_SV2000E.cpp" />
|
||||
<ClCompile Include="Videocard_SV4000E.cpp" />
|
||||
<ClCompile Include="Videocard_TC4000.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -407,6 +408,7 @@
|
||||
<ClInclude Include="VideoCardDefine.h" />
|
||||
<ClInclude Include="Videocard_SDK3000.h" />
|
||||
<ClInclude Include="Videocard_SV2000E.h" />
|
||||
<ClInclude Include="Videocard_SV4000E.h" />
|
||||
<ClInclude Include="Videocard_TC4000.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -133,6 +133,9 @@
|
||||
<ClCompile Include="AboutDlg.cpp">
|
||||
<Filter>Sources Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Videocard_SV4000E.cpp">
|
||||
<Filter>Sources Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="CaptureDataDlg.h">
|
||||
@@ -297,6 +300,9 @@
|
||||
<ClInclude Include="AboutDlg.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Videocard_SV4000E.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="ReadMe.txt" />
|
||||
|
||||
@@ -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;i<m_nDevNum;i++)
|
||||
{
|
||||
OpenDevice(i,m_device[i]);
|
||||
}
|
||||
|
||||
m_status=DXSetRawVideoCallback(m_device[m_Channel], SV4000EAPrcVidCapCallBack, this);
|
||||
m_status=DXStartRawVideoCallback(m_device[m_Channel],SV4000EAPrcVidCapCallBack,this);
|
||||
|
||||
if((m_device[0]==NULL)||(m_device[2]==NULL))
|
||||
{
|
||||
::AfxMessageBox(_T("SV4000E卡打开设备失败!"));
|
||||
rStatus=FALSE;
|
||||
}
|
||||
rStatus=TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
::AfxMessageBox(_T("SV4000E卡初始化失败!"));
|
||||
rStatus=FALSE;
|
||||
}
|
||||
|
||||
#endif //_RELEASE_FULL_VERSION
|
||||
return rStatus;
|
||||
}
|
||||
//=======================================
|
||||
void CVideocard_SV4000E::OpenDevice(unsigned int _DevNo,device_handle &_OpenedDevice)
|
||||
{
|
||||
#ifdef _RELEASE_FULL_VERSION
|
||||
_OpenedDevice= DXOpenDevice(_DevNo, NULL);
|
||||
|
||||
unsigned standard(VideoStandard_PAL_D);
|
||||
unsigned colorspace(cs_yuy2);//cs_rgb24
|
||||
unsigned width(640);//640
|
||||
unsigned height(480);//480
|
||||
float framerate(25);
|
||||
m_status=DXSetVideoPara(_OpenedDevice,standard,colorspace,width,height,framerate);
|
||||
|
||||
DXDeviceRun(_OpenedDevice);
|
||||
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(_DevNo);
|
||||
UNREFERENCED_PARAMETER(_OpenedDevice);
|
||||
|
||||
#endif //_RELEASE_FULL_VERSION
|
||||
|
||||
};
|
||||
//=======================================
|
||||
void CVideocard_SV4000E::CloseDevice(device_handle _Device)
|
||||
{
|
||||
#ifdef _RELEASE_FULL_VERSION
|
||||
if (_Device)
|
||||
{
|
||||
DXStopPreview(_Device);
|
||||
m_status=DXDeviceStop(_Device);
|
||||
DXCloseDevice(_Device);
|
||||
}
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(_Device);
|
||||
#endif //_RELEASE_FULL_VERSION
|
||||
};
|
||||
//=======================================
|
||||
BOOL CVideocard_SV4000E::UnloadVideocard()
|
||||
{
|
||||
#ifdef _RELEASE_FULL_VERSION
|
||||
|
||||
m_status=DXStopRawVideoCallback(m_device[m_Channel]);
|
||||
for (int i=0;i<m_nDevNum;i++)
|
||||
{
|
||||
CloseDevice(m_device[i]);
|
||||
}
|
||||
DXUninitialize();
|
||||
#endif //_RELEASE_FULL_VERSION
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//================================================================
|
||||
void CVideocard_SV4000E::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<480;y++)
|
||||
{
|
||||
lCnt1=0;
|
||||
if(!_bMirror)
|
||||
pDstData=(BYTE*)_ImageBuffer.ScanLine[y];
|
||||
else
|
||||
pDstData=(BYTE*)_ImageBuffer.ScanLine[479-y];
|
||||
for(x=0;x<640*3;x+=3)
|
||||
{
|
||||
switch(_type)
|
||||
{
|
||||
case RGB24TORGB:
|
||||
{
|
||||
pDstData[x+2]=_pSrcData[y*640*3+x+2];
|
||||
pDstData[x+1]=_pSrcData[y*640*3+x+1];
|
||||
pDstData[x]=_pSrcData[y*640*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_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;
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
|
||||
};
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
@@ -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__
|
||||
@@ -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
|
||||
@@ -0,0 +1,307 @@
|
||||
|
||||
#ifndef __DATA_ACQ_2011__
|
||||
#define __DATA_ACQ_2011__
|
||||
|
||||
#include <mmreg.h>
|
||||
|
||||
#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__
|
||||
@@ -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__
|
||||
Reference in New Issue
Block a user