文章目录
- [一、检查设备识别 v4l2-ctl --list-devices](#一、检查设备识别 v4l2-ctl --list-devices)
-
-
- [1. 统计节点(rkisp-statistics)](#1. 统计节点(rkisp-statistics))
- [2. 主路径节点(rkisp_mainpath)](#2. 主路径节点(rkisp_mainpath))
- [3. 媒体控制器节点](#3. 媒体控制器节点)
- 总结与典型工作流程
-
- [二、 查看摄像头能力 v4l2-ctl -d /dev/video0 --all](#二、 查看摄像头能力 v4l2-ctl -d /dev/video0 --all)
-
- [1. 驱动和设备基本信息](#1. 驱动和设备基本信息)
- [2. 媒体控制器信息](#2. 媒体控制器信息)
- [3. 视频格式配置(关键信息)](#3. 视频格式配置(关键信息))
- [4. 裁剪区域(Selection)](#4. 裁剪区域(Selection))
- [5. 用户控制(应用程序可调整)](#5. 用户控制(应用程序可调整))
- [6. 图像源控制(传感器相关)](#6. 图像源控制(传感器相关))
- [7. 图像处理控制(ISP/MIPI相关)](#7. 图像处理控制(ISP/MIPI相关))
- 技术细节解读
-
- [1. 像素率计算](#1. 像素率计算)
- [2. 带宽分析](#2. 带宽分析)
- [3. 可优化方向](#3. 可优化方向)
- [三、查看支持的格式v4l2-ctl -d /dev/video0 --list-formats-ext](#三、查看支持的格式v4l2-ctl -d /dev/video0 --list-formats-ext)
-
- 格式分类解析
-
- [1. **YUV 4:2:2 格式**(较高色彩质量)](#1. YUV 4:2:2 格式(较高色彩质量))
- [2. **YUV 4:2:0 格式**(最常用,高效压缩)](#2. YUV 4:2:0 格式(最常用,高效压缩))
- [3. **YUV 4:4:4 格式**(最高色彩质量)](#3. YUV 4:4:4 格式(最高色彩质量))
- [4. **Bayer RAW 格式**(原始传感器数据)](#4. Bayer RAW 格式(原始传感器数据))
- 分辨率范围分析
- 技术要点
-
- [1. **格式选择建议**](#1. 格式选择建议)
- [2. **内存占用计算**](#2. 内存占用计算)
- [3. **性能考虑**](#3. 性能考虑)
- 实际应用示例
-
- [1. 设置NV12格式的1080p:](#1. 设置NV12格式的1080p:)
- [2. 设置UYVY格式的720p:](#2. 设置UYVY格式的720p:)
- [3. 捕获RAW图像(用于调试):](#3. 捕获RAW图像(用于调试):)
- 总结
- 总结
一、检查设备识别 v4l2-ctl --list-devices
c
解释 root@RK356X:/# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
/dev/video7
/dev/video8
rkisp_mainpath (platform:rkisp-vir0):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/media0
这是一个使用 v4l2-ctl 工具列出的视频设备列表,它展示了 Rockchip RK356X 平台上 RKISP(Rockchip Image Signal Processor) 驱动的摄像头子系统的结构。这个输出清晰地揭示了 ISP 处理流水线的软件抽象。
下面是对每个设备及其作用的详细解释:
1. 统计节点(rkisp-statistics)
rkisp-statistics (platform: rkisp):
/dev/video7
/dev/video8
- 功能 :这两个是统计信息节点。它们不输出图像帧。
- 具体作用 :
/dev/video7:通常用于 3A 统计信息(自动对焦 AF、自动曝光 AE、自动白平衡 AWB)。ISP 算法需要分析传感器捕捉的原始图像数据来计算曝光值、白平衡增益和对焦位置。这个设备提供了算法所需的原始统计数据。/dev/video8:通常用于提供直方图统计信息,这也是 AE/AWB 算法的重要输入。
- 用户 :这些节点主要由 ISP 的算法库 (如
libcamhal、rkiq)使用,应用程序通常不直接操作它们。
2. 主路径节点(rkisp_mainpath)
rkisp_mainpath (platform:rkisp-vir0):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
这些节点代表了 ISP 处理后的图像数据输出路径 ,是应用程序(如摄像头 APP、GStreamer)获取视频流的主要接口。它们通常以不同的像素格式 和分辨率提供同一路处理后的图像,以满足不同场景的需求。
/dev/video0: 通常是主路径的主输出 。提供经过完整 ISP 处理(去马赛克、降噪、锐化、色彩校正等)后的高质量图像,格式常为YUYV或NV12,分辨率是传感器支持的最高分辨率。/dev/video1到/dev/video6: 这些是缩放输出 或辅助输出 节点。ISP 可以同时输出多个不同尺寸和格式的图像流,这在多媒体处理中非常有用,例如:- 高清预览 + 低清编码 :
/dev/video0输出 1080P 用于屏幕预览,/dev/video1输出 720P 用于视频录制编码。 - 计算机视觉 :输出一个低分辨率的
NV12流给 AI 模型进行人脸或物体识别,同时输出全分辨率流用于预览。 - 取景器:输出一个正方形裁剪的流。
- 格式可能包括
NV12、YUYV、RGB565等。
- 高清预览 + 低清编码 :
3. 媒体控制器节点
/dev/media0
- 功能 :这是 Media Controller API 的设备节点。它用于管理和配置复杂的多媒体硬件拓扑,在 RKISP 这种涉及传感器 -> CSI-2 接收器 -> ISP(多个处理单元) 的流水线中至关重要。
- 具体作用 :
- 应用程序可以通过
media-ctl工具(如media-ctl -d /dev/media0 -p)来查看整个摄像头硬件的连接图(管道)。 - 可以动态配置管道,例如将某个传感器连接到 ISP 的某个输入端口,或者配置 ISP 内部各模块的连接关系。
- 它不是用来传输视频数据的,而是用来控制数据流向的"总指挥"。
- 应用程序可以通过
总结与典型工作流程
-
初始化(由 HAL 或
rkiq完成):- 通过
/dev/media0配置传感器、CSI-2 和 ISP 模块的连接管道。 - 打开统计节点
/dev/video7和/dev/video8,获取数据以运行 3A 算法。
- 通过
-
预览/录像(由应用程序完成):
- 应用程序(如
cheese,gst-launch-1.0)根据自身需求(分辨率、格式)选择合适的rkisp_mainpath节点,例如打开/dev/video0获取最高质量的预览流。 - 应用程序使用标准 V4L2 API(
VIDIOC_REQBUFS,VIDIOC_QBUF,VIDIOC_DQBUF)从这个节点申请缓冲区、获取图像帧。
- 应用程序(如
简单来说:
/dev/video[7,8]:给 ISP算法 用的"原材料数据"(统计信息)。/dev/video[0-6]:给 用户程序 用的"成品图像"(多种规格可选)。/dev/media0:用于连接和配置整个摄像头硬件生产线的"控制面板"。
这个多设备架构体现了现代 Linux 内核中 V4L2 子系统的模块化设计,将控制、统计和图像数据流清晰地分离开来。
二、 查看摄像头能力 v4l2-ctl -d /dev/video0 --all
c
root@RK356X:/# v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : rkisp_v5
Card type : rkisp_mainpath
Bus info : platform:rkisp-vir0
Driver version : 1.8.0
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 : rkisp-vir0
Model : rkisp0
Serial :
Bus info :
Media version : 4.19.255
Hardware revision: 0x00000000 (0)
Driver version : 4.19.255
Interface Info:
ID : 0x0300000e
Type : V4L Video
Entity Info:
ID : 0x0000000d (13)
Name : rkisp_mainpath
Function : V4L2 I/O
Pad 0x01000010 : 0: Sink
Link 0x02000011: from remote pad 0x1000004 of entity 'rkisp-isp-subdev': Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
Width/Height : 3840/2160
Pixel Format : 'NV12' (Y/CbCr 4:2:0)
Field : None
Number of planes : 1
Flags :
Colorspace : Default
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Full Range
Plane 0 :
Bytes per Line : 3840
Size Image : 12441600
Selection Video Capture: crop, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Output: crop, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Output: crop_bounds, Left 0, Top 0, Width 3840, Height 2160, Flags:
User Controls
exposure 0x00980911 (int) : min=4 max=2242 step=1 default=2242 value=203
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
Image Source Controls
vertical_blanking 0x009e0901 (int) : min=58 max=30575 step=1 default=58 value=58
horizontal_blanking 0x009e0902 (int) : min=4936 max=4936 step=1 default=4936 value=4936 flags=read-only
analogue_gain 0x009e0903 (int) : min=0 max=240 step=1 default=0 value=0
Image Processing Controls
link_frequency 0x009f0901 (intmenu): min=0 max=3 default=0 value=1
0: 297000000 (0x11b3dc40)
1: 446000000 (0x1a956b80)
2: 743000000 (0x2c4947c0)
3: 891000000 (0x351b94c0)
pixel_rate 0x009f0902 (int64) : min=0 max=712800000 step=1 default=356800000 value=356800000 flags=read-only
这是一个非常详细的视频设备信息输出,展示了 /dev/video0 设备的完整配置状态。让我们逐部分解析:
1. 驱动和设备基本信息
bash
Driver Info:
Driver name : rkisp_v5 # Rockchip ISP 驱动第5版
Card type : rkisp_mainpath # ISP主路径输出
Bus info : platform:rkisp-vir0 # 平台设备,虚拟节点0
Driver version : 1.8.0 # 驱动版本
Capabilities : 0x84201000 # 设备支持的所有能力
Device Caps : 0x04201000 # 当前启用的能力
- 关键能力 :
Video Capture Multiplanar:支持多平面视频捕获(如YUV的Y和UV分开存储)Streaming:支持流式I/O(DMA缓冲区)Extended Pix Format:支持扩展像素格式
2. 媒体控制器信息
bash
Media Driver Info:
Driver name : rkisp-vir0
Model : rkisp0
Entity Info:
ID : 0x0000000d (13)
Name : rkisp_mainpath
Function : V4L2 I/O
Pad 0x01000010 : 0: Sink
Link 0x02000011: from remote pad 0x1000004 of entity 'rkisp-isp-subdev': Data, Enabled
- 显示该设备是媒体控制器管道的一部分
- 它是接收端(Sink) ,从
rkisp-isp-subdev(ISP子设备)的 pad 4 接收数据 - 这种连接关系是通过
/dev/media0配置的
3. 视频格式配置(关键信息)
bash
Format Video Capture Multiplanar:
Width/Height : 3840/2160 # 4K分辨率 (3840x2160)
Pixel Format : 'NV12' # YUV 4:2:0 格式,单平面存储
Field : None # 逐行扫描
Number of planes : 1 # 单平面(Y和UV交错存储)
Colorspace : Default
Quantization : Full Range # 使用全范围0-255,非TV范围16-235
Plane 0 :
Bytes per Line : 3840 # 每行3840字节
Size Image : 12441600 # 每帧图像大小:3840x2160x1.5=12,441,600字节
4. 裁剪区域(Selection)
bash
Selection Video Capture: crop, Left 0, Top 0, Width 3840, Height 2160
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 3840, Height 2160
- 当前裁剪区域是整个传感器区域(3840x2160)
crop_bounds显示最大可裁剪范围
5. 用户控制(应用程序可调整)
bash
User Controls
exposure 0x00980911 (int) : min=4 max=2242 step=1 default=2242 value=203
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
- 曝光时间:当前203(可能单位是行时间),范围4-2242
- 水平/垂直翻转:当前都未启用
6. 图像源控制(传感器相关)
bash
Image Source Controls
vertical_blanking (int) : min=58 max=30575 default=58 value=58
horizontal_blanking (int) : min=4936 max=4936 default=4936 value=4936 flags=read-only
analogue_gain (int) : min=0 max=240 step=1 default=0 value=0
- 垂直消隐:58行,可调节范围很大(58-30575)
- 水平消隐:固定4936(只读)
- 模拟增益:当前为0
7. 图像处理控制(ISP/MIPI相关)
bash
Image Processing Controls
link_frequency 0x009f0901 (intmenu): value=1
0: 297000000 (297MHz)
1: 446000000 (446MHz) ← 当前选择
2: 743000000 (743MHz)
3: 891000000 (891MHz)
pixel_rate 0x009f0902 (int64) : value=356800000 (356.8MP/s)
技术细节解读
1. 像素率计算
当前配置:3840x2160 @ ?fps
像素率 = 356,800,000 像素/秒
总行时间 = 有效行 + 消隐行
= 3840 + 4936 = 8776 像素/行
总帧时间 = 有效行 + 消隐行
= 2160 + 58 = 2218 行/帧
帧率 = 像素率 / (总行时间 × 总帧时间)
= 356,800,000 / (8776 × 2218)
≈ 18.3 fps
结论 :当前配置为 4K@18fps 输出。
2. 带宽分析
- MIPI链路频率:446MHz(可能是每lane速率)
- 数据速率:每像素通常需要10-12bit(取决于传感器)
- 如果是4 lanes:总带宽 ≈ 446MHz × 4 × 2 = 3.568Gbps(DDR模式)
- NV12数据速率:12,441,600字节/帧 × 18.3帧/秒 ≈ 227MB/s
3. 可优化方向
-
提高帧率:
- 减小分辨率(如切换到1080p)
- 调整消隐时间(减小vertical_blanking)
- 可能需要增加link_frequency
-
图像质量调整:
- 增加exposure(当前203,最大2242)
- 增加analogue_gain(当前0,最大240)
- 注意:增益增加会增加噪声
-
格式选择:
- 当前为NV12(YUV420),适合视频编码
- 可考虑其他格式如YUYV(YUV422)等
这个输出完整展示了从传感器到ISP输出整个链路的配置状态,是调试摄像头性能的重要参考。
三、查看支持的格式v4l2-ctl -d /dev/video0 --list-formats-ext
c
root@RK356X:/# v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[1]: '422P' (Planar YUV 4:2:2)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[2]: 'NV16' (Y/CbCr 4:2:2)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[3]: 'NV61' (Y/CrCb 4:2:2)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[4]: 'YM16' (Planar YUV 4:2:2 (N-C))
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[5]: 'NV21' (Y/CrCb 4:2:0)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[6]: 'NV12' (Y/CbCr 4:2:0)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[7]: 'NM21' (Y/CrCb 4:2:0 (N-C))
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[8]: 'NM12' (Y/CbCr 4:2:0 (N-C))
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[9]: 'YU12' (Planar YUV 4:2:0)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[10]: 'YM24' (Planar YUV 4:4:4 (N-C))
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[11]: 'RGGB' (8-bit Bayer RGRG/GBGB)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[12]: 'GRBG' (8-bit Bayer GRGR/BGBG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[13]: 'GBRG' (8-bit Bayer GBGB/RGRG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[14]: 'BA81' (8-bit Bayer BGBG/GRGR)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[15]: 'RG10' (10-bit Bayer RGRG/GBGB)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[16]: 'BA10' (10-bit Bayer GRGR/BGBG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[17]: 'GB10' (10-bit Bayer GBGB/RGRG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[18]: 'BG10' (10-bit Bayer BGBG/GRGR)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[19]: 'RG12' (12-bit Bayer RGRG/GBGB)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[20]: 'BA12' (12-bit Bayer GRGR/BGBG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[21]: 'GB12' (12-bit Bayer GBGB/RGRG)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
[22]: 'BG12' (12-bit Bayer BGBG/GRGR)
Size: Stepwise 32x16 - 3840x2160 with step 8/8
root@RK356X:/#
这个输出展示了 /dev/video0 设备支持的所有视频格式和分辨率范围。这些格式覆盖了从原始 Bayer 数据到各种处理后的 YUV 格式,体现了 ISP 的强大处理能力。
格式分类解析
1. YUV 4:2:2 格式(较高色彩质量)
[0] 'UYVY' - 打包式 YUV422 (UYVY 顺序)
[1] '422P' - 平面式 YUV422 (三个独立平面)
[2] 'NV16' - 半平面 YUV422 (Y平面 + UV交错平面)
[3] 'NV61' - 半平面 YUV422 (Y平面 + VU交错平面)
[4] 'YM16' - 自定义平面 YUV422
- 特点:色度水平分辨率不降采样,色彩质量较好
- 带宽:每像素2字节(16bpp)
- 用途:高质量视频处理、专业应用
2. YUV 4:2:0 格式(最常用,高效压缩)
[5] 'NV21' - Android标准 (Y平面 + VU交错)
[6] 'NV12' - 当前使用格式 (Y平面 + UV交错)
[7] 'NM21' - 自定义半平面 YUV420
[8] 'NM12' - 自定义半平面 YUV420
[9] 'YU12' - I420标准 (三个独立平面: Y + U + V)
- 特点:色度水平和垂直都2:1降采样,最常用的视频格式
- 带宽:每像素1.5字节(12bpp)
- 用途:视频编码(H.264/H.265)、显示、通用处理
3. YUV 4:4:4 格式(最高色彩质量)
[10] 'YM24' - 平面式 YUV444
- 特点:无色彩降采样,最高质量
- 带宽:每像素3字节(24bpp)
- 用途:高质量图像处理、专业摄像
4. Bayer RAW 格式(原始传感器数据)
8-bit Bayer:
[11] 'RGGB' - RGRG/GBGB排列
[12] 'GRBG' - GRGR/BGBG排列
[13] 'GBRG' - GBGB/RGRG排列
[14] 'BA81' - BGBG/GRGR排列
10-bit Bayer:
[15] 'RG10' - 10-bit RGGB
[16] 'BA10' - 10-bit GRBG
[17] 'GB10' - 10-bit GBRG
[18] 'BG10' - 10-bit BGGR
12-bit Bayer:
[19] 'RG12' - 12-bit RGGB
[20] 'BA12' - 12-bit GRBG
[21] 'GB12' - 12-bit GBRG
[22] 'BG12' - 12-bit BGGR
- 特点:原始传感器数据,需要ISP处理才能显示
- 用途:机器视觉、后处理、高质量RAW捕获
分辨率范围分析
Size: Stepwise 32x16 - 3840x2160 with step 8/8
- 最小分辨率:32x16 像素
- 最大分辨率:3840x2160(4K UHD)
- 步进:水平和垂直都是8像素步进
- 约束:分辨率必须是8的倍数(对齐要求)
技术要点
1. 格式选择建议
- 视频编码/显示 :
NV12(最通用,硬件加速支持好) - 高质量处理 :
UYVY或422P - 计算机视觉 :
NV12(通用)或 RAW Bayer(原始数据) - Android应用 :
NV21(Android相机标准) - Linux应用 :
NV12或YU12
2. 内存占用计算
- 4K NV12:3840×2160×1.5 = 12,441,600 字节/帧
- 4K UYVY:3840×2160×2 = 16,588,800 字节/帧
- 4K YUV444:3840×2160×3 = 24,883,200 字节/帧
- 4K RAW10:3840×2160×1.25 = 10,368,000 字节/帧(10bit打包)
3. 性能考虑
- RAW格式:需要CPU/GPU后处理,性能开销大
- NV12/NV21:硬件编解码器直接支持,性能最优
- 分辨率调整:减小分辨率可大幅提高帧率
实际应用示例
1. 设置NV12格式的1080p:
bash
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=NV12
2. 设置UYVY格式的720p:
bash
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=UYVY
3. 捕获RAW图像(用于调试):
bash
v4l2-ctl -d /dev/video0 --set-fmt-video=width=3840,height=2160,pixelformat=RG12
总结
这个ISP支持非常丰富的格式:
- 处理后的YUV格式:适合显示和编码
- 原始Bayer格式:适合机器视觉和高质量后处理
- 多种位深:8/10/12-bit,满足不同质量需求
- 宽分辨率范围:从极小到4K,支持灵活应用
NV12 通常是默认和最优选择,因为它平衡了质量、带宽和硬件兼容性。如果需要更高色彩保真度,可以考虑 YUV422 格式;如果需要原始数据用于算法开发,可以使用相应的 Bayer RAW 格式。
总结
学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!