1. 程式人生 > >openh264編碼二(巨集塊定義)

openh264編碼二(巨集塊定義)

一、巨集塊的定義

巨集塊是視訊資訊的主要承載者。一個編碼影象通常劃分為多個巨集塊組成.包含著每一個畫素的亮度和色度資訊。視訊解碼最主要的工作則是提供高效的方式從碼流中獲得巨集塊中畫素陣列。

一個巨集塊 = 一個16*16的亮度畫素 + 一個8×8Cb + 一個8×8Cr彩色畫素塊組成。(YCbCr 是屬於 YUV 家族的一員,在YCbCr 中 Y 是指亮度分量,Cb 指藍色色度分量,而 Cr 指紅色色度分量)

二、在序列中的位置

 

三、巨集塊包含的資訊

四、elecard示例巨集塊資訊

在elecard,選中一個巨集塊,可以獲取到左圖所示的位置、相對首巨集塊的偏移位置、大小、巨集塊型別等資訊。

五、H264協議巨集塊格式定義

按照macroblock_layer的語法結構上看,巨集塊能粗略分成三種結構:PCM、sub_mb_pred(子巨集塊預測)、mb_pred(巨集塊預測)。另外,雖然skip巨集塊並不在macroblock內描述,它也是巨集塊的一種結構。

1、mb_type

在一個巨集塊中,最開始的語法元素為巨集塊的型別:mb_type。從表中我們可以看出,根據mb_type的值是否等於I_PCM,整個解析方法分為兩大類:PCM型別和非PCM型別。

當這個巨集塊為I_PCM模式時,巨集塊中以差分編碼的形式儲存巨集塊原始的畫素值。此時存在如下幾個語法元素:
pcm_alignment_zero_bit:填充位,用位元0來填充直到按位元組對齊;
pcm_sample_luma:256個亮度分量的差分畫素值;
pcm_sample_chroma:若干個色度分量的差分畫素值,實際數量由碼流的顏色格式指定。例如對於最常用的4:2:0格式的視訊,共有128個色度畫素值。

2、mb_pred

巨集塊預測的語法結構,巨集塊預測與子巨集塊預測的語法結構是相斥的,一個巨集塊的組成結構要麼採用的是巨集塊預測的結構,要麼4個子巨集塊都是子巨集塊的預測結構。

3、sub_mb_pred

子巨集塊預測的語法結構,子巨集塊為8x8大小的巨集塊,也就是說一個巨集塊有4個子巨集塊,在這個語法結構的內部會進行4次子巨集塊預測。

4、coded_block_pattern

語法元素常簡稱做cbp,用於表示當前巨集塊內的4個8×8子塊編碼對其中的哪個的殘差係數進行編碼。值得注意的是該語法元素僅僅在巨集塊為非I_16x16模式時才存在,因為在I_16x16模式時cbp的有關資訊已經在mb_type中體現。

5、mb_qp_delta

表示巨集塊層的量化引數偏移值,取值範圍為[-26, 25]。我們在前面已經在PPS中獲取了整個序列的量化引數初始值(由pic_init_qp_minus26計算),在slice header中獲取slice層的量化引數偏移slice_qp_delta,因此每一個slice第一個巨集塊的量化引數可通過下面的公式計算: 

QP=pic_init_qp_minus26 + 26 + slice_qp_delta + mb_qp_delta

6、residual

畫素殘差編碼的語法結構。

好文參考:https://www.cnblogs.com/TaigaCon/category/1189649.html