一 SPS、PPS句法和语义
宽高在SPS里。
profile_idc:baseline、main、high。
level_idc:值越大,最大宏块处理速率等值越大。
m_ptParam.i_level_idc = 21; //X264编码参数
chroma_format_idc:1表示采样格式为4:2:0。
frame_mbs_only_flag:=1只含帧宏块。
entropy_coding_mode_flag:1—cabac 0—cavlc
weighted_pred_flag=1—P片使用加权预测
weighted_bipred_idc=2—B片使用隐式加权预测
m_ptParam.rc.i_qp_min = 10; //量化的最小值
m_ptParam.rc.i_qp_max = 51;
二 Slice Header
slice_type:0–P帧,1–B帧,2–I帧。大于5时,做减5处理。
field_pic_flag:0—帧编码 1—场编码(顶场、底场)。
idr_pic_id:IDR帧的序号。
disable_deblocking_filter_idc:去块滤波器。
first_mb_in_slice:重要,第一个宏块在整帧中的位置
frame_num:解码用。
POC picture_order_count:显示用。
pic_order_cnt_lsb:这个不是poc。
编码帧,POC包括TopFieldOrderCnt、BottomFieldOrderCnt。
SPS中有一个pic_order_cnt_type决定。
pic_order_cnt_type=0:只对POC低位编码传输。有B帧的。
=2:显示和解码顺序一致。没有B帧。
三 条带数据(宏块)语法
Mb_type:25–I_PCM,以差分编码形式保存宏块原始的像素值。
非I_PCM:值不确定。I slice,0-24。P slice,0-4。B slice,0-22。
mb_skip_run:cavlc跳过的个数,mb_skip_flag:使用cabac时,宏块是否跳过。
transform_size_8x8_flag:为1,预测残差按照8x8像素块进行解码。
为0,4x4。
CBP coded_block_pattern:当前宏块内的4个8x8子块编码对那个残差系树进行编码。
该语法在宏块为非I_16x16模式才存在。I_16x16,cbp在mb_type体现了。
高2位存储色度cbp:值范围0-2。
低4位存储亮度cbp:对应4个8x8,0-1。
mb_qp_delta:量化参数偏移值,[-26, 25]。
每一个slice第一个宏块的量化参数:
QP0 = pic_init_qp + 26 + slice_qp_delta + mb_qp_delta。
第二个及以后:QPn = (QPm + mb_qp_delta + 52) % 52。