16 海思Hi3518的OSD学习

版权声明:转载请声明 https://blog.csdn.net/qq_40732350/article/details/88873991

我们有时候需要在视频中叠加一些特定的信息(如:通道号、时间戳等),必要时还会填充色块。这些叠加在视频上的 OSD 和遮挡在视频上的色块统称为区域。 REGION 模块,用于统一管理这些区域资源。

用户通过创建一个区域,通过 HI_MPI_RGN_AttachToChn,将该区域叠加到某个通道(如 VENC 通道)中。在通道进行调度时,则会将 OSD 叠加在视频中。一个区域支持通过设置通道显示属性接口指定到多个通道中(如:多个 VENC 通道,多个 VI 通道,甚至多个 VENC 和 VI 通道),且支持在每个通道的显示属性(如位置、层次、透明度等)都不同。

1 重要概念

区域类型————————————
Overlay:视频叠加区域,其中区域支持位图的加载、背景色更新等功能。
OverlayEx:扩展视频叠加区域,功能与 Overlay 类似,支持位图加载、背景色更新等。
Cover:视频遮挡区域,其中区域支持纯色块遮挡。
CoverEx:扩展视频遮挡区域,功能与 Cover 类似,支持纯色块遮挡。
OverlayEx/ CoverEx:分别相对于 Overlay/Cover,功能上类似,但是会引入额外的系统带宽, OverlayEx/ CoverEx 由 VGS 叠加到图像上 , OverlayEx/CoverEx 区域越大,占用 VGS 的性能就越大,当 VGS 性能不足时,会导致帧率降低。建议只有当 Overlay/Cover 不支持,或者数量无法满足需求时,再使用。

区域层次————————————
区域层次表示区域的叠加级别,层次值越大,表示区域的显示级别越高。当发生重叠时,层次值大的将会覆盖层次值小的。如果是同一级别,则根据区域叠加的先后顺序,后叠加的将显示在上层。将多个区域叠加到 VPSS 的同一 GROUP时,要求每个区域的层次值不能与叠加到该 GROUP 的其他区域层次值相同,否则区域层次值相同的多个区域中,只能将最后一个叠加的区域叠加到 VPSS 的GROUP 上。将多个层次值相同的区域叠加到同一个 VENC 的通道上时,没有此限制,都能叠加成功。

位图填充(针对 Overlay 和 OverlayEx 有效)————————————————
位图填充是指将位图的内存值填充到区域内存空间中,位图将会从区域的左上角开始填充。当位图小于区域时,只能填充一部分内存,剩余部分保持原有值;位图大小等于区域时,将刚好全部填充;当位图大于区域时,位图只能将自身和区域一样大小的内存信息填充到区域中。
位图填充支持两种实现方式:

其一、用户通过 HI_MPI_RGN_SetBitMap 接口将位图数据拷贝至内部显示画布;

其二、用户通过 HI_MPI_RGN_GetCanvasInfo 获取内部备份显示画布的地址,直接对该地址数据进行更新,然后调用
HI_MPI_RGN_UpdateCanvas 接口将备份显示画布更新为待显示画布,达到实现更新位图数据的目的。

区域公共属性——————————————————
用户创建一个区域时,需要设置该属性信息,它包含公共的资源信息。例如,Overlay 包含像素格式,大小和背景色。

通道显示属性(RGN_CHN_ATTR_S)————————————————
通道显示属性表明区域在某通道的显示特征。例如, Overlay 的通道显示属性包含显示位置,层次,前景 Alpha,背景 Alpha,还有编码用到的 QP 信息。当通道显示属性中的区域是否显示(bShow)为 TRUE 时,表示显示在该通道中;反之,表示在该通道中存在,但处于隐藏状态。

区域反色——————————————————
当区域叠加到视频上显示时,如果视频背景与叠加区域的亮度色度相近,往往会导致背景与区域很难进行区分。区域反色功能即针对这种场景,自适应背景的变化,对区域的亮度色度进行调整,实现区域清晰可见。
区域反色功能支持实现方式如下:

通过 VPSS 提供的区域亮度和统计功能。用户可实时获取视频序列中每个待叠加区域背景的亮度统计,然后利用 TDE 的 ROP功能,对区域进行手动的反色处理,最后通过 VPSS 将该反色后的区域叠加到视频上。

区域 QP 保护——————————
当区域叠加到视频上进行压缩编码时,为了保证叠加区域的清晰度不因为数据压缩而变模糊,可以单独设定叠加区域部分的压缩特性,即设定 QP 保护功能参数。 QP 保护功能是 Overlay 特有的功能,且仅针对 H.264/H.265 类型编码通道有效,对其它类型无效。

支持的模块————————————————
目前 region 支持的模块信息如表所示,在绑定 region 区域到通道时须参考此表。

区域支持的功能————————
目前各种类型的区域支持的功能如表所示

使用过程包含以下步骤:

  • 用户填充区域属性并创建区域。
  • 将该区域指定到具体通道中(如 VENC)。在指定到具体通道时,需要输入通道的显示属性。

以上步骤完成区域的创建和使用。用户还可以通过以下操作来控制区域属性以及在某通道的通道显示属性。

  • 通过 HI_MPI_RGN_GetAttr、 HI_MPI_RGN_SetAttr 获取和设置区域属性。
  • 通过 HI_MPI_RGN_SetBitMap(仅针对 Overlay)设置区域的位图信息。
  • 通过 HI_MPI_RGN_GetDisplayAttr 和 HI_MPI_RGN_SetDisplayAttr 获取和设置区域在某通道(如 VENC 通道)的通道显示属性。
  • 最后用户可以将该区域从通道中撤出(非必须操作),再销毁区域。

2 重要变量

Handle————————
区域句柄号。必须是未使用的 Handle 号取值范围: [0, RGN_HANDLE_MAX)。该句柄由用户指定,意义等同于 ID 号。

#define RGN_HANDLE_MAX 1024

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/88873991