📄 sdk2000.cpp
字号:
//---------------------------------------------------------------------------
//图象卡相关函数
#ifndef _MSC_VER
#include <windows.h>
#else
#include <stdafx.h>
#endif
#include "SDK2000.h"
#include "DSStream.h"
//此.DLL库函数调用成功返回值为0
//初始化动态库
static int InitSDK2000DLL(void);
//获取动态库中的函数
static FARPROC GetOneProcOnDll(LPCSTR lpProcName);
//设置卡的属性
static int SetOneCardParam(void);
//初始化图像卡
static int InitOneCard(HWND hParent,HWND hImage);
//获取标题
static char *GetImagerTitle(void);
//获取函数过程
static int GetSomeProcess(void);
//复位一些函数
static void ResetSomeProcess(void);
static HMODULE hModuleDll=NULL;
static HWND hWndImage;
static tdDSStream_GetCurrentDib DSStream_GetCurrentDib=NULL;
static tdDSStream_GetStreamStatus DSStream_GetStreamStatus=NULL;
static tdDSStream_SetStreamStatus DSStream_SetStreamStatus=NULL;
static tdDSStream_SetWindowPos DSStream_SetWindowPos=NULL;
static tdDSStream_RouteInPinToOutPin DSStream_RouteInPinToOutPin;
static tdDSStream_WhatInPinRouteToOutPin DSStream_WhatInPinRouteToOutPin;
static tdDSStream_GetVideoInfo DSStream_GetVideoInfo;
static tdDSStream_SetVideoInfo DSStream_SetVideoInfo;
static tdDSStream_SetVideoPropertyValue DSStream_SetVideoPropertyValue;
static tdDSStream_GetVideoPropertyValue DSStream_GetVideoPropertyValue;
static tdDSStream_SetVideoStandard DSStream_SetVideoStandard;
static tdDSStream_ConnectPin DSStream_ConnectPin ;
static tdDSStream_IsConnected DSStream_IsConnected;
static tdDSStream_DisconnectPin DSStream_DisconnectPin;
//初始化动态库
int InitSDK2000DLL(void)
{
int rc;
if(hModuleDll!=NULL)return((int)hModuleDll);
hModuleDll = LoadLibrary("DSStream.dll");
if(hModuleDll){
rc=GetSomeProcess();
if(rc==FALSE){//获取函数失败
SDK2000_UnInit();
hModuleDll=NULL;
}
}
return((int)hModuleDll);
}
//获取函数过程
int GetSomeProcess(void)
{
void *pFun;
pFun=GetOneProcOnDll("DSStream_GetCurrentDib");
DSStream_GetCurrentDib = (tdDSStream_GetCurrentDib)pFun;
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_WhatInPinRouteToOutPin");
DSStream_WhatInPinRouteToOutPin = (tdDSStream_WhatInPinRouteToOutPin)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_RouteInPinToOutPin");
DSStream_RouteInPinToOutPin = (tdDSStream_RouteInPinToOutPin)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_GetStreamStatus");
DSStream_GetStreamStatus = (tdDSStream_GetStreamStatus)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_SetStreamStatus");
DSStream_SetStreamStatus = (tdDSStream_SetStreamStatus)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_SetWindowPos");
DSStream_SetWindowPos=(tdDSStream_SetWindowPos)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_IsConnected");
DSStream_IsConnected=(tdDSStream_IsConnected)pFun;
}
if(pFun!=NULL){ //设置视频制式
pFun=GetOneProcOnDll("DSStream_SetVideoStandard");
DSStream_SetVideoStandard =(tdDSStream_SetVideoStandard)pFun;
}
if(pFun!=NULL){//设置视频源
pFun=GetOneProcOnDll("DSStream_RouteInPinToOutPin");
DSStream_RouteInPinToOutPin = (tdDSStream_RouteInPinToOutPin)pFun;
}
if(pFun!=NULL){//设置视频属性:亮度、对比度、色度、饱和度
pFun=GetOneProcOnDll("DSStream_SetVideoPropertyValue");
DSStream_SetVideoPropertyValue=(tdDSStream_SetVideoPropertyValue)pFun;
}
if(pFun!=NULL){
pFun=GetOneProcOnDll("DSStream_GetVideoPropertyValue");
DSStream_GetVideoPropertyValue=(tdDSStream_GetVideoPropertyValue)pFun;
}
return((int)pFun);
}
//复位一些函数
void ResetSomeProcess(void)
{
DSStream_GetCurrentDib = NULL;
DSStream_WhatInPinRouteToOutPin = NULL;
DSStream_RouteInPinToOutPin = NULL;
DSStream_GetStreamStatus = NULL;
DSStream_SetStreamStatus = NULL;
DSStream_SetWindowPos=NULL;
DSStream_IsConnected=NULL;
DSStream_SetVideoStandard =NULL;
DSStream_RouteInPinToOutPin = NULL;
DSStream_SetVideoPropertyValue=NULL;
DSStream_GetVideoPropertyValue=NULL;
}
//获取动态库中的函数
FARPROC GetOneProcOnDll(LPCSTR lpProcName)
{
int rc;
FARPROC p;
char szBuf[100];
if(hModuleDll==NULL)return(NULL);
p = GetProcAddress(hModuleDll,lpProcName);
if(p==NULL){
rc = GetLastError();
wsprintf(szBuf,"不能导入函数 \"%s\"!\n 错误代码: %d.",lpProcName,rc);
MessageBox(NULL,szBuf,GetImagerTitle(),
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
return(p);
}
//初始化图像卡
int InitOneCard(HWND hParent,HWND hImage)
{
int rc;
int nCardID,nCardNumber;
RECT rt;
void *pFun;
rc=TRUE;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
hWndImage=hImage;
if(rc){
pFun = GetOneProcOnDll("DSStream_Initialize");
if(pFun != NULL)
rc=!((tdDSStream_Initialize)pFun)();//成功返回为0
else rc=FALSE;
}
if(rc){
pFun = GetOneProcOnDll("DSStream_GetCardNumber");
if(pFun != NULL){
rc = !((tdDSStream_GetCardNumber)pFun)(&nCardNumber);
if(nCardNumber<=0)rc=FALSE;
}
else rc=FALSE;
}
if(rc){ //rc=DSStream_ConnectDevice(nImagerID,FALSE,hWnd);
pFun=GetOneProcOnDll("DSStream_ConnectDevice");
if(pFun!=NULL)
rc=!((tdDSStream_ConnectDevice)pFun)(nCardID,FALSE,hImage);
else rc=FALSE;
}
if(rc){ // DSStream_SetMessageDrain(nImagerID,hWnd);
pFun=GetOneProcOnDll("DSStream_SetMessageDrain");
if(pFun!=NULL)
rc=!((tdDSStream_SetMessageDrain)pFun)(nCardID,hParent);
else rc=FALSE;
}
if(rc){ // DSStream_SetNotifyWindow(nImagerID,hWnd,UM_IMAGER);
pFun=GetOneProcOnDll("DSStream_SetNotifyWindow");
if(pFun!=NULL)
rc=!((tdDSStream_SetNotifyWindow)pFun)(nCardID,hParent,UM_IMAGER);
else rc=FALSE;
}
if(rc){
GetClientRect(hImage,&rt);
rc=!DSStream_SetWindowPos(nCardID,rt);
}
return(rc);
}
//设置卡的属性
int SetOneCardParam(void)
{
void *pFun;
int rc,n;
int nCardID;
BOOL bConnectOk;
VIDEOSTREAMINFO Vsi;
VIDEOPROPERTYRANGE Vpr;
rc=TRUE;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
if(rc){
rc = !DSStream_IsConnected(nCardID, &bConnectOk);
if(!bConnectOk)rc=FALSE;
}
if(rc) //设置视频制式
rc=!DSStream_SetVideoStandard(nCardID, VideoStandard_PAL_B);
if(rc)//设置视频源
rc=!DSStream_RouteInPinToOutPin(nCardID,1, 0);
if(rc){//设置视频属性:亮度、对比度、色度、饱和度
DSStream_GetVideoPropertyValue(nCardID, VideoProperty_Brightness, &Vpr);
n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Brightness, n);
DSStream_GetVideoPropertyValue(nCardID, VideoProperty_Contrast, &Vpr);
n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Contrast, n);
DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Hue, 0);
DSStream_SetVideoPropertyValue(nCardID, VideoProperty_Saturation,0);
}
if(rc){//设置视频格式:视频格式、宽、高
rc=!DSStream_GetVideoInfo(nCardID, &Vsi, PREVIEW);
Vsi.subtype = VideoSubType_RGB24;
Vsi.bmiHeader.biWidth = 352;
Vsi.bmiHeader.biHeight= 288;
DSStream_DisconnectPin(nCardID, PREVIEW);
rc=!DSStream_SetVideoInfo(nCardID, Vsi, PREVIEW);
DSStream_ConnectPin(nCardID, PREVIEW);
}
return(rc);
}
//获取标题
char *GetImagerTitle(void)
{
static char pszTitle[]="图像检测";
return(pszTitle);
}
//获取当前图像
void *SDK2000_GetCurrentDib(void)
{
int nCardID;
long nSize;
void * pszBuf;
nSize=0; pszBuf=NULL;
if(DSStream_GetCurrentDib!=NULL)
{
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
DSStream_GetCurrentDib(nCardID,NULL,&nSize);
pszBuf=(void *)GlobalAlloc(GPTR,nSize);
if(pszBuf!=NULL)
DSStream_GetCurrentDib(nCardID,(BYTE *)pszBuf,&nSize);
}
return(pszBuf);
}
//释放一个图像
void SDK2000_FreeOneDib(void *pszBuf)
{
if(pszBuf!=NULL) GlobalFree(pszBuf);
}
//继续图像流
int SDK2000_ContinueStream(void)
{
int nCardID;
int rc;
RECT rt;
rc=-1;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nCardID,&rc);
if(DSStream_SetStreamStatus!=NULL){
GetClientRect(hWndImage,&rt);
DSStream_SetWindowPos(nCardID,rt);
DSStream_SetStreamStatus(nCardID,RUN);
}
return(rc);
}
//停止图像流
int SDK2000_StopStream(void)
{
int rc;
int nCardID;
RECT rt;
rc=-1;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nCardID,&rc);
if(DSStream_SetStreamStatus!=NULL){
ZeroMemory(&rt,sizeof(rt));
DSStream_SetStreamStatus(nCardID,STOP);
DSStream_SetWindowPos(nCardID,rt);
}
return(rc);
}
//暂停图像流
int SDK2000_PauseStream(void)
{
int rc;
int nCardID;
rc=-1;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nCardID,&rc);
if(DSStream_SetStreamStatus!=NULL)
DSStream_SetStreamStatus(nCardID,PAUSE);
return(rc);
}
//设置视频源(1:AV1 2:AV2 0:SVHS)
int SDK2000_SetInPin(int nChan)
{
int n;
int nCardID;
n = SDK2000_GetInPin();
if(DSStream_RouteInPinToOutPin!=NULL){
nCardID=SDK2000_GetCurCard();
DSStream_RouteInPinToOutPin(nCardID,nChan,0);
}
return(n);
}
//获取视频源(1:AV1 2:AV2 0:SVHS)
int SDK2000_GetInPin(void)
{
long n;
int nCardID;
n=0;
if(DSStream_WhatInPinRouteToOutPin!=NULL){
nCardID=SDK2000_GetCurCard();
DSStream_WhatInPinRouteToOutPin(nCardID,0,&n);
}
return(n);
}
//获取设置当前图象卡
int SDK2000_GetSetCurCard(int nID)
{
static BYTE nImagerID=0;
int n;
n=nImagerID;
if(nID>=0)nImagerID=(BYTE)nID;
return(n);
}
//释放图像卡
void SDK2000_UnInit(void)
{
void *pFun;
int nCardID;
if(hModuleDll==NULL)return;
nCardID = SDK2000_GetCurCard();//获取设置当前图象卡
//DSStream_DisconnectDevice(nImagerID);
pFun=GetOneProcOnDll("DSStream_DisconnectDevice");
if(pFun!=NULL)
((tdDSStream_DisconnectDevice)pFun)(nCardID);
// DSStream_Uninitialize();
pFun=GetOneProcOnDll("DSStream_Uninitialize");
if(pFun!=NULL)((tdDSStream_Uninitialize)pFun)();
FreeLibrary(hModuleDll);
ResetSomeProcess();
hModuleDll=NULL;
}
//初始化图象卡
int SDK2000_Init(HWND hParent,HWND hImage)
{
static char pszText[]="图像卡初始化失败!\n\n可能图像卡不存在或已损坏!";
int rc;
if(hModuleDll!=NULL)return(TRUE);
rc = InitSDK2000DLL();
if(rc)rc=InitOneCard(hParent,hImage);
if(rc)rc=SetOneCardParam();
if(rc==FALSE){
MessageBeep(MB_ICONHAND);
MessageBox(hParent,pszText,GetImagerTitle(),
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
return(rc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -