V4L2框架 | MIPI Camera指令调试笔记

简介: V4L2框架 | MIPI Camera指令调试笔记

前言:

在本文中,我将介绍如何使用Rockchip平台和OV2640摄像头进行视频设备的调试和分析。我将使用一些常用的命令和工具来展示如何查看和设置视频设备的格式、分辨率、控制参数等,以及如何抓取和转换图像数据。还将介绍如何使用媒体控制器来查看设备的拓扑结构和连接情况。这些内容对于理解和优化视频设备的性能和质量。

关于v4l2_subdev

v4l2_subdev是V4L2框架中的一个重要概念。在V4L2中,子设备(例如摄像头、音频编解码器等)是以v4l2_subdev结构体的形式存在的。这个结构体包含了一系列的操作(ops),这些操作定义了主设备如何控制子设备。在你的问题中,g_frame_interval就是这些操作之一。

v4l2_subdev结构体的定义可以在Linux内核的源代码中找到,通常在include/media/v4l2-subdev.h文件中。

参考

参考资料:

  1. V4L2文档
  2. V4L2子设备API
  3. Linux内核源代码
  4. Rockchip官方wiki
  5. Camera | 5.Linux v4l2架构(基于rk3568)
  6. Camera | 7.瑞芯微rk3568平台摄像头控制器MIPI-CSI驱动架构梳理

V4L2驱动程序中涉及到节点创建的常见函数:

  1. v4l2_device_register:注册V4L2设备,创建对应的设备节点。
  2. v4l2_device_unregister:注销V4L2设备,删除对应的设备节点。
  3. video_device_alloc:分配struct video_device结构体,并关联设备节点。
  4. video_device_release:释放struct video_device结构体和相关资源。
  5. video_register_device:注册视频设备,创建对应的设备节点。
  6. video_unregister_device:注销视频设备,删除对应的设备节点。

想要修改的是与图像传输相关的配置,这些参数通常会设置在v4l2_subdev_mbus_code_enum或者v4l2_mbus_config等结构体中。这些参数分别控制:

  1. V4L2_MBUS_PCLK_SAMPLE_RISING:在PIXCLK的上升沿采样数据。
  2. V4L2_MBUS_MASTER:设备工作在Master模式。
  3. V4L2_MBUS_VSYNC_ACTIVE_HIGH:VSYNC信号在高电平时有效。
  4. V4L2_MBUS_HSYNC_ACTIVE_HIGH:HSYNC信号在高电平时有效。
  5. V4L2_MBUS_DATA_ACTIVE_HIGH:数据线在高电平时有效。

ov2640_init_cfg函数中,似乎没有相关的配置位置。这些配置可能在其他的地方进行,例如在驱动的probe函数中,或者在对应的sensor驱动中。

步骤

0.[项目]代码位置和文件路径

[项目]代码和文件位置
  • 代码位置:V:\rockchip\rk3568_android13
  • 关键文件路径
  • kernel-5.10/arch/arm64/configs/rockchip_defconfig:Rockchip默认配置文件。
  • kernel-5.10/drivers/media/i2c/Makefile:I2C媒体驱动的Makefile。
  • kernel-5.10/drivers/media/i2c/ov2640.c:OV2640摄像头驱动。
  • kernel-5.10/drivers/media/platform/rockchip/cif/capture.c:Rockchip CIF捕获驱动程序。
  • kernel-5.10/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-xxx.dtsi:RK3568设备树文件。

1.调试准备工作

调试步骤
  1. 硬件连接:将[项目]开发板通过USB线连接至电脑,并将开发板与摄像头连接。
  2. 驱动和设备树检查:确保开发板上烧写了正确的驱动和设备树镜像。
I2C通信检查
  • 使用 i2cdetect 命令检查I2C设备识别情况:
1|rk3568_t:/ # i2cdetect -y 1
  • 使用 i2cdump 命令读取特定I2C设备的寄存器值:
rk3568_t:/ # i2cdump -y -f 1 0x30
  • 使用 i2cset 命令设置I2C设备的寄存器值:
rk3568_t:/ # i2cset -f -y 1 0x30 0xff 0x00 b
常用调试命令
  1. 抓取图像
  • 使用 v4l2-ctl 抓取一帧图像:
v4l2-ctl -d /dev/video0 --set-fmt-video=width=320,height=240,pixelformat=UYVY --stream-mmap --stream-to=./cif.out --stream-count=1
  • 使用 Linux 系统下的 ffmpeg 转换图像格式:
ffmpeg -f rawvideo -s 320x240 -pix_fmt uyvy422 -i cif.out cif.png

  1. 抓取视频
  • 抓取视频帧,例如5秒30fps视频:
v4l2-ctl -d /dev/video0 --set-fmt-video=width=320,height=240,pixelformat=UYVY --stream-mmap --stream-to=./video.out --stream-count=150
  • 使用 ffmpeg 转换视频格式:
ffmpeg -f rawvideo -framerate 30 -video_size 320x240 -pix_fmt uyvy422 -i video.out video.mp4

通过这些步骤和命令,可以进行[项目]开发板和摄像头的调试,包括硬件连接检查、I2C通信测试、图像和视频的抓取与转换。

2. 查看设备列表

命令

在电脑上打开一个终端,输入以下命令来检查可用的视频设备及其设备文件:

v4l2-ctl --list-devices
输出解释
  • 此命令显示所有连接的视频设备以及它们的设备文件。
  • 输出示例:
rk3568_t:/ # v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
        /dev/video12
        /dev/video13
        /dev/video21
        /dev/video22
rkcif (platform:rkcif_dvp):
        /dev/video0
        /dev/video4
rkisp_mainpath (platform:rkisp-vir0):
        /dev/video5
        /dev/video6
        /dev/video7
        /dev/video8
        /dev/video9
        /dev/video10
        /dev/video11
rkisp_mainpath (platform:rkisp-vir1):
        /dev/video14
        /dev/video15
        /dev/video16
        /dev/video17
        /dev/video18
        /dev/video19
        /dev/video20
  • /dev/video0 是视频设备文件,主要用于读写图像数据。
  • /dev/v4l-subdev0 是子设备文件,用于配置摄像头参数。

3. 查看视频设备支持的格式和分辨率

该命令会显示视频设备支持的所有格式和分辨率,以及每种格式对应的帧率。例如:

命令

为了查看特定视频设备支持的所有格式和分辨率,输入以下命令:

