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

#include <usb_cam.h>

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

Public 成员函数

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

详细描述

在文件 usb_cam.h107 行定义.

构造及析构函数说明

◆ UsbCam()

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

在文件 usb_cam.cc55 行定义.

56 : fd_(-1),
57 buffers_(NULL),
58 n_buffers_(0),
59 is_capturing_(false),
60 image_seq_(0),
61 device_wait_sec_(2),
62 last_nsec_(0),
63 frame_drop_interval_(0.0) {}

◆ ~UsbCam()

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

在文件 usb_cam.cc65 行定义.

65 {
66 stop_capturing();
67 uninit_device();
68 close_device();
69}

成员函数说明

◆ init()

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

在文件 usb_cam.cc71 行定义.

71 {
72 config_ = cameraconfig;
73
74 if (config_->pixel_format() == "yuyv") {
75 pixel_format_ = V4L2_PIX_FMT_YUYV;
76 } else if (config_->pixel_format() == "uyvy") {
77 pixel_format_ = V4L2_PIX_FMT_UYVY;
78 } else if (config_->pixel_format() == "mjpeg") {
79 pixel_format_ = V4L2_PIX_FMT_MJPEG;
80 } else if (config_->pixel_format() == "yuvmono10") {
81 pixel_format_ = V4L2_PIX_FMT_YUYV;
82 config_->set_monochrome(true);
83 } else if (config_->pixel_format() == "rgb24") {
84 pixel_format_ = V4L2_PIX_FMT_RGB24;
85 } else {
86 pixel_format_ = V4L2_PIX_FMT_YUYV;
87 AERROR << "Wrong pixel fromat:" << config_->pixel_format()
88 << ",must be yuyv | uyvy | mjpeg | yuvmono10 | rgb24";
89 return false;
90 }
91 if (pixel_format_ == V4L2_PIX_FMT_MJPEG) {
92 init_mjpeg_decoder(config_->width(), config_->height());
93 }
94
95 // Warning when diff with last > 1.5* interval
96 frame_warning_interval_ = static_cast<float>(1.5 / config_->frame_rate());
97 // now max fps 30, we use an appox time 0.9 to drop image.
98 frame_drop_interval_ = static_cast<float>(0.9 / config_->frame_rate());
99
100
101 return true;
102}
#define AERROR
Definition log.h:44

◆ is_capturing()

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

在文件 usb_cam.cc996 行定义.

996{ return is_capturing_; }

◆ poll()

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

在文件 usb_cam.cc231 行定义.

232 {
233 raw_image->is_new = 0;
234 // free memory in this struct desturctor
235 memset(raw_image->image, 0, raw_image->image_size * sizeof(char));
236
237 fd_set fds;
238 struct timeval tv;
239 int r = 0;
240
241 FD_ZERO(&fds);
242 FD_SET(fd_, &fds);
243
244 /* Timeout. */
245 tv.tv_sec = 2;
246 tv.tv_usec = 0;
247
248 r = select(fd_ + 1, &fds, nullptr, nullptr, &tv);
249
250 if (-1 == r) {
251 if (EINTR == errno) {
252 return false;
253 }
254
255 // errno_exit("select");
256 reconnect();
257 }
258
259 if (0 == r) {
260 AERROR << "select timeout";
261 reconnect();
262 }
263
264 int get_new_image = read_frame(raw_image, sensor_raw_image);
265
266 if (!get_new_image) {
267 return false;
268 }
269
270 raw_image->is_new = 1;
271 return true;
272}

◆ wait_for_device()

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

在文件 usb_cam.cc1073 行定义.

1073 {
1074 if (is_capturing_) {
1075 ADEBUG << "is capturing";
1076 return true;
1077 }
1078 if (!open_device()) {
1079 return false;
1080 }
1081 if (!init_device()) {
1082 close_device();
1083 return false;
1084 }
1085 if (!start_capturing()) {
1086 uninit_device();
1087 close_device();
1088 return false;
1089 }
1090#ifndef __aarch64__
1091 // will continue when trigger failed for self-trigger camera
1092 set_adv_trigger();
1093#endif
1094 return true;
1095}
#define ADEBUG
Definition log.h:41

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