调整帧数数据

This commit is contained in:
modehua 2024-01-05 00:20:44 -08:00
parent 59d530bf0f
commit b99cd8a633
2 changed files with 66 additions and 55 deletions

View File

@ -69,12 +69,19 @@ void MultiFrameCapture::snap()
std::lock_guard<std::mutex> m_lock(m_mtx_snap);
b_stop_snap = b_end_snap = false;
if (m_config.params.dpi == 3 )
this_thread::sleep_for(std::chrono::milliseconds(140));
else if(m_config.params.dpi == 2 && m_config.params.pageSize != (int)PaperSize::G400_AUTO)
this_thread::sleep_for(std::chrono::milliseconds(45));
if (is_remove_morr_)
this_thread::sleep_for(std::chrono::milliseconds(70));
else
this_thread::sleep_for(std::chrono::milliseconds(10));
{
if (resolution_ == 3 )
this_thread::sleep_for(std::chrono::milliseconds(140));
else if(resolution_ == 2 && paper_size_ != (int)PaperSize::G400_AUTO && color_mode_ == 1)
this_thread::sleep_for(std::chrono::milliseconds(45));
else
this_thread::sleep_for(std::chrono::milliseconds(10));
}
video->HtCamStartVideoCapturing();
m_cv_snap.notify_all();
@ -83,6 +90,10 @@ void MultiFrameCapture::stopsnap(bool autosize)
{
if (autosize)
{
if (is_remove_morr_)
this_thread::sleep_for(std::chrono::milliseconds(60)); //
else
this_thread::sleep_for(std::chrono::milliseconds(30)); //
video->HtCamStopSampling();
b_stop_snap = true;
}
@ -108,8 +119,30 @@ void MultiFrameCapture::SetLowPower(bool islow)
uint32_t MultiFrameCapture::compute_frame(int paper_size,int dpi)
{
SIZE size = GetPaperSize((PaperSize)paper_size,dpi);
int val = ceil((float)size.cy /(float)pixels_height_);
return val;
int val = ceil(((float)size.cy) /(float)pixels_height_);
printf("幅面高度:%d 采集高度:%d 采集帧数:%d\r\n",size.cy,pixels_height_,val);
//多加50是因为 你不清楚你需要采集多少数据,所以设置大点,设置太小 会导致 你实际采集的数据比你设置的大,这就会导致 ps层开辟的空间不够然后导致采集的时候超时
//固定幅面的加减是根据你需要采集多少才能采集全图 +操作避免采集帧数不够 -操作避免采集帧数过多消耗资源
if (paper_size_ == (int)PaperSize::G400_AUTO ||
paper_size_ == (int)PaperSize::G400_MAXAUTO ||
paper_size_ == (int)PaperSize::G400_MAXSIZE )
{
return val += 50;
}
if (is_remove_morr_)
{
return val += 2;
}
if (resolution_ == 1 && paper_size_== (int)PaperSize::G400_A4)
{
return val += 1;
}
}
void MultiFrameCapture::compute_height(int width,int height)
{
@ -157,10 +190,10 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
video->HtCamSetPeriod(config.params.dc);
int height = config.params.dpi == 3 ? 900 :(config.params.dpi == 2?999:300);
int height = config.params.dpi == 3 ? 873 :(config.params.dpi == 2?549:297);
if (config.params.dpi == 2 && !color_mode_)
{
height = 210;
height = 216;
}
compute_height(WIDTH , height);
@ -179,22 +212,27 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
configFPGAParam(color_mode_, resolution_);
{
int val = resolution_ == 3 ? 600 :(resolution_ == 2?300:200);
int dpi = resolution_ == 3 ? 600 :(resolution_ == 2?300:200);
//除摩尔纹模式
if(config.params.slow_moire && resolution_ != 3)
{
int sp = fpgaparam.Sp + 241; //258 摩尔纹是400dpi 4677的高度
val = 400;
if (color_mode_ == GRAY)
sp = 6042;
else
sp = fpgaparam.Sp + 241;
dpi = 400;
video->HtCamSetSpTime(sp,fpgaparam.MaxExp); // 2344 灰色 //2023-8-10 最新2650
if (color_mode_)
{
video->HtCamSetSpTime2(sp * 3);
printf("摩尔纹彩色sp = %d\r\n",sp * 3);
}
printf("摩尔纹高度 = %d\r\n",val);
printf("灰度sp = %d\r\n",sp);
printf("彩色sp = %d\r\n",sp * 3);
printf("摩尔纹DPI = %d\r\n",dpi);
printf("摩尔纹灰度sp = %d\r\n",sp);
}
//长文稿模式选择使用 600 dpi走纸速度
@ -214,23 +252,9 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
printf("长幅面 彩色sp = %d\r\n",sp * 3);
}
}
//关于帧数设置:一定要注意帧数的数量 直接影响到你usb传输效率
uint32_t cnt = compute_frame(paper_size_ , val) ;
if (resolution_ == 2)
{
//cnt -=1 ;
}
uint32_t cnt = compute_frame(paper_size_ , dpi) ;
//匹配原始尺寸多采集一帧,固定幅面是多少采集多少。这个地方这么调是因为 最后一帧采集会超时。 临时解决方案 谢谢--
if (m_config.params.pageSize==(int)PaperSize::G400_AUTO ||
m_config.params.pageSize==(int)PaperSize::G400_MAXAUTO ||
m_config.params.pageSize==(int)PaperSize::G400_MAXSIZE)
{
cnt += 1;
}
video->HtCamSetFrameCnt(cnt);
printf(" -----------------------设置帧数:%d------------------\r\n",cnt);
}
@ -356,6 +380,12 @@ void MultiFrameCapture::snaprun()
}
else
cnt = (info_ex.frame_index + 3) * sw.elapsed_ms();
if (is_remove_morr_)
{
cnt = 3000;
}
image_cb_(cnt);
img_wait_.notify_all();
// cv::imwrite("/home/root/test.bmp", mat);
@ -408,10 +438,6 @@ void MultiFrameCapture::snaprun()
{
time_out = 2000;
}
// if (color_mode_)
// {
// time_out += 400;
// }
uint32_t frame_num = 0;
uint32_t frame_cnt = 0;
@ -420,14 +446,7 @@ void MultiFrameCapture::snaprun()
printf("获取设置的帧数:%d\r\n",frame_cnt);
frame_info_.frame_index = frame_cnt; //这个值别乱改 获取出来8 是指 0 - 8 实际采集图像是9
// if(resolution_ == 1 && color_mode_ == 0)
{
//frame_info_.frame_index = frame_cnt; //这个地方很可能是FPGA 的bug 所以暂时先这么处理一下
//printf("特殊处理200dpi 灰度模式 采集流程\r\n");
}
// video->HtCamSetVsnpTime(ti);
// printf("设置 vsnp%d\r\n",ti);
//ti++;
@ -443,7 +462,6 @@ void MultiFrameCapture::snaprun()
{
printf("***********设置的帧数:%d 正在采集第[%d]帧************\r\n",frame_info_.frame_index,i);
frame_info_.first_frame = i == 1 ? true : false;
//frame_info_.last_frame = i == frame_info_.frame_index ? true : false;
func_sig = snap_func(frame_info_, channels,time_out,i);
@ -454,15 +472,8 @@ void MultiFrameCapture::snaprun()
int val = frame_num - ind; //剩余还未采集的帧数
printf("val :%d frame_num:%d i:%d\r\n",val,frame_num,i);
int j = 0;
//if(resolution_ == 1 && color_mode_ == 0)
while (val > 0)
{
//j = 1; //这个地方很可能是FPGA 的bug 所以暂时先这么处理一下
//printf("特殊处理200dpi 灰度模式 采集流程 jjj r\n");
}
while (val > j)
{
//frame_info_.last_frame = val == 1 ? true : false;
frame_info_.frame_index = frame_num;
ind++;
printf("-----------当前采集到第:[%d]帧 CIS总共采集[%d]帧 -------\r\n",ind,frame_num);
@ -477,8 +488,8 @@ void MultiFrameCapture::snaprun()
uint32_t in=0;
video->HtCamStopVideoCapturing();
video->HtCamGetFrameNum(in);
printf("----------整张采集结束 总共采集帧数:%d 耗时:%f ----------\r\n",in,sw.elapsed_ms());
//video->HtCamGetFrameNum(in);
printf("----------整张采集结束 总共采集帧数:%d 耗时:%f ----------\r\n",frame_num,sw.elapsed_ms());
m_cv_snapdone.notify_all();
b_end_snap = true;

View File

@ -257,7 +257,7 @@ void Sensor::monitor2()
if (i == 2)
{
double_1 = ret;
LOG("2 double_1 :%d double_2:%d\r\n",double_1,double_2);
printf("2 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));
@ -268,7 +268,7 @@ void Sensor::monitor2()
if (i == 3)
{
double_2 = ret;
LOG("3 double_1 :%d double_2:%d\r\n",double_1,double_2);
printf("3 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));