12. 摄像头¶
LubanCat-RV06 板卡支持双摄功能
LubanCat-RV06 支持 野火OV8858
摄像头,分辨率是 1632x1224@30fps,支持两路同时拍摄。
ISP最大支持500M@30fps,使用双摄的时候需要注意分辨率和帧率,如果是使用 野火OV8858
,双摄能同时支持 1632x1224@30fps。
警告
板卡默认配置的是单摄,如果要使用双摄功能,需要修改设备树,具体修改方法请参考下文。
12.1. 双摄配置¶
注意:双摄模式下,需要插入两个摄像头,只插一个摄像头是没有用的。
打开设备树文件 LubanCat-RV06板卡
的设备树 sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-lubancat-rv06.dts
将设备树上面注释单摄设备树,打开双摄设备树,修改如下:
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
*/
/dts-v1/;
#include "rv1106.dtsi"
//screen
#include "rv1106g-lubancat-screen-rgb.dtsi"
//camara
#include "rv1106g-lubancat-single-cam.dtsi"
// #include "rv1106g-lubancat-dual-cam.dtsi"
上面代码是原设备树,改成下面代码
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
*/
/dts-v1/;
#include "rv1106.dtsi"
//screen
#include "rv1106g-lubancat-screen-rgb.dtsi"
//camara
// #include "rv1106g-lubancat-single-cam.dtsi"
#include "rv1106g-lubancat-dual-cam.dtsi"
改完之后,可以编译内核,然后使用分区烧录的方式烧录内核,烧录完成之后就是双摄模式了。
./build.sh kernel
除了编译内核,还可以编译整个镜像,然后烧录镜像即可
./build.sh
12.2. 硬件连接¶
摄像头的接口如图下所示

