xilinx vcu 介紹


注:以下內容是總結自賽靈思的vcu文檔<H.264/H.265 Video CodecUnit v1.2 Solutions> ,pg252

 一、編碼相關知識

1.1 I幀、P幀、B幀

 ● I幀即Intra-coded picture(幀內編碼圖像幀),不參考其他圖像幀,只利用本幀的信息進行編碼
 ● P幀即Predictive-codedPicture(預測編碼圖像幀),利用之前的I幀或P幀,采用運動預測的方式進行幀間預測編碼
 ● B幀即Bidirectionallypredicted picture(雙向預測編碼圖像幀),提供最高的壓縮比,它既需要之前的圖
像幀(I幀或P幀),也需要后來的圖像幀(P幀),采用運動預測的方式進行幀間雙向預測編碼

1.2 GOP

這是圖像組(Group of Pictures)的意思,表示編碼的視頻序列分成了一組一組的有序的幀的集合進行編碼。每個GOP一定是以一個I幀開始的,但是卻不一定指代的是兩個I幀之間的距離。因為一個GOP內可能包含幾個I幀,只有第一個I幀(也就是第一幀)才是關鍵幀。在程序cfg中,GOP的長度和兩個I幀的距離也是兩個不同參數指定的(如IntraPeriod和GOP Size或者類似的參數)。所以,兩個I幀的間距不可能大於GOP的長度,一般情況是更小的。

1.3 IDR

IDR詞兒的全稱是Instantaneous Decoding Refresh,是在H.264中定義的結構。在H.264中,IDR幀一定是I幀,而且一定是GOP的開始,也是H.264 GOP的關鍵幀。但是反過來卻不成立,I幀不一定是IDR幀。

1.4 GDR

GDR(Gradual Decoding Refresh),這是一種特別的P幀,每個GDR包含一個I-Slice,幾個連續的GDR幀可以起到一個I幀相同的作用,但由於GDR幀的大小與P幀接近,因此可以起到平滑碼率的作用,減少超大I幀對網絡的沖擊,減少傳輸延遲,同時也能起到阻隔錯誤的作用。

二、VCU 編碼器基本結構結構

2.1 Encoder Buffer

Encoder Buffer可以存儲編碼用的參考幀,這些參考幀可以提前從DDR中預讀取到Encoder Buffer中,這樣可以降低總線帶寬壓力,但會降低視頻質量。使能Encoder Buffer 的命令如下所示:

gst-launch-1.0 videotestsrc ! omxh265enc prefetch-buffer=true ! fakesink

2.2 編碼器的輸入輸出數據格式

Video Codec Unit(VCU) 輸入和輸出都是是NV12/NV16格式的視頻,Y分量存放在一塊連續內存區,UV分量交替存放在Y分量后面的連續內存。具體信息,可以參考的“Source Frame Format”小節。

三、sync ip

 linux sync ip驅動文件:kernel-source/drivers/staging/xlnxsync/xlnxsync.c,驅動加載成功后,會在/dev下生成xlnxsync0節點

 

 

 

 

四、vcu 編碼四種延時模式

vcu的延時模式:

(1)普通延時模式:有I、P、B幀、

(2)沒有重新排序的延時模式:這種模式沒有B幀,因為B幀需要雙向預測,會增加一幀延時。可以支持僅I幀,I幀和P幀、低延時P幀。(IPPP...IPPP...)

(3)低延時模式:這種模式下編碼器的輸出和解碼器的輸入是切片模式的,也就是說不需要等到一幀編完在送解碼,編碼和解碼可以同步。如果是將編碼的碼流取走發送的話這種模式下編碼和發送碼流可以同步進行。但是編碼器的輸入和解碼器的輸出還是工作在幀模式,也就是說需要等到完整一幀才能編碼,解碼完一幀才輸出。

(4)賽靈思低延時模式:這種模式下編解碼器的輸入輸出是切片的,獲取碼流,編碼,發送碼流這三個步驟可以同步進行。這個需要sync ip支持。(IPPP...)

詳細介紹參考PG252的VCU Latency Modes章節

 

五、vcu參數

5.1 使用Xilinx's ultra low-latency模式

下面這段是編碼器的參數配置

omxh265enc num-slices=8 control-rate=low-latency gop-mode=low-delay-p target-bitrate=25000 cpb-size=500 gdr-mode=horizontal initial-delay=250 periodicity-idr=240 filler-data=0 prefetch-buffer=true

 編碼參數解釋見文檔的“GStreamer Encoding Parameters”章節

num-slices=8:切8片編碼
control-rate=low-latency:編碼碼率使用低延時碼率
gop-mode=low-delay-p:第一幀為I幀,后面都是P幀(IPPPPP.....)
target-bitrate=25000:vcu目標編碼速率25000kb/s
cpb-size=500:編碼圖片緩存區大小
gdr-mode=horizontal:GDR幀為水平模式
initial-delay=250:
periodicity-idr=240:兩個IDR幀之間有240幀
filler-data=0:
prefetch-buffer=true:使用Encoder Buffer

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM