From 0d6baffcbfc94b5c383da361b17d4bf923114b75 Mon Sep 17 00:00:00 2001 From: ZwX1616 Date: Mon, 21 Oct 2024 16:14:26 -0700 Subject: [PATCH] camerad: disable os HDR (#33838) * revert hdr settings * 12 * pv12 --------- Co-authored-by: Comma Device --- system/camerad/sensors/os04c10.cc | 12 +-- system/camerad/sensors/os04c10_cl.h | 13 ++- system/camerad/sensors/os04c10_registers.h | 106 ++++++++++----------- 3 files changed, 69 insertions(+), 62 deletions(-) diff --git a/system/camerad/sensors/os04c10.cc b/system/camerad/sensors/os04c10.cc index cf68923232..dbdceb9189 100644 --- a/system/camerad/sensors/os04c10.cc +++ b/system/camerad/sensors/os04c10.cc @@ -25,10 +25,10 @@ OS04C10::OS04C10() { pixel_size_mm = 0.004; data_word = false; - hdr_offset = 64 * 2 + 8; // stagger + // hdr_offset = 64 * 2 + 8; // stagger frame_width = 1344; - frame_height = 760 * 2 + hdr_offset; - frame_stride = (frame_width * 10 / 8); // no alignment + frame_height = 760; //760 * 2 + hdr_offset; + frame_stride = (frame_width * 12 / 8); // no alignment extra_height = 0; frame_offset = 0; @@ -37,9 +37,9 @@ OS04C10::OS04C10() { init_reg_array.assign(std::begin(init_array_os04c10), std::end(init_array_os04c10)); probe_reg_addr = 0x300a; probe_expected_data = 0x5304; - bits_per_pixel = 10; - mipi_format = CAM_FORMAT_MIPI_RAW_10; - frame_data_type = 0x2b; + bits_per_pixel = 12; + mipi_format = CAM_FORMAT_MIPI_RAW_12; + frame_data_type = 0x2c; mclk_frequency = 24000000; // Hz dc_gain_factor = 1; diff --git a/system/camerad/sensors/os04c10_cl.h b/system/camerad/sensors/os04c10_cl.h index 61775dcdc8..7cfc99655e 100644 --- a/system/camerad/sensors/os04c10_cl.h +++ b/system/camerad/sensors/os04c10_cl.h @@ -2,8 +2,9 @@ #define BGGR -#define BIT_DEPTH 10 +#define BIT_DEPTH 12 #define PV_MAX10 1023 +#define PV_MAX12 4096 #define PV_MAX16 65536 // gamma curve is calibrated to 16bit #define BLACK_LVL 64 #define VIGNETTE_RSZ 2.2545f @@ -38,6 +39,11 @@ float4 normalize_pv_hdr(int4 parsed, int4 short_parsed, float vignette_factor, i return clamp(pv*vignette_factor, 0.0, 1.0); } +float4 normalize_pv(int4 parsed, float vignette_factor) { + float4 pv = (convert_float4(parsed) - BLACK_LVL) / (PV_MAX12 - BLACK_LVL); + return clamp(pv*vignette_factor, 0.0, 1.0); +} + float3 color_correct(float3 rgb) { float3 corrected = rgb.x * (float3)(1.55361989, -0.268894615, -0.000593219); corrected += rgb.y * (float3)(-0.421217301, 1.51883144, -0.69760146); @@ -46,10 +52,11 @@ float3 color_correct(float3 rgb) { } float3 apply_gamma(float3 rgb, int expo_time) { - float s = log2((float)expo_time); + return powr(rgb, 0.7); +/*float s = log2((float)expo_time); if (s < 6) {s = fmin(12.0 - s, 9.0);} // log function adaptive to number of bits - return clamp(log(1 + rgb*(PV_MAX16 - BLACK_LVL)) * (0.48*s*s - 12.92*s + 115.0) - (1.08*s*s - 29.2*s + 260.0), 0.0, 255.0) / 255.0; + return clamp(log(1 + rgb*(PV_MAX16 - BLACK_LVL)) * (0.48*s*s - 12.92*s + 115.0) - (1.08*s*s - 29.2*s + 260.0), 0.0, 255.0) / 255.0;*/ } #endif diff --git a/system/camerad/sensors/os04c10_registers.h b/system/camerad/sensors/os04c10_registers.h index d698b1311f..53e80e079f 100644 --- a/system/camerad/sensors/os04c10_registers.h +++ b/system/camerad/sensors/os04c10_registers.h @@ -8,14 +8,14 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x0103, 0x01}, // PLL - {0x0301, 0x84}, + {0x0301, 0xe4}, {0x0303, 0x01}, - {0x0305, 0x61}, + {0x0305, 0xb6}, {0x0306, 0x01}, {0x0307, 0x17}, {0x0323, 0x04}, {0x0324, 0x01}, - {0x0325, 0x7a}, + {0x0325, 0x62}, {0x3012, 0x06}, {0x3013, 0x02}, @@ -30,40 +30,40 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x3660, 0x04}, {0x3666, 0xa5}, {0x3667, 0xa5}, - {0x366a, 0x54}, + {0x366a, 0x50}, {0x3673, 0x0d}, {0x3672, 0x0d}, {0x3671, 0x0d}, {0x3670, 0x0d}, - {0x3685, 0x0a}, + {0x3685, 0x00}, {0x3694, 0x0d}, {0x3693, 0x0d}, {0x3692, 0x0d}, {0x3691, 0x0d}, {0x3696, 0x4c}, {0x3697, 0x4c}, - {0x3698, 0x00}, + {0x3698, 0x40}, {0x3699, 0x80}, - {0x369a, 0x80}, + {0x369a, 0x18}, {0x369b, 0x1f}, - {0x369c, 0x1f}, + {0x369c, 0x14}, {0x369d, 0x80}, {0x369e, 0x40}, {0x369f, 0x21}, {0x36a0, 0x12}, - {0x36a1, 0xdd}, + {0x36a1, 0x5d}, {0x36a2, 0x66}, - {0x370a, 0x00}, - {0x370e, 0x00}, + {0x370a, 0x02}, + {0x370e, 0x0c}, {0x3710, 0x00}, - {0x3713, 0x04}, + {0x3713, 0x00}, {0x3725, 0x02}, {0x372a, 0x03}, {0x3738, 0xce}, - {0x3748, 0x00}, - {0x374a, 0x00}, - {0x374c, 0x00}, - {0x374e, 0x00}, + {0x3748, 0x02}, + {0x374a, 0x02}, + {0x374c, 0x02}, + {0x374e, 0x02}, {0x3756, 0x00}, {0x3757, 0x00}, {0x3767, 0x00}, @@ -81,11 +81,11 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x37ba, 0x03}, {0x37bb, 0x00}, {0x37bc, 0x04}, - {0x37be, 0x26}, + {0x37be, 0x08}, {0x37c4, 0x11}, {0x37c5, 0x80}, {0x37c6, 0x14}, - {0x37c7, 0xa8}, + {0x37c7, 0x08}, {0x37da, 0x11}, {0x381f, 0x08}, // {0x3829, 0x03}, @@ -111,7 +111,7 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x4045, 0x7e}, {0x4047, 0x7e}, {0x4049, 0x7e}, - {0x4090, 0x14}, + {0x4090, 0x04}, {0x40b0, 0x00}, {0x40b1, 0x00}, {0x40b2, 0x00}, @@ -129,7 +129,7 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x4503, 0x00}, {0x4504, 0x06}, {0x4506, 0x00}, - {0x4507, 0x57}, + {0x4507, 0x47}, {0x4803, 0x00}, {0x480c, 0x32}, {0x480e, 0x04}, @@ -139,7 +139,7 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x4823, 0x3f}, {0x4825, 0x30}, {0x4833, 0x10}, - {0x484b, 0x07}, + {0x484b, 0x27}, {0x488b, 0x00}, {0x4d00, 0x04}, {0x4d01, 0xad}, @@ -152,7 +152,7 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x4e0d, 0x00}, // ISP - {0x5001, 0x00}, + {0x5001, 0x09}, {0x5004, 0x00}, {0x5080, 0x04}, {0x5036, 0x80}, @@ -173,32 +173,32 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x301c, 0xf8}, {0x301e, 0xb4}, {0x301f, 0xf0}, - {0x3022, 0x01}, + {0x3022, 0x61}, {0x3109, 0xe7}, {0x3600, 0x00}, - {0x3610, 0x75}, + {0x3610, 0x65}, {0x3611, 0x85}, {0x3613, 0x3a}, {0x3615, 0x60}, - {0x3621, 0x90}, + {0x3621, 0xb0}, {0x3620, 0x0c}, {0x3629, 0x00}, {0x3661, 0x04}, {0x3664, 0x70}, {0x3665, 0x00}, - {0x3681, 0x80}, - {0x3682, 0x40}, - {0x3683, 0x21}, - {0x3684, 0x12}, + {0x3681, 0xa6}, + {0x3682, 0x53}, + {0x3683, 0x2a}, + {0x3684, 0x15}, {0x3700, 0x2a}, {0x3701, 0x12}, {0x3703, 0x28}, {0x3704, 0x0e}, - {0x3706, 0x4a}, + {0x3706, 0x9d}, {0x3709, 0x4a}, - {0x370b, 0xa2}, + {0x370b, 0x48}, {0x370c, 0x01}, - {0x370f, 0x00}, + {0x370f, 0x04}, {0x3714, 0x28}, {0x3716, 0x04}, {0x3719, 0x11}, @@ -206,19 +206,19 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x3720, 0x00}, {0x3724, 0x13}, {0x373f, 0xb0}, - {0x3741, 0x4a}, - {0x3743, 0x4a}, - {0x3745, 0x4a}, - {0x3747, 0x4a}, - {0x3749, 0xa2}, - {0x374b, 0xa2}, - {0x374d, 0xa2}, - {0x374f, 0xa2}, + {0x3741, 0x9d}, + {0x3743, 0x9d}, + {0x3745, 0x9d}, + {0x3747, 0x9d}, + {0x3749, 0x48}, + {0x374b, 0x48}, + {0x374d, 0x48}, + {0x374f, 0x48}, {0x3755, 0x10}, {0x376c, 0x00}, - {0x378d, 0x30}, - {0x3790, 0x4a}, - {0x3791, 0xa2}, + {0x378d, 0x3c}, + {0x3790, 0x01}, + {0x3791, 0x01}, {0x3798, 0x40}, {0x379e, 0x00}, {0x379f, 0x04}, @@ -278,27 +278,27 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { {0x3816, 0x03}, {0x3817, 0x01}, - {0x380c, 0x04}, {0x380d, 0x2e}, // HTS - {0x380e, 0x09}, {0x380f, 0xdb}, // VTS + {0x380c, 0x08}, {0x380d, 0x5c}, // HTS + {0x380e, 0x09}, {0x380f, 0x38}, // VTS {0x3820, 0xb3}, - {0x3821, 0x05}, - {0x3880, 0x00}, + {0x3821, 0x01}, + {0x3880, 0x25}, {0x3882, 0x20}, {0x3c91, 0x0b}, {0x3c94, 0x45}, - // {0x3cad, 0x00}, - // {0x3cae, 0x00}, + {0x3cad, 0x00}, + {0x3cae, 0x00}, {0x4000, 0xf3}, {0x4001, 0x60}, - {0x4003, 0x40}, + {0x4003, 0x80}, {0x4300, 0xff}, {0x4302, 0x0f}, - {0x4305, 0x93}, + {0x4305, 0x83}, {0x4505, 0x84}, {0x4809, 0x0e}, {0x480a, 0x04}, - {0x4837, 0x14}, + {0x4837, 0x15}, {0x4c00, 0x08}, {0x4c01, 0x08}, {0x4c04, 0x00}, @@ -307,7 +307,7 @@ const struct i2c_random_wr_payload init_array_os04c10[] = { // {0x0100, 0x01}, // {0x320d, 0x00}, // {0x3208, 0xa0}, - // {0x3822, 0x14}, + {0x3822, 0x14}, // initialize exposure {0x3503, 0x88},