天天看點

VVC中GDR

VVC中GDR

  當編碼一段序列時,如果需要随時從中途切入碼流,HEVC的做法是插入一個IDR幀,IDR使用幀内編碼其後的幀不需要依賴IDR前的幀即可解碼。由于IDR使用幀内編碼,是以一般IDR幀會比P或B幀大很多,對于低延遲場景傳輸較大的I幀會引起卡頓。為了解決這個問題,VVC使用GDR來代替插入IDR幀。GDR在H.264和H.265中作為SEI中的可選項,在VVC中正式進入标準。

VVC中GDR

圖1 GDR起始于POC(n),結束于POC(n+N-1)

GDR

  GDR的基本原理是對連續的幾幀,每幀都插入一個I slice,幾幀過後相當于建構了一個I幀,而每幀的大小又和P或B幀相當,避免了出現超大的I幀對網絡造成沖擊。

  如圖1所示,POC(n)中綠色部分使用幀内編碼,在接下來的幾幀中每幀都有一個使用幀内編碼的部分,直到POC(n+N-1)所有幀内編碼部分相當于一整幀。在每個GDR中都包含兩個部分:clean area和dirty area。兩個區域由virtual boundary分隔。clean area中的CU隻能使用幀内預測,且不能使用dirty area中的任何資訊,包括重建像素、MV、編碼模式、參考清單等。

VVC中的工具

  VVC中的一些編碼工具可能會導緻clean area中的CU使用dirty area中的資訊,需要規避。

環路濾波

  VVC中的環路濾波包括deblocking、SAO和ALF,可能會同時使用virtual boundary兩側的像素,會導緻dirty area中的像素污染clean area中的像素,是以在virtual boundary處環路濾波需要關閉。

LMCS

  LMCS是VVC中新增的工具,其中色度縮放因子的計算依賴于相鄰亮度重建像素,如果virtual boundary沒有和CTU邊界對齊可能導緻clean area中CU計算色度縮放因子時使用dirty area中的重建像素。如圖2所示,紅色虛線是virtual boundary,左側是clean area,右側是dirty area。對于目前CU(綠色)的色度計算縮放因子時使用的右上角重建亮度像素96...127來自dirty area。

VVC中GDR

圖2 LMCS

  由于VVC中的LMCS不能在CTU級開關,是以如果目前幀的virtual boundary沒有和CTU邊界對齊則整幀需要關閉LMCS。

幀間預測模式

  幀間預測時,對于clean area中的CU其參考塊也必須來自參考幀中的clean area,且必須不在virtual boundary附近,因為運動補償中的像素插值時可能使用到dirty area中的像素。如圖3中參考塊離virtual boundary 4個像素的距離。

VVC中GDR

圖3 幀間預測

空域MV

VVC中GDR

圖4 空域MV

如圖4所示,merge或AMVP等可能使用空域相鄰塊的資訊,圖中右上角相鄰塊B1在dirty area中,如果作為候選項可能會引起錯誤。對于其他相鄰塊,如果它的MV指向的參考塊在dirty area中也可能會引起錯誤。

時域MV

VVC中GDR

圖5 時域MV

圖5中時域參考塊C0在dirty area中,如果使用它作為候選項則可能會導緻錯誤。

Afine Merge

VVC中GDR

圖6 Affine

如果放射mv或子塊mv利用了dirty area的資訊則也會導緻錯誤。

GPM

VVC中GDR

圖7 GPM

幾何劃分将CU分為兩個部分,每部分都有自己的MV,兩個MV的參考塊合成最終的參考塊,如果兩個參考塊使用了dirty area的資訊則也會導緻錯誤。

  VVC标準中沒有指定使用GDR時如何防止clean area被污染,這需要編碼器實作時自己決定。