rk3568_t:/ # v4l2-ctl --device=/dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture Multiplanar
        Pixel Format: 'NV16'
        Name        : Y/CbCr 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 1
        Type        : Video Capture Multiplanar
        Pixel Format: 'NV61'
        Name        : Y/CrCb 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 2
        Type        : Video Capture Multiplanar
        Pixel Format: 'NV12'
        Name        : Y/CbCr 4:2:0
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 3
        Type        : Video Capture Multiplanar
        Pixel Format: 'NV21'
        Name        : Y/CrCb 4:2:0
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 4
        Type        : Video Capture Multiplanar
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 5
        Type        : Video Capture Multiplanar
        Pixel Format: 'YVYU'
        Name        : YVYU 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 6
        Type        : Video Capture Multiplanar
        Pixel Format: 'UYVY'
        Name        : UYVY 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 7
        Type        : Video Capture Multiplanar
        Pixel Format: 'VYUY'
        Name        : VYUY 4:2:2
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 8
        Type        : Video Capture Multiplanar
        Pixel Format: 'RGB3'
        Name        : 24-bit RGB 8-8-8
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 9
        Type        : Video Capture Multiplanar
        Pixel Format: 'BGR3'
        Name        : 24-bit BGR 8-8-8
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 10
        Type        : Video Capture Multiplanar
        Pixel Format: 'RGBP'
        Name        : 16-bit RGB 5-6-5
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 11
        Type        : Video Capture Multiplanar
        Pixel Format: 'BGRH'
        Name        : 18-bit BGRX 6-6-6-14
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 12
        Type        : Video Capture Multiplanar
        Pixel Format: 'RGGB'
        Name        : 8-bit Bayer RGRG/GBGB
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 13
        Type        : Video Capture Multiplanar
        Pixel Format: 'GRBG'
        Name        : 8-bit Bayer GRGR/BGBG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 14
        Type        : Video Capture Multiplanar
        Pixel Format: 'GBRG'
        Name        : 8-bit Bayer GBGB/RGRG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 15
        Type        : Video Capture Multiplanar
        Pixel Format: 'BA81'
        Name        : 8-bit Bayer BGBG/GRGR
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 16
        Type        : Video Capture Multiplanar
        Pixel Format: 'RG10'
        Name        : 10-bit Bayer RGRG/GBGB
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 17
        Type        : Video Capture Multiplanar
        Pixel Format: 'BA10'
        Name        : 10-bit Bayer GRGR/BGBG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 18
        Type        : Video Capture Multiplanar
        Pixel Format: 'GB10'
        Name        : 10-bit Bayer GBGB/RGRG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 19
        Type        : Video Capture Multiplanar
        Pixel Format: 'BG10'
        Name        : 10-bit Bayer BGBG/GRGR
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 20
        Type        : Video Capture Multiplanar
        Pixel Format: 'RG12'
        Name        : 12-bit Bayer RGRG/GBGB
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 21
        Type        : Video Capture Multiplanar
        Pixel Format: 'BA12'
        Name        : 12-bit Bayer GRGR/BGBG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 22
        Type        : Video Capture Multiplanar
        Pixel Format: 'GB12'
        Name        : 12-bit Bayer GBGB/RGRG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 23
        Type        : Video Capture Multiplanar
        Pixel Format: 'BG12'
        Name        : 12-bit Bayer BGBG/GRGR
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 24
        Type        : Video Capture Multiplanar
        Pixel Format: 'BYR2'
        Name        : 16-bit Bayer BGBG/GRGR
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 25
        Type        : Video Capture Multiplanar
        Pixel Format: 'GB16'
        Name        : 16-bit Bayer GBGB/RGRG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 26
        Type        : Video Capture Multiplanar
        Pixel Format: 'GR16'
        Name        : 16-bit Bayer GRGR/BGBG
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 27
        Type        : Video Capture Multiplanar
        Pixel Format: 'RG16'
        Name        : 16-bit Bayer RGRG/GBGB
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 28
        Type        : Video Capture Multiplanar
        Pixel Format: 'Y16 '
        Name        : 16-bit Greyscale
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 29
        Type        : Video Capture Multiplanar
        Pixel Format: 'GREY'
        Name        : 8-bit Greyscale
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 30
        Type        : Video Capture Multiplanar
        Pixel Format: 'EBD8'
        Name        : Embedded data 8-bit
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 31
        Type        : Video Capture Multiplanar
        Pixel Format: 'SPD6'
        Name        : Shield pix data 16-bit
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 32
        Type        : Video Capture Multiplanar
        Pixel Format: 'Y12 '
        Name        : 12-bit Greyscale
                Size: Stepwise 64x64 - 800x600 with step 8/8
        Index       : 33
        Type        : Video Capture Multiplanar
        Pixel Format: 'Y10 '
        Name        : 10-bit Greyscale
                Size: Stepwise 64x64 - 800x600 with step 8/8
输出解释
  • 命令会列出指定视频设备(如/dev/video0)支持的所有视频格式及其分辨率。
  • 输出示例说明:
  • Index:列出的格式索引号。
  • Type:描述捕获类型,如“Video Capture Multiplanar”。
  • Pixel Format:图像数据的格式标识符,例如 ‘NV16’, ‘NV12’, ‘RGB3’ 等。
  • Name:格式的具体名称,描述像素排列和颜色编码方式,例如 ‘YUYV 4:2:2’, ‘24-bit RGB 8-8-8’ 等。
  • Size:支持的分辨率范围和步长,例如 “Stepwise 64x64 - 800x600 with step 8/8”,表示支持从64x64到800x600的分辨率,且宽度和高度都是以8为步长递增的。
  • 每个格式条目提供了详细信息,包括支持的像素格式、颜色编码、分辨率范围及步长。这些信息用于理解和选择合适的视频捕获格式。

4. 设置视频设备的格式和分辨率

命令

要设置视频设备的格式和分辨率,请使用以下命令:

v4l2-ctl --device=/dev/video0 --set-fmt-video=width=800,height=600,pixelformat=UYVY
命令解释
  • –device=/dev/video0:指定要配置的视频设备文件。
  • –set-fmt-video:这是一个设置命令,用于配置视频捕获格式。
  • width=800,height=600:设置视频的宽度和高度。在这个例子中,分辨率被设置为800x600。
  • pixelformat=UYVY:指定所使用的像素格式。在此示例中,格式被设置为UYVY,这是一种YUV编码格式。
注意事项
  • 设置的参数值必须是视频设备支持的。如果输入的参数不被设备支持,命令将会报错。
  • 在设置格式和分辨率之前,建议先使用 v4l2-ctl --list-formats-ext 命令查看设备支持的所有格式和分辨率,以确保选择的参数是有效的。
  • 此命令对于调整视频设备以符合特定应用或性能要求非常有用。

通过这个命令,可以根据需要调整视频捕获的具体参数,获得最佳的视频质量和性能。

5. 查看摄像头支持的控制参数

命令
rk3568_t:/ # v4l2-ctl --device=/dev/v4l-subdev0 --list-ctrls
User Controls
                horizontal_flip 0x00980914 (bool)   : default=0 value=0
Image Processing Controls
                   test_pattern 0x009f0903 (menu)   : min=0 max=1 default=0 value=0
  • –device=/dev/v4l-subdev0:指定要查询的子设备文件。这通常是一个摄像头或其他视频捕获设备的控制接口。
  • –list-ctrls:这个选项用来列出摄像头或视频设备支持的所有控制参数。
输出解释
  • 输出将包括不同类别的控制参数,如“User Controls”和“Image Processing Controls”。
  • 每个控制参数通常包含以下信息:
  • 控制名称:如 horizontal_fliptest_pattern
  • 参数类型:如 (bool) 表示布尔类型,(menu) 表示有固定选项的菜单。
  • 控制标识符:如 0x00980914,这是内部用于识别控制的唯一标识。
  • 取值范围:例如 min=0 max=1 表示取值范围从0到1。
  • 默认值:如 default=0 表示控制的默认设置。
  • 当前值:如 value=0 表示当前设置的值。
注意事项
  • 此命令对于了解和调整摄像头的特定控制参数非常重要,尤其是在需要对摄像头的行为进行微调时。
  • 确保使用正确的设备文件路径 /dev/v4l-subdev0,因为不同设备可能有不同的路径。

通过这个命令,可以调试摄像头的各项功能和设置。

6. 设置摄像头的控制参数

命令

要设置摄像头的特定控制参数,请使用以下命令:

v4l2-ctl --device=/dev/v4l-subdev0 --set-ctrl test_pattern=1
命令解释
  • –device=/dev/v4l-subdev0:指定要配置的子设备文件。这里通常指的是摄像头或其他视频捕获设备的控制接口。
  • –set-ctrl:这是一个设置命令,用于调整设备的控制参数。
  • test_pattern=1:指定要设置的控制参数及其值。在此示例中,test_pattern 控制参数被设置为 1
功能和用途
  • 设置命令允许调整摄像头的各种功能和行为,如图像翻转、色彩调整、曝光控制等。
  • test_pattern 参数可能用于启用或禁用测试模式,这通常用于摄像头调试和性能测试。将该参数设置为 1 可能表示激活测试模式。
注意事项
  • 在设置控制参数之前,最好先使用 v4l2-ctl --list-ctrls 命令查看摄像头支持的所有控制参数及其当前设置,以确保所做的更改是合适的。
  • 确保参数的值在支持的范围内,否则命令可能会报错。

通过这种方式,可以根据需要调整摄像头的行为和性能,以获得最佳的图像质量和性能。

7. 抓取图像数据

命令

以下命令用于从视频设备抓取图像数据并保存到文件中:

  1. 抓取特定格式和分辨率的图像数据:
v4l2-ctl -d /dev/video0 --set-fmt-video=width=320,height=240,pixelformat=UYVY --stream-mmap=3 --stream-skip=3 --stream-to=./cif.out --stream-count=1 --stream-poll
  1. 抓取不同格式的图像数据:
v4l2-ctl -d /dev/video0 --set-fmt-video=width=320,height=240,pixelformat=RGB565_2X8_BE --stream-mmap=3 --stream-skip=3 --stream-to=./cif.out --stream-count=1 --stream-poll
  1. 使用当前设置抓取图像数据:
v4l2-ctl -d /dev/video0 --stream-mmap=3 --stream-skip=3 --stream-to=./cif.out --stream-count=1 --stream-poll
  1. 抓取图像数据到指定文件:
v4l2-ctl --stream-mmap --stream-count=1 --stream-to=file.raw
  1. 使用默认设置抓取图像数据并保存:
v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=1 --stream-to=image.raw
命令解释
  • -d /dev/video0:指定视频设备。
  • –set-fmt-video:设置视频格式和分辨率。
  • –stream-mmap:使用内存映射方式读取数据。
  • –stream-skip:跳过特定数量的帧。
  • –stream-to:指定输出文件名。
  • –stream-count:设置抓取的帧数。
  • –stream-poll:使用轮询方式等待帧数据。
成功和失败的输出
  • 成功抓取:终端将显示帧率信息,例如 30.00 fps
  • 抓取失败:可能会出现错误信息,如 select timeoutVIDIOC_DQBUF: Resource temporarily unavailable
错误处理

如果抓取失败,需要检查以下方面:

  • 视频设备和摄像头之间的接口是否正确连接。
  • 设置的视频格式、分辨率是否被设备支持。
  • 摄像头和视频设备的时序是否匹配。

通过这些命令,可以从视频设备抓取图像数据,用于测试、分析或其他应用。

8. 显示或分析图像数据

由于抓取到的图像数据通常是原始格式的,无法被普通的图片查看器直接打开。需要使用专门的工具或代码来处理、显示或分析这些数据。下面是几个使用 ffmpeg 工具来转换和查看原始图像数据的示例命令:

  1. 设置摄像头格式并抓取数据
v4l2-ctl --device /dev/video0 --set-fmt-video=width=320,height=240,pixelformat=RG10
v4l2-ctl --device /dev/video0 --stream-mmap --stream-count=1 --stream-to=output.raw
  1. 使用ffmpeg转换为JPEG格式
ffmpeg -f rawvideo -pixel_format rg10 -video_size 320x240 -i output.raw output.jpg
  1. 转换UYVY格式的原始数据为PNG
ffmpeg -f rawvideo -pixel_format uyvy422 -video_size 320x240 -i file.raw -f image2 -vcodec png file.png
  1. 转换YUYV格式的数据为PNG
ffmpeg -f rawvideo -s 320x240 -pix_fmt yuyv422 -i cif.out cif.png
使用ffmpeg的关键点
  • -f rawvideo:指定输入文件格式为原始视频数据。
  • -pixel_format:指定原始数据的像素格式,如 rg10uyvy422yuyv422 等。
  • -video_size:指定视频的分辨率,如 320x240
  • -i:指定输入文件名。
  • -f image2 -vcodec png:指定输出格式为PNG。
  • 输出文件名:如 output.jpgfile.pngcif.png 等。

使用这些命令可以将原始的视频数据转换为常见的图像格式,从而可以使用标准的图像查看器进行查看或进一步分析。这些转换步骤对于处理和分析原始摄像头数据至关重要。

9.媒体控制器和设备拓扑

命令

使用以下命令来查看连接到媒体控制器的设备信息:

rk3568_t:/ # media-ctl -p /dev/media0
Opening media device /dev/media0
Enumerating entities
Found 7 entities
Enumerating pads and links
Media controller API version 0.0.107
Media device information
------------------------
driver          rkcif
model           rkcif_dvp
serial
bus info
hw revision     0x0
driver version  0.0.107
Device topology
- entity 1: stream_cif_dvp_id0 (1 pad, 1 link)
            type Node subtype V4L
            device node name /dev/video0
        pad0: Sink
                <- "ov2640 1-0030":0 [ENABLED]
