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++

#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;
}