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

3399pro搭载的双摄ov9281,一直有个问题,就是第一次上电启动后,就会有一个1-2分钟的自动调整过程。调整的过程比较卡顿,似乎是在调整曝光时间等

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;
}

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

看来是驱动在捣鬼。

 

 

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

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

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

 

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754939956a5217968.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信