2010年2月22日 星期一

H.264中如何判斷某一段是否為SPS(Sequence Parameter Set)或PPS(Picture Parameter Set)

在H.264中,無論是SPS、PPS或者是slice data,都是由一個NAL unit所組成。一個NAL unit的開始皆為00 00 00 01,下一個byte的值將決定這個NAL unit是屬於SPS或者是PPS還是slice data。

事實上下一個byte的值是由三個部份所組成,包括forbidden_bit、nal_reference_idc和nal_unit_type。其中forbidden_bit佔1bit,一般來說其值為0。而nal_reference_idc佔2bit,其值用來表示此NAL在重建過程中重要程度。至於佔了5bit的nal_unit_type就比較重要了,用來表示該NAL unit是屬於何種類型。

下表是H.264標準中定義所有NAL的類型
#define NALU_TYPE_SLICE 1
#define NALU_TYPE_DPA 2
#define NALU_TYPE_DPB 3
#define NALU_TYPE_DPC 4
#define NALU_TYPE_IDR 5
#define NALU_TYPE_SEI 6
#define NALU_TYPE_SPS 7
#define NALU_TYPE_PPS 8
#define NALU_TYPE_AUD 9
#define NALU_TYPE_EOSEQ 10
#define NALU_TYPE_EOSTREAM 11
#define NALU_TYPE_FILL 12
因此當nal_unit_type值為7時,則這個NAL unit即為SPS。而值為8時,這個NAL unit為PPS。

舉例來說,若擷取某一段H.264 bitstream為00 00 00 01 67 42 e0 14 da 05 82 51。
因為67 = 0 11 00111,nal_unit_tye = 00111 = 7,所以這一段為SPS。
又另一例00 00 00 01 68 ce 30 c4 80 00 00 00 00 00 00 00
68 = 01000,nal_unit_tye = 01000 = 8,所以這一段為PPS。

沒有留言:

張貼留言