⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mystream.cpp

📁 停车场用
💻 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 + -