采用FLIR 相机,基于Spinnaker SDK写的程序在运行一段时间后总是出现延时有时会长达几秒,经过分析发现FLIR 相机默认的是有buffer缓存,默认10帧,且StreamBufferHandlingMode默认为OldestFirst, 这个参数在SpinView设置后,并不能保存,再用程序启动还是默认参数,必须在驱动里面设置MODE: StreamBufferHandlingMode_NewestOnly,设置缓存帧数为1(不能设置为0)。相关说明参考Spinnaker C++ API:
相关设置程序可以参考自带的demo,或者参考链接:https://github.com/Arche-Logos/kinect-playbacker/wiki
Spinnaker::GenApi::INodeMap &snodeMap = pCam->GetTLStreamNodeMap();
Spinnaker::GenApi::CEnumerationPtr ptrStreamBufferCountMode = snodeMap.GetNode("StreamBufferCountMode");
if (IsReadable(ptrStreamBufferCountMode) && IsWritable(ptrStreamBufferCountMode))
ptrStreamBufferCountMode->SetIntValue(0);//0:Manual(取值范围1-1302) 1:Auto (设为auto时,StreamBufferCountManual 无法修改,默认为10)
else
std::cout << "Unable to set StreamBufferCountMode." << std::endl;
Spinnaker::GenApi::CEnumerationPtr ptrStreamBufferHandlingMode = snodeMap.GetNode("StreamBufferHandlingMode");
if (IsReadable(ptrStreamBufferHandlingMode) && IsWritable(ptrStreamBufferHandlingMode))
{
std::cerr<<"[ FLIR ] current StreamBufferHandlingMode vlaue: "<<ptrStreamBufferHandlingMode->GetIntValue()<<endl;
ptrStreamBufferHandlingMode->SetIntValue(4); // 4:NewestOnly
}
else
std::cout << "Unable to set StreamBufferHandlingMode." << std::endl;
std::cerr<<"[ FLIR ] current StreamBufferHandlingMode vlaue: "<<ptrStreamBufferHandlingMode->GetIntValue()<<endl;
Spinnaker::GenApi::CIntegerPtr ptrStreamBufferCountManual = snodeMap.GetNode("StreamBufferCountManual");
if (IsReadable(ptrStreamBufferCountManual) && IsWritable(ptrStreamBufferCountManual))
{
std::cerr<<"[ FLIR ] current ptrStreamBufferCountManual vlaue: "<<ptrStreamBufferCountManual->GetValue()<<endl;
ptrStreamBufferCountManual->SetValue(1);//取值范围1-1302
}
else
std::cout << "Unable to set StreamBufferCountManual." << std::endl;