新增200dpi

This commit is contained in:
modehua 2023-09-26 02:16:56 -07:00
parent 0fcc2d8a5d
commit d613a1dd16
6 changed files with 76 additions and 80 deletions

View File

@ -14,7 +14,7 @@ cv::Mat CImageMerge::MergeImage(cv::Mat &srcMat, int dstwidth, int dstheight, in
{ {
//printf("7010 7010 10 7010 7010 7010 7010 7010 7010!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n"); //printf("7010 7010 10 7010 7010 7010 7010 7010 7010!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n");
cv::Mat matdst; cv::Mat matdst;
if (srcMat.cols == 5184 || srcMat.cols == 10368) // gray mode if (!mode ) // gray mode
{ {
matdst = srcMat; matdst = srcMat;
} }

View File

@ -78,6 +78,7 @@ union CamZ_Reg_A_New
unsigned int psincdec : 1; //相移动反向 unsigned int psincdec : 1; //相移动反向
unsigned int clr_psedon : 1;//清除相完成 写低写高 unsigned int clr_psedon : 1;//清除相完成 写低写高
unsigned int dpi: 1; //1: 300DPI 0: 600DPI unsigned int dpi: 1; //1: 300DPI 0: 600DPI
unsigned int dpi_200: 1; //dpi=1的时候 dpi_200=1 200dpi dpi=1的时候 dpi_200=0 300dpi dpi=0的时候 dpi_200=0 600dpi
}; };
}; };

View File

@ -1228,15 +1228,25 @@ void HCamDevice::HtCamChangeTriggerInAndEXt(int in_out)
void HCamDevice::HtCamSetDpi(int dpi) void HCamDevice::HtCamSetDpi(int dpi)
{ {
uint32_t *pCamCtrlReg = virBaseAddr; CamZ_Reg_A_New rega;
if (dpi) rega.value = HtCamReadFpgaRegs(0x0A);
printf("dpi:%d\r\n",dpi);
if (dpi == 1 )
{ {
pCamCtrlReg[10] |= (0x00000800); rega.dpi_200 = 1;
rega.dpi = 1;
}
else if (dpi == 2)
{
rega.dpi_200 = 0;
rega.dpi = 1;
} }
else else
{ {
pCamCtrlReg[10] &= ~(0x00000800); rega.dpi_200 = 0;
rega.dpi = 0;
} }
HtCamWriteFpgaRegs(0x0A,rega.value);
} }
void HCamDevice::HtCamSetClolr(int color) void HCamDevice::HtCamSetClolr(int color)

View File

@ -37,7 +37,9 @@ public:
int HtCamGetTriggerMode(); //获取触发模式 int HtCamGetTriggerMode(); //获取触发模式
int HtCamGetColorMode(); //获取颜色模式 int HtCamGetColorMode(); //获取颜色模式
void HtCamSetClolr(int color); //设置颜色模式 void HtCamSetClolr(int color); //设置颜色模式
void HtCamSetDpi(int dpi); //设置dpi //设置dpi dpi =0 200dpi ,dpi =1 300dpi,dpi =2 600dpi
//注意协议的逻辑 11号寄存器设置1 12号设置1 200dpi 11号寄存器设置1 12号设置0 300dpi 11号寄存器设置0 12号设置0 600dpi
void HtCamSetDpi(int dpi);
int HtCamReadCaptureFrame(void **pbuf, int timeout); //读图 <较重要> int HtCamReadCaptureFrame(void **pbuf, int timeout); //读图 <较重要>

View File

