RK3588 Camera调试抓图方法总结

总结一下rk3588平台,所有抓图方法。

1.V4L2抓图video节点的选择确认

①raw 摄像头

raw摄像头正常有配置两条pipeline:

sensor -> csi2_dphy -> mipi_csi -> rkcif_mipi_lvds

rkcif_mipi_lvds_stdif -> rkisp_vir

因此有两个地方可以保存图像,rkcif和rkisp都可以保存图像,rkcif可以保存sensor的原始raw图像,也就是没有经过ISP调试3A的图像,rkisp可以保存经过ISP处理的YUV图像。

RKCIF的抓图的节点,一般是stream_cif_mipi_id0,id123....分别指的是MIPI的虚拟通道,在HDR模式下,id1是输出短帧,在PDAF的下,id1是一般输出PD图像。

RKISP的抓图节点,一般是rkisp_mainpath和rkisp_selfpath,mp可以输出全分辨率,sp只能输出最大1080P的分辨率。

console:/ # grep -H '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:stream_cif_mipi_id0
/sys/class/video4linux/video1/name:stream_cif_mipi_id1
/sys/class/video4linux/video10/name:rkcif_tools_id2
/sys/class/video4linux/video11/name:rkisp_mainpath
/sys/class/video4linux/video12/name:rkisp_selfpath
/sys/class/video4linux/video13/name:rkisp_fbcpath
/sys/class/video4linux/video14/name:rkisp_iqtool
/sys/class/video4linux/video15/name:rkisp_rawrd0_m
/sys/class/video4linux/video16/name:rkisp_rawrd2_s
/sys/class/video4linux/video17/name:rkisp_rawrd1_l
/sys/class/video4linux/video18/name:rkisp-statistics
/sys/class/video4linux/video19/name:rkisp-input-params
/sys/class/video4linux/video2/name:stream_cif_mipi_id2
/sys/class/video4linux/video20/name:stream_hdmirx
/sys/class/video4linux/video3/name:stream_cif_mipi_id3
/sys/class/video4linux/video4/name:rkcif_scale_ch0
/sys/class/video4linux/video5/name:rkcif_scale_ch1
/sys/class/video4linux/video6/name:rkcif_scale_ch2
/sys/class/video4linux/video7/name:rkcif_scale_ch3
/sys/class/video4linux/video8/name:rkcif_tools_id0
/sys/class/video4linux/video9/name:rkcif_tools_id1

②YUV的sensor或者转接芯片

一些摄像头模组自带ISP,直接输出YUV的图像给主控,不需要主控的ISP进行处理,还有一些HDMI转MIPI-CSI的转接芯片以及AHD的转接芯片,直接输出YUV的数据给主控,这种配置一般只有一个pipeline:

sensor -> csi2_dphy -> mipi_csi -> rkcif_mipi_lvds

因此直接从对应的stream_cif_mipi_id0抓数据流即可。

2.V4L2开关数据流。

抓数据流可以参考如下命令,命令执行之后会输出帧率信息,说明数据流正常,主控的控制器有收到sensor给的帧信息,该指令没有保存图像,常用于调试,确认是否有MIPI输出数据等等。

扫描二维码关注公众号,回复: 17269820 查看本文章
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4

3.抓RAW图

仅针对RAW sensor,抓raw图常用的方法有两种:

①V4l2抓raw图

因为是RKCIF输出RAW数据,因此也是针对stream_cif_mipi_id0节点抓即可。需要注意的是,直接抓的raw数据是紧凑型的,256字节对齐的数据。

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='BG10' --stream-mmap=3 --stream-skip=20 --stream-to=/data/1080p60.raw --stream-count=5 --stream-poll

抓非紧凑型的,需要在抓图之前设置,其中rkcif-mipi-lvds需要根据实际接口进行设置,如果是MIPI1则是rkcif-mipi-lvds1,以此类推。

echo 0 > /sys/devices/platform/rkcif-mipi-lvds/compact_test

②回读模式,预览场景下抓raw

如果使用的是回读模式的话,在app预览的情况下,可以通过aiq抓取raw数据,使用方法如下:

setprop persist.vendor.rkisp_no_read_back 0           //设置回读模式
mkdir /data/capture_image
chmod 777 /data/capture_image
echo 3 > /data/.capture_cnt

4.抓YUV图像

抓取ISP输出的YUV图像的几种方式总结。如果是raw sensor,则是抓取ISP输出的图像,如果是YUV的sensor,则是抓取RKCIF输出的。

①V4l2直接抓YUV图像,对mp或者sp

直接抓取的话,如果是raw sensor,是没有经过3A算法,抓到的图像正常会偏绿。

v4l2-ctl -d /dev/video11 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=3 --stream-skip=4 --stream-to=/data/1920x1080p60_nv12.yuv --stream-count=5 --stream-poll

②在3A server场景先,抓取图像

先执行3A server,跑3A算法

rkaiq_3A_server

然后再执行上述的命令抓取YUV图像,可以抓取经过isp 3A处理后的正常图像。

③使用rkaiq demo抓取

参考命令如下,不需要载跑3A server。这个demo会直接调用aiq的接口,抓到的图像也是ISP处理后的图像,需要指定iq文件的路径。

rkaiq_demo --device /dev/video11 --width 1920 --height 1080 --iqpath /vendor/etc/camera/rkisp2/ --rkaiq --stream-skip=10 --stream-count=50 --stream-to=/data/gc8034.yuv

④camera HAL 抓图

还可以在使用app预览的场下,通过设置,HAL来保存图像,使用如下,设置属性139,可以抓取video输出的原始YUV,经过RGA处理的预览图像,以及拍照时候的jpeg图像。图像保存在/data/dump目录下。

adb root
adb remount
adb shell setprop persist.vendor.camera.dump 139
adb shell setprop persist.vendor.camera.dump.cnt 20 设置dump20帧
adb shell setenforce 0
adb shell mkdir /data/dump
adb shell chmod 777 /data/dump/
adb shell setprop  persist.vendor.camera.dump.path /data/dump/

猜你喜欢

转载自blog.csdn.net/qq_34341546/article/details/134134457
今日推荐