配置缓存

SDK支持如下两种缓存配置的方式。您可按需选择。
  • SDK内部分配缓存:SDK内部主动分配图像缓存,用于获取图像数据。
  • 外部注册缓存:您需自行分配多个缓存,之后通过SDK接口将分配的缓存注册到SDK内部。SDK使用您注册的缓存获取图像数据。
注解
外部注册缓存需要主动调用接口注册,默认使用SDK内部缓存。

SDK内部分配缓存

您可通过 MV_CC_SetImageNodeNum() 设置SDK内部图像缓存节点个数。未设置缓存节点个数时,SDK使用默认的缓存个数。
注解
MV_CC_SetImageNodeNum() 需要在 MV_CC_StartGrabbing() 之前调用。
如下代码演示了使用内部缓存获取图像数据的过程。
/*设置缓存节点个数(可选)*/
Check(nRet);
/*开始取流*/
Check(nRet);

外部注册缓存

外部注册缓存是指您自行分配和释放图像缓存。
外部注册缓存的基本步骤如下:
  1. 调用 MV_CC_GetPayloadSize() 获取足够的缓存大小及正确的内存对齐方式。
    注解
    在您修改图像相关参数(例如修改图像宽度、高度和像素格式等)后,您需重新调用该接口,重新获取缓存大小。
  2. 调用 MV_CC_AllocAlignedBuffer() 分配内存。
  3. 调用 MV_CC_RegisterBuffer() 将分配好的内存注册给SDK。
  4. 调用 MV_CC_StartGrabbing() 开始采集图像。
结束采集后,您需取消已注册的缓存。步骤如下:
  1. 调用 MV_CC_UnRegisterBuffer() 取消已经注册的缓存。
  2. 调用 MV_CC_FreeAlignedBuffer() 释放缓存
    注解

使用外部缓存的过程图示
// ch:获取当前配置情况下图像的负载信息
nRet = MV_CC_GetPayloadSize(handle, &nBufLen, &nAlignment);
Check(nRet);
for (int k = 0; k < IMAGE_NODE; k++)
{
// ch:用户分配的内存
pBufferList[k] = MV_CC_AllocAlignedBuffer(nBufLen, nAlignment);
if (NULL == pBufferList[k])
{
nRet = MV_E_RESOURCE;
break;
}
// ch:用户分配的内存注册到SDK中
nRet = MV_CC_RegisterBuffer(handle, pBufferList[k], nBufLen, NULL);
if (MV_OK != nRet)
{
break;
}
}
Check(nRet);
/*开始取流*/
Check(nRet);
//获取图像
//do something
// ch:停止取流 | en:Stop grab image
Check(nRet);
for (int k = 0; k < IMAGE_NODE; k++)
{
// ch:取消SDK中注册的外部缓存
nRet = MV_CC_UnRegisterBuffer(handle, pBufferList[k]);
if (MV_OK != nRet)
{
break;
}
}
Check(nRet);
// ch:释放用户分配的内存
for (int k = 0; k < IMAGE_NODE; k++)
{
MV_CC_FreeAlignedBuffer(pBufferList[k]);
pBufferList[k] = NULL;
}



上一篇: 事件及异常 下一篇: 采集图像