@ -100,9 +100,9 @@ void MultiFrameCapture::snap()
std::lock_guard<std::mutex> m_lock(m_mtx_snap); std::lock_guard<std::mutex> m_lock(m_mtx_snap);
b_stop_snap = b_end_snap = false; b_stop_snap = b_end_snap = false;
if (m_config.params.dpi == 3) if (m_config.params.dpi == 3 )
this_thread::sleep_for(std::chrono::milliseconds(160)); this_thread::sleep_for(std::chrono::milliseconds(140));
else if(m_config.params.dpi == 2) else if(m_config.params.dpi == 2 && m_config.params.pageSize != (int)PaperSize::G400_AUTO)
this_thread::sleep_for(std::chrono::milliseconds(45)); this_thread::sleep_for(std::chrono::milliseconds(45));
else else
this_thread::sleep_for(std::chrono::milliseconds(10)); this_thread::sleep_for(std::chrono::milliseconds(10));
@ -150,12 +150,12 @@ uint32_t MultiFrameCapture::compute_frame(int paper_size,int dpi)
void MultiFrameCapture::compute_height(int width,int height) void MultiFrameCapture::compute_height(int width,int height)
{ {
//////这块配置一定要注意 //////这块配置一定要注意
v4l2_width_ = resolution_ == 0 ? width * 2 : width; //宽 :DPI不变下 彩色灰度是一样的 v4l2_width_ = resolution_ == DPI_600 ? width * 2 :(resolution_ == DPI_300 ? width :(float)width / 1.5) ; //宽 :DPI不变下 彩色灰度是一样的
//width_ = paper_size_ == PaperSize::G400_MAXSIZE || paper_size_ ==PaperSize::G400_MAXAUTO && //width_ = paper_size_ == PaperSize::G400_MAXSIZE || paper_size_ ==PaperSize::G400_MAXAUTO &&
v4l2_height_ = height; v4l2_height_ = height;
pixels_width_ = color_mode_ == 1 ? v4l2_width_ * 3 : v4l2_width_; pixels_width_ = color_mode_ == COLOR ? v4l2_width_ * 3 : v4l2_width_;
pixels_height_ = color_mode_ == 1 ? v4l2_height_ / 3 : v4l2_height_; pixels_height_ = color_mode_ == COLOR ? v4l2_height_ / 3 : v4l2_height_;
} }
SIZE MultiFrameCapture::GetPaperSize(PaperSize paper, int dpi) SIZE MultiFrameCapture::GetPaperSize(PaperSize paper, int dpi)
{ {
@ -180,8 +180,8 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
int config_dpi = config.params.dpi; int config_dpi = config.params.dpi;
int config_color = config.params.isColor; int config_color = config.params.isColor;
resolution_ = config.params.dpi == 3 ? DPI_600 : DPI_300; //0:600dpi 1:300dpi config.params.dpi = 2||3 pc 1 代表200 2代表300 3代表600 resolution_ = config.params.dpi; //0:600dpi 1:300dpi config.params.dpi = 2||3 pc 1 代表200 2代表300 3代表600
color_mode_ = config.params.isColor == 1 ? COLOR : GRAY; color_mode_ = config.params.isColor;
is_correct_ = config.params.isCorrect; is_correct_ = config.params.isCorrect;
paper_size_ = config.params.pageSize; paper_size_ = config.params.pageSize;
is_double_paper_ = config.params.doubleFeeded; is_double_paper_ = config.params.doubleFeeded;
@ -190,17 +190,17 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
//int height = resolution_ == DPI_600 ? 342 : 900; //int height = resolution_ == DPI_600 ? 342 : 900;
int height = config.params.dpi == 3 ? 342 :(config.params.dpi == 2?999:513); int height = config.params.dpi == 3 ? 900 :(config.params.dpi == 2?999:300);
compute_height(WIDTH , height); compute_height(WIDTH , height);
video->HtCamSetClolr(color_mode_); video->HtCamSetClolr(color_mode_);
video->HtCamSetDpi(resolution_); video->HtCamSetDpi(resolution_);
FPGAConfigParam fpgaparam = GetFpgaparam(config_dpi, config_color); FPGAConfigParam fpgaparam = GetFpgaparam(config_dpi, config_color);
video->HtCamSetSpTime(fpgaparam.Sp, fpgaparam.MaxExp); // 2344 灰色 //2023-8-10 最新2650 video->HtCamSetSpTime(fpgaparam.Sp,49); // 2344 灰色 //2023-8-10 最新2650
if (color_mode_) if (color_mode_)
{ {
video->HtCamSetSpTime2(fpgaparam.HRatio); video->HtCamSetSpTime2(fpgaparam.Sp * 3);
} }
video->HtCamSetStSp(fpgaparam.MaxBright); video->HtCamSetStSp(fpgaparam.MaxBright);
@ -214,19 +214,21 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
{ {
cnt -=1 ; cnt -=1 ;
} }
if (m_config.params.dpi == 3)
{
cnt +=1 ;
}
video->HtCamSetFrameCnt(cnt); video->HtCamSetFrameCnt(cnt);
printf(" -----------------------设置帧数:%d------------------\r\n",cnt); printf(" -----------------------设置帧数:%d------------------\r\n",cnt);
} }
printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色"); printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色");
printf("分辨率:%d\r\n",resolution_ == DPI_600?600:300); printf("分辨率:%d\r\n",resolution_);
printf("V4L2宽%d 高:%d\r\n",v4l2_width_,v4l2_height_); printf("V4L2宽%d 高:%d\r\n",v4l2_width_,v4l2_height_);
printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_); printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_);
printf("fpga_height_:%d\r\n", fpga_height_); printf("fpga_height_:%d\r\n", fpga_height_);
printf("resolution_:%d\r\n", resolution_);
printf("color_mode_:%d\r\n", color_mode_); printf("color_mode_:%d\r\n", color_mode_);
printf("paper_size_:%d\r\n", paper_size_); printf("paper_size_:%d\r\n", paper_size_);
printf("paper_size_:%d\r\n", paper_size_); printf("paper_size_:%d\r\n", paper_size_);
@ -388,14 +390,14 @@ void MultiFrameCapture::snaprun()
//HG_JpegCompressInfo info = cmp.GetCompressedImg(mat); //HG_JpegCompressInfo info = cmp.GetCompressedImg(mat);
HG_JpegCompressInfo info ; HG_JpegCompressInfo info ;
if (m_config.params.dpi == 3 ) // if (resolution_ == DPI_600 )
{ // {
printf("600做拷贝\r\n"); // printf("600做拷贝\r\n");
info.pJpegData = (unsigned char *)malloc(frame_info.height * frame_info.width); // info.pJpegData = (unsigned char *)malloc(frame_info.height * frame_info.width);
memcpy(info.pJpegData , data , frame_info.height * frame_info.width); // memcpy(info.pJpegData , data , frame_info.height * frame_info.width);
info.dpi = true ; // info.dpi = 1 ;
} // }
else // else
{ {
info.pJpegData = data; info.pJpegData = data;
info.dpi = false ; info.dpi = false ;
@ -412,7 +414,7 @@ void MultiFrameCapture::snaprun()
info.width = frame_info.width; info.width = frame_info.width;
info.height = frame_info.height; info.height = frame_info.height;
// printf("获取数据 width:%d height:%d is_first:%d is_last:%d DataLength:%d\r\n",frame_info.width,frame_info.height,info.first_frame,info.last_frame,info.DataLength); printf("获取数据 width:%d height:%d is_first:%d is_last:%d DataLength:%d\r\n",frame_info.width,frame_info.height,info.first_frame,info.last_frame,info.DataLength);
m_glue.m_imageready(info); m_glue.m_imageready(info);
@ -443,7 +445,7 @@ void MultiFrameCapture::snaprun()
int channels = color_mode_ == 1 ? 3 : 1; int channels = color_mode_ == 1 ? 3 : 1;
int color_mode = video->HtCamGetColorMode(); int color_mode = video->HtCamGetColorMode();
int func_sig = 0; int func_sig = 0;
int time_out = resolution_ == DPI_600 ? 1000 : 600; ///这个时间是根据每帧的数据量来进行调测的 int time_out = resolution_ == DPI_600 ? 2000 : 600; ///这个时间是根据每帧的数据量来进行调测的
int time_out_cnt = 0; int time_out_cnt = 0;
if (color_mode_) if (color_mode_)
@ -475,24 +477,11 @@ void MultiFrameCapture::snaprun()
sw.reset(); sw.reset();
for (size_t i = 0; i <= frame_cnt ; i++) //frame_cnt -1 目前最好一帧采集会超时 所以多采集一帧 for (size_t i = 0; i <= frame_cnt ; i++) //frame_cnt -1 目前最好一帧采集会超时 所以多采集一帧
{ {
printf("***********设置的帧数:%d 正在采集第[%d]帧************\r\n",frame_info.frame_index,i); printf("***********设置的帧数:%d 正在采集第[%d]帧************\r\n",frame_info.frame_index,i +1);
frame_info.first_frame = i == 0 ? true : false; frame_info.first_frame = i == 0 ? true : false;
frame_info.last_frame = i == frame_cnt ? true : false; frame_info.last_frame = i == frame_cnt ? true : false;
func_sig = snap_func(frame_info, channels,time_out,i); func_sig = snap_func(frame_info, channels,time_out,i);
// if (func_sig == -1 ) //当前帧取图超时,在取一次!!! 一直超时 不就卡死了??? 这个地方还是需要加个时间限制几秒内一帧未取出就退了,返回异常状态吧?
// {
// i--;
// time_out +=200;
// time_out_cnt ++;
// if (time_out_cnt >=5)
// {
// break;
// }
// continue;
// }
if (b_stop_snap) if (b_stop_snap)
{ {
@ -500,29 +489,21 @@ void MultiFrameCapture::snaprun()
int ind = i + 1; //已采集了的帧数 int ind = i + 1; //已采集了的帧数
int val = frame_num - ind; //剩余还未采集的帧数 int val = frame_num - ind; //剩余还未采集的帧数
while (val) while (val > 0)
{ {
frame_info.last_frame = val == 1 ? true : false; frame_info.last_frame = val == 1 ? true : false;
frame_info.frame_index = frame_num; frame_info.frame_index = frame_num;
func_sig = snap_func(frame_info, channels,time_out ,ind);//同上面一样 func_sig = snap_func(frame_info, channels,time_out ,ind);//同上面一样
printf("-----------当前采集到第:[%d]帧 CIS总共采集[%d]帧 -------\r\n",ind,frame_num);
// if (func_sig == -1 )
// {
// time_out +=200;
// time_out_cnt ++;
// if (time_out_cnt >=5)
// {
// break;
// }
// continue;
// }
val--;
ind++; ind++;
if(m_config.params.dpi == 3) printf("-----------当前采集到第:[%d]帧 CIS总共采集[%d]帧 -------\r\n",ind,frame_num);
video->HtCamGetFrameNum(frame_num);
val = frame_num - ind;
if(resolution_ == DPI_600)
{ {
int d = 80; int d = 200;
this_thread::sleep_for(std::chrono::milliseconds(d)); this_thread::sleep_for(std::chrono::milliseconds(d));
} }
} }
@ -536,7 +517,7 @@ void MultiFrameCapture::snaprun()
////////////////////////////DPI 颜色不同 会导致数据大小不同所以这个地方延时肯定不一样 目前 60是200dpi///////////////////////// ////////////////////////////DPI 颜色不同 会导致数据大小不同所以这个地方延时肯定不一样 目前 60是200dpi/////////////////////////
if(m_config.params.dpi == 3) if(m_config.params.dpi == 3)
{ {
int d = 80; int d = 200;
this_thread::sleep_for(std::chrono::milliseconds(d)); this_thread::sleep_for(std::chrono::milliseconds(d));
} }
@ -616,13 +597,15 @@ static int temp_val = 0;
bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black) bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black)
{ {
printf("校正DPI[%d] 校正颜色:%s\n",dpi==1?200:(dpi==2?300:600),mode == IMAGE_COLOR?"彩色":"灰色"); printf("校正DPI[%d] 校正颜色:%s\n",dpi==1?200:(dpi==2?300:600),mode == IMAGE_COLOR?"彩色":"灰色");
int config_dpi = dpi == 1 ? 2 : dpi;
int config_dpi = dpi ;
const int offset_indexs[] = {3, 4, 5, 2, 1, 0 ,0, 1, 2, 5, 4, 3}; const int offset_indexs[] = {3, 4, 5, 2, 1, 0 ,0, 1, 2, 5, 4, 3};
int channels = mode == IMAGE_COLOR ? 3 : 1; int channels = mode == IMAGE_COLOR ? 3 : 1;
int height = 60; int height = 60;
int width = config_dpi == 0x02 ? 864 : (config_dpi == 0x03 ? 1728 : 864); int width = config_dpi == 0x02 ? 864 : (config_dpi == 0x03 ? 1728 : 576);
int orgimgwidth = width * 2 * 3 * channels; int orgimgwidth = width * 2 * 3 * channels;
printf("orgimgwidth:%d\r\n",orgimgwidth);
int dstwidth = width * 2 * 3; int dstwidth = width * 2 * 3;
@ -775,10 +758,10 @@ bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black)
cv::Scalar a = cv::mean(mrgmat(cv::Rect(0, 10, mrgmat.cols / 2, mrgmat.rows-10))); cv::Scalar a = cv::mean(mrgmat(cv::Rect(0, 10, mrgmat.cols / 2, mrgmat.rows-10)));
cv::Scalar b = cv::mean(mrgmat(cv::Rect(mrgmat.cols / 2, 10, mrgmat.cols / 2, mrgmat.rows-10))); cv::Scalar b = cv::mean(mrgmat(cv::Rect(mrgmat.cols / 2, 10, mrgmat.cols / 2, mrgmat.rows-10)));
static int indxxx=0; static int indxxx=0;
if(indxxx <= 10) // if(indxxx <= 10)
{ // {
cv::imwrite(std::to_string(++indxxx)+".bmp",mrgmat); // cv::imwrite(std::to_string(++indxxx)+".bmp",mrgmat);
} // }
for (char j = 0; j < 3; j++) for (char j = 0; j < 3; j++)
{ {
values[0][j] = a.val[2-j]; values[0][j] = a.val[2-j];
@ -1023,7 +1006,7 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
printf("openDevice dpi:%d mode:%d \r\n",dpi,mode); printf("openDevice dpi:%d mode:%d \r\n",dpi,mode);
reset_fpga(); reset_fpga();
bool dunnancis = true; bool dunnancis = true;
int channelwidth = dpi == 0x02 ? 864 : (dpi == 0x03 ? 1728 : 864); // 1296 2592 864 int channelwidth = dpi == 0x02 ? 864 : (dpi == 0x03 ? 1728 : 576); // 1296 2592 864
int channels = mode == 0x01 ? 3 : 1; int channels = mode == 0x01 ? 3 : 1;
int width = channelwidth * channels; int width = channelwidth * channels;
int frame_height = mode == 0x01 ? 60 * 3 : 60; int frame_height = mode == 0x01 ? 60 * 3 : 60;
@ -1031,13 +1014,13 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
int t_real_dpi = dpi == 1 ? 2 : (dpi == 2 ? 2 : 3); int t_real_dpi = dpi == 1 ? 2 : (dpi == 2 ? 2 : 3);
resolution_ = dpi == 3 ? DPI_600 : DPI_300; //0:600dpi 1:300dpi config.params.dpi = 2||3 pc 2代表300 3代表600 resolution_ = dpi; //dpi 1代表200 2代表300 3代表600
color_mode_ = mode == 1 ? COLOR : GRAY; color_mode_ = mode == 1 ? COLOR : GRAY;
compute_height(WIDTH , HEIGHT); compute_height(WIDTH , HEIGHT);
int config_dpi = resolution_ == DPI_600 ? 3 : 2; int config_dpi = resolution_;
int config_color = color_mode_ ==COLOR ? 1:0; int config_color = color_mode_ ==COLOR ? 1:0;
StopWatch swwv4l2open; StopWatch swwv4l2open;
@ -1048,10 +1031,10 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
FPGAConfigParam fpgaparam = GetFpgaparam(config_dpi, config_color); FPGAConfigParam fpgaparam = GetFpgaparam(config_dpi, config_color);
video->HtCamSetSpTime(fpgaparam.Sp,fpgaparam.MaxExp); // 2344 灰色 //2023-8-10 最新2650 video->HtCamSetSpTime(fpgaparam.Sp,49);
if (color_mode_) if (color_mode_)
{ {
video->HtCamSetSpTime2(fpgaparam.HRatio); video->HtCamSetSpTime2(fpgaparam.Sp * 3);
} }
video->HtCamSetStSp(fpgaparam.MaxBright); video->HtCamSetStSp(fpgaparam.MaxBright);
@ -1065,11 +1048,10 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
} }
printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色"); printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色");
printf("分辨率:%d\r\n",resolution_ == DPI_600?600:300); printf("分辨率:%d\r\n",resolution_);
printf("V4L2宽%d 高:%d\r\n",v4l2_width_,v4l2_height_); printf("V4L2宽%d 高:%d\r\n",v4l2_width_,v4l2_height_);
printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_); printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_);
printf("resolution_:%d\r\n", resolution_);
printf("color_mode_:%d\r\n", color_mode_); printf("color_mode_:%d\r\n", color_mode_);
printf("paper_size_:%d\r\n", paper_size_); printf("paper_size_:%d\r\n", paper_size_);
printf("paper_size_:%d\r\n", paper_size_); printf("paper_size_:%d\r\n", paper_size_);
@ -1104,7 +1086,7 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
if (m_glue.m_deviceevent) if (m_glue.m_deviceevent)
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, log); m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, log);
int config_dpi = resolution_ == DPI_600 ? 3 : 2; int config_dpi = resolution_;
int config_color = color_mode_ ==COLOR ? 1:0; int config_color = color_mode_ ==COLOR ? 1:0;
configFPGAParam(mode, dpi); configFPGAParam(mode, dpi);
@ -1144,7 +1126,7 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
std::this_thread::sleep_for(std::chrono::milliseconds(5)); std::this_thread::sleep_for(std::chrono::milliseconds(5));
isDone = saveLutImg(dpi, mode, false); // 0 color_black 1 color_white 2 gray_balck 3 gray_white isDone = saveLutImg(dpi, mode, false); // 0 color_black 1 color_white 2 gray_balck 3 gray_white
video->HtCamStopVideoCapturing(); video->HtCamStopVideoCapturing();
this_thread::sleep_for(std::chrono::seconds(2)); this_thread::sleep_for(std::chrono::milliseconds(200));
i++; i++;
} }
printf("creatcorrectconfig %s \n", (mode == IMAGE_COLOR ? " Color" : " Gray")); printf("creatcorrectconfig %s \n", (mode == IMAGE_COLOR ? " Color" : " Gray"));

View File

@ -12,9 +12,10 @@ class Gpio;
class GpioOut; class GpioOut;
#define WIDTH 5184 #define WIDTH 5184
#define HEIGHT 951 //只能为3的倍数 #define HEIGHT 600 //只能为3的倍数
#define DPI_600 0 #define DPI_600 3
#define DPI_300 1 #define DPI_300 2
#define DPI_200 1
#define COLOR 1 #define COLOR 1
#define GRAY 0 #define GRAY 0
typedef struct hg_tag_SIZE typedef struct hg_tag_SIZE
@ -83,7 +84,7 @@ private:
//void myFloodFill(cv::Mat& image, bool isTwoSide); //void myFloodFill(cv::Mat& image, bool isTwoSide);
private: private:
unsigned int resolution_; // 分辨率 //0:600dpi 1:300dpi unsigned int resolution_; // 分辨率 //3:600dpi 2:300dpi 1:200dpi
unsigned int v4l2_width_; // v4l2 图像宽 unsigned int v4l2_width_; // v4l2 图像宽
unsigned int v4l2_height_; // v4l2 图像高 unsigned int v4l2_height_; // v4l2 图像高