H264 SPS分析

SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 
SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 
SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 
SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 
SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 
SPS: sequence parameter sets01. Profile_idc它指的是碼流對應的profile.1.1 基線profile(Baseline profile)遵循基線profile的
SPS: sequence parameter sets
01. Profile_idc
它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}
 

描述了baseline、mainprofile的區別。


SPS: sequence parameter sets
01. Profile_idc 它指的是碼流對應的profile.

1.1 基線profile(Baseline profile)
遵循基線profile的碼流應該遵循以下的約束:

a) 只有I和P切片存在
b) NAL單元流不應該有範圍在2到4的nal_unit_type值,包括2和4.
c) 序列參數集(sps)的frame_mbs_only_fag(之後介紹)應該等於1
d) 圖象參數值(psp)的weighted_pred_flag和weighted_bipred_idc都應該爲0
e) 圖象參數值(psp)的entropy_coding_mode_flag應該等於0
f) 圖象參數值(psp)的num_slice_groups_minus1應該在0到7之間,包括0和7**psp部分參數含義在關於psp的文章中給出。
g) 對於基線profile對應的level度應該滿足.

符合基線profile的碼流的profile_idc被賦66.符合一定level的基線Baseline的解碼器應該可以解碼所有的profile_idc等於66的碼流或constrained_set0_flag(等會介紹)爲1而且level_idc(在level部分介紹)少於或等於一個指定的level的碼流。

1.2 主profile(Main profile)
符合主profile的碼流應該遵循以下的約束:

a) 只有I,P,B切片存在.
b) NAL單元流不包括nal_unit_type值範圍在2-4之內的值。包括2和4.
c) 不能允許有隨意順序的切片
d) 圖像參數集(psp)的num_slice_groups_minus1應該只爲0
e) 圖像參數集(psp)的redundant_pic_cnt_present_flag應該只爲0
f) 對於主profile所要求的level級需要達到。

符合主profile的碼流的profile_idc應爲77。符合指定level的主profile的解碼器應該可以解碼所有的profile_idc爲77的或constrained_set1_flag值爲1且level_idc值小於或等於指定level的碼流。

1.3 擴展profile(Extended profile)
符合擴展profile的碼流應該遵循以下的約束:

a) 序列參數集的direct_8x8_inference_flag值應該爲1
b) 圖像參數集的entropy_coding_mode_flag值應該爲0
c) 圖像參數集的num_slice_groups_minus1的值範圍爲0到7,包括0和7
d) 對於擴展profile指定的level級應該被達到

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲88的或constrained_set2_flag值爲1的,而且level_idc小於等於指定level級的碼流。

符合指定level級的擴展profile的解碼器可以解碼所有的profile_idc值爲66的或constrained_set0_flag值爲1的,而且level_idc小於等於指定level級的碼流。
02. Constraint_set0_flag
當constrained_set0_flag值爲1的時候,就說明碼流應該遵循基線profile(Baseline profile)的所有約束.constrained_set0_flag值爲0時,說明碼流不一定要遵循基線profile的所有約束。
03. Constraint_set1_flag
當constrained_set1_flag值爲1的時候,就說明碼流應該遵循主profile(Main profile)的所有約束.constrained_set1_flag值爲0時,說明碼流不一定要遵循主profile的所有約束。
04. Constraint_set2_flag
當constrained_set2_flag值爲1的時候,就說明碼流應該遵循擴展profile(Extended profile)的所有約束.constrained_set2_flag值爲0時,說明碼流不一定要遵循擴展profile的所有約束。
注意:當constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一個值爲1的話,那麼碼流必須滿足所有相應指明的profile約束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是碼流對應的level級.

5.1 獨立於profile的level約束
讓fR是這樣一個變量:
a) 如果圖像n是一幀,fR設爲1/172
b) 如果圖像n是一個場,fR設爲1/(172*2)

