首页 > 技术知识 > 正文

RK3568评估板应用:Camera 多媒体开发(一)-rk3588

通过gstreamer/rockit来在rockchip平台上做multimedia的开发:

vpu_service–> mpp –> gstreamer/ffmpeg –> app

vpu_service:驱动

mpp:rockchip平台的视频编解码中间件,相关说明参考mpp文档

gstreamer:对接app的组件

目前rockchip提供的完整solution是基于gstreamer的,使用gstreamer的好处就是可以比较方便的基于pipeline的方式编写完整的播放器、编码器这些应用。

一、v4l2-utils

在Buildroot固件中,已经编译好了v4l2-utils软件包里面的工具。开发板中烧入Buildroot固件后,输入命令v4l2-ctl-h,有以下显示:

[root@RK356X:~]# v4l2-ctl-h General/Common options: –all display all information available -C, –get-ctrl <ctrl>[,<ctrl>…] get the value of the controls [VIDIOC_G_EXT_CTRLS] -c, –set-ctrl <ctrl>=<val>[,<ctrl>=<val>…] set the value of the controls [VIDIOC_S_EXT_CTRLS] -D, –info show driver info [VIDIOC_QUERYCAP] -d, –device <dev> use device <dev> instead of/dev/video0 if <dev> starts with a digit, then /dev/video<dev> is used -e, –out-device <dev> use device <dev> for output streams instead of the default device as set with –device if <dev> starts with a digit, then /dev/video<dev> is used -h, –help display this help message二、使用media-ctl查看拓扑结构

media-ctl是v4l2-utils包中的一个工具,主要用来查看、配置Media Framework的各Entity的信息,如格式、裁剪、链接使能等。

显示拓扑结构

使用以下命令可以显示拓扑结构:

$ media-ctl -p -d /dev/media0

主要关注的是有没有找到Sensor的Entity。如果没有找到Sensor的Entity,说明Sensor注册有问题,请按FAQ文档排查。例如,开发板上接上gc2053摄像头后可以看到如下的输出(有删减):

[root@RK356X:~]#media-ctl -p-d/dev/media0 Media controller API version 4.19.193 Media device information ———————— driver rkisp-vir0 model rkisp0 serial bus info hw revision 0x0 driver version 4.19.193 Device topology – entity 1 : rkisp-isp-subdev (4 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SGRBG10_1X10/1920×1080 field:none crop. bounds: (0, 0) /1920×1080 crop: (0, 0)/1920×1080] <-“rkisp-csi-subdev”:1 [ENABLED] <- “rkisp_rawrd0_m”:0 [ ] <- “rkisp_rawrd2_s”:0 [ ] pad1:Sink <- “rkisp-input-params”:0 [ENABLED] pad2: Source [fmt:YUYV8_2X8/1920×1080 field:none colorspace:smpte170m quantization:full-range crop. bounds: (0, 0) /1920×1080 crop: (0, 0)/1920×1080] -> “rkisp_mainpath”:0 [ENABLED] -> “rkisp_selfpath”:0 [ENABLED] pad3: Source -> “rkisp-statistics”:0 [ENABLED] – entity 70: m00_f_gc2053 4-0037 (1 pad, 1 link) type V4L2 subdev subtype Sensor flags 0 device node name /dev/v4l-subdev3 pad0: Source [fmt:SGRBG10_1X10/1920×1080@10000/300000 field:none] ->”rockchip-csi2-dphy1″:0 [ENABLED]
<

从entity70信息中可以看到:

该Entity完整的名称是:m00_f_gc2053 4-0037它是一个V4L2 subdev(Sub-Device) Sensor它对应的节点是/dev/v4l-subdev3,应用程序(如v4l2-ctl)可以打开它,并进行配置它仅有一个输出(Source)节点,记为pad0它的输出格式是[fmt:SGRBG10_1X10/1920×1080@10000/300000 field:none],其中SBGGR10_1X10是一种mbus-code的简称它的Source pad0 链接到”rockchip-csi2-dphy1″的pad0,并且当前的状态是 ENABLED。

2.修改Entity的format、size

举例一,GC2053摄像头支持多个分辨率的输出,默认为1920×1080。现将输出分辨率改为640×480:

media-ctl -d/dev/media0\ –set-v4l2 “m00_f_gc2053 4-0037”:0[fmt:SGRBG10_1X10/640×480]

修改GC2053输出后,rkisp-isp-subdev的大小及video device crop也相应要修改。因为后级的大小不能大于前级的大小。

~/>$ media-ctl -d/dev/media0 –set-v4l2 “rkisp-isp-subdev”:0[fmt:SGRBG10_1X10/640×480] ~/>$ media-ctl -d/dev/media0 –set-v4l2 “rkisp-isp-subdev”:0[crop: (0, 0)/640×480] ~/>$ media-ctl -d/dev/media0 –set-v4l2 “rkisp-isp-subdev”:2[crop: (0, 0)/640×480] ~/>$ v4l2-ctl -d/dev/video0\ –set-selection=target=crop, top=0, left=0, width=640, height=480

3.找到video设备

拓扑结构中有多个的Entity,一些是sub device,一些是video device。前者对应的设备节点是/dev/v4l-subdev,后者对应的是/dev/video。多个的video device中,最常关注的是哪个设备可以输出图像。

$ media-ctl -d/dev/media0 -e “rkisp_selfpath” /dev/video1 $ media-ctl -d/dev/media0 -e “rkisp_mainpath” /dev/video0

上面两个命令分别显示出/dev/media0这个链路中,RKISP的SP及MP节点的设备路径。RKISP有两个视频输出设备,它们都能输出图像。

后面步骤将在下一篇继续讲解

猜你喜欢