Files
dragonpilot/system/camerad/cameras/camera_common.h
ZwX1616 331c7b103a image processing refactor and test (#32249)
* it's something

* backup

* 16:10

* cleanup

* this is fine

* close

* remove some junk

* no heck

* disos

* real 10

* for some reason this is flipped

* 20hz

* no return

* ae

* tear

* need curve laster

* correct real gains

* fix time

* cleanup

* why the scam

* disable for now

* 0.7

* hdr

* that doesnt work

* what

* hugeoof

* clean up

* cleanup

* fix regs

* welp cant

* is this corrent

* it is sq

* remove

* back

* stg10bit

* back2ten

* Revert "remove"

This reverts commit 18712ab7e103c12621c929cd0f772ecb9b348247.

* 20hz and swb

* correct height

* 10bit

* ui hack for now

* slight

* perfect

* blk64

* ccm

* fix page faults

* template

* set 4x

* is this fine

* try

* this seems to work

* Revert "this seems to work"

This reverts commit d3c9023d3f14bd9394fed2d6276dba777ed0e606.

* needs to be static

* close

* 64 is optimal

* 2

* take

* not 1

* offset

* whats going on

* i have no idea

* less resistence

* box defs

* no

* reduce blur artifacts

* simplify

* fix

* fake short is too much for bright

* can be subzero

* should not use lsvc

* no wasted bit

* cont no slow

* no less than 10bit

* it is based

* wrong

* right

* quart

* shift

* raise noise floor

* 4.5/4.7

* same ballpark

* int is fine

* shane owes me m4a4

* Revert "shane owes me m4a4"

This reverts commit b4283fee18efebedae628a6cfd926ff1416dcfe5.

* back

* Revert "4.5/4.7"

This reverts commit e38f96e90cb5370bd378f6b66def9e7e3ed0ce5d.

* default

* oof

* clean up

* simpilfy

* from sensorinfo

* no div

* better name

* not the wrong one

* not anymore relevant

* too

* not call it debayer

* cl headers

* arg is 2nd

* gone is is_bggr

* define

* no is hdr

* rgb_tmp

* p1

* clean up

* 4

* cant for

* fix somewhre else

* const

* ap

* rects

* just set staruc

* nnew tmp

* pull it for now

* 12

* common rect

* Revert "not anymore relevant"

This reverts commit 1d574673a16cc31b7a255609e07775c3579eef15.

* Revert "too"

This reverts commit c2d4dcc52a859fe799362f9fcc2ffda99b264e50.

* Revert "Revert "too""

This reverts commit 0abbabe1fde51592f1619058638b4ac6a6dee4b3.

* no tol is fine

* rename

* sensor id

* unsgin

* flag

* some linalg

* cast

* should be h ref

* cap

---------

Co-authored-by: Comma Device <device@comma.ai>
2024-04-18 21:45:59 -07:00

89 lines
2.5 KiB
C++

#pragma once
#include <fcntl.h>
#include <memory>
#include <thread>
#include "cereal/messaging/messaging.h"
#include "cereal/visionipc/visionipc_server.h"
#include "common/queue.h"
#include "common/util.h"
const int YUV_BUFFER_COUNT = 20;
enum CameraType {
RoadCam = 0,
DriverCam,
WideRoadCam
};
// for debugging
const bool env_disable_road = getenv("DISABLE_ROAD") != NULL;
const bool env_disable_wide_road = getenv("DISABLE_WIDE_ROAD") != NULL;
const bool env_disable_driver = getenv("DISABLE_DRIVER") != NULL;
const bool env_debug_frames = getenv("DEBUG_FRAMES") != NULL;
const bool env_log_raw_frames = getenv("LOG_RAW_FRAMES") != NULL;
const bool env_ctrl_exp_from_params = getenv("CTRL_EXP_FROM_PARAMS") != NULL;
typedef struct FrameMetadata {
uint32_t frame_id;
uint32_t request_id;
// Timestamps
uint64_t timestamp_sof;
uint64_t timestamp_eof;
// Exposure
unsigned int integ_lines;
bool high_conversion_gain;
float gain;
float measured_grey_fraction;
float target_grey_fraction;
float processing_time;
} FrameMetadata;
struct MultiCameraState;
class CameraState;
class ImgProc;
class CameraBuf {
private:
VisionIpcServer *vipc_server;
ImgProc *imgproc = nullptr;
VisionStreamType stream_type;
int cur_buf_idx;
SafeQueue<int> safe_queue;
int frame_buf_count;
public:
cl_command_queue q;
FrameMetadata cur_frame_data;
VisionBuf *cur_yuv_buf;
VisionBuf *cur_camera_buf;
std::unique_ptr<VisionBuf[]> camera_bufs;
std::unique_ptr<FrameMetadata[]> camera_bufs_metadata;
int rgb_width, rgb_height;
CameraBuf() = default;
~CameraBuf();
void init(cl_device_id device_id, cl_context context, CameraState *s, VisionIpcServer * v, int frame_cnt, VisionStreamType type);
bool acquire();
void queue(size_t buf_idx);
};
typedef void (*process_thread_cb)(MultiCameraState *s, CameraState *c, int cnt);
void fill_frame_data(cereal::FrameData::Builder &framed, const FrameMetadata &frame_data, CameraState *c);
kj::Array<uint8_t> get_raw_frame_image(const CameraBuf *b);
float set_exposure_target(const CameraBuf *b, Rect ae_xywh, int x_skip, int y_skip);
std::thread start_process_thread(MultiCameraState *cameras, CameraState *cs, process_thread_cb callback);
void cameras_init(VisionIpcServer *v, MultiCameraState *s, cl_device_id device_id, cl_context ctx);
void cameras_open(MultiCameraState *s);
void cameras_run(MultiCameraState *s);
void cameras_close(MultiCameraState *s);
void camerad_thread();
int open_v4l_by_name_and_index(const char name[], int index = 0, int flags = O_RDWR | O_NONBLOCK);