rockit 学习、开发笔记(二)(RGN)

rockit 学习、开发笔记(二)(RGN)用户一般都需要在视频中叠加 OSD 用于显示一些特定的信息 如 通道号 时间戳等 必要时还会填充色块

大家好,欢迎来到IT知识分享网。

在这里插入图片描述

介绍完了VO模块的用法,接下来就是RGN模块的用法。

对于RGN模块的用例可以参考 platform/external/rockit/ 路径下的相关目录中的rgn demo。

从上面这段话我们大概知道rgn是用来进行区域管理的,一般用于UI显示。

rgn中有多种区域管理的形式,如OVERLAY,COVER,MOSAIC,LINE等等。

这里我主要用到的是OVERLAY的,所以其他方式可以参考RK官方的文档(platform/external/rockit/mpi/doc)。

前置条件

RK_MPI_VO_CreateGraphicsFrameBuffer

其中最后一个参数是图像的数据地址,用于后续存放图像数据。

RK_MPI_VO_SendFrame

在调用完 RK_MPI_VO_CreateGraphicsFrameBuffer 创建了FrameBuffer后需要调用RK_MPI_VO_SendFrame将其发送到相应图层上,这样该图层才会有原始的画面。

在这里插入图片描述

选定与VO模块一样的图层的通道才有效,否则可能会报错。

总结一下就是在要想使用rgn模块,得首先保证最少有一个图层有画面,要么就是绑定了VI模块到VO模块上,或者有framebuffer被发送到图层上,我对于这里的理解是毕竟rgn模块是区域管理,你得先有一个可以被管理的区域吧,不然怎么管理😂。

RGN模块

好了,接下来就是rgn模块的OVERLAY的使用步骤了。大家也可以参考官方的文档,里面也有详细的步骤。

在这里插入图片描述

 s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr); if (RK_SUCCESS != s32Ret) { RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret); RK_MPI_RGN_Destroy(RgnHandle); return RK_FAILURE; } s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, pstMppChn, &stRgnChnAttr); if (RK_SUCCESS != s32Ret) { RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret); return RK_FAILURE; } //方式 1 s32Ret = RK_MPI_RGN_SetBitMap(RgnHandle, &stBitmap); if (s32Ret != RK_SUCCESS) { RK_LOGE("RK_MPI_RGN_SetBitMap failed with %#x!", s32Ret); return RK_FAILURE; } //方式 2 s32Ret = RK_MPI_RGN_GetCanvasInfo(RgnHandle, &stCanvasInfo); if (s32Ret != RK_SUCCESS) { RK_LOGE("RK_MPI_RGN_GetCanvasInfo failed with %#x!", s32Ret); return RK_FAILURE; } s32Ret = RK_MPI_RGN_UpdateCanvas(RgnHandle); if (s32Ret != RK_SUCCESS) { RK_LOGE("RK_MPI_RGN_UpdateCanvas failed with %#x!", s32Ret); return RK_FAILURE; } 

RK_MPI_RGN_Create

通过该函数创建一个rgn区域,该函数限制了可管理的rgn区域大小,区域的像素格式,区域类型等等。

在这里插入图片描述

RK_MPI_RGN_AttachToChn

该函数将创建好的区域叠加到通道上,其中pstChnAttr参数中定义了区域通道显示的属性

在这里插入图片描述

其中区域通道显示属性中的stOverlayChn成员较为重要,显示的坐标,透明度,rgn图层等等都在该成员中配置。

 stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = pstRgnCtx->stRegion.s32X + 48 * i; stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = pstRgnCtx->stRegion.s32Y + 48 * i; stRgnChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 255; stRgnChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 0; stRgnChnAttr.unChnAttr.stOverlayChn.u32Layer = 7; stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bEnable = pstRgnCtx->bRgnQp; stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bForceIntra = RK_TRUE; stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bAbsQp = RK_FALSE; stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.s32Qp = RK_FALSE; 

在这里插入图片描述

在这里插入图片描述

RK_MPI_RGN_SetBitMap

该函数用于设置区域位图,就是用来填充区域的。

在这里插入图片描述

其中参数pstBitmap是用来设置位图属性的,其中有像素格式,图像大小,图像数据。

RK_MPI_RGN_GetCanvasInfo

这个函数是用来获取区域的显示画布信息。创建一个空的RGN_CANVAS_INFO_S类型的变量传入以获取画布信息。

在这里插入图片描述在这里插入图片描述

同时该参数还需要将图像的信息写入该成员u64VirAddr中。

在这里插入图片描述

RK_MPI_RGN_UpdateCanvas

该函数用于更新区域的显示画布数据,这个函数与RK_MPI_RGN_SetBitMap类似都是用于rgn的图像绘制。不同的是该函数将绘制的信息绑定到了RGN_HANDLE上,可能在效率上有所提升。

在这里插入图片描述

到这里基本上就rgn模块的步骤就基本结束了,应该是可以在创建好的图层上显示rgn区域画面了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129464.html

(0)
上一篇 2025-08-23 22:10
下一篇 2025-08-23 22:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信