- entity 5: stream_cif_dvp_id1 (1 pad, 0 link)
            type Node subtype V4L
            device node name /dev/video1
        pad0: Sink
- entity 9: stream_cif_dvp_id2 (1 pad, 0 link)
            type Node subtype V4L
            device node name /dev/video2
        pad0: Sink
- entity 13: stream_cif_dvp_id3 (1 pad, 0 link)
             type Node subtype V4L
             device node name /dev/video3
        pad0: Sink
- entity 17: ov2640 1-0030 (1 pad, 1 link)
             type V4L2 subdev subtype Sensor
             device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:UYVY2X8/800x600
                 crop.bounds:(0,0)/320x240
                 crop:(0,0)/320x240]
                -> "stream_cif_dvp_id0":0 [ENABLED]
- entity 19: rkcif-dvp-sof (0 pad, 0 link)
             type V4L2 subdev subtype Unknown
             device node name /dev/v4l-subdev1
- entity 26: rkcif-mipi-luma (0 pad, 0 link)
             type Node subtype V4L
             device node name /dev/video4
命令输出解释
  • Opening media device /dev/media0:正在打开媒体设备 /dev/media0
  • Enumerating entities:列举媒体控制器中的实体(如摄像头、视频捕获设备等)。
  • Found 7 entities:发现了7个实体。
  • Enumerating pads and links:列举实体的接口(pads)和它们之间的连接(links)。
  • Media controller API version:显示媒体控制器API的版本。
设备信息
  • driver, model:显示驱动程序和模型名称。
  • hw revision, driver version:硬件修订和驱动版本信息。
设备拓扑
  • 列出了每个实体的详细信息,包括:
  • Entity:实体编号和名称。
  • Type, subtype:实体类型及子类型。
  • Device node name:设备节点名称,如 /dev/video0
  • Pads:实体的接口(pad)。
  • Links:实体之间的连接情况。

例如:

  • entity 1: stream_cif_dvp_id0:表示一个视频流实体,设备节点为 /dev/video0,拥有一个Sink类型的接口,且与实体“ov2640 1-0030”连接。
使用场景
  • 了解连接到系统的视频设备的详细结构,尤其是在进行复杂的视频流处理或调试时。
  • 它提供了设备的全面视图,包括每个设备的功能、接口类型以及它们之间的连接关系。

10.详细探查视频设备属性和设置

命令

查询指定视频设备的所有属性和配置:

rk3568_t:/ # v4l2-ctl --all --device /dev/video0
Driver Info:
        Driver name      : rkcif
        Card type        : rkcif
        Bus info         : platform:rkcif_dvp
        Driver version   : 5.10.107
        Capabilities     : 0x84201000
                Video Capture Multiplanar
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x04201000
                Video Capture Multiplanar
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : rkcif
        Model            : rkcif_dvp
        Serial           :
        Bus info         :
        Media version    : 5.10.107
        Hardware revision: 0x00000000 (0)
        Driver version   : 5.10.107
Interface Info:
        ID               : 0x03000002
        Type             : V4L Video
Entity Info:
        ID               : 0x00000001 (1)
        Name             : stream_cif_dvp_id0
        Function         : V4L2 I/O
        Pad 0x01000004   : Sink
          Link 0x02000018: from remote pad 0x1000012 of entity 'ov2640 1-0030': Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
        Width/Height      : 800/600
        Pixel Format      : 'UYVY'
        Field             : None
        Number of planes  : 1
        Flags             :
        Colorspace        : Default
        Transfer Function : Default
        YCbCr Encoding    : Default
        Quantization      : Default
        Plane 0           :
           Bytes per Line : 320
           Size Image     : 153600
Crop: Left 0, Top 0, Width 320, Height 240
Selection: crop, Left 0, Top 0, Width 320, Height 240, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 320, Height 240, Flags:
Selection: crop, Left 0, Top 0, Width 320, Height 240, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 320, Height 240, Flags:
命令输出解释
  • Driver Info:显示驱动程序信息,包括驱动名称、卡类型、总线信息、驱动版本及设备能力。
  • Capabilities:列出设备的能力,如视频捕获、流媒体、扩展像素格式等。
  • Media Driver Info:媒体驱动信息,包括驱动名称、模型、媒体版本、硬件修订版本等。
  • Interface Info:接口信息,包括ID和类型。
  • Entity Info:实体信息,如ID、名称、功能以及与其他实体的连接情况。
