平台:msm8909w
我们调试效果的同事,在调试效果时,需要固定gain,line,fl_line值,
这样强行固定,会出现问题。
在打开相机和拍照的时候,瞬间闪屏,闪的颜色红色或者绿色等等其他颜色!
static int32_t ov8856_z8856ah_new_fill_exposure_array(uint16_t gain, uint32_t line,
uint32_t fl_lines, int32_t luma_avg, uint32_t fgain,
struct msm_camera_i2c_reg_setting* reg_setting)
{
int32_t rc = 0;
uint16_t reg_count = 0;
uint16_t i = 0;
+char value1[10];
+ char ln_count[10];
+char gain_new[10];// based on 64
+ property_get("debug.enable.lock", value1, "0");
+ property_get("debug.ae.ln", ln_count, "0");
+ property_get("debug.ae.gain", gain_new, "0");
+ int ae_lock = atoi(value1)>0?1:0;
+ if(ae_lock){
+ fl_lines = atoi(ln_count);
+ line = fl_lines;
+ gain = atoi(gain_new);
+ }
···
}
解决办法
通过观察fl_line和line的关系,我们发现,
fl_line和line始终差8,于是
+ if(ae_lock){
+ fl_lines = atoi(ln_count);
+ line = fl_lines-8;
+ gain = atoi(gain_new);
+ }
这样子能达到效果调试的要求,也不会带来闪屏问题。
这个差8是怎么来的呢?
static struct msm_sensor_exp_gain_info_t exp_gain_info = {
.coarse_int_time_addr = 0x3500,
.global_gain_addr = 0x3508,
.vert_offset = 8,
};
这里的vert_offset=8,就是fl_line和line的差值!
ps:
fl_line是frame_length_lines,代表帧长,用于调整帧率
line是line_cont:曝光行数,可以理解为曝光时间,用于调整亮度
gain相对于sensor来说是模拟增益,用于调整亮度
正常使用过程中,OV8856 预览或者拍照时 瞬间闪屏。
问题根源:
{
.x_output = 3264,
.y_output = 2448,
.line_length_pclk = 1932,
.frame_length_lines = 2482,
.vt_pixel_clk = 144000000,
.op_pixel_clk = 288000000,
.binning_factor = 1,
.max_fps = 30.0,
.min_fps = 7.5,
.mode = SENSOR_DEFAULT_MODE,
},
op_pixel_clk = 288000000>平台的最大限制266MHz
解决方案: