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 是硬件输入接口,

  1. rkcif-mipi-lvds 对应得是 cam0 接口,第一个设备 /dev/video0 对于的是raw节点

  2. rkcif-mipi-lvds1 对应得是 cam1 接口,第一个设备 /dev/video11 对于的是raw节点

rkisp_mainpath 是isp图像输出接口

  1. rkisp-vir0 对应得是 cam0 接口,第一个设备 /dev/video22 对于的是isp节点,用来拍照和拍视频

  2. 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 是硬件输入接口,

  1. /dev/video0 对于的是raw节点

  2. rkisp_mainpath 是isp图像输出接口

  1. 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解析后的视频如下

未找到图片 未找到图片