16 海思Hi3518的OSD學習

我們有時候需要在視頻中疊加一些特定的信息(如:通道號、時間戳等),必要時還會填充色塊。這些疊加在視頻上的 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章