报错记录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

相关文章

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi