11-15.ov9281双摄-rk3399pro-续集

编程入门 行业动态 更新时间:2024-10-26 04:27:41

3399pro搭载的双摄ov9281,一直有个问题,就是第一次上电启动后,就会有一个1-2分钟的自动调整过程。

调整的过程比较卡顿,似乎是在调整曝光时间等一些参数。这就有点影响使用了。但是第二次启动应用是没这个问题了(不是reboot系统,只是重新启动应用)。

今天追查了一下,发现是v4l2驱动在进行参数调整

加几条打印语句:

static int ov9281_set_ctrl(struct v4l2_ctrl *ctrl)
{
	struct ov9281 *ov9281 = container_of(ctrl->handler,
					     struct ov9281, ctrl_handler);
	struct i2c_client *client = ov9281->client;
	s64 max;
	int ret = 0;

	/* Propagate change of current control to all related controls */
	switch (ctrl->id) {
	case V4L2_CID_VBLANK:
		/* Update max exposure while meeting expected vblanking */
		max = ov9281->cur_mode->height + ctrl->val - 4;
		__v4l2_ctrl_modify_range(ov9281->exposure,
					 ov9281->exposure->minimum, max,
					 ov9281->exposure->step,
					 ov9281->exposure->default_value);
		break;
	}

	if (pm_runtime_get(&client->dev) <= 0)
		return 0;

	switch (ctrl->id) {
	case V4L2_CID_EXPOSURE:
		/* 4 least significant bits of expsoure are fractional part */
		printk(KERN_ERR "V4L2_CID_EXPOSURE ctrl->val = %d\n",ctrl->val);
		ret = ov9281_write_reg(ov9281->client, OV9281_REG_EXPOSURE,
				       OV9281_REG_VALUE_24BIT, ctrl->val << 4);
		break;
	case V4L2_CID_ANALOGUE_GAIN:
		printk(KERN_ERR "V4L2_CID_ANALOGUE_GAIN ctrl->val = %d\n",ctrl->val);
		ret = ov9281_write_reg(ov9281->client, OV9281_REG_GAIN_H,
				       OV9281_REG_VALUE_08BIT,
				       (ctrl->val >> OV9281_GAIN_H_SHIFT) & OV9281_GAIN_H_MASK);
		ret |= ov9281_write_reg(ov9281->client, OV9281_REG_GAIN_L,
				       OV9281_REG_VALUE_08BIT,
				       ctrl->val & OV9281_GAIN_L_MASK);
		break;
	case V4L2_CID_VBLANK:
		printk(KERN_ERR "V4L2_CID_VBLANK ctrl->val = %d\n",ctrl->val);
		ret = ov9281_write_reg(ov9281->client, OV9281_REG_VTS,
				       OV9281_REG_VALUE_16BIT,
				       ctrl->val + ov9281->cur_mode->height);
		break;
	case V4L2_CID_TEST_PATTERN:
		printk(KERN_ERR "V4L2_CID_TEST_PATTERN ctrl->val = %d\n",ctrl->val);
		ret = ov9281_enable_test_pattern(ov9281, ctrl->val);
		break;
	default:
		dev_warn(&client->dev, "%s Unhandled id:0x%x, val:0x%x\n",
			 __func__, ctrl->id, ctrl->val);
		break;
	}

	pm_runtime_put(&client->dev);

	return ret;
}

发现启动软件后,就会在后台有打印

看来是驱动在捣鬼。

 

 

 被我注释掉了,果然就没事了,哈哈哈!!!

从这个来看,应该是驱动里面在训练参数,所以有一个自动调整时期。

同时,根据显示的效果,修改寄存器,使得显示正常一点:

 

更多推荐

11-15.ov9281双摄-rk3399pro-续集

本文发布于:2023-06-13 09:33:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/678980.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:续集   rk3399pro   双摄

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!