设备配置详情
  • Format Video Capture Multiplanar:显示视频捕获的格式,包括宽高、像素格式、颜色空间等。
  • CropSelection:展示设备的裁剪设置和选择范围,包括左、顶、宽度、高度等。
使用场景
  • 这个命令提供了设备的详细配置和设置信息。
  • 可以用于调试、性能分析、配置确认等多种场景。

通过这个命令,可以获得关于视频设备的深入信息,包括其支持的格式、配置的详细情况以及与其他设备或实体的连接状态,这对于视频设备的有效管理和故障。

问题1:

在使用Rockchip平台,并接入OV2640摄像头时,出现了获取帧间隔失败的问题。系统打印的日志为 rkcif_update_sensor_info: get terminal ov2640 1-0030 g_frame_interval failed!

问题原因

这个问题出现在rkcif的rkcif_update_sensor_info函数中,它是试图从子设备OV2640摄像头获取帧间隔(g_frame_interval),但操作失败了。这通常意味着在驱动程序的某个地方,帧间隔未被正确设置。

解决方法

  1. 查找并打开rkcif的驱动代码,找到rkcif_update_sensor_info函数。
  2. rkcif_update_sensor_info函数中,找到g_frame_interval的设置部分,如果获取失败,则强制设置一个默认值。例如:
ret = v4l2_subdev_call(terminal_sensor->sd, video, g_frame_interval, &terminal_sensor->fi);
if (ret) {
    v4l2_err(&stream->cifdev->v4l2_dev,
             "%s: get terminal %s g_frame_interval failed!\n",
             __func__, terminal_sensor->sd->name);
    // 如果获取失败,则设定一个默认值,比如30帧/秒
    terminal_sensor->fi.numerator = 1;
    terminal_sensor->fi.denominator = 30; // 默认设置为30FPS
}

总结:

在本文中,我已经介绍了如何使用Rockchip平台和OV2640摄像头进行视频设备的调试和分析。演示了如何使用v4l2-ctlmedia-ctlffmpeg等命令和工具来操作和处理视频设备和图像数据。希望这些内容能够帮助你更好地理解和使用视频设备。如果你有任何问题或建议,请随时留言。

相关文章
|
6月前
|
开发工具 芯片 Perl
ZYNQ_SDK MIO控制LED
ZYNQ_SDK MIO控制LED
|
API 芯片
STM32 使用HAL库调试内部RTC经验总结
STM32 使用HAL库调试内部RTC经验总结
610 1
|
编解码 监控 Linux
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
1160 0
|
传感器 编解码 移动开发
Camera知识体系架构之驱动&应用&调试学习笔记-以瑞芯微RV1109为例(一)
Camera知识体系架构之驱动&应用&调试学习笔记-以瑞芯微RV1109为例(一)
787 0
|
Linux API 开发者
Linux驱动分析之RTC框架
当Linux内核启动时,它会从RTC中读取时间与日期,作为基准值。然后通过软件来维护系统时间和日期。Linux系统中提供了RTC核心层,对于驱动开发者而言,操作起来就变得很简单了。我们来看看整体框架。
|
Linux 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十四)具体单板的GPIO操作方法
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十四)具体单板的GPIO操作方法
158 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十四)具体单板的GPIO操作方法
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
255 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
|
Linux 开发工具 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十四)查询方式的按键驱动程序_编写框架
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十四)查询方式的按键驱动程序_编写框架
175 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十四)查询方式的按键驱动程序_编写框架
|
存储 算法 API
HarmonyOS系统中内核实现ADC采样的方法
大家好,今天主要和大家聊一聊,如何使用鸿蒙系统实现ADC采样。
195 0
HarmonyOS系统中内核实现ADC采样的方法
stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序
stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序
stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序