39 #include <asm/types.h> 41 #include <sys/ioctl.h> 45 #include <immintrin.h> 46 #include <x86intrin.h> 50 #include <libavcodec/avcodec.h> 51 #include <libavutil/mem.h> 52 #include <libswscale/swscale.h> 53 #include <linux/videodev2.h> 56 #include <libavcodec/version.h> 57 #if LIBAVCODEC_VERSION_MAJOR < 55 58 #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG 67 #include "modules/drivers/camera/proto/config.pb.h" 73 using apollo::drivers::camera::config::Config;
74 using apollo::drivers::camera::config::IO_METHOD_MMAP;
75 using apollo::drivers::camera::config::IO_METHOD_READ;
76 using apollo::drivers::camera::config::IO_METHOD_UNKNOWN;
77 using apollo::drivers::camera::config::IO_METHOD_USERPTR;
78 using apollo::drivers::camera::config::RGB;
79 using apollo::drivers::camera::config::YUYV;
93 if (image !=
nullptr) {
94 free(reinterpret_cast<void*>(image));
112 virtual bool init(
const std::shared_ptr<Config>& camera_config);
114 virtual bool poll(
const CameraImagePtr& raw_image);
117 bool wait_for_device(
void);
120 int xioctl(
int fd,
int request,
void* arg);
121 bool init_device(
void);
122 bool uninit_device(
void);
124 void set_device_config();
126 void set_auto_focus(
int value);
128 void set_v4l_parameter(
const std::string& param,
int value);
129 void set_v4l_parameter(
const std::string& param,
const std::string& value);
131 int init_mjpeg_decoder(
int image_width,
int image_height);
132 void mjpeg2rgb(
char* mjepg_buffer,
int len,
char* rgb_buffer,
int pixels);
135 int convert_yuv_to_rgb_pixel(
int y,
int u,
int v);
136 int convert_yuv_to_rgb_buffer(
unsigned char* yuv,
unsigned char* rgb,
140 bool init_read(
unsigned int buffer_size);
141 bool init_mmap(
void);
142 bool init_userp(
unsigned int buffer_size);
143 bool set_adv_trigger(
void);
144 bool close_device(
void);
145 bool open_device(
void);
146 bool read_frame(CameraImagePtr raw_image);
147 bool process_image(
void* src,
int len, CameraImagePtr dest);
148 bool start_capturing(
void);
149 bool stop_capturing(
void);
153 std::shared_ptr<Config> config_;
157 unsigned int n_buffers_;
161 AVFrame* avframe_camera_;
162 AVFrame* avframe_rgb_;
164 AVDictionary* avoptions_;
165 AVCodecContext* avcodec_context_;
166 int avframe_camera_size_;
167 int avframe_rgb_size_;
168 struct SwsContext* video_sws_;
170 float frame_warning_interval_ = 0.0;
171 float device_wait_sec_ = 0.0;
172 uint64_t last_nsec_ = 0;
173 float frame_drop_interval_ = 0.0;
int is_new
Definition: usb_cam.h:87
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
int tv_sec
Definition: usb_cam.h:88
int height
Definition: usb_cam.h:84
std::shared_ptr< CameraImage > CameraImagePtr
Definition: usb_cam.h:100
~CameraImage()
Definition: usb_cam.h:92
size_t length
Definition: usb_cam.h:104
void * start
Definition: usb_cam.h:103
int width
Definition: usb_cam.h:83
Definition: usb_cam.h:102
apollo::cyber::base::std value
Definition: usb_cam.h:107
int image_size
Definition: usb_cam.h:86
int bytes_per_pixel
Definition: usb_cam.h:85
int tv_usec
Definition: usb_cam.h:89
char * image
Definition: usb_cam.h:90