嵌入式技术
上一期的评测,我们介绍了TB-RK3588X开发板。RK3588除了CPU GPU NPU性能强悍,更是多了不少接口,比如PCIE3.0X4,以及HDMI IN,尤其是HDMI IN,是从未在此前RK的任何处理器上面出现过的。按照RK的规格书,此HDMI IN接口支持标准的HDMI2.0和HDMI 1.4 协议,最大可支持2160p@60Hz 的视频输入,目前支持的输入格式为:24-bit RGB 44, 24-bit YCbCr 44, 24/30-bit YCbCr 40以及24/30-bit YCbCr 42。
在以前的RK方案中,一般要加一颗HDMI转CSI芯片实现类似功能,比如TC358749,或者RK628D,这种设计方法往往会增加系统的复杂度。目前RK3588的应用方向之一是8K的Android TV,而TV通常都会带HDMI 输入接口。这应该是瑞芯微向RK3588上增加HDMI功能的原因之一吧。
TB-RK3588X作为RK官方推出的评估板,引出了此接口,位于下图所示的位置。
下面介绍一下RK3588的HDMI IN功能的使用。本篇文章基于toybrick官方发布的TB-RK3588X_Images_Android_V0.1.1.7z固件。另外还要找一个支持HDMI输出的设备,笔者这里使用的是华硕的tinker edge R开发板。
Linux环境下调试方法
按照以前调试RK3399+RK628D的经验来看,一般HDMI IN会作为一个VIDEO IN设备,在Linux下通常用V4L2来实现这种设备的编程。Android是基于Linux系统的,因此可以采用同样的方法进行调试。使用串口登入TB-RK3588X之后,通过如下命令可以看到系统的VIDEO IN设备。
console:/ # v4l2-ctl --list-devices rk_hdmirx (fdee0000.hdmirx-controller): /dev/video34 rkisp-statistics (platform: rkisp): /dev/video23 /dev/video24 /dev/video32 /dev/video33 rkisp_mainpath (platform /dev/video16 /dev/video17 /dev/video18 /dev/video19 /dev/video20 /dev/video21 /dev/video22 rkisp_mainpath (platform /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31
可以看到/dev/video34就是对应hdmi in的设备,然后可以使用
console:/ # v4l2-ctl -d /dev/video34 -D Driver Info: Driver name : rk_hdmirx Card type : rk_hdmirx Bus info : fdee0000.hdmirx-controller Driver version : 5.10.66 Capabilities : 0x84201000 Video Capture Multiplanar Streaming Extended Pix Format Device Capabilities Device Caps : 0x04201000 Video Capture Multiplanar Streaming Extended Pix Format
查看设备的基本信息。
此时将HDMI的输出设备接到TB-RK3588X上,如下图所示
使用命令
console:/ # v4l2-ctl -d /dev/video34 -V Format Video Capture Multiplanar: Width/Height : 1920/1080 Pixel Format : 'NV16' Field : None Number of planes : 1 Flags : premultiplied-alpha, 000000fe Colorspace : Unknown (1025fca0) Transfer Function : Unknown (00000020) YCbCr Encoding : Unknown (000000ff) Quantization : Default Plane 0 : Bytes per Line : 1920 Size Image : 4147200
可以看到HDMI输入当前的分辨率为1920x1080
通过命令
v4l2-ctl -d /dev/video34 --set-fmt-video=width=1920,height=1080,pixelformat='NV16' --stream-mmap=4 --stream-skip=10 --stream-to=/mnt/test_hdmiin.yuv --stream-count=5 --stream-poll
可以抓取画面,这个命令行里面
-d /dev/video34指定设备 --set-fmt-video=width=1920,height=1080,pixelformat='NV16' 指定分辨率和格式,分辨率和格式在v4l2-ctl -d /dev/video34 -V可以查询到 --stream-mmap=4 指定 buffer 的类型为 mmap --stream-skip=10 跳过前面10帧 --stream-to=/ mnt /test_hdmiin.yuv 保存到/ mnt /test_hdmiin.yuv文件 --stream-count=5 保存5帧
将这个/data/test_hdmiin.yuv文件通过adb pull拉回本地,然后在Windows下可以使用YUView工具来查看,此工具可以支持多种格式的YUV图像查看,下载地址为
https://github.com/IENT/YUView/releases
查看此图像时,我们要将格式配置为NV16,但是这个软件没有NV16的选项。其实NV16还有一种名称,叫做YUV422SP,YUV422SP是使用planar方式排列的YUV422,其中U前V后叫NV16,因此,在YUView按下图配置
配置之后,显示的画面如下,与tinker edge R开发板当前画面确实一致
Android环境下调试方法
在以前的RK平台上,一般把HDMI IN设备视为一个摄像头,属于cameraHAL框架,使用camera2这类app可以实现画面查看。而在RK3588平台,则是将HDMI IN视为一个tv.input设备,属于tv_input HAL框架,使用LiveTV应用可以实现画面查看。当然,第三方的TV类应用也可以支持。
TB-RK3588X默认预装了LiveTV应用,直接运行此APP即可显示HDMI-IN 的输入画面,而HDMI-IN 的音频输入会从当前使用的声卡设备输出,插耳机时使用的时3.5mm耳机孔,如果不插耳机插HDMI OUT则会从HDMI OUT接口输出。
下面这段视频展示了通过TB-RK3588X上预装的LiveTV应用来查看tinker edge R画面的方法。
结语
本文介绍了在Linux环境下和Android环境下调试TB-RK3588X HDMI IN功能的方法。瑞芯微在RK3588的Android环境下使用了新的tv_input HAL框架来支持此功能,而在Linux环境下,则仍然沿用V4L2框架。如果把RK3588应用于Android TV或者XVR领域,HDMI IN还是能发挥很大的作用。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !