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

本文主要是介绍报错记录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,
};

这篇关于报错记录2:imx6ull适配ov2640摄像头查询不到支持的分辨率大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125136

相关文章

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

MySQL8.0找不到my.ini如何解决

《MySQL8.0找不到my.ini如何解决》在配置MySQL主从复制时,发现找不到my.ini配置文件,通过检查路径和打开隐藏文件夹,最终在C:ProgramDataMySQLMySQLSer... 目录问题描述解决方法总结问题描述今天在配置mysql主从复制的时候发现,找不到my.ini这个配置文件。

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