注解
摄像头连接的排线为0.5mm 24pin 异面的fpc排线
警告
摄像头接口不支持热插拔,需要在板子关机的情况下连接摄像头,如果在开机的情况下连接摄像头,可能会导致摄像头无法正常显示或者导致板卡无法正常使用。
12.3. 查看摄像头信息(双摄)¶
12.3.1. 列出摄像头设备¶
下面用双摄的设备树进行解析
v4l2-ctl --list-devices
执行结果如下:
# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
/dev/video30
/dev/video31
/dev/video40
/dev/video41
rkcif (platform:rkcif-mipi-lvds):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/video7
/dev/video8
/dev/video9
/dev/video10
rkcif (platform:rkcif-mipi-lvds1):
/dev/video11
/dev/video12
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/video17
/dev/video18
/dev/video19
/dev/video20
/dev/video21
rkisp_mainpath (platform:rkisp-vir0):
/dev/video22
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video28
/dev/video29
rkisp_mainpath (platform:rkisp-vir1):
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/video36
/dev/video37
/dev/video38
/dev/video39
上面设备要注意的两个点是
rkcif
是硬件输入接口,
rkcif-mipi-lvds
对应得是cam0
接口,第一个设备/dev/video0
对于的是raw节点rkcif-mipi-lvds1
对应得是cam1
接口,第一个设备/dev/video11
对于的是raw节点
rkisp_mainpath
是isp图像输出接口
rkisp-vir0
对应得是cam0
接口,第一个设备/dev/video22
对于的是isp节点,用来拍照和拍视频rkisp-vir1
对应得是cam1
接口,第一个设备/dev/video32
对于的是isp节点,用来拍照和拍视频
12.3.2. 列出摄像头格式¶
# 查看cam0
v4l2-ctl --list-formats-ext --device=/dev/video22
# 查看cam1
v4l2-ctl --list-formats-ext --device=/dev/video32
# v4l2-ctl --list-formats-ext --device=/dev/video22
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[1]: 'NV16' (Y/CbCr 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[2]: 'NV61' (Y/CrCb 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[3]: 'NV21' (Y/CrCb 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[4]: 'NV12' (Y/CbCr 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[5]: 'NM21' (Y/CrCb 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[6]: 'NM12' (Y/CbCr 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
# v4l2-ctl --list-formats-ext --device=/dev/video32
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[1]: 'NV16' (Y/CbCr 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[2]: 'NV61' (Y/CrCb 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[3]: 'NV21' (Y/CrCb 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[4]: 'NV12' (Y/CbCr 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[5]: 'NM21' (Y/CrCb 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[6]: 'NM12' (Y/CbCr 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
#
12.4. 查看摄像头信息(单摄)¶
12.4.1. 列出摄像头设备¶
下面用单摄的设备树进行解析
v4l2-ctl --list-devices
执行结果如下:
# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
/dev/video19
/dev/video20
rkcif (platform:rkcif-mipi-lvds):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/video7
/dev/video8
/dev/video9
/dev/video10
rkisp_mainpath (platform:rkisp-vir0):
/dev/video11
/dev/video12
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/video17
/dev/video18
#
上面设备要注意的两个点是
rkcif
是硬件输入接口,
/dev/video0
对于的是raw节点rkisp_mainpath
是isp图像输出接口
rkisp-vir0
对应得是cam0
接口,第一个设备/dev/video11
对于的是isp节点,用来拍照和拍视频
12.4.2. 列出摄像头格式¶
# 查看cam0
v4l2-ctl --list-formats-ext --device=/dev/video11
# v4l2-ctl --list-formats-ext --device=/dev/video11
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[1]: 'NV16' (Y/CbCr 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[2]: 'NV61' (Y/CrCb 4:2:2)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[3]: 'NV21' (Y/CrCb 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[4]: 'NV12' (Y/CbCr 4:2:0)
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[5]: 'NM21' (Y/CrCb 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
[6]: 'NM12' (Y/CbCr 4:2:0 (N-C))
Size: Stepwise 32x32 - 1632x1224 with step 8/8
#
12.5. 拍摄¶
12.5.1. 拍摄前准备¶
拍照前需要开启rkaiq_3A_server服务,这个服务是用来控制摄像头的曝光、白平衡、对焦等功能的,开启这个服务后,摄像头才能正常工作。
不然颜色就会出现问题
rkaiq_3A_server &
12.5.2. 获取摄像头yuv数据¶
# 获取cam0的yuv数据
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 0 -m 0 -l 1 -o 1 --delay_get=200
# 获取cam1的yuv数据
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 1 -m 0 -l 1 -o 1 --delay_get=200
可以通过设置 -w 和 -h 参数来调整分辨率,通过 -d 参数来选择摄像头设备
获取到的数据分别为 /data/test_0_0_0.bin
/data/test_1_1_0.bin
, 格式为NV12


如果想调整其他格式可以使用 --help
查看帮助
12.5.3. 拍摄jpg照片¶
# 拍摄cam0的jpg照片
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 0 -m 1 -l 1 -o 1 --delay_get=200 --codec=15
# 拍摄cam1的jpg照片
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 1 -m 1 -l 1 -o 1 --delay_get=200 --codec=15
拍摄的照片分别为 /data/venc_0.bin
, 格式为jpg
可以通过设置 -w 和 -h 参数来调整分辨率,通过 -d 参数来选择摄像头设备
下面为cam0的图片

下图为cam1的图片

12.5.4. 录像¶
支持h264,h265,mjpeg三种编码方式
三种方式使用的命令差不多,差异在于 --codec
参数
h264
使用--codec=8
h265
使用--codec=12
mjpeg
使用--codec=9
# 录像cam0的h264视频
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 0 -m 1 -l 300 -o 1 --codec=8
# 录像cam1的h264视频
rk_mpi_vi_test -w 1632 -h 1224 -t 4 -c 0 -d 1 -m 1 -l 300 -o 1 --codec=8
可以通过设置 -w 和 -h 参数来调整分辨率,通过 -d 参数来选择摄像头设备,-l为录像次数,单位为帧数,上面的命令录制的视频为 /data/venc_0.bin
使用h264解析后的视频如下

