Apollo 11.0
自动驾驶开放平台
apollo::drivers::camera::UsbCam类 参考

#include <usb_cam.h>

apollo::drivers::camera::UsbCam 的协作图:

Public 成员函数

 UsbCam ()
 
virtual ~UsbCam ()
 
virtual bool init (const std::shared_ptr< apollo::drivers::camera::config::Config > &camera_config)
 
virtual CameraDeviceState poll (const CameraImagePtr &raw_image, const CameraImagePtr &sensor_raw_image)
 
bool is_capturing ()
 
bool wait_for_device (void)
 

详细描述

在文件 usb_cam.h 第 110 行定义.

构造及析构函数说明

◆ UsbCam()

apollo::drivers::camera::UsbCam::UsbCam ( )

在文件 usb_cam.cc 第 68 行定义.

68 :
69 fd_(-1),
70#ifdef __aarch64__
71 time_compensator_fd_(-1),
72#endif
73 buffers_(NULL),
74 n_buffers_(0),
75 is_capturing_(false),
76 image_seq_(0),
77 device_wait_sec_(2),
78 last_nsec_(0),
79 frame_drop_interval_(0.0) {
80}

◆ ~UsbCam()

apollo::drivers::camera::UsbCam::~UsbCam ( )
virtual

在文件 usb_cam.cc 第 82 行定义.

82 {
83 stop_capturing();
84 uninit_device();
85 close_device();
86#ifdef __aarch64__
87 handler_.Destory();
88#endif
89}

成员函数说明

◆ init()

bool apollo::drivers::camera::UsbCam::init ( const std::shared_ptr< apollo::drivers::camera::config::Config > &  camera_config)
virtual

在文件 usb_cam.cc 第 91 行定义.

91 {
92 config_ = cameraconfig;
93
94 if (config_->pixel_format() == "yuyv") {
95 pixel_format_ = V4L2_PIX_FMT_YUYV;
96 } else if (config_->pixel_format() == "uyvy") {
97 pixel_format_ = V4L2_PIX_FMT_UYVY;
98 } else if (config_->pixel_format() == "mjpeg") {
99 pixel_format_ = V4L2_PIX_FMT_MJPEG;
100 } else if (config_->pixel_format() == "yuvmono10") {
101 pixel_format_ = V4L2_PIX_FMT_YUYV;
102 config_->set_monochrome(true);
103 } else if (config_->pixel_format() == "rgb24") {
104 pixel_format_ = V4L2_PIX_FMT_RGB24;
105 } else {
106 pixel_format_ = V4L2_PIX_FMT_YUYV;
107 AERROR << "Wrong pixel fromat:" << config_->pixel_format()
108 << ",must be yuyv | uyvy | mjpeg | yuvmono10 | rgb24";
109 return false;
110 }
111 if (pixel_format_ == V4L2_PIX_FMT_MJPEG) {
112 init_mjpeg_decoder(config_->width(), config_->height());
113 }
114
115 // Warning when diff with last > 1.5* interval
116 frame_warning_interval_ = static_cast<float>(1.5 / config_->frame_rate());
117 // now max fps 30, we use an appox time 0.9 to drop image.
118 frame_drop_interval_ = static_cast<float>(0.9 / config_->frame_rate());
119 frame_drop_interval_ns_ = static_cast<uint64_t>(frame_drop_interval_ * 1000 * 1000 * 1000);
120
121#ifdef __aarch64__
122 handler_ = CudaConvertHandler(config_->width(), config_->height());
123 if (!handler_.Init()) {
124 AERROR << "Init cuda convert handler error";
125 return false;
126 }
127#endif
128
129 return true;
130}
#define AERROR
Definition log.h:44

◆ is_capturing()

bool apollo::drivers::camera::UsbCam::is_capturing ( )

在文件 usb_cam.cc 第 1087 行定义.

1087 {
1088 return is_capturing_;
1089}

◆ poll()

CameraDeviceState apollo::drivers::camera::UsbCam::poll ( const CameraImagePtr &  raw_image,
const CameraImagePtr &  sensor_raw_image 
)
virtual

在文件 usb_cam.cc 第 280 行定义.

280 {
281 raw_image->is_new = 0;
282 // no need to memeset
283 // memset(raw_image->image, 0, raw_image->image_size * sizeof(char));
284
285 int r = 0;
286
287 FD_ZERO(&fds_);
288 FD_SET(fd_, &fds_);
289
290 /* Timeout. */
291 tv_.tv_sec = 2;
292 tv_.tv_usec = 0;
293
294 r = select(fd_ + 1, &fds_, nullptr, nullptr, &tv_);
295
296 if (-1 == r) {
297 if (EINTR == errno) {
299 }
300
301 // errno_exit("select");
302 reconnect();
303 }
304
305 if (0 == r) {
306 AERROR << "select timeout";
307 reconnect();
308 }
309
310 CameraDeviceState s = read_frame(raw_image, sensor_raw_image);
311
313 raw_image->is_new = 1;
314 }
315
316 return s;
317}

◆ wait_for_device()

bool apollo::drivers::camera::UsbCam::wait_for_device ( void  )

在文件 usb_cam.cc 第 1164 行定义.

1164 {
1165 if (is_capturing_) {
1166 ADEBUG << "is capturing";
1167 return true;
1168 }
1169 if (!open_device()) {
1170 return false;
1171 }
1172 if (!init_device()) {
1173 close_device();
1174 return false;
1175 }
1176 if (!start_capturing()) {
1177 uninit_device();
1178 close_device();
1179 return false;
1180 }
1181#ifndef __aarch64__
1182 // will continue when trigger failed for self-trigger camera
1183 set_adv_trigger();
1184#endif
1185 return true;
1186}
#define ADEBUG
Definition log.h:41

该类的文档由以下文件生成: