天天看點

H.264的Slice及Slice類型

一、基本概念

一個視訊圖像可編碼成一個或更多個條帶,每個條帶包含整數個宏塊(MB),即每個條帶至少一個MB,最多時每個條帶包含整個圖像的宏塊。總之,一幅圖像中每個條帶的宏塊數不一定固定。設條帶的目的是為了限制誤碼的擴散和傳輸,應使編碼條帶互相間是獨立的。某個條帶的預測不能以其它條帶中的宏塊為參考圖像,這樣某一條帶中的預測誤差才不會傳播到其它條帶中去。

Slice的類型如表1所示

表1 Slice的類型

H.264的Slice及Slice類型

說明:

1、I宏快是指每個塊或宏塊是通過其所在的Slice中的之前的已經編碼過的資料進行預測的;

2、P宏塊是指宏快或宏塊分割是通過List0中的一個參考圖像來進行預測的;

3、B宏快是指宏快或宏塊分割是通過List0和/或List1中的參考圖像來進行預測的;

4、SI和SP:即Switch I和Switch P,是一種特殊的編解碼條帶,可以保證在視訊流之間進行有效的切換,并且解碼器可以任意的通路。比如,同一個視訊源被編碼成各種碼率的碼流,在傳輸的過程中可以根據網絡環境進行實時的切換;

5、SI宏塊是一種特殊類型的内部編碼宏塊,按Intra_4x4預測宏塊編碼。

二、條帶頭文法元素slice_type

slice_type是條帶頭文法元素,用于辨別條帶的編碼類型,如表2所示:

表2 slice_type的類型關聯

H.264的Slice及Slice類型

可能會感覺有些奇怪,0到4與5到9不是重複了麼?是這樣,slice_type的值在5到9的範圍内表示,除了目前條帶的編碼類型,所有目前編碼圖像的其他條帶的slice_type的值應與目前條帶的slice_type的值一樣,或者等于目前條帶的slice_type的值減5。

對于IDR圖像,slice_type的值應為2、4、7或者9。

如果num_ref_frames的值為0,slice_type的值應為2、4、7或者9。其中,num_ref_frames是SPS的文法元素,規定了可能在視訊序列中任何圖像幀間預測的解碼過程中用到的短期參考幀和長期參考幀、互補參考場對以及不成對的參考場的最大數量。

一個視訊圖像可編碼成一個或更多個條帶,每個條帶包含整數個宏塊(MB),即每個條帶至少一個MB,最多時每個條帶包含整個圖像的宏塊。總之,一幅圖像中每個條帶的宏塊數不一定固定。設條帶的目的是為了限制誤碼的擴散和傳輸,應使編碼條帶互相間是獨立的。某個條帶的預測不能以其它條帶中的宏塊為參考圖像,這樣某一條帶中的預測誤差才不會傳播到其它條帶中去。

Slice的類型如表1所示

表1 Slice的類型

H.264的Slice及Slice類型

說明:

1、I宏快是指每個塊或宏塊是通過其所在的Slice中的之前的已經編碼過的資料進行預測的;

2、P宏塊是指宏快或宏塊分割是通過List0中的一個參考圖像來進行預測的;

3、B宏快是指宏快或宏塊分割是通過List0和/或List1中的參考圖像來進行預測的;

4、SI和SP:即Switch I和Switch P,是一種特殊的編解碼條帶,可以保證在視訊流之間進行有效的切換,并且解碼器可以任意的通路。比如,同一個視訊源被編碼成各種碼率的碼流,在傳輸的過程中可以根據網絡環境進行實時的切換;

5、SI宏塊是一種特殊類型的内部編碼宏塊,按Intra_4x4預測宏塊編碼。

二、條帶頭文法元素slice_type

slice_type是條帶頭文法元素,用于辨別條帶的編碼類型,如表2所示:

表2 slice_type的類型關聯

H.264的Slice及Slice類型