海康网络相机C++封装

hfuttcy 2018-07-27 05:40:50
小弟最近再做海康相机的开发,想把SDK中的一个函数封装起来,遇到一个问题,还请大神看看!
这是我自己的类
class Grab_picture{
public:
Grab_picture();
void CALLBACK DecCBFun(long nPort, char * pBuf, long nSize, FRAME_INFO * pFrameInfo, long nReserved1, long nReserved2);
void fRealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser);

};
在函数实现的时候遇到这样的问题
if (!PlayM4_SetDecCallBack(nPort, DecCBFun)) // 获取数据流
错误提示 27 IntelliSense: "void (Grab_picture::*)(long nPort, char *pBuf, long nSize, FRAME_INFO *pFrameInfo, long nReserved1, long nReserved2)" 类型的实参与 "void (__stdcall *)(long nPort, char *pBuf, long nSize, FRAME_INFO *pFrameInfo, long nReserved1, long nReserved2)" 类型的形参不兼容
想法是强制转换,请问应该怎么转?
...全文
635 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2021-02-06
  • 打赏
  • 举报
回复
我倒,原来是有人扒坟
真相重于对错 2021-02-06
  • 打赏
  • 举报
回复
没做过海康,猜测回调函数改成静态的或全局函数,不要用普通类成员函数
复现侠 2021-02-05
  • 打赏
  • 举报
回复
这是实时实时预览回调,如何接后续的人脸检测算法?需要封装吗?还是怎么做?有偿代做?
qq_42587712 2019-03-21
  • 打赏
  • 举报
回复
大神可以把你封装的给我看看吗,我也要用c++封装一个,但是由于是实习生都要不知道怎么下手,求大神让我看看。qq1757402265,谢谢大佬
Mr。Lili 2018-07-27
  • 打赏
  • 举报
回复
//解码回调 视频为YUV数据(YV12),音频为PCM数据
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
{
long lFrameType = pFrameInfo->nType;

if(lFrameType ==T_YV12)
{
Mat frame;
frame.create(Size(pFrameInfo->nWidth, pFrameInfo->nHeight),CV_8UC1);
memcpy(frame.data, pBuf, pFrameInfo->nWidth*pFrameInfo->nHeight);
imshow("IP Camera", frame);
waitKey(1);
}
}


///实时流回调
void CALLBACK fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser)
{
DWORD dRet;
switch (dwDataType)
{
case NET_DVR_SYSHEAD: //系统头
if (!PlayM4_GetPort(&nPort)) //获取播放库未使用的通道号
{
break;
}
if(dwBufSize > 0)
{
if (!PlayM4_OpenStream(nPort,pBuffer,dwBufSize,1024*1024))
{
dRet=PlayM4_GetLastError(nPort);
break;
}
//设置解码回调函数 只解码不显示
if (!PlayM4_SetDecCallBack(nPort,DecCBFun))
{
dRet=PlayM4_GetLastError(nPort);
break;
}

//设置解码回调函数 解码且显示
//if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
//{
// dRet=PlayM4_GetLastError(nPort);
// break;
//}

//打开视频解码
if (!PlayM4_Play(nPort,hWnd))
{
dRet=PlayM4_GetLastError(nPort);
break;
}

//打开音频解码, 需要码流是复合流
if (!PlayM4_PlaySound(nPort))
{
dRet=PlayM4_GetLastError(nPort);
break;
}
}
break;

case NET_DVR_STREAMDATA: //码流数据
if (dwBufSize > 0 && nPort != -1)
{
BOOL inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
while (!inData)
{
Sleep(10);
inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
OutputDebugString(L"PlayM4_InputData failed \n");
}
}
break;
}
}
Mr。Lili 2018-07-27
  • 打赏
  • 举报
回复
//解码回调 视频为YUV数据(YV12),音频为PCM数据
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
{
long lFrameType = pFrameInfo->nType;

if(lFrameType ==T_YV12)
{
Mat frame;
frame.create(Size(pFrameInfo->nWidth, pFrameInfo->nHeight),CV_8UC1);
memcpy(frame.data, pBuf, pFrameInfo->nWidth*pFrameInfo->nHeight);
imshow("IP Camera", frame);
waitKey(1);
}
}


///实时流回调
void CALLBACK fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser)
{
DWORD dRet;
switch (dwDataType)
{
case NET_DVR_SYSHEAD: //系统头
if (!PlayM4_GetPort(&nPort)) //获取播放库未使用的通道号
{
break;
}
if(dwBufSize > 0)
{
if (!PlayM4_OpenStream(nPort,pBuffer,dwBufSize,1024*1024))
{
dRet=PlayM4_GetLastError(nPort);
break;
}
//设置解码回调函数 只解码不显示
if (!PlayM4_SetDecCallBack(nPort,DecCBFun))
{
dRet=PlayM4_GetLastError(nPort);
break;
}

//设置解码回调函数 解码且显示
//if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
//{
// dRet=PlayM4_GetLastError(nPort);
// break;
//}

//打开视频解码
if (!PlayM4_Play(nPort,hWnd))
{
dRet=PlayM4_GetLastError(nPort);
break;
}

//打开音频解码, 需要码流是复合流
if (!PlayM4_PlaySound(nPort))
{
dRet=PlayM4_GetLastError(nPort);
break;
}
}
break;

case NET_DVR_STREAMDATA: //码流数据
if (dwBufSize > 0 && nPort != -1)
{
BOOL inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
while (!inData)
{
Sleep(10);
inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
OutputDebugString(L"PlayM4_InputData failed \n");
}
}
break;
}
}
yshuise 2018-07-27
  • 打赏
  • 举报
回复
函数参数一样,那就直接调用试试

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