海康播放器sdk开发中的PlayM4_SetDecCallBack函数的调用
来源:互联网 发布:海思网络摄像机开发 编辑:程序博客网 时间:2024/04/28 06:57
该函数如下:
确实很头痛啊,网上找都是说什么少了个“{"或者是"}“,怎么看怎么没少,后来才知道,这个callback函数要放在main函数外面,海康你太坑人了,也不提醒下啊。纠结几天啊。
关于回调函数,请注意以下几点:
// Function: The dec call back funtion.
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,
FRAME_INFO * pFrameInfo,
long nReserved1,long /*nReserved2*/)
{
//OutputDebugString("解码回调");
//DWORD dwTime = PlayM4_GetSpecialData(nPort);
////TRACE("nPort=%d, TYPE=%d; Width=%d; Height=%d\n", nPort, pFrameInfo->nType, pFrameInfo->nWidth, pFrameInfo->nHeight);
//TRACE("wptest==============Time: Year is %d, Month is %d, Day is %d, Hour is %d, %d, %d", GET_YEAR(dwTime),
//GET_MONTH(dwTime), GET_DAY(dwTime), GET_HOUR(dwTime), GET_MINUTE(dwTime), GET_SECOND(dwTime));
/*
CPlayerDlg* pDlg = (CPlayerDlg *)nReserved1;
if ( pFrameInfo->nType == T_YV12 )
{
if(g_classAVI.IsWriteAVIHdr())
{
g_classAVI.SetFPS(pFrameInfo->nFrameRate);
g_classAVI.WriteHeaders();
}
// ntsc qcif
if(pFrameInfo->nHeight == 128)
{
if(pDlg->m_pQcifTempBuf == NULL)
{
pDlg->m_pQcifTempBuf = new BYTE[nSize];
}
int nPos = 0;
// Y 分量
for(int i = 0; i < 4; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + i * pFrameInfo->nWidth, pBuf, pFrameInfo->nWidth);
}
CopyMemory(pDlg->m_pQcifTempBuf + 4 * pFrameInfo->nWidth, pBuf, pFrameInfo->nWidth * 120);
for(i = 0; i < 4; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + (124 + i) * pFrameInfo->nWidth, pBuf + pFrameInfo->nWidth * 119, pFrameInfo->nWidth);
}
nPos += nSize*2/3;
int w = pFrameInfo->nWidth/2;
// U/V分量
for(int j = 0; j < 2; j++)
{
for(i = 0; i < 2; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + i * w + nPos, pBuf + nPos, w);
}
CopyMemory(pDlg->m_pQcifTempBuf + w * 2 + nPos, pBuf + nPos, w * 60);
for(i = 0; i < 2; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + w * (62 + i) + nPos, pBuf + w * 59 + nPos, w);
}
nPos += nSize*1/6;
}
g_classAVI.AddFileToAVI((char*)pDlg->m_pQcifTempBuf, nSize);
}
else
{
g_classAVI.AddFileToAVI(pBuf, nSize);
}
if(g_classAVI.IsExceedMaxFileLen())
{
SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_FILE_END,m_lPort,0);
}
}
*/
//Sleep(1);
}
BOOL PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2))
之前一直为怎么定义一个调用它烦恼,主要是不知道这个callback函数该怎么定义,后来在demon中看到了例子(如下),终于了解了。但是接下来问题又来了,编译总是提示
error C2601:local function definitions are illegal
确实很头痛啊,网上找都是说什么少了个“{"或者是"}“,怎么看怎么没少,后来才知道,这个callback函数要放在main函数外面,海康你太坑人了,也不提醒下啊。纠结几天啊。
关于回调函数,请注意以下几点:
1、回调函数必须有关键词 CALLBACK;
2、回调函数本身必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数
2 回调函数并不由开发者直接调用执行(只是使用系统接口API函数作为起点)
3 回调函数通常作为参数传递给系统API,由该API来调用
4 回调函数可能被系统API调用一次,也可能被循环调用多次
// Function: The dec call back funtion.
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,
FRAME_INFO * pFrameInfo,
long nReserved1,long /*nReserved2*/)
{
//OutputDebugString("解码回调");
//DWORD dwTime = PlayM4_GetSpecialData(nPort);
////TRACE("nPort=%d, TYPE=%d; Width=%d; Height=%d\n", nPort, pFrameInfo->nType, pFrameInfo->nWidth, pFrameInfo->nHeight);
//TRACE("wptest==============Time: Year is %d, Month is %d, Day is %d, Hour is %d, %d, %d", GET_YEAR(dwTime),
//GET_MONTH(dwTime), GET_DAY(dwTime), GET_HOUR(dwTime), GET_MINUTE(dwTime), GET_SECOND(dwTime));
/*
CPlayerDlg* pDlg = (CPlayerDlg *)nReserved1;
if ( pFrameInfo->nType == T_YV12 )
{
if(g_classAVI.IsWriteAVIHdr())
{
g_classAVI.SetFPS(pFrameInfo->nFrameRate);
g_classAVI.WriteHeaders();
}
// ntsc qcif
if(pFrameInfo->nHeight == 128)
{
if(pDlg->m_pQcifTempBuf == NULL)
{
pDlg->m_pQcifTempBuf = new BYTE[nSize];
}
int nPos = 0;
// Y 分量
for(int i = 0; i < 4; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + i * pFrameInfo->nWidth, pBuf, pFrameInfo->nWidth);
}
CopyMemory(pDlg->m_pQcifTempBuf + 4 * pFrameInfo->nWidth, pBuf, pFrameInfo->nWidth * 120);
for(i = 0; i < 4; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + (124 + i) * pFrameInfo->nWidth, pBuf + pFrameInfo->nWidth * 119, pFrameInfo->nWidth);
}
nPos += nSize*2/3;
int w = pFrameInfo->nWidth/2;
// U/V分量
for(int j = 0; j < 2; j++)
{
for(i = 0; i < 2; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + i * w + nPos, pBuf + nPos, w);
}
CopyMemory(pDlg->m_pQcifTempBuf + w * 2 + nPos, pBuf + nPos, w * 60);
for(i = 0; i < 2; i++)
{
CopyMemory(pDlg->m_pQcifTempBuf + w * (62 + i) + nPos, pBuf + w * 59 + nPos, w);
}
nPos += nSize*1/6;
}
g_classAVI.AddFileToAVI((char*)pDlg->m_pQcifTempBuf, nSize);
}
else
{
g_classAVI.AddFileToAVI(pBuf, nSize);
}
if(g_classAVI.IsExceedMaxFileLen())
{
SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_FILE_END,m_lPort,0);
}
}
*/
//Sleep(1);
}
- 海康播放器sdk开发中的PlayM4_SetDecCallBack函数的调用
- SDK开发mp3播放器
- 基于vlc的sdk二次开发播放器开发
- FFMPEG SDK 开发介绍 & 用C/C++开发基于VLC SDK的视频播放器
- Android开发中音频播放器的调用
- 用C/C++开发基于VLC SDK的视频播放器 开发环境搭建
- Stagefright AwesomePlayer 播放流程的函数调用
- 用C/C++开发基于VLC SDK的视频播放器
- 用C/C++开发基于VLC SDK的视频播放器
- 用C/C++开发基于VLC SDK的视频播放器
- Android 调用ffmpeg 播放器开发(一)
- GOOGLE VR SDK开发VR游戏,VR播放器之一
- GOOGLE VR SDK开发VR游戏,VR播放器之一
- Web播放器SDK
- 关于VC开发中的函数调用问题
- 调用ffmpeg的Android开发的播放器开源代码以及重点讲解----阿冬专栏
- 调用API函数播放嵌入的MP3文件
- 安卓开发——让系统可以调用自己写的视频播放器
- ogre 利用overlay 实现小地图
- 最小生成树的prime和kruskal算法
- 神啊,我是否还可获得救赎
- myeclipse中文注释乱码解决方法
- linux账号管理
- 海康播放器sdk开发中的PlayM4_SetDecCallBack函数的调用
- C语言getch(),getchar()和gets()和缓冲区溢出
- BUPT 网络预选赛邀请赛 B题 B By Recognizing These Guys, We Find Social Networks Useful
- 技术人生
- HTMLl列表、表单
- 数据再次原样返回 给前一个Activity (准确来说应该叫主Activity)
- 换了个电脑
- 百度地图API(新建一个地图)
- android (7)