介绍完了VO模块的用法,接下来就是RGN模块的用法。
对于RGN模块的用例可以参考 platform/external/rockit/ 路径下的相关目录中的rgn demo。
rgn的概述:(rockchip官方文档)
用户一般都需要在视频中叠加 OSD 用于显示一些特定的信息(如:通道号、时间戳等),必要时还会填充色块。这些叠加在视频上的 OSD 和遮挡在视频上的色块统称为区域。REGION 模块,用于统一管理这些区域资源。区域管理可以实现区域的创建,并叠加到视频中或对视频进行遮挡。例如,实际应用中,用户通过创建一个区域,通过RK_MPI_RGN_AttachToChn,将该区域叠加到某个通道(如 VENC 通道)中。在通道进行调度时,则会将 OSD 叠加在视频中。一个区域支持通过设置通道显示属性接口指定到多个通道中(如:多个 VENC 通道),且支持在每个通道的显示属性(如位置、层次、透明度等)都不同。
从上面这段话我们大概知道rgn是用来进行区域管理的,一般用于UI显示。
rgn中有多种区域管理的形式,如OVERLAY,COVER,MOSAIC,LINE等等。
这里我主要用到的是OVERLAY的,所以其他方式可以参考RK官方的文档(platform/external/rockit/mpi/doc)。
前置条件
RK_MPI_VO_CreateGraphicsFrameBuffer
在真正进行rgn模块的实现之前,需要有在对应的图层有FrameBuffer,这里可以参考rgn的demo中是先在TEST_RGN_VoSendFrame函数中调用了 RK_MPI_VO_CreateGraphicsFrameBuffer 函数来创建一个图形层Framebuffer。
其中最后一个参数是图像的数据地址,用于后续存放图像数据。
RK_MPI_VO_SendFrame
在调用完 RK_MPI_VO_CreateGraphicsFrameBuffer 创建了FrameBuffer后需要调用RK_MPI_VO_SendFrame将其发送到相应图层上,这样该图层才会有原始的画面。
选定与VO模块一样的图层的通道才有效,否则可能会报错。
总结一下就是在要想使用rgn模块,得首先保证最少有一个图层有画面,要么就是绑定了VI模块到VO模块上,或者有framebuffer被发送到图层上,我对于这里的理解是毕竟rgn模块是区域管理,你得先有一个可以被管理的区域吧,不然怎么管理
标签:rockit,s32Ret,笔记,MPI,区域,RGN,rgn,RK From: https://blog.csdn.net/weixin_58592012/article/details/140084847