📄 mystream.cpp
字号:
//---------------------------------------------------------------------------
//图象卡相关函数
#ifndef _MSC_VER
#include <windows.h>
#else
#include <stdafx.h>
#endif
#include "MyStream.h"
#include "DSStream.h"
//初始化动态库
static int InitImagerDLL(void);
//获取动态库中的函数
static FARPROC GetImagerDLLProc(LPCSTR lpProcName);
//设置卡的属性
static int SetOneCardParam(int iCardID);
//初始化图像卡
static int InitOneCard(HWND hParent,HWND hImage,int nCardID);
//获取标题
static char *GetImagerTitle(void);
static HMODULE hImagerDll=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;
//初始化动态库
int InitImagerDLL(void)
{
hImagerDll = LoadLibrary("DSStream.dll");
return((int)hImagerDll);
}
//获取动态库中的函数
FARPROC GetImagerDLLProc(LPCSTR lpProcName)
{
int rc;
FARPROC p;
char szBuf[100];
if(hImagerDll==NULL)return(NULL);
p = GetProcAddress(hImagerDll,lpProcName);
if(p==NULL)
{
rc = GetLastError();
wsprintf(szBuf,"Failed to load %s.\r\n Error No is %d.",lpProcName,rc);
MessageBox(NULL,szBuf,GetImagerTitle(),
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
return(p);
}
//初始化图像卡
int InitOneCard(HWND hParent,HWND hImage,int nCardID)
{
int rc,nCardNumber;
RECT rt;
void *pFun;
//此.DLL库函数调用成功返回值为0
rc=TRUE;
if(rc){
pFun = GetImagerDLLProc("DSStream_Initialize");
if(pFun != NULL)
rc=!((tdDSStream_Initialize)pFun)();//成功返回为0
else rc=FALSE;
}
if(rc){
pFun = GetImagerDLLProc("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=GetImagerDLLProc("DSStream_ConnectDevice");
if(pFun!=NULL)
rc=!((tdDSStream_ConnectDevice)pFun)(nCardID,FALSE,hImage);
else rc=FALSE;
}
if(rc){ // DSStream_SetMessageDrain(nImagerID,hWnd);
pFun=GetImagerDLLProc("DSStream_SetMessageDrain");
if(pFun!=NULL)
rc=!((tdDSStream_SetMessageDrain)pFun)(nCardID,hParent);
else rc=FALSE;
}
if(rc){ // DSStream_SetNotifyWindow(nImagerID,hWnd,UM_IMAGER);
pFun=GetImagerDLLProc("DSStream_SetNotifyWindow");
if(pFun!=NULL)
rc=!((tdDSStream_SetNotifyWindow)pFun)(nCardID,hParent,UM_IMAGER);
else rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_SetWindowPos");
if(pFun!=NULL){
DSStream_SetWindowPos=(tdDSStream_SetWindowPos)pFun;
GetClientRect(hImage,&rt);
rc=!DSStream_SetWindowPos(nCardID,rt);
}
else rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_GetCurrentDib");
DSStream_GetCurrentDib = (tdDSStream_GetCurrentDib)pFun;
if(pFun==NULL)rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_WhatInPinRouteToOutPin");
DSStream_WhatInPinRouteToOutPin = (tdDSStream_WhatInPinRouteToOutPin)pFun;
if(pFun==NULL)rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_RouteInPinToOutPin");
DSStream_RouteInPinToOutPin = (tdDSStream_RouteInPinToOutPin)pFun;
if(pFun==NULL)rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_GetStreamStatus");
DSStream_GetStreamStatus = (tdDSStream_GetStreamStatus)pFun;
if(pFun==NULL)rc=FALSE;
}
if(rc){
pFun=GetImagerDLLProc("DSStream_SetStreamStatus");
DSStream_SetStreamStatus = (tdDSStream_SetStreamStatus)pFun;
if(pFun==NULL)rc=FALSE;
}
hWndImage=hImage;
return(rc);
}
//设置卡的属性
int SetOneCardParam(int iCardID)
{
void *pFun;
int rc,n;
BOOL bConnectOk;
VIDEOSTREAMINFO Vsi;
VIDEOPROPERTYRANGE Vpr;
tdDSStream_SetVideoPropertyValue DSStream_SetVideoPropertyValue;
tdDSStream_GetVideoPropertyValue DSStream_GetVideoPropertyValue;
tdDSStream_GetVideoInfo DSStream_GetVideoInfo;
tdDSStream_DisconnectPin DSStream_DisconnectPin;
tdDSStream_SetVideoInfo DSStream_SetVideoInfo;
tdDSStream_ConnectPin DSStream_ConnectPin ;
rc=TRUE;
if(rc){
pFun=GetImagerDLLProc("DSStream_IsConnected");
if(pFun!=NULL){
rc = !((tdDSStream_IsConnected)pFun)(iCardID, &bConnectOk);
if(!bConnectOk)rc=FALSE;
}
else rc=FALSE;
}
if(rc){ //设置视频制式
pFun=GetImagerDLLProc("DSStream_SetVideoStandard");
if(pFun!=NULL)
rc=!((tdDSStream_SetVideoStandard)pFun)(iCardID, VideoStandard_PAL_B);
else rc=FALSE;
}
if(rc){//设置视频源
pFun=GetImagerDLLProc("DSStream_RouteInPinToOutPin");
if(pFun!=NULL)
((tdDSStream_RouteInPinToOutPin)pFun)(iCardID,1, 0);
else rc=FALSE;
}
if(rc){//设置视频属性:亮度、对比度、色度、饱和度
pFun=GetImagerDLLProc("DSStream_SetVideoPropertyValue");
if(pFun!=NULL){
DSStream_SetVideoPropertyValue=(tdDSStream_SetVideoPropertyValue)pFun;
pFun=GetImagerDLLProc("DSStream_GetVideoPropertyValue");
}
if(pFun!=NULL)
DSStream_GetVideoPropertyValue=(tdDSStream_GetVideoPropertyValue)pFun;
else rc=FALSE;
}
if(rc){//设置视频属性:亮度、对比度、色度、饱和度
DSStream_GetVideoPropertyValue(iCardID, VideoProperty_Brightness, &Vpr);
n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
DSStream_SetVideoPropertyValue(iCardID, VideoProperty_Brightness, n);
DSStream_GetVideoPropertyValue(iCardID, VideoProperty_Contrast, &Vpr);
n = (Vpr.lMax-Vpr.lMin)/2+Vpr.lMin;
DSStream_SetVideoPropertyValue(iCardID, VideoProperty_Contrast, n);
DSStream_SetVideoPropertyValue(iCardID, VideoProperty_Hue, 0);
DSStream_SetVideoPropertyValue(iCardID, VideoProperty_Saturation,0);
}
if(rc){//设置视频格式:视频格式、宽、高
pFun=GetImagerDLLProc("DSStream_GetVideoInfo");
if(pFun!=NULL){
DSStream_GetVideoInfo=(tdDSStream_GetVideoInfo)pFun;
pFun=GetImagerDLLProc("DSStream_SetVideoInfo");
DSStream_SetVideoInfo=(tdDSStream_SetVideoInfo)pFun;
}
if(pFun!=NULL){
pFun=GetImagerDLLProc("DSStream_ConnectPin");
DSStream_ConnectPin=(tdDSStream_ConnectPin)pFun;
}
if(pFun!=NULL){
pFun=GetImagerDLLProc("DSStream_DisconnectPin");
DSStream_DisconnectPin=(tdDSStream_DisconnectPin)pFun;
}
if(pFun==NULL)rc=FALSE;
}
if(rc){//设置视频格式:视频格式、宽、高
rc=!DSStream_GetVideoInfo(iCardID, &Vsi, PREVIEW);
Vsi.subtype = VideoSubType_RGB24;
Vsi.bmiHeader.biWidth = 352;
Vsi.bmiHeader.biHeight= 288;
DSStream_DisconnectPin(iCardID, PREVIEW);
rc=!DSStream_SetVideoInfo(iCardID, Vsi, PREVIEW);
DSStream_ConnectPin(iCardID, PREVIEW);
}
return(rc);
}
//获取标题
char *GetImagerTitle(void)
{
static char pszTitle[]="图像检测";
return(pszTitle);
}
//获取当前图像
void *SDK2000_GetCurrentDib(void)
{
long nSize;
void * pszBuf;
nSize=0; pszBuf=NULL;
if(DSStream_GetCurrentDib!=NULL)
{
DSStream_GetCurrentDib(nImagerID,NULL,&nSize);
pszBuf=(void *)GlobalAlloc(GPTR,nSize);
if(pszBuf!=NULL)
DSStream_GetCurrentDib(nImagerID,(BYTE *)pszBuf,&nSize);
}
return(pszBuf);
}
//释放一个图像
void SDK2000_FreeOneDib(void *pszBuf)
{
if(pszBuf!=NULL) GlobalFree(pszBuf);
}
//继续图像流
int SDK2000_ContinueStream(void)
{
int rc;
RECT rt;
rc=-1;
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nImagerID,&rc);
if(DSStream_SetStreamStatus!=NULL){
GetClientRect(hWndImage,&rt);
DSStream_SetWindowPos(nImagerID,rt);
DSStream_SetStreamStatus(nImagerID,RUN);
}
return(rc);
}
//停止图像流
int SDK2000_StopStream(void)
{
int rc;
RECT rt;
rc=-1;
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nImagerID,&rc);
if(DSStream_SetStreamStatus!=NULL){
ZeroMemory(&rt,sizeof(rt));
DSStream_SetStreamStatus(nImagerID,STOP);
DSStream_SetWindowPos(nImagerID,rt);
}
return(rc);
}
//暂停图像流
int SDK2000_PauseStream(void)
{
int rc;
rc=-1;
if(DSStream_GetStreamStatus!=NULL)
DSStream_GetStreamStatus(nImagerID,&rc);
if(DSStream_SetStreamStatus!=NULL)
DSStream_SetStreamStatus(nImagerID,PAUSE);
return(rc);
}
//设置视频源(1:AV1 2:AV2 0:SVHS)
int SDK2000_SetInPin(int nID)
{
int n;
n = SDK2000_GetInPin();
if(DSStream_RouteInPinToOutPin!=NULL){
nCardID=SDK2000_GetCurCard();
DSStream_RouteInPinToOutPin(nCardID,nChan,0);
}
return(n);
}
//获取视频源
int SDK2000_GetInPin(void)
{
long n;
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)nImageID=(BYTE)nID;
return(n);
}
//释放图像卡
void SDK2000_UnInitImager(void)
{
void *pFun;
if(hImagerDll==NULL)return;
//DSStream_DisconnectDevice(nImagerID);
pFun=GetImagerDLLProc("DSStream_DisconnectDevice");
if(pFun!=NULL)
((tdDSStream_DisconnectDevice)pFun)(nImagerID);
// DSStream_Uninitialize();
pFun=GetImagerDLLProc("DSStream_Uninitialize");
if(pFun!=NULL)((tdDSStream_Uninitialize)pFun)();
FreeLibrary(hImagerDll);
hImagerDll=NULL;
DSStream_GetCurrentDib=NULL;
DSStream_GetStreamStatus=NULL;
DSStream_SetStreamStatus=NULL;
DSStream_SetWindowPos=NULL;
DSStream_RouteInPinToOutPin=NULL;
DSStream_WhatInPinRouteToOutPin=NULL;
}
//初始化图象卡
int SDK2000_InitImager(HWND hParent,HWND hImage)
{
static char pszText[]="图像卡初始化失败!\n\n可能图像卡不存在或已损坏!";
int rc;
if(hImagerDll!=NULL)return(TRUE);
rc = InitImagerDLL();
if(rc)rc=InitOneCard(hParent,hImage,nImagerID);
if(rc)rc=SetOneCardParam(nImagerID);
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 + -