H.264编解码流程
生活随笔
收集整理的這篇文章主要介紹了
H.264编解码流程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
編碼:
藍(lán)色的前向編碼流程: 以宏塊為輸入單位介紹優(yōu)于以幀為單位介紹。Fn為即將進(jìn)行編碼的宏塊,由原始圖像中16*16像素構(gòu)成。每個宏塊要么采用幀內(nèi)模式編碼,要么采用幀間模式編碼。不管是哪種編碼模式,預(yù)測宏塊P都是基于重建幀生成的。在幀內(nèi)模式中,預(yù)測宏塊P是由當(dāng)前幀經(jīng)過編碼、解碼和重建生成的(注意,采用未經(jīng)過濾波的樣本uF`n來生成P)。在幀間模式中,預(yù)測宏塊是通過一個或者多個參考幀經(jīng)過運(yùn)動補(bǔ)償預(yù)測生成的。在圖中,參考幀就是之前編碼得到的幀F(xiàn)`n-1;不過,并不只是一個參考幀,每個預(yù)測宏塊P都是由一個或者兩個,之前或者之后的,已經(jīng)經(jīng)過編碼和重建所生成的幀中的對應(yīng)宏塊所生成的。
當(dāng)前宏塊減去預(yù)測宏塊P生成殘差宏塊Dn。殘差宏塊Dn經(jīng)過變換、量化后生成X,由一系列變換量化系數(shù)組成。然后,對這些系數(shù)進(jìn)行重排序和熵編碼。熵編碼生成的系數(shù),附上解碼宏塊所需要的附加信息生成壓縮比特流,(附加信息有宏塊預(yù)測模式,量化步長,描述如何對宏塊進(jìn)行運(yùn)動補(bǔ)償?shù)倪\(yùn)動矢量信息,等等)。壓縮比特流被傳到網(wǎng)絡(luò)抽象層(NAL)以發(fā)射或者儲存。
粉紅色的重建流程: 為了生成重建幀以編碼以后的宏塊,將量化后的宏塊殘差系數(shù)X進(jìn)行解碼。系數(shù)X經(jīng)過反量化,反變換生成殘差宏塊Dn`。此時的殘差宏塊與原先的殘差宏塊Dn并不相同,原因是在量化過程中引入了失真。所以,Dn`是變形了的Dn。
預(yù)測宏塊P與Dn`相加生成重建宏塊uF`n(原宏塊的變形了的宏塊)。為了減小塊效應(yīng)失真,引入了專門的濾波器。濾波之后的宏塊就是重建宏塊F`n,一系列的重建宏塊組成了參考幀。(實(shí)際上,這里的參考幀,與解碼端生成的最終圖像完全一致)
解碼: 從NAL中,解碼器取得壓縮比特流。數(shù)據(jù)元素經(jīng)過熵解碼和重排序生成一系列量化后的系數(shù)X。經(jīng)過反量化和反變換生成Dn`(與編碼端的Dn`一致)。使用從比特流中解碼出來的頭信息,解碼器生成預(yù)測宏塊P,與先前在編碼器中生成的預(yù)測宏塊P一致。P與Dn`相加生成uF`n,然后經(jīng)過濾波,生成解碼宏塊F`n。
從兩幅圖表和上面的討論可以發(fā)現(xiàn):編碼器的重建流程的目的是為了確保編碼端和解碼端使用一致的參考幀來生成預(yù)測宏塊P。如果參考幀不一致,那么編碼端和解碼端的預(yù)測宏塊P就不一致,導(dǎo)致在編碼端和解碼端之間生成漸增的誤差或者“漂移”。
總結(jié)
以上是生活随笔為你收集整理的H.264编解码流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++MFC编程笔记day01 MFC介
- 下一篇: MFC添加自定义消息及处理函数