Merge branch 'master' of http://192.168.10.5:8099/huagao/zynq_7010
This commit is contained in:
commit
c29f703fc9
177
HCamDevice.cpp
177
HCamDevice.cpp
|
@ -16,6 +16,9 @@
|
|||
//#include "camconfig.h"
|
||||
#include <iostream>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
#include <fstream>
|
||||
#include "logs_out.h"
|
||||
|
||||
|
||||
|
@ -112,7 +115,7 @@ HCamDevice::HCamDevice()
|
|||
v4lBufferCount = 3;
|
||||
v4l2buftype = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
nplanes = 1; // only use one plane
|
||||
drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE;
|
||||
drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE;//V4L2_BUF_TYPE_VIDEO_CAPTURE;//;
|
||||
v4l2memtype = V4L2_MEMORY_MMAP;
|
||||
|
||||
captureBufers = NULL;
|
||||
|
@ -139,8 +142,10 @@ int HCamDevice::open_video(int width,int height)
|
|||
}
|
||||
videofd = fd;
|
||||
camera_dbg("open video succeed\n");
|
||||
|
||||
|
||||
set_size(width,height);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
int HCamDevice::close_video()
|
||||
|
@ -150,6 +155,7 @@ int HCamDevice::close_video()
|
|||
return -1;
|
||||
}
|
||||
close(videofd);
|
||||
HtCamStopSampling();
|
||||
camera_dbg("close video succeed\n");
|
||||
return 0;
|
||||
}
|
||||
|
@ -200,75 +206,75 @@ int HCamDevice::HtCamEventWorkThread(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// void HCamDevice::HtCamStartVideoCapturing()
|
||||
// {
|
||||
// uint8_t n_buffers;
|
||||
// struct v4l2_buffer buf;
|
||||
// if (((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status)
|
||||
// {
|
||||
// printf("Run the scan multiple times %d\n", ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status);
|
||||
// return ;
|
||||
// }
|
||||
// for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++)
|
||||
// {
|
||||
// memset(&buf, 0, sizeof(buf));
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// buf.memory = V4L2_MEMORY_MMAP;
|
||||
// buf.index = n_buffers;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// {
|
||||
// buf.length = nplanes;
|
||||
// buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
|
||||
// }
|
||||
void HCamDevice::HtCamStartVideoCapturing()
|
||||
{
|
||||
uint8_t n_buffers;
|
||||
struct v4l2_buffer buf;
|
||||
// if (((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status)
|
||||
// {
|
||||
// printf("Run the scan multiple times %d\n", ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status);
|
||||
// return ;
|
||||
// }
|
||||
for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++)
|
||||
{
|
||||
memset(&buf, 0, sizeof(buf));
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = n_buffers;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
{
|
||||
buf.length = nplanes;
|
||||
buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
|
||||
}
|
||||
|
||||
// if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// camera_err(" VIDIOC_QBUF error\n");
|
||||
if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
|
||||
{
|
||||
//((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_QBUF error\n");
|
||||
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// free(buf.m.planes);
|
||||
// free(captureBufers);
|
||||
// close(videofd);
|
||||
// return;
|
||||
// }
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// free(buf.m.planes);
|
||||
// }
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
free(buf.m.planes);
|
||||
free(captureBufers);
|
||||
close(videofd);
|
||||
return;
|
||||
}
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
free(buf.m.planes);
|
||||
}
|
||||
|
||||
// enum v4l2_buf_type type;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
|
||||
// return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
|
||||
// camera_print(" stream on succeed\n");
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
enum v4l2_buf_type type;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
|
||||
{
|
||||
//((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
|
||||
camera_print(" stream on succeed\n");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// void HCamDevice::HtCamStopVideoCapturing()
|
||||
// {
|
||||
// enum v4l2_buf_type type;
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1)
|
||||
// camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno));
|
||||
// }
|
||||
void HCamDevice::HtCamStopVideoCapturing()
|
||||
{
|
||||
enum v4l2_buf_type type;
|
||||
//((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1)
|
||||
camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno));
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamExitVideoCapturing()
|
||||
{
|
||||
|
@ -294,7 +300,7 @@ void HCamDevice::HtCamExitVideoCapturing()
|
|||
}
|
||||
}
|
||||
|
||||
int HCamDevice::HtCamWaitVideoCapture(int msTimeout)
|
||||
int HCamDevice::wait(int msTimeout)
|
||||
{
|
||||
struct pollfd pfd;
|
||||
pfd.fd = videofd;
|
||||
|
@ -306,9 +312,9 @@ int HCamDevice::HtCamWaitVideoCapture(int msTimeout)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
||||
int HCamDevice::read_frame(void **pbuf, int timeout)
|
||||
{
|
||||
if (!HtCamWaitVideoCapture(timeout))
|
||||
if (!wait(timeout))
|
||||
{
|
||||
camera_err("read frame time out\n");
|
||||
if ((lastSucceedBufferIndex + 1) >= v4lBufferCount)
|
||||
|
@ -344,7 +350,7 @@ int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
|||
camera_dbg("************QBUF[%d] FINISH**************", buf.index)
|
||||
else
|
||||
{
|
||||
return -2;
|
||||
//return -2;
|
||||
}
|
||||
lastSucceedBufferIndex = buf.index;
|
||||
*pbuf = captureBufers[buf.index].start;
|
||||
|
@ -353,7 +359,7 @@ int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
|||
{
|
||||
free(buf.m.planes);
|
||||
}
|
||||
return buf.index;
|
||||
return buf.length;
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamChangeAdjustSpTime(uint32_t sp_time_gap, uint32_t sp_time_rw)
|
||||
|
@ -387,6 +393,7 @@ void HCamDevice::HtCamChangeAdjustPhase(uint16_t times, uint8_t dir)
|
|||
// This function is prohibited
|
||||
int HCamDevice::HtCamStartSampling()
|
||||
{
|
||||
printf("设置开始采图寄存器\r\n");
|
||||
uint32_t *CamReg;
|
||||
if (virBaseAddr == NULL)
|
||||
return -1;
|
||||
|
@ -404,6 +411,7 @@ int HCamDevice::HtCamStopSampling()
|
|||
uint32_t *CamReg;
|
||||
if (virBaseAddr == NULL)
|
||||
return -1;
|
||||
printf("设置停止采图寄存器\r\n");
|
||||
CamReg = (uint32_t *)virBaseAddr;
|
||||
|
||||
CamReg[10] |= (HT_CAM_REG_CR_STOPSAMPLE_MASK);
|
||||
|
@ -414,8 +422,14 @@ int HCamDevice::HtCamStopSampling()
|
|||
|
||||
int HCamDevice::set_size(int width, int height)
|
||||
{
|
||||
v4lWidth = width;
|
||||
v4lHeight = height;
|
||||
// v4lWidth = width;
|
||||
// v4lHeight = height;
|
||||
v4lWidth = 15552;
|
||||
v4lHeight = 128;
|
||||
init_device();
|
||||
HtCamStartVideoCapturing();
|
||||
HtCamChangeDpi(1);
|
||||
virBaseAddr[0X0D] = 0x00CE0080;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -475,11 +489,13 @@ int HCamDevice::init_sample()
|
|||
return ret;
|
||||
}
|
||||
|
||||
int HCamDevice::init_capture()
|
||||
int HCamDevice::init_device()
|
||||
{
|
||||
printf("打开寄存器基地址成功,开始初始化设备CIS\r\n");
|
||||
struct v4l2_format fmt;
|
||||
struct v4l2_control ctrl;
|
||||
CLEAR(fmt);
|
||||
init_sample();
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
{
|
||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
|
@ -549,6 +565,7 @@ int HCamDevice::init_capture()
|
|||
{
|
||||
camera_err("Fail to set control:%s.", strerror(errno));
|
||||
}
|
||||
init_video_buffer();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -637,10 +654,7 @@ int HCamDevice::init_video_buffer()
|
|||
int HCamDevice::init_dev()
|
||||
{
|
||||
init_fd();
|
||||
init_sample();
|
||||
init_capture();
|
||||
|
||||
init_video_buffer();
|
||||
|
||||
// TestPattern 1
|
||||
HtCamSwitchSampleModes(0);
|
||||
// HtCamChangeExposureValue(500);
|
||||
|
@ -914,8 +928,7 @@ uint32_t HCamDevice::HtCamReadPsRegs(uint8_t reg_addr)
|
|||
return pPsReg[reg_addr];
|
||||
}
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
void HCamDevice::HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value)
|
||||
{
|
||||
printf("reg addr %d\r\n" ,reg_addr );
|
||||
|
@ -1078,7 +1091,7 @@ void HCamDevice::HtCamResizeBuffer(int width, int height, int number)
|
|||
HtCamExitVideoCapturing();
|
||||
init_fd();
|
||||
init_sample();
|
||||
init_capture();
|
||||
init_device();
|
||||
init_video_buffer();
|
||||
|
||||
camera_dbg("v4lWidth = %d, v4lHeight = %d, v4lBufferCount = %d\n", v4lWidth, v4lHeight, v4lBufferCount);
|
||||
|
|
18
HCamDevice.h
18
HCamDevice.h
|
@ -73,10 +73,10 @@ public:
|
|||
int open_video(int width, int height);
|
||||
int close_video();
|
||||
|
||||
// void HtCamStartVideoCapturing();
|
||||
//void HtCamStopVideoCapturing();
|
||||
int HtCamWaitVideoCapture(int msTimeout);
|
||||
int HtCamReadCaptureFrame(void **pbuf, int timeout);
|
||||
void HtCamStartVideoCapturing();
|
||||
void HtCamStopVideoCapturing();
|
||||
int wait(int msTimeout);
|
||||
int read_frame(void **pbuf, int timeout);
|
||||
int width() { return v4lWidth; }
|
||||
int height() { return v4lHeight; }
|
||||
|
||||
|
@ -110,11 +110,14 @@ public:
|
|||
|
||||
// void setConfig(Camconfig* _config){config = _config;}
|
||||
void HtCamChangeMonoStartSample(int start_sample);
|
||||
|
||||
int HtCamStartSampling();
|
||||
int HtCamStopSampling();
|
||||
private:
|
||||
int set_size(int width, int height);
|
||||
int init_fd();
|
||||
int init_sample();
|
||||
int init_capture();
|
||||
int init_device();
|
||||
int init_video_buffer();
|
||||
int init_dev();
|
||||
void init_ps_regs();
|
||||
|
@ -124,8 +127,7 @@ private:
|
|||
void HtCamResizeBuffer(int width, int height, int number);
|
||||
void HtCamChangeAdjustSpTime(uint32_t sp_time_gap, uint32_t sp_time_rw);
|
||||
void HtCamChangeAdjustPhase(uint16_t times, uint8_t dir);
|
||||
int HtCamStartSampling();
|
||||
int HtCamStopSampling();
|
||||
|
||||
void HtCamChangeDpi(int dpi);
|
||||
//bool HtCamPsDpiChange(int dpi);
|
||||
|
||||
|
@ -142,7 +144,7 @@ private:
|
|||
|
||||
const unsigned int phyBaseAddr = 0x40010000;
|
||||
const unsigned int AddrMapSize = 0x100;
|
||||
unsigned int *virBaseAddr;
|
||||
unsigned int *virBaseAddr; //寄存器基地址
|
||||
|
||||
int memfd;
|
||||
std::string subDeviceName;
|
||||
|
|
|
@ -179,7 +179,7 @@ void MultiFrameCapture::open()
|
|||
printf(" getFrame_counter_val %d \n", m_capFpageregs->getFrame_counter_val());
|
||||
// video->read_frame(,400);
|
||||
unsigned char *buf = NULL;
|
||||
video->HtCamReadCaptureFrame((void **)&buf, 400);
|
||||
video->read_frame((void **)&buf, 400);
|
||||
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
printf("abort first frame \n");
|
||||
|
||||
|
@ -203,6 +203,7 @@ void MultiFrameCapture::snap()
|
|||
std::lock_guard<std::mutex> m_lock(m_mtx_snap);
|
||||
b_stop_snap = b_end_snap = false;
|
||||
m_capFpageregs->capture();
|
||||
video->HtCamStartSampling();
|
||||
snaped_index++;
|
||||
m_cv_snap.notify_all();
|
||||
#endif
|
||||
|
@ -214,6 +215,7 @@ void MultiFrameCapture::stopsnap(bool autosize)
|
|||
{
|
||||
b_stop_snap = true;
|
||||
}
|
||||
video->HtCamStopSampling();
|
||||
}
|
||||
|
||||
void MultiFrameCapture::close()
|
||||
|
@ -339,7 +341,7 @@ void MultiFrameCapture::waitsnapdone(int state)
|
|||
#ifdef TEST_SIMCAP
|
||||
HG_JpegCompressInfo info;
|
||||
info.DataLength = m_test_pimg_len;
|
||||
info.pJpegData = m_test_pimg;
|
||||
info.pJpegData = (unsigned char *)m_test_pimg;
|
||||
|
||||
m_glue.m_imageready(info);
|
||||
#else
|
||||
|
@ -363,7 +365,7 @@ void MultiFrameCapture::waitsnapdone(int state)
|
|||
|
||||
bool MultiFrameCapture::IsImageQueueEmpty()
|
||||
{
|
||||
printf(" m_frameinfos.Size = %d iImageremain = %d bScanning = %d\n", m_frameinfos.Size(), iImageremain.operator int(), bScanning);
|
||||
//printf(" m_frameinfos.Size = %d iImageremain = %d bScanning = %d\n", m_frameinfos.Size(), iImageremain.operator int(), bScanning);
|
||||
return (m_frameinfos.Size() == 0 && iImageremain == 0) && !bScanning;
|
||||
}
|
||||
|
||||
|
@ -536,7 +538,7 @@ void MultiFrameCapture::snaprun()
|
|||
{
|
||||
// void *data = video->read_frame(500);
|
||||
char *data = NULL;
|
||||
video->HtCamReadCaptureFrame((void **)&data, 400);
|
||||
video->read_frame((void **)&data, 400);
|
||||
frame_info.lost_frame = data ? false : true;
|
||||
frame_info.last_frame = last_frame;
|
||||
frame_info.frame_index = frame_index;
|
||||
|
@ -546,6 +548,7 @@ void MultiFrameCapture::snaprun()
|
|||
// cv::Mat mat(frame_info.height, frame_info.width, CV_8UC1, data);
|
||||
frame_info.data = (char *)data;
|
||||
m_frameinfos.Put(frame_info);
|
||||
printf("获取数据\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1118,10 +1121,24 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
.selftest = 0,
|
||||
.sp = fpgaparam.Sp}; // 600DPI 0x1450 300DPI 0xe10
|
||||
|
||||
configFPGAParam(mode, dpi);
|
||||
// 2023 7-15 屏蔽
|
||||
// m_capFpageregs->setRegs(0x01, *((int *)(&fpgamod)));
|
||||
// m_capFpageregs->setSample(startsample);
|
||||
// m_capFpageregs->setVsp(vsp_A, vsp_B);
|
||||
// m_capFpageregs->enableLed(true);
|
||||
// m_capFpageregs->setEnTestCol(false);
|
||||
// m_capFpageregs->setEnTestBit(false);
|
||||
|
||||
// m_capFpageregs->setFrame_interval_max(static_cast<int>(sp_dst * 4 / (mode ? 1 : 3))); //dpi > 2 ? 7200 : 3600
|
||||
// m_capFpageregs->setFrame_interval_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540
|
||||
|
||||
// 2023 7-15 屏蔽
|
||||
// m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600
|
||||
// m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540
|
||||
configFPGAParam(mode, dpi);
|
||||
StopWatch swwv4l2open;
|
||||
int ret = video->open_video(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
//int ret = video->open(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
// int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
if (ret < 0)
|
||||
{
|
||||
return;
|
||||
|
@ -1137,7 +1154,7 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
|
||||
// video->read_frame(200);
|
||||
char *buf = NULL;
|
||||
video->HtCamReadCaptureFrame((void **)&buf, 200);
|
||||
video->read_frame((void **)&buf, 200);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
printf("abort first frame \n");
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "CorrectParam.h"
|
||||
#include "IPreproc.h"
|
||||
|
||||
#define TEST_SIMCAP
|
||||
//#define TEST_SIMCAP
|
||||
|
||||
class FpgaComm;
|
||||
class gVideo;
|
||||
|
|
Loading…
Reference in New Issue