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

v4l2设置图像分辨率失败的问题

1.命令行设置分辨率指令

media-ctl -d /dev/media0 --set-v4l2 '"drive_dev":0[fmt:SBGGR12_1X12/1600x342]'

2.看了上面的命令设置分辨率,搞得我以为设置分辨率要操作媒体节点 /dev/media0,结果一直设置失败,错误如下:


VIDIOC_SUBDEV_S_FMT failed: Inappropriate ioctl for device (errno=25)

3.问了AI以后发现是操作的设备节点错误,需要操作/dev/v4l-subdevX

可以通过下面的命令[media-ctl -p -d /dev/media0]来查询 /dev/media0对应的sub节点

media-ctl -p -d /dev/media0
Media controller API version 5.10.226Media device information
------------------------
driver          rkcif
model           rkcif-mipi-lvds
serial          
bus info        
hw revision     0x0
driver version  5.10.226Device topology
- entity 1: stream_cif_mipi_id0 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video0pad0: Sink<- "rockchip-mipi-csi2":1 [ENABLED]<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 5: stream_cif_mipi_id1 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video1pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 [ENABLED]<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 9: stream_cif_mipi_id2 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video2pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 [ENABLED]<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 13: stream_cif_mipi_id3 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video3pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 [ENABLED]<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 17: rkcif_scale_ch0 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video4pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 [ENABLED]<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 21: rkcif_scale_ch1 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video5pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 [ENABLED]<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 25: rkcif_scale_ch2 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video6pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 [ENABLED]<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 29: rkcif_scale_ch3 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video7pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 [ENABLED]<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 33: rkcif_tools_id0 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video8pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 [ENABLED]<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 37: rkcif_tools_id1 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video9pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 [ENABLED]<- "rockchip-mipi-csi2":11 []- entity 41: rkcif_tools_id2 (1 pad, 11 links)type Node subtype V4L flags 0device node name /dev/video10pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 [ENABLED]- entity 45: rockchip-mipi-csi2 (12 pads, 122 links)type V4L2 subdev subtype Unknown flags 0device node name /dev/v4l-subdev0pad0: Sink[fmt:SBGGR12_1X12/1600x342 field:none colorspace:rawcrop.bounds:(0,0)/1600x342crop:(0,0)/1600x342]<- "rockchip-csi2-dphy0":1 [ENABLED]pad1: Source-> "stream_cif_mipi_id0":0 [ENABLED]-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad2: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 [ENABLED]-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad3: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 [ENABLED]-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad4: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 [ENABLED]-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad5: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 [ENABLED]-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad6: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 [ENABLED]-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad7: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 [ENABLED]-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad8: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 [ENABLED]-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad9: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 [ENABLED]-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad10: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 [ENABLED]-> "rkcif_tools_id2":0 []pad11: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 [ENABLED]- entity 58: rockchip-csi2-dphy0 (2 pads, 2 links)type V4L2 subdev subtype Unknown flags 0device node name /dev/v4l-subdev1pad0: Sink[fmt:SBGGR12_1X12/1600x342@1/90 field:none colorspace:raw]<- "xxxxx":0 [ENABLED]pad1: Source-> "rockchip-mipi-csi2":0 [ENABLED]- entity 63: fs6031 (1 pad, 1 link)type V4L2 subdev subtype Sensor flags 0device node name /dev/v4l-subdev2pad0: Source[fmt:SBGGR12_1X12/1600x342@1/90 field:none colorspace:raw]-> "rockchip-csi2-dphy0":0 [ENABLED]

通过上面的命令查询到/dev/media0对应的子设备节点是 /dev/v4l-subdev2,主节点为 /dev/video0

4.修改设备节点以后设置成功了,下面是完整代码

#define LV_WIDTH_NUMBER 1600  // 1600 //4912
#define LV_HEIGHT_NUMBER 342int xx_set_resolution(int main_fd, int sub_fd, uint8_t format_type) {int ret = 0;struct v4l2_format format_main;struct v4l2_subdev_format format_sub;memset(&format_sub, 0, sizeof(format_sub));format_sub.pad = 0;format_sub.which = V4L2_SUBDEV_FORMAT_ACTIVE;format_sub.format.width = LV_WIDTH_NUMBER;format_sub.format.height = LV_HEIGHT_NUMBER;format_sub.format.field = V4L2_FIELD_ANY;format_sub.format.code = V4L2_MBUS_FMT_SBGGR12_1X12;ret = ioctl(sub_fd, VIDIOC_SUBDEV_S_FMT, &format_sub);if (ret < 0) {printf("VIDIOC_SUBDEV_S_FMT failed: %s (errno=%d)\n", strerror(errno), errno);return ret;}// 成功设置 subdevprintf("Subdev format set to %dx%d\n", format_sub.format.width, format_sub.format.height);// 设置 video nodememset(&format_main, 0, sizeof(format_main));format_main.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;  // 显式指定format_main.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_SBGGR12;format_main.fmt.pix_mp.width = LV_WIDTH_NUMBER;format_main.fmt.pix_mp.height = LV_HEIGHT_NUMBER;format_main.fmt.pix_mp.field = V4L2_FIELD_ANY;ret = ioctl(main_fd, VIDIOC_S_FMT, &format_main);if (ret < 0) {printf("VIDIOC_S_FMT failed: %s (errno=%d)\n", strerror(errno), errno);return ret;}printf("Video node format: %dx%d\n", format_main.fmt.pix_mp.width, format_main.fmt.pix_mp.height);return 0;
}

http://www.xdnf.cn/news/1464913.html

相关文章:

  • react+umi项目如何添加electron的功能
  • PyTorch 中.backward() 详解使用
  • 前后端国密加密传输用户密码流程
  • Unity 解决天空盒中间出现一条线
  • flink 伪代码
  • 高效管理网络段和端口集合的工具之ipset
  • Bug排查日记:高效记录与解决之道
  • 高通AR1平台Recovery架构分析与自动恢复出厂设置实现
  • 从 elecworks 到云端协同:SOLIDWORKS Electrical 发展历史 + 核心功能 + 采购指南
  • Linux 磁盘扩容及分区相关操作实践
  • 从Java全栈到云原生:一场技术深度对话
  • Golang语言设计理念
  • 【GEOS-Chem伴随模型第一期】GEOS-Chem Adjoint 模型详解
  • 常见Bash脚本漏洞分析与防御
  • 【Flutter】RefreshIndicator 无法下拉刷新问题
  • 【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
  • LeetCode 131 分割回文串
  • 【LeetCode热题100道笔记】删除链表的倒数第 N 个结点
  • Kafka核心原理与常见面试问题解析
  • 《AI 问答系统:从开发到落地,关键技术与实践案例全解析》
  • 【技术教程】如何将文档编辑器集成至基于Java的Web应用程序
  • c++工程如何提供http服务接口
  • 基于 GEE 批量下载 Landsat8 地表温度(LST)数据
  • 【计算机科学与应用】砚文化虚拟博物馆的Unity3D设计
  • 理解损失函数:机器学习的指南针与裁判
  • 踩坑实录:Django继承AbstractUser时遇到的related_name冲突及解决方案
  • 【Flask】测试平台中,记一次在vue2中集成编辑器组件tinymce
  • XR数字融合工作站打造智能制造专业学习新范式
  • windows通过xrdp远程连接Ubuntu黑屏问题解决
  • FDTD_3 d mie_仿真