深入浅出,camera v4l2理解(1)v4l2准备使用的参数

来源:互联网 发布:mysql手机版 编辑:程序博客网 时间:2024/05/22 12:14
 
1,probe

2,读id,id读完了并且成功才能注册v4l2
 
3,注册v4l2,
v4l2_i2c_subdev_init(&s_ctrl->sensor_v4l2_subdev, client,s_ctrl->sensor_v4l2_subdev_ops);
这里v4l2的注册需要几个参数
s_ctrl->sensor_v4l2_subdev
这个参数主要是v4l2的名字,这个name是从驱动中去读的,如下
snprintf(s_ctrl->sensor_v4l2_subdev.name,sizeof(s_ctrl->sensor_v4l2_subdev.name), "%s", id->name);

client
这个参数是i2c的client,从驱动中获取,读id的时候使用的那个

s_ctrl->sensor_v4l2_subdev_ops
这个参数是驱动中的imx111_subdev_ops
static struct v4l2_subdev_core_ops imx111_subdev_core_ops = {
  .ioctl                     = msm_sensor_subdev_ioctl,   //各种效果等控制参数的传递
  .s_power                   = msm_sensor_power,          //power
};

static struct v4l2_subdev_video_ops imx111_subdev_video_ops = {
  .enum_mbus_fmt             = msm_sensor_v4l2_enum_fmt,
};

static struct v4l2_subdev_ops imx111_subdev_ops = {
  .core                      = &imx111_subdev_core_ops,   //见上面
  .video                     = &imx111_subdev_video_ops,  //见上面
};

int32_t msm_sensor_v4l2_enum_fmt(struct v4l2_subdev *sd, unsigned int index,
                        enum v4l2_mbus_pixelcode *code)
{
       struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd);   //这边不用说,还是驱动那个s_ctrl

       if ((unsigned int)index >= s_ctrl->sensor_v4l2_subdev_info_size) //这里就是看你准备了多少种code,看看是不是超出了所定义的  
              return -EINVAL;

       *code = s_ctrl->sensor_v4l2_subdev_info[index].code;   //调用驱动中的code
       return 0;
}
static struct v4l2_subdev_info imx111_subdev_info[] = {       //这个在驱动里面,就是上面的那个info
  {
    .code                    = V4L2_MBUS_FMT_SRGGB10_1X10,
    .colorspace              = V4L2_COLORSPACE_JPEG,
    .fmt                     = 1,
    .order                   = 0,
  },
};






















原创粉丝点击