1. 添加功能:setBufferPolicy、setAcqBufferSize(单位MiB);
2. XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE,usb缓存设置;
This commit is contained in:
@ -34,6 +34,9 @@ namespace Iris
|
||||
|
||||
XI_IMG m_image; // image buffer
|
||||
|
||||
void setBufferPolicy(int bufferPolicy);//0:XI_BP_UNSAFE; 1:XI_BP_SAFE;
|
||||
void setAcqBufferSize(int acqBufferSize);//单位MiB
|
||||
|
||||
public:
|
||||
//继承基类的
|
||||
IrisXimeaImager();//11111111111111111111
|
||||
|
@ -96,6 +96,11 @@ int Iris::IrisXimeaImager::getBufferSizeOfOneFrame()
|
||||
//
|
||||
// return static_cast<int>(m_image.bp_size);
|
||||
|
||||
// //比实际大小(m_iEffectiveWindow_height * m_iEffectiveWindow_width * 2)大,why?
|
||||
// int value = 0;
|
||||
// xiGetParamInt(m_xiH, XI_PRM_IMAGE_PAYLOAD_SIZE, &value);
|
||||
|
||||
|
||||
return m_iEffectiveWindow_height * m_iEffectiveWindow_width * 2;
|
||||
}
|
||||
|
||||
@ -107,6 +112,44 @@ float Iris::IrisXimeaImager::getTemperature()
|
||||
return temperature;
|
||||
}
|
||||
|
||||
void Iris::IrisXimeaImager::setBufferPolicy(int bufferPolicy)
|
||||
{
|
||||
if (bufferPolicy==0)
|
||||
{
|
||||
xiSetParamInt(m_xiH, XI_PRM_BUFFER_POLICY, XI_BP_UNSAFE);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFER_POLICY: XI_BP_UNSAFE\n");
|
||||
}
|
||||
else if (bufferPolicy==1)
|
||||
{
|
||||
xiSetParamInt(m_xiH, XI_PRM_BUFFER_POLICY, XI_BP_SAFE);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFER_POLICY: XI_BP_SAFE\n");
|
||||
}
|
||||
}
|
||||
|
||||
void Iris::IrisXimeaImager::setAcqBufferSize(int acqBufferSize)
|
||||
{
|
||||
XI_RETURN stat = XI_OK;
|
||||
|
||||
// set unit to 1 MiB
|
||||
xiSetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE_UNIT, 1024*1024);
|
||||
int value = 0;
|
||||
xiGetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, &value);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_ACQ_BUFFER_SIZE: %d MiB.\n", value);
|
||||
|
||||
xiSetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, acqBufferSize);
|
||||
|
||||
xiGetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, &value);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_ACQ_BUFFER_SIZE: %d MiB.\n", value);
|
||||
|
||||
// set maximum number of queue
|
||||
int number_of_field_buffers = 0;
|
||||
xiGetParamInt(m_xiH, XI_PRM_BUFFERS_QUEUE_SIZE XI_PRM_INFO_MAX, &number_of_field_buffers);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFERS_QUEUE_SIZE XI_PRM_INFO_MAX: %d.\n", number_of_field_buffers);
|
||||
HandleResult(stat,"xiGetParam (number_of_field_buffers maximum)");
|
||||
xiSetParamInt(m_xiH, XI_PRM_BUFFERS_QUEUE_SIZE, number_of_field_buffers);
|
||||
HandleResult(stat,"xiSetParam (number_of_field_buffers)");
|
||||
}
|
||||
|
||||
Iris::IrisXimeaImager::IrisXimeaImager()
|
||||
{
|
||||
m_xiH=NULL;
|
||||
@ -122,6 +165,51 @@ void Iris::IrisXimeaImager::connect(const char *camera_serial_number)
|
||||
printf("Iris::IrisXimeaImager::connect----1 打开相机(xiOpenDevice)\n");
|
||||
CE(xiOpenDevice(0, &m_xiH));//没有插上ximea相机,这句代码都过不去
|
||||
|
||||
//add-----------------------------------------------------------------------------------------------------------------------
|
||||
XI_RETURN stat = XI_OK;
|
||||
|
||||
int payload=0;
|
||||
stat = xiGetParamInt(m_xiH, XI_PRM_IMAGE_PAYLOAD_SIZE, &payload);
|
||||
HandleResult(stat,"xiGetParam (payload)");
|
||||
|
||||
int transport_buffer_size_default = 0;
|
||||
int transport_buffer_size_increment = 0;
|
||||
int transport_buffer_size_minimum = 0;
|
||||
// get default transport buffer size - that should be OK on all controllers
|
||||
stat = xiGetParamInt(m_xiH, XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE, &transport_buffer_size_default);
|
||||
HandleResult(stat,"xiGetParamInt (transport buffer size)");
|
||||
stat = xiGetParamInt(m_xiH, XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE XI_PRM_INFO_INCREMENT, &transport_buffer_size_increment);
|
||||
HandleResult(stat,"xiGetParamInt (transport buffer size increment)");
|
||||
stat = xiGetParamInt(m_xiH, XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE XI_PRM_INFO_MIN, &transport_buffer_size_minimum);
|
||||
HandleResult(stat,"xiGetParamInt (transport buffer size minimum)");
|
||||
|
||||
// check if payload size is less than default transport buffer size
|
||||
if(payload < transport_buffer_size_default + transport_buffer_size_increment)
|
||||
{
|
||||
// use optimized transport buffer size, as nearest increment to payload
|
||||
int transport_buffer_size = payload;
|
||||
if (transport_buffer_size_increment)
|
||||
{
|
||||
// round up to nearest increment
|
||||
int remainder = transport_buffer_size % transport_buffer_size_increment;
|
||||
if (remainder)
|
||||
transport_buffer_size += transport_buffer_size_increment - remainder;
|
||||
}
|
||||
// check the minimum
|
||||
if (transport_buffer_size < transport_buffer_size_minimum)
|
||||
transport_buffer_size = transport_buffer_size_minimum;
|
||||
stat = xiSetParamInt(m_xiH, XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE, transport_buffer_size);
|
||||
HandleResult(stat,"xiSetParam (transport buffer size)");
|
||||
}
|
||||
//add---------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// set unit to 1 MiB
|
||||
xiSetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE_UNIT, 1024*1024);
|
||||
int value = 0;
|
||||
xiGetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, &value);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_ACQ_BUFFER_SIZE: %d MiB.\n", value);
|
||||
|
||||
|
||||
int NUM_THREADS = 0;
|
||||
xiGetParamInt(m_xiH, XI_PRM_PROC_NUM_THREADS, &NUM_THREADS);
|
||||
printf("Iris::IrisXimeaImager::connect---- XI_PRM_PROC_NUM_THREADS默认值为%d\n", NUM_THREADS);
|
||||
|
Reference in New Issue
Block a user