任何profile下的指定的level都應該滿足如下約束:
a) 理論上可訪問單元n從CPB中的移除時間滿足這樣的約束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是說在level表中指出的對於圖像n的值,PicSizeInMbs是指在圖像n中的宏塊數。
b) 如果圖像n是一個輸出圖像而且它不是碼流的最後一個輸出圖象,從DPB中取出的連續的輸出圖象差滿足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指對於圖象n來說的相應的值。PicSizeInMbs指圖象n的宏塊。
c) 對於可訪問單元0的NumBytesInNALunit變量的總和少於或等於256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是圖象0在level表中相應的值,PicSizeInMbs是圖象0的宏塊數量。
d) 對於可訪問單元n的NumBytesInNALunit值的總和是小於或等於256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是圖像n在level級表中對應的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等於Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是對於1024字節單元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 對於VCL HRD參數值,至少對於一個SchedSelIdx值來說,碼率BitRate[SchedSelIdx] <= 1000 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是對於1000bits/s和1000位單元對應於level級表的值。碼流應該爲0到cpb_cnt_minus1中的一個值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 對於NAL HRD參數來說,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的單元值在極限level下的值。碼流應該滿足至少SchedSelIdx值從0到cpb_cnt_minus1中的一個值。
k) 在亮度幀採樣中,垂直運動向量元素範圍不能超過MaxVmvR,MaxVmvR值在level極限表中提供
l) 在亮度幀採樣單元中,水平運動向量範圍不能超過-2048到2047.75,包括-2048和2047.75。
m) 按解碼順序的兩個連續的宏愉的運動向量的數量不超過MaxMvsPer2Mb(對於當前宏塊的最後一個切片和下一個宏塊的第一個切片也適用),MaxMvsPer2Mb值在level極限表中提供.
n) 對於任何宏塊的macroblock_layer()的位數值都不能大於128 + 2048 * ChromaFormatFactor.依賴於entropy_coding_mode_flag值,macroblock_layer()的值由如下方式計算
如果entropy_coding_mode_flag值爲0的話,macroblock_layer()的值由macroblock_layer()的對於一個macroblock的語法結構給出
其他情況下,對於一個宏塊的macroblock_layer()值是由read_bits(1)給出的.
5.2 與profile相關的level級
對於基線profile,主profile和擴展profile的相應的level級約束在H.264的文檔中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由圖像參數集指明的序列參數集。seq_parameter_set_id值應該是從0到31,包括0和31
注意:當可用的情況下,編碼器應該在sps值不同的情況下使用不同的seq_parameter_set_id值,而不是變化某一特定值的seq_parameter_set_id的參數集的語法結構中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了變量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值應該在0到12之間,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解碼圖像順序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在當一個編碼視頻序列有如下限定時不爲2
a) 包含非參考幀的可訪問單元,並緊接着一個包含非參考可訪問單元
b) 兩個可訪問單元,它們分別包含兩個場中的一個,它們一塊兒組成了一個互補的非參考場對,被緊接着一個包括非參考圖像的可訪問單元。
c) 一個包含非參考場的可訪問單元,並緊接着一個包含另一個非參考圖像的可訪問單元,它們不組成互補的非參考場對。
11. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出變量MaxPicOrderCntLsb的值,它是在解碼過程中使用到的圖像順序計算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值爲包括0和12以及它們之間的值。
12. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等於1的時候表示當delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片頭中不存在,並被認爲是0。
delta_pic_order_always_zero_flag值等於0時表示delta_pic_order_cnt[0]在序列的切片頭中存在而delta_pic_order_cnt[1]可能在序列的切片頭中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用來計算一個非參考圖像的圖像順序值。offset_for_non_ref_pic值取值範圍爲(-2)^(31)到2^(31)-1,包括邊界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用來計算一幀中的下場的圖像順序值。
offset_for_top_to_bottom_field值的取值範圍爲(-2)^(31)到(2)^(31)-1,包括邊界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解碼過程中被用來計算圖像順序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之間取值,包括邊界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一個元素,它被在解碼過程的解碼順序值中使用。
offset_for_ref_frame[i]的值爲(-2)^31到(2)^(31)-1,包括邊界值。
17. num_ref_frames
num_ref_frames指定了長期的和短期的參考幀的最大總數目,互補的參考場對和在解碼過程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明瞭frame_num允許的值和解碼過程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明瞭對於每個解碼圖像中的寬度值。在宏塊單元中的圖像寬度的變量值爲:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
對於亮度元素來說圖像寬度變量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
對於色度元素來說圖像寬度變量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明瞭解碼幀或場中的一個切片組的高度。變量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等於0指明瞭視頻序列的編碼圖象可能是編碼場或編碼幀。frame_mbs_only_flag等於1指明瞭每個編碼視頻序列的編碼圖像都是隻含幀宏塊的編碼幀。
依賴於frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定義:
如frame_mbs_only_flag等於0,pic_height_in_map_units_minus1就是宏塊單元的場高
如frame_mbs_only_flag等於1,pic_height_in_map_units_minus1就是宏塊單元的場寬
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等於0表明在一個圖像內不能切換使用幀和場宏塊。
mb_adaptive_frame_field_flag等於1表示在一幀中有可能使用場和幀的切換,當mb_adaptive_frame_field_flag沒有設定的時候,應該賦給0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明瞭在亮度運動向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
當frame_mbs_only_flag爲0時,direct_8x8_inference_flag應爲1
24. frame_cropping_flag
frame_cropping_flag等於1表明在sps中下一個使用的幀剪切偏移量參數。frame_cropping_flag等於0表明幀剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明瞭在一個窗中一幀的採樣值。
29. vui_parameters_present_flag
vui_parameters_present_flag等於1表示vui_parameters()在碼流中是存在的,vui_parameters_present_flag等於0表明vui_parameters()在碼流中不存在。
30. rbsp_trailing_bits( )
rbsp_stop_one_bit 恆等於1
rbsp_alignment_zero_bit 恆等於0.
Note:
More detail need refer to 
1). Advanced video coding for generic audiovisual services.pdf P63.
2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40


rbsp_trailing_bits( ) { C Descriptor 
rbsp_stop_one_bit /* equal to 1 */ All f(1) 
while( !byte_aligned( ) ) 
rbsp_alignment_zero_bit /* equal to 0 */ All f(1) 
}  

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