应用场景:
1.内部 通知到 外部
2.下层 通知到 上层
调用的代码参考
1.接口声明
//声明时如果不带*,定义要带*
typedef void(outFrameCallback)(char *data,unsigned int len, void *UsrData);
outFrameCallback* fun; //定义要带*
//声明时如果带*,定义不要带*
typedef void(*outFrameCallback)(char *data,unsigned int len, void *UsrData);
outFrameCallback fun; //定义不要带*
2.实现具体的注册函数
class CJetsonCodec:
{
private://注册函数需要声明成static
static void encorder_outFrameCallback(char *data, unsigned int len, void *UsrData);
}
void CJetsonCodec::encorder_outFrameCallback(char *data, unsigned int len, void *UsrData)
{
}
3.将注册函数encorder_outFrameCallback注册到另外类里面
((VideoEncoder *)_video_encoder)->setEncodeCallback(encorder_outFrameCallback, this);
4.赋值
int JetsonVideoEncoder::setEncodeCallback(outFrameCallback *fun, void *UsrData)
{
ctx._outFrameCallback = fun;
ctx._pUsrData = UsrData;
return 0;
}
5.调用,实际调用的是encorder_outFrameCallback
if (ctx->_outFrameCallback)
{
ctx->_outFrameCallback((char *)data, len, ctx->_pUsrData);
}