diff --git a/system/camerad/cameras/camera_qcom2.cc b/system/camerad/cameras/camera_qcom2.cc index aa787dea8f..6febbf36a9 100644 --- a/system/camerad/cameras/camera_qcom2.cc +++ b/system/camerad/cameras/camera_qcom2.cc @@ -953,7 +953,7 @@ void CameraState::run() { } // Process camera registers and set camera exposure - sensor->processRegisters(this, framed); + sensor->processRegisters((uint8_t *)buf.cur_camera_buf->addr, framed); set_camera_exposure(set_exposure_target(&buf, ae_xywh, 2, cc.stream_type != VISION_STREAM_DRIVER ? 2 : 4)); // Send the message diff --git a/system/camerad/cameras/camera_util.h b/system/camerad/cameras/camera_util.h index 891ce3e793..a2e7bfb434 100644 --- a/system/camerad/cameras/camera_util.h +++ b/system/camerad/cameras/camera_util.h @@ -18,22 +18,22 @@ void *alloc_w_mmu_hdl(int video0_fd, int len, uint32_t *handle, int align = 8, i void release(int video0_fd, uint32_t handle); class MemoryManager { - public: - void init(int _video0_fd) { video0_fd = _video0_fd; } - ~MemoryManager(); +public: + void init(int _video0_fd) { video0_fd = _video0_fd; } + ~MemoryManager(); - template - auto alloc(int len, uint32_t *handle) { - return std::unique_ptr>((T*)alloc_buf(len, handle), [this](void *ptr) { this->free(ptr); }); - } + template + auto alloc(int len, uint32_t *handle) { + return std::unique_ptr>((T*)alloc_buf(len, handle), [this](void *ptr) { this->free(ptr); }); + } - private: - void *alloc_buf(int len, uint32_t *handle); - void free(void *ptr); +private: + void *alloc_buf(int len, uint32_t *handle); + void free(void *ptr); - std::mutex lock; - std::map handle_lookup; - std::map size_lookup; - std::map > cached_allocations; - int video0_fd; + std::mutex lock; + std::map handle_lookup; + std::map size_lookup; + std::map > cached_allocations; + int video0_fd; }; diff --git a/system/camerad/sensors/ar0231.cc b/system/camerad/sensors/ar0231.cc index 143e04c0b3..74f09dfa61 100644 --- a/system/camerad/sensors/ar0231.cc +++ b/system/camerad/sensors/ar0231.cc @@ -2,7 +2,6 @@ #include "common/swaglog.h" #include "system/camerad/cameras/camera_common.h" -#include "system/camerad/cameras/camera_qcom2.h" #include "system/camerad/sensors/sensor.h" namespace { @@ -17,7 +16,7 @@ const float sensor_analog_gains_AR0231[] = { 5.0 / 4.0, 6.0 / 4.0, 6.0 / 3.0, 7.0 / 3.0, // 8, 9, 10, 11 7.0 / 2.0, 8.0 / 2.0, 8.0 / 1.0}; // 12, 13, 14, 15 = bypass -std::map> ar0231_build_register_lut(CameraState *c, uint8_t *data) { +std::map> ar0231_build_register_lut(const AR0231 *s, uint8_t *data) { // This function builds a lookup table from register address, to a pair of indices in the // buffer where to read this address. The buffer contains padding bytes, // as well as markers to indicate the type of the next byte. @@ -33,7 +32,7 @@ std::map> ar0231_build_register_lut(CameraState *c std::map> registers; for (int register_row = 0; register_row < 2; register_row++) { - uint8_t *registers_raw = data + c->sensor->frame_stride * register_row; + uint8_t *registers_raw = data + s->frame_stride * register_row; assert(registers_raw[0] == 0x0a); // Start of line int value_tag_count = 0; @@ -58,7 +57,7 @@ std::map> ar0231_build_register_lut(CameraState *c cur_addr += 2; first_val_idx = val_idx; } else { - registers[cur_addr] = std::make_pair(first_val_idx + c->sensor->frame_stride * register_row, val_idx + c->sensor->frame_stride * register_row); + registers[cur_addr] = std::make_pair(first_val_idx + s->frame_stride * register_row, val_idx + s->frame_stride * register_row); } value_tag_count++; @@ -119,9 +118,9 @@ AR0231::AR0231() { target_grey_factor = 1.0; } -void AR0231::processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const { +void AR0231::processRegisters(uint8_t *cur_buf, cereal::FrameData::Builder &framed) const { const uint8_t expected_preamble[] = {0x0a, 0xaa, 0x55, 0x20, 0xa5, 0x55}; - uint8_t *data = (uint8_t *)c->buf.cur_camera_buf->addr + c->sensor->registers_offset; + uint8_t *data = cur_buf + registers_offset; if (memcmp(data, expected_preamble, std::size(expected_preamble)) != 0) { LOGE("unexpected register data found"); @@ -129,7 +128,7 @@ void AR0231::processRegisters(CameraState *c, cereal::FrameData::Builder &framed } if (ar0231_register_lut.empty()) { - ar0231_register_lut = ar0231_build_register_lut(c, data); + ar0231_register_lut = ar0231_build_register_lut(this, data); } std::map registers; for (uint16_t addr : {0x2000, 0x2002, 0x20b0, 0x20b2, 0x30c6, 0x30c8, 0x30ca, 0x30cc}) { diff --git a/system/camerad/sensors/sensor.h b/system/camerad/sensors/sensor.h index add514b117..22083eb62b 100644 --- a/system/camerad/sensors/sensor.h +++ b/system/camerad/sensors/sensor.h @@ -19,7 +19,7 @@ public: virtual std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const { return {}; } virtual float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const {return 0; } virtual int getSlaveAddress(int port) const { assert(0); } - virtual void processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const {} + virtual void processRegisters(uint8_t *cur_buf, cereal::FrameData::Builder &framed) const {} cereal::FrameData::ImageSensor image_sensor = cereal::FrameData::ImageSensor::UNKNOWN; float pixel_size_mm; @@ -68,7 +68,7 @@ public: std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const override; float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const override; int getSlaveAddress(int port) const override; - void processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const override; + void processRegisters(uint8_t *cur_buf, cereal::FrameData::Builder &framed) const override; private: mutable std::map> ar0231_register_lut; diff --git a/system/loggerd/encoder/encoder.h b/system/loggerd/encoder/encoder.h index 72848609ef..20352ac093 100644 --- a/system/loggerd/encoder/encoder.h +++ b/system/loggerd/encoder/encoder.h @@ -1,5 +1,9 @@ #pragma once +// has to be in this order +#include "third_party/linux/include/v4l2-controls.h" +#include + #include #include #include @@ -12,8 +16,6 @@ #include "system/camerad/cameras/camera_common.h" #include "system/loggerd/loggerd.h" -#define V4L2_BUF_FLAG_KEYFRAME 8 - class VideoEncoder { public: VideoEncoder(const EncoderInfo &encoder_info, int in_width, int in_height);