mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-02-21 07:43:54 +08:00
* 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>
89 lines
2.5 KiB
C++
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);
|