You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
483 lines
8.9 KiB
C++
483 lines
8.9 KiB
C++
#include "hdllcls.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "HCNetSDK.h"
|
|
#include "globalfun.h"
|
|
|
|
int setlogpara(NET_DVR_USER_LOGIN_INFO * ppara,char * pip,
|
|
unsigned short port,char * pusr,char * ppwd)
|
|
{
|
|
int ilen;
|
|
|
|
ilen = strlen(pip);
|
|
if(ilen >= NET_DVR_DEV_ADDRESS_MAX_LEN)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
ilen =strlen(pusr);
|
|
if(ilen >= NET_DVR_LOGIN_USERNAME_MAX_LEN)
|
|
{
|
|
return -2;
|
|
}
|
|
|
|
ilen =strlen(ppwd);
|
|
if(ilen >= NET_DVR_LOGIN_PASSWD_MAX_LEN)
|
|
{
|
|
return -3;
|
|
}
|
|
|
|
strcpy(ppara->sDeviceAddress,pip);
|
|
strcpy(ppara->sUserName,pusr);
|
|
strcpy(ppara->sPassword,ppwd);
|
|
|
|
ppara->wPort = port;
|
|
ppara->bUseAsynLogin =0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
hdllcls::hdllcls()
|
|
{
|
|
}
|
|
|
|
hdllcls::~hdllcls()
|
|
{
|
|
}
|
|
|
|
int hdllcls::initstr()
|
|
{
|
|
m_openflag =0;
|
|
m_usrid =-1;
|
|
m_realhd =-1;
|
|
m_format = IMAGE_YUV;
|
|
return 0;
|
|
}
|
|
|
|
void hdllcls::initcharpara()
|
|
{
|
|
m_datalen =0;
|
|
for(int i=0; i<8; i++)
|
|
{
|
|
memset((m_cdata[i]).buf,0,CHAR_MAXBUF);
|
|
(m_cdata[i]).isactive =0;
|
|
}
|
|
}
|
|
|
|
int hdllcls::devopen(char * pip, unsigned short port,char * pusr,char * ppwd)
|
|
{
|
|
BOOL bret;
|
|
int iret;
|
|
|
|
if( 0 == m_openflag)
|
|
{
|
|
bret = NET_DVR_Init();
|
|
if( ! bret)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
bret = NET_DVR_SetConnectTime(CONEECT_TIME, 1);
|
|
if( ! bret)
|
|
{
|
|
NET_DVR_Cleanup();
|
|
return -2;
|
|
}
|
|
|
|
bret = NET_DVR_SetReconnect(RECONNECT_TIME, true);
|
|
if( ! bret)
|
|
{
|
|
NET_DVR_Cleanup();
|
|
return -3;
|
|
}
|
|
|
|
m_openflag =1;
|
|
}
|
|
|
|
if(1 == m_openflag)
|
|
{
|
|
NET_DVR_USER_LOGIN_INFO struLoginInfo ={0};
|
|
NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 ={0};
|
|
LONG lid;
|
|
|
|
iret = setlogpara(&struLoginInfo,pip, port,pusr,ppwd);
|
|
|
|
if(iret <0)
|
|
{
|
|
NET_DVR_Cleanup();
|
|
return -4;
|
|
}
|
|
|
|
lid = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
|
|
if(lid <0)
|
|
{
|
|
NET_DVR_Cleanup();
|
|
return -5;
|
|
}
|
|
|
|
m_usrid = lid;
|
|
m_openflag =2;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::closehv()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
int hdllcls::HV_StartPlay(void * ptr,int iChannelType)
|
|
{
|
|
LONG IRealPlayHandle;
|
|
unsigned long temp;
|
|
BOOL bret;
|
|
|
|
NET_DVR_PREVIEWINFO struPlayInfo ={0}; //初始化预览参数结构体
|
|
|
|
if( m_openflag <2)
|
|
{
|
|
return - 100;
|
|
}
|
|
|
|
if(m_realhd >=0 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
temp = (unsigned long)ptr;
|
|
struPlayInfo.hPlayWnd = (HWND)(temp); //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
|
|
struPlayInfo.lChannel = 1;
|
|
struPlayInfo.dwStreamType = iChannelType;
|
|
// struPlayInfo.dwStreamType = 0;
|
|
struPlayInfo.dwLinkMode = 0;
|
|
struPlayInfo.bBlocked = 1;
|
|
|
|
IRealPlayHandle = NET_DVR_RealPlay_V40(m_usrid, &struPlayInfo, nullptr, nullptr);
|
|
// qDebug()<<IRealPlayHandle;
|
|
if(IRealPlayHandle <0)
|
|
{
|
|
return -2;
|
|
}
|
|
|
|
bret = NET_DVR_SetCapturePictureMode(JPEG_MODE);
|
|
if(! bret)
|
|
{
|
|
NET_DVR_StopRealPlay(IRealPlayHandle);
|
|
return -3;
|
|
}
|
|
|
|
m_realhd = IRealPlayHandle;
|
|
m_format = IMAGE_JPEG;
|
|
m_openflag =3;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::HV_StopPlay()
|
|
{
|
|
if( (m_openflag !=3) || (m_realhd <0))
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
NET_DVR_StopRealPlay(m_realhd);
|
|
m_realhd=-1;
|
|
m_openflag =2;
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::HV_Capture(int ImageFormat, unsigned char *pbImageBuf,int * iBufLen)
|
|
{
|
|
BOOL bret;
|
|
DWORD dmode;
|
|
DWORD dlen;
|
|
|
|
if( (m_openflag !=3) || (m_realhd <0))
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
if(ImageFormat != m_format)
|
|
{
|
|
if(IMAGE_JPEG == ImageFormat)
|
|
{
|
|
dmode = JPEG_MODE;
|
|
}
|
|
else if(IMAGE_BMP == ImageFormat)
|
|
{
|
|
dmode = BMP_MODE;
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
bret = NET_DVR_SetCapturePictureMode(JPEG_MODE);
|
|
if(! bret)
|
|
{
|
|
return -2;
|
|
}
|
|
m_format = ImageFormat;
|
|
}
|
|
|
|
bret = NET_DVR_CapturePictureBlock_New(m_realhd, (char *)pbImageBuf, * iBufLen, &dlen);
|
|
if (!bret)
|
|
{
|
|
return -3;
|
|
}
|
|
* iBufLen = dlen;
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::HV_Capture2(int ImageFormat, unsigned char *pbImageBuf,int * iBufLen,int iChannelType)
|
|
{
|
|
return HV_Capture(ImageFormat, pbImageBuf,iBufLen);
|
|
}
|
|
|
|
int hdllcls::HV_AddChar(int xPos,int yPos, unsigned int iColor, int iFontSize, char* pcValue)
|
|
{
|
|
int iret;
|
|
BOOL bret;
|
|
NET_DVR_SHOWSTRING_V30 strShow;
|
|
char buf[16];
|
|
|
|
if( (m_openflag !=3) || (m_realhd <0))
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
if( (xPos<0) || (yPos <0) ||(! pcValue))
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
iret = getcharpara(pcValue);
|
|
if(iret <0)
|
|
{
|
|
return -2;
|
|
}
|
|
|
|
if(m_datalen <=0)
|
|
{
|
|
return -3;
|
|
}
|
|
|
|
if(m_datalen > MAX_STRINGNUM_V30)
|
|
{
|
|
m_datalen = MAX_STRINGNUM_V30;
|
|
}
|
|
|
|
/* memset(buf,0,sizeof(buf));
|
|
buf[0] = 0xd6;
|
|
buf[1] = 0xd0;
|
|
buf[2] = 0xb9;
|
|
buf[3] = 0xfa;
|
|
*/
|
|
memset(&strShow, 0, sizeof(NET_DVR_SHOWSTRING_V30));
|
|
strShow.dwSize = sizeof(NET_DVR_SHOWSTRING_V30);
|
|
for (int i = 0; i < m_datalen; i++)
|
|
{
|
|
((strShow.struStringInfo)[i]).wShowString = 1;
|
|
((strShow.struStringInfo)[i]).wShowStringTopLeftX = xPos;
|
|
((strShow.struStringInfo)[i]).wShowStringTopLeftY = yPos + i * 32;
|
|
|
|
//strcpy(((strShow.struStringInfo)[i]).sString, buf);
|
|
strcpy(((strShow.struStringInfo)[i]).sString, m_cdata[i].buf);
|
|
((strShow.struStringInfo)[i]).wStringSize = strlen(m_cdata[i].buf);
|
|
// ((strShow.struStringInfo)[i]).wStringSize = strlen(buf);
|
|
|
|
}
|
|
|
|
bret = NET_DVR_SetDVRConfig(m_usrid,
|
|
NET_DVR_SET_SHOWSTRING_V30,
|
|
1,
|
|
&strShow,
|
|
sizeof(NET_DVR_SHOWSTRING_V30));
|
|
|
|
if(! bret)
|
|
{
|
|
return -4;
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::getcharpara(char* pcValue)
|
|
{
|
|
int iret;
|
|
int ilen;
|
|
// int tmplen;
|
|
int ipos;
|
|
// int ifind;
|
|
char * ptr;
|
|
initcharpara();
|
|
|
|
ilen =strlen(pcValue);
|
|
if(ilen <=0)
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
if(ilen <=2)
|
|
{
|
|
strcpy( (m_cdata[0]).buf,pcValue);
|
|
m_datalen =1;
|
|
return 0;
|
|
}
|
|
|
|
if( ('\r' == (pcValue[ilen-2])) && ('\n' == (pcValue[ilen-1])))
|
|
{
|
|
pcValue[ilen-2] =0;
|
|
pcValue[ilen-1] =0;
|
|
}
|
|
|
|
ilen =strlen(pcValue);
|
|
if(ilen <=0)
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
if(ilen <=2)
|
|
{
|
|
strcpy( (m_cdata[0]).buf,pcValue);
|
|
m_datalen =1;
|
|
return 0;
|
|
}
|
|
|
|
ptr =pcValue;
|
|
ipos =0;
|
|
//ifind =0;
|
|
|
|
for(int i=0; i< (ilen-2); i++)
|
|
{
|
|
if( ('\r'== (pcValue[i])) && ('\n'== (pcValue[i+1])))
|
|
{
|
|
// ifind=1;
|
|
pcValue[i] =0;
|
|
pcValue[i+1] =0;
|
|
|
|
iret = setcharpara(ptr);
|
|
if(iret <0)
|
|
{
|
|
return -2;
|
|
}
|
|
i+=2;
|
|
ptr= pcValue +i;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
iret = setcharpara(ptr);
|
|
if(iret <0)
|
|
{
|
|
return -3;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::setcharpara(char * ptr)
|
|
{
|
|
int iret;
|
|
int ilen;
|
|
char tmpbuf[128];
|
|
|
|
if(m_datalen >=8)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
ilen =strlen(ptr);
|
|
if(0==ilen )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(ilen <=2)
|
|
{
|
|
strcpy((m_cdata[m_datalen]).buf,ptr);
|
|
m_datalen ++;
|
|
return 0;
|
|
}
|
|
|
|
if(ilen>CHAR_MAXLEN)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* if(ilen>CHAR_UTF8_MAXLEN)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
memset(tmpbuf,0,sizeof(tmpbuf));
|
|
|
|
iret = utf82gbk(tmpbuf,120,ptr);
|
|
if(iret <0)
|
|
{
|
|
return -2;
|
|
}
|
|
|
|
ilen = strlen(tmpbuf);
|
|
if(ilen >= CHAR_MAXLEN)
|
|
{
|
|
return -3;
|
|
}
|
|
*/
|
|
strcpy((m_cdata[m_datalen]).buf,ptr);
|
|
m_datalen ++;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hdllcls::HV_ClearChar()
|
|
{
|
|
int iret;
|
|
BOOL bret;
|
|
NET_DVR_SHOWSTRING_V30 strShow;
|
|
|
|
if( (m_openflag !=3) || (m_realhd <0))
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
memset(&strShow, 0, sizeof(NET_DVR_SHOWSTRING_V30));
|
|
strShow.dwSize = sizeof(NET_DVR_SHOWSTRING_V30);
|
|
for (int i = 0; i < MAX_STRINGNUM_V30; i++)
|
|
{
|
|
((strShow.struStringInfo)[i]).wShowString = 0;
|
|
/* ((strShow.struStringInfo)[i]).wShowStringTopLeftX = xPos;
|
|
((strShow.struStringInfo)[i]).wShowStringTopLeftY = yPos + i * 32;
|
|
|
|
strcpy(((strShow.struStringInfo)[i]).sString, m_cdata[i].buf);
|
|
((strShow.struStringInfo)[i]).wStringSize = strlen(m_cdata[i].buf);
|
|
*/
|
|
|
|
}
|
|
|
|
bret = NET_DVR_SetDVRConfig(m_usrid,
|
|
NET_DVR_SET_SHOWSTRING_V30,
|
|
1,
|
|
&strShow,
|
|
sizeof(NET_DVR_SHOWSTRING_V30));
|
|
|
|
if(! bret)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|