当前位置: 首页 > news >正文

报错记录2:imx6ull适配ov2640摄像头查询不到分辨率大小

文章目录

  • 报错问题
    • 排查问题
    • 问题原因
  • 解决方法

报错问题

在通过ioctl(fd, VIDIOC_ENUM_FRAMESIZES, frmsize);接口枚举不到分辨率

排查问题

通过查阅mx6s_capture.c文件,找到枚举分辨率的接口,找到向ov2640驱动调用的代码,在ov2640中查看enum_frame_size函数的实现。

static int mx6s_vidioc_enum_framesizes(struct file *file, void *priv,struct v4l2_frmsizeenum *fsize)
/* 省略部分代码 */ret = v4l2_subdev_call(sd, pad, enum_frame_size, NULL, &fse);if (ret)return ret;
/* 省略部分代码 */

问题原因

在ov2640的驱动源码中,并未实现enum_frame_size接口,因此上层无法获取该参数。
enum_frame_size属于struct v4l2_subdev_pad_ops类型的pad参数中的一个成员,在ov2640中,仅定义了corevideo的部分成员函数,没有定义pad成员。

static struct v4l2_subdev_video_ops ov2640_subdev_video_ops = {.s_stream	= ov2640_s_stream,.g_mbus_fmt	= ov2640_g_fmt,.s_mbus_fmt	= ov2640_s_fmt,.try_mbus_fmt	= ov2640_try_fmt,.cropcap	= ov2640_cropcap,.g_crop		= ov2640_g_crop,.enum_mbus_fmt	= ov2640_enum_fmt,.g_mbus_config	= ov2640_g_mbus_config,
};static struct v4l2_subdev_ops ov2640_subdev_ops = {.core	= &ov2640_subdev_core_ops,.video	= &ov2640_subdev_video_ops,
};

解决方法

在ov2640驱动中添加pad成员与enum_frame_size接口。对enum_frame_size接口的实现如下。

static int ov2640_enum_frame_sizes(struct v4l2_subdev *sd,struct v4l2_subdev_pad_config *cfg,struct v4l2_subdev_frame_size_enum *fse)
{struct i2c_client *client = v4l2_get_subdevdata(sd);int i = ARRAY_SIZE(ov2640_codes);if (fse->index >= ARRAY_SIZE(ov2640_supported_win_sizes))return -EINVAL;while (--i)if (fse->code == ov2640_codes[i])break;fse->min_width  = ov2640_supported_win_sizes[fse->index].width;fse->max_width  = fse->min_width;fse->max_height = ov2640_supported_win_sizes[fse->index].height;fse->min_height = fse->max_height;return 0;
}static struct v4l2_subdev_pad_ops ov2640_subdev_pad_ops = {.enum_frame_size = ov2640_enum_frame_sizes,
};static struct v4l2_subdev_ops ov2640_subdev_ops = {/* 省略部分代码 */.pad	= &ov2640_subdev_pad_ops,
};

http://www.mrgr.cn/news/16392.html

相关文章:

  • Linux——命令行文件的管理(创建,复制,删除,移动文件,硬链接与软链接)
  • JUC-JAVA内存模型
  • Java面试题真题·技术面试题部分总结
  • 平台介绍-机构、岗位、人员基础数据
  • 有宠物用哪个牌子的宠物空气净化器,希喂、IAM哪个更值得推荐
  • 【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion
  • ubuntu24下python3.9安装pytorch
  • 和星辰为伴,与代码共舞
  • 【Centos】yum 安装软件失败时,切换 Aliyun 镜像源
  • 【Kubernetes部署篇】二进制搭建K8s高可用集群1.26.15版本
  • 5.11 飞行控制——定点飞行
  • 深入详解 C# 中的 Task.Run 与 Thread 的区别与联系
  • sicp每日一题[1.39]
  • 自建一款开源音乐服务-Navidrome
  • [YM]课设-C#-WebApi-Vue-员工管理系统 (五)登录
  • 二叉树的相关oj题目 — java实现
  • 最短路算法详解(Dijkstra 算法,Bellman-Ford 算法,Floyd-Warshall 算法)
  • 黄力医生谈健康:掌握这几个秘诀,帮你远离冠心病困扰!
  • Java技术栈 —— Spark入门(三)之实时视频流
  • 算法训练第28天|509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