openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.0 KiB

#ifndef CAMERA_H
#define CAMERA_H
#include <stdint.h>
#include <stdbool.h>
#include <pthread.h>
#include <czmq.h>
#include "common/mat.h"
#include "common/visionbuf.h"
#include "common/buffering.h"
#include "camera_common.h"
#include "media/cam_req_mgr.h"
#define FRAME_BUF_COUNT 4
#define METADATA_BUF_COUNT 4
#ifdef __cplusplus
extern "C" {
#endif
typedef struct CameraState {
CameraInfo ci;
FrameMetadata camera_bufs_metadata[FRAME_BUF_COUNT];
TBuffer camera_tb;
int frame_size;
float digital_gain;
5 years ago
float analog_gain_frac;
int exposure_time;
mat3 transform;
int device_iommu;
int cdm_iommu;
int video0_fd;
int video1_fd;
int isp_fd;
int sensor_fd;
int csiphy_fd;
int camera_num;
VisionBuf *bufs;
uint32_t session_handle;
uint32_t sensor_dev_handle;
uint32_t isp_dev_handle;
uint32_t csiphy_dev_handle;
int32_t link_handle;
int buf0_handle;
int buf_handle[FRAME_BUF_COUNT];
int request_ids[FRAME_BUF_COUNT];
int sync_objs[FRAME_BUF_COUNT];
5 years ago
int frame_id;
struct cam_req_mgr_session_info req_mgr_session_info;
5 years ago
// static packet handles for runtime
uint32_t poke_cam_pkt_handle;
struct cam_packet *poke_cam_pkt;
uint32_t i2c_cam_pkt_handle;
struct cam_packet *i2c_cam_pkt;
struct cam_cmd_power *i2c_cam_pwr;
struct cam_packet *isp_cam_pkt;
uint32_t *isp_config_buf1;
} CameraState;
typedef struct DualCameraState {
int device;
int video0_fd;
int video1_fd;
int isp_fd;
CameraState rear;
CameraState front;
CameraState wide;
#ifdef NOSCREEN
zsock_t *rgb_sock;
#endif
pthread_mutex_t isp_lock;
} DualCameraState;
void cameras_init(DualCameraState *s);
void cameras_open(DualCameraState *s, VisionBuf *camera_bufs_rear, VisionBuf *camera_bufs_focus, VisionBuf *camera_bufs_stats, VisionBuf *camera_bufs_front, VisionBuf *camera_bufs_wide);
void cameras_run(DualCameraState *s);
void camera_autoexposure(CameraState *s, float grey_frac);
#ifdef NOSCREEN
void sendrgb(DualCameraState *s, void* dat, int len);
#endif
#ifdef __cplusplus
} // extern "C"
#endif
#endif