深入探讨地平线X5图像多媒体框架技术细节
X5图像多媒体框架介绍
X5图像多媒体框图
媒体接口包含视频输入,视频处理(ISP图像处理器、裁剪、缩放、旋转、矫正),GPU2D(图像搬运、图像缩放、矩形填充和清除、图像缩放后滤波处理、透明度混合、逆时针或者顺时针旋转、镜像翻转、色彩空间转换、裁剪),GPU3D(图像渲染功能、并行计算加速、OpenGL ES 3.1/3.0/2.0/1.1、OpenVG 1.1 EGL 1.5 、OpenGL2.x 、OpenCL1.1/1.2/3.0)H.264/H.265/JPEG/MJPEG编码和解码,视频输出显示功能,接口做了抽象化的封装,支持应用快速进行软件开发。
各模块总体性能
各模块支持的输入输出格式如下列表
视频输入(VIN)
MIPI:支持RAW8/RAW10/RAW12 or YUV422 8bit 。
视频输入(VIN包含MIPI、SIF)实现的功能:通过MIPI Rx接口接收视频数据。VIN将接收到的数据给下一个模块ISP同时也可存入到指定的内存区域,在此过程中,VIN可以对接收到的原始视频图像数据进行处理,实现视频数据的采集。
下图是SIF PASSTHROUGH_MODE到ISP
下图是SIF MCM_MODE 到 ISP MCM是Multi Context Management缩写
下图是SIF DDR_MODE到ISP
VIN有4个MIPI Host ,每一个MIPI Host对应一个SIF SIF可以把数据online直接传给ISP,也可把数据写到DDR,在不接入serdes等加串解串器情况下,最多只能接入4路sensor MIPI只接单路sensor的情况下,SIF数据可以online到ISP,如果是多路sensor SIF数据需要offline到DDR再到ISP。
SIF管理MIPI或从内存里输入进来的图像数据,MIPI CSI 0和MIPI CSI 2各有4个vc channel MIPI CSI 1和MIPI CSI 3各有2个vc channel,如果使用serdes加串解串器,理论上最多支持12路vc sensor接入,如下框图:
视频输入(ISP)
绑定在视频输入设备后端,负责图像处理ISP有4个输入port,可支持4路online连接,但ISP硬件Pipeline只有一个,多路online到ISP时分时复用Pipeline,理论最多支持12路接入,ISP会把数据写到DDR,然后软件会在合适的时机把数据读入Pipeline进行处理,ISP处理完的数据可online直接给到VSE,也可写到DDR给到GDC畸变矫正模块或者2DGPU模块。
视频处理(VSE)
VSE有6个输出通道,可支持不同尺寸的缩放,裁剪,同时支持OSD功能,可在图像中叠加文字或色块,VSE处理完的数据会写到DDR给到BPU模块或者2DGPU,GDC畸变矫正模块,编解码模块,USB模块等处理,需要注意的是vse硬件需要16字节对齐,因此vse驱动会对图像宽度进行align,输出图像的宽度也会随之更改,另外当roi或者target被设置成0时,为了保证正常运行,驱动会自动计算出一个尺寸,并设置下去,VSE还可以控制input图像的fps和输出通道的fps,驱动会根据这两个值对输出通道的帧率进行控制,输出通道的fps只能小于input图像的fps,默认值均为0,此时驱动不会进行帧率控制。
VSE各输出通道的尺寸限制如下
DDR数据回灌到VSE模块
ISP数据ONLINE输出到VSE模块
畸变矫正模块(GDC)
可将输入的图像进行畸变校正、视角变换和指定角度(0,90,180,270)的旋转,模式支持的输入图像典型尺寸为3840*2160,2688*1944,1920*1080,1280*720,640*480,480*320。
硬件特性如下
• 最大分辨率:4096x2160
• 最小分辨率:奇数行或者列不支持
• 性能:4096x2160@60fps
• 输入格式:YUV420 semi planar
• 输出格式:YUV420 semi planar
图像处理单元(GPU)
X5上面集成了2D GPU和3D GPU硬件模块。
2D GPU
性能数据:
• 最大分辨率为4k
• 处理性能4k@90fps
支持功能:
• 位块传输(BitBlt)
• 拉伸位图传输(Stretch Blit)
• 矩形填充和清除(Rectangle fill and clear)
• 单次滤波位块传输(One Pass Filter Blit)
• 透明度混合(Alpha blending)
• 支持90/180/270度、逆时针或者顺时针旋转
• 支持镜像翻转
• 支持ROP(光栅操作码)
• 支持裁剪
• 支持色彩空间转换,即YUV 转 RGB 和 RGB转YUV Color Space Convert
支持格式:
2D GPU支持以下格式:
3D GPU
模块描述
X5 GPU可以提供图像渲染功能,还能提供一定的并行计算加速
目前支持的API如下:
• OpenGL ES 3.1/3.0/2.0/1.1
• OpenVG 1.1
• EGL 1.5
• OpenGL 2.x
• OpenCL 1.1/1.2/3.0
• 峰值算力为32GFLOPS
视频输出(Display)
Display视频输出模块从DDR读数据,处理完通过MIPI DSI/BT1120输出到显示设备,或通过MIPI Tx输出给另一个MIPI Host设备,X5输出接口使用了标准的DRM(DirectRendering Manager)框架,DRM核心向应用程序导出了多个接口,通常通过相应的libdrm包装函数来使用。
编解码模块(MediaCodec)
MediaCodec模块主要用于音频、视频和JPEG图像的编解码,本模块将会提供一系列的接口便于用户输入待处理的数据和获取处理完的数据,本模块支持多路编码或解码实例同时工作,其中视频和JPEG图像的编解码由硬件实现,用户需要调用libmultimedia.so,音频则基于FFMPEG的接口由软件实现,用户需要调用libffmedia.so,如下表所示为X5所支持的视频编解码规范和音频编解码规范,需要注意的是AAC的编解码需要license授权,因此用户需要获得授权后才能使能相关代码。
注:以上描述的profile, level, tier为ip支持的最大图像级别。具体也支持更低级别的画质级别。例如
• H264/AVC:Baseline/Constrained Baseline /Main/High Profiles Level @ L1~L5.2
• H265/HEVC:Main and Main Still Picture Profile Level @ L1~L5.2 Main and Hightier
此外视频和图像的数据源包括VIO输入的图像和用户输入的YUV数据两类,用户输入的YUV数据则可能是从文件中加载或者通过网络传输获得;音频的数据源包括MIC输入的音频和用户输入的PCM数据两类,MIC输入的音频是由Audio Codec采集的数字信号,用户输入的PCM数据则可能是从文件或网络传输获得。
注意:X5使用的Codec编解码接口是直接操作hb_mm_mc开头接口,跟X3有区别。
HBN Api接口介绍
在软件上,Camera是单独一套API Camera之后的模块用vnode来抽象,vnode抽象的模块包括VIN、ISP、VSE、GDC、N2D、Codec。多个vnode组成一条vflow(类似于一条pipeline)。Camera和VIN通过attach接口绑定起来。 用户只需要调用HBN接口完成模块的初始化和绑定,vflow建立并启动后,用户无须关心数据帧的传递,SDK内部会将数据帧由上游传递到下游。下图是两条vflow(两路)的例子:
本例中有两个Sensor,对应两个flow VIN(SIF)到ISP可以online连接,也可以offline连接,取决于使用的VIN输出通道。
通道说明
• 模块间的连接是online还是offline由通道决定,编号为1的输出通道表示online连接。
• ISP/VSE/GDC都有且只有一个输入通道0,用于绑定和数据回灌。
连接方式
通过hbn_vflow_bind_vnode()接口建立模块间的连接方式。
API参考
VIN、ISP、VSE、GDC模块共用一套HBN API。N2D、Codec有单独的API,但也可以用HBN API和其他模块建立绑定关系、添加到vflow,这样SDK内部会自动把数据帧给到N2D或Codec,用户无须关心N2D/Codec与其他模块间的数据传递。
接口调用示意:
Sunrise camera用户使用开发说明
Sunrise camera是官方开发的应用程序,方便用户对Camera、VIO、Codec、BPU等模块的快速评测,用户通过PC上的Web浏览器,可以方便的对程序进行参数配置,并实时预览视频流、算法渲染结果等信息,程序主要功能如下:
• 支持智能摄像头功能模式,最大支持接入4路Camera Sensor
• 支持智能多路解码分析盒功能模式,最大支持8路1080p@30视频码流的编解码
• 支持通过PC浏览器对程序进行参数配置,例如Camera sensor、编码码率、算法模型、视频源等参数
• 支持通过PC浏览器、VLC拉流、HDMI输出等多种方式预览图像效果
• 算法多种模型切换,例如mobilenet_v2、yolov5s、fcos等
多媒体调试
X5多媒体提供了如下的示例代码供客户点亮sensor,获取sensor raw数据,获取ISP数据,VSE数据回灌输出功能参考,GDC畸变矫正回灌数据功能参考,视频编解码功能参考,多路sensor pipeline数据通路功能参考,usb uvc示例功能参考,2DGPU视频内存搬运、视频裁剪、视频拼接、视频旋转、视频缩放、视频混合叠加、视频数据图像格式转换等。
多媒体调试指南
tuning server
功能:开启
tuning server
说明:使用该命令后,cam service将能够支持tuning service,允许用户通过vtuner对isp进行参数tuning。
cam-service
功能:控制cam-service输出log等级。
说明:使用该命令,可以控制cam-service log的输出mask,根据mask输出对应等级的log打印。其中,bit0为error级别,bit1为warning级别,bit2为info级别,bit3为debug级别,bit4为verbose级别。三个数字则分别对应cam service中isp adapter layer/3A、isp auto control、isp upper api这三个部分的打印等级。
libcam/libvpf输出打印等级控制
功能:控制libcam/libvpf的输出log等级。
说明:使用该命令,可以分别控制libcam/libvpf的日志输出等级。这两个动态库总共有四个打印等级,分别是err warning info debug,分别对应1,2,3,4。默认打印等级为warning级别,该命令修改打印等级,loglevel为4时输出所有打印。
帧率信息
功能:输出帧率
说明:打印所有在跑的模块的fps,该fps为某模块输出到ddr,且未被软件视为丢帧时的fps。当某模块online到下级模块时不会有该信息,当出现丢帧时,则该统计值会小于预定sensor的fps。需要注意的是,使用该节点需要打开sif的timestamp功能,对应json的配置可以参考如下:
说明:打印所有在跑的模块的对应动作(Frame start/Frame end/Queue buffer/Dqueue buffer)时的时间戳(以秒为单位),该统计信息打印最近5帧frameid对应的时间戳。如果出现某帧数据为0,说明该时刻还未到来。驱动会在Frame end去Queue buffer/Dqueue buffer操作,所以这三个时刻相近,且在Frame end之后。VSE模块因为硬件原因没有Frame start中断,因此该节点的此值为空。frameid使用Framestart时刻的frameid,若没有Frame start frameid值为空。
延迟信息
功能:输出模块处理一次数据的延时情况。
输出示例:
说明:SIF在Frame start时,会在内核获取当前的时间戳,这个时间戳会跟随这帧图像沿vio通路一直向后。该命令打印所有在跑的模块,当这个模framedone也就是处理完成时,当前时间戳与sif时刻获取的时间戳之间的差值,也就是一帧图像从被sif接收到某个模块处理完成的时间延时。该节点信息依赖offline时的framedone,没有保存到ddr 的模块无法显示该信息。当某个模块没有framedone信息时,例如应用层没有获取图像buffer,驱动会认为是软件丢帧,对应的节点也不会更新,将保持最后一次的信息。
丢帧信息
功能:输出模块的丢帧信息。
说明:第一条命令打印所有在跑的模块,最近的几帧丢帧数据的frameid。第二条命令打印所有在跑的模块,统计其丢帧的帧率,软件丢帧出现在framedone时,如果某个模块没有保存数据到ddr,则不会出现软件丢帧。这两条功能暂时不支持。
驱动buffer状态
说明:打印所有在跑的模块,其输入输出通道的各个状态的buffer数量。
vio通路信息
说明:打印所有在跑的视频通路ip间的连接信息,S[数字]表示当前通路的flowid,模块名字后面的数字为hw_id C[数字]表示其软件ctx_id dma代表输出图像到ddr m2m代表offline到后级模块,otf代表直连到后级模块。
ION内存占用估算
VPF框ION内存占用估算
当某个模块需要保存数据到DDR时,框架会申请对应的图像ION buffer,也就是说框架占用ion的大小取决于用户所调用 hbn_vnode_set_ochn_buf_attr()接口,这个接口中会根据图像的数据格式以及数量申请ION buffer。目前常见格式的单个buffer的大小可以参照下表:
值得注意的是,VSE每个通道都是独立的,它们各自申请buffer 。另外每申请一个图像的buffer,驱动会自动申请一块metadata(预留)的数据buffer ,大小为4K 。
GDC binary ION内存占用估算
GDC所占用的ION内存大小为binary的大小,该文件的大小并不是一个定值,一般而言不会超过64K 。
OSD ION内存占用估算
OSD分配ION buffer都是根据格式申请两块对应的尺寸的buffer 。例如每创建一个Region区域,会申请两块VGA8 格式内存,其大小估算由格式决定,对应表格如下:
其中SW_VGA4会在软件处理中用到,例如如果通过软件OSD画字,总共需要width*height + width*height*3 ))* 2 大小的ION buffer 。
VPU调试信息
说明:可查看h264,h265编解码运行时的一些参数,状态等信息,查看编解码器负载包括h264/h265编码器和解码器,显示整体的负载 。
输出示例
说明:即查看编码器负载信息,也可以通过对应节点关闭该功能。
查看视频编码器调试和统计信息
说明:主要输出了编码器的各种参数信息,如编码参数,gop,roi,idr,slice,timming,transform等。 以及编码实例的一些状态信息,如输入buffer数量,输出buffer数量,当前fps等。主要用于开发和调试等。
输出示例
查看视频解码器调试和统计信息
说明:主要输出编码一些信息,如码流分辨率,压缩格式,帧数,fps等。如上图即4路h264 1080p解码的信息。
输出示例
JPU调试信息
说明:可查看jpeg,mjpeg编解码运行时的一些参数,状态等信息,查看编解码器负载包括jpeg/mjpeg编码器和解码器,显示整体的负载
输出示例
说明:即查看编码器负载信息,也可以通过对应节点关闭该功能。
查看jpeg/mjpeg编码器调试和统计信息
说明:输出 jpeg/mjpeg 编码器的一些参数和状态,如分辨率,格式,实例索引,帧数,帧率等。
输出示例
查看jpeg/mjpeg 解码器调试和统计信息
说明:输出jpeg/mjpeg解码器的一些参数和状态,如分辨率,缓存个数,码流字节数,格式,实例索引,帧数,帧率等。
输出示例
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自D-Robotics,原文标题为:X5 媒体资料分享,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
基于TOF和安全皮肤的机械臂全域安全系统
与传统工业机器人相比,协作机器人面临着更为复杂的运行环境。它们需要在高度非结构化和动态变化的环境中操作,涉及大量的机器间协作以及人机交互。这种新型应用场景对机器人的安全防护提出了前所未有的挑战。
技术探讨 发布时间 : 2024-10-29
NodeHub快速入门
NodeHub是地平线为机器人爱好者打造的智能机器人应用中心,旨在以更加简单、高效、开放的方式协助机器人爱好者开发自己的智能机器人。
技术探讨 发布时间 : 2024-10-30
基于RDK平台的YOLOv10目标检测算法示例
YOLO功能介绍YOLO目标检测算法示例使用图片作为输入,利用BPU进行算法推理,发布包含目标类别和检测框的算法msg。YOLO目标检测算法示例使用图片作为输入,利用BPU进行算法推理,发布包含目标类别和检测框的算法msg。目前支持yolov2、yolov3、yolov5、yolov5x四个版本。
应用方案 发布时间 : 2024-11-13
地瓜创客孵化营 | 让每一块 RDK X5,都成为你手中的机器人!
地瓜机器人开发者日就要来啦!面向智能计算与机器人解决方案的通用型开发板新品RDK X5,接口丰富,极具性价比,具有10T算力,与强大的图像处理能力,助力开发者轻松实现多种智能应用。加入“地瓜创客孵化营”你将和一群“地瓜创客”一起找到将你的开发板转变为智能机器人的最佳路径。
原厂动态 发布时间 : 2024-09-13
【IC】D-Robotics RDK X5机器人开发者套件,可提供高达10 Tops算力,加速智能化应用快速落地
D-Robotics RDK X5搭载Sunrise 5智能计算芯片,可提供高达10 Tops的算力,是一款面向智能计算与机器人应用的全能开发套件,接口丰富,极致易用,支持Transfomer、RWKV、Occupancy、Stereo Perception等多种复杂模型和最新算法,加速智能化应用快速落地。
产品 发布时间 : 2024-09-20
BEV感知算法示例
BEV感知算法是使用地平线OpenExplorer在nuscenes数据集上训练出来的BEV多任务模型。此示例使用本地图像数据作为输入,利用BPU进行算法推理,发布算法感知结果渲染的图片消息,在PC端浏览器上渲染显示算法结果。
设计经验 发布时间 : 2024-11-20
在RDK X3体验Cartographer激光雷达SLAM技术,实时获取较高精度的地图
本功能所使用的Cartographer是google推出的一套基于图优化的SLAM算法,可以实现机器人在二维或三维条件下的定位及建图功能,这套算法的主要设计目的是满足机器人在计算资源有限的情况下,依然可以实时获取较高精度的地图。该功能支持机器人实物和Gazebo仿真两种体验方式。
设计经验 发布时间 : 2024-11-19
基于RDK X3的chat robot应用示例,实现用户和机器人语音聊天功能
智能语音聊天机器人识别用户语音内容,然后调用OpenAI API获取答复,最后将该答复播放出来,实现用户和机器人语音聊天功能。
设计经验 发布时间 : 2024-11-18
光微万点感知单元3D ToF模块赋能当贝X5 Ultra超级激光投影仪实现极致流畅的无感自动对焦
光微携手当贝联合开发全知AI视觉系统2.0,其搭载光微万点感知单元3D ToF模块,赋能当贝X5 Ultra实现极致流畅的无感自动对焦、全自动梯形校正和智能息屏等功能,为用户提供更极致、更智能的观影体验。
产品 发布时间 : 2024-01-27
RDK的系统上运行实现的红绿灯检测功能案例
本案例功能具有使用opencv解析HSV色彩空间实现红绿灯的检测和输出图片中指定像素的HSV三通道的值。
设计经验 发布时间 : 2024-11-18
电子商城
登录 | 立即注册
提交评论