diff --git a/zynq_7010_code/MultiFrameCapture.cpp b/zynq_7010_code/MultiFrameCapture.cpp index 7d72682..8e745fa 100644 --- a/zynq_7010_code/MultiFrameCapture.cpp +++ b/zynq_7010_code/MultiFrameCapture.cpp @@ -69,12 +69,19 @@ void MultiFrameCapture::snap() std::lock_guard 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; diff --git a/zynq_7010_code/Sensor.cpp b/zynq_7010_code/Sensor.cpp index e59b4ec..a0c0582 100644 --- a/zynq_7010_code/Sensor.cpp +++ b/zynq_7010_code/Sensor.cpp @@ -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));