1. 程式人生 > >HM編碼器程式碼閱讀(6)——GOP、IDR幀、I幀週期的關係(待修改)

HM編碼器程式碼閱讀(6)——GOP、IDR幀、I幀週期的關係(待修改)

有的地方說的不正確 關於GOP中IDR幀的說明:
1、在H.264中一個影象組的起始幀一定是IDR幀,因此在H.264中在處理一個GOP之前會把參考影象集清空,因此一個GOP中的幀一定不會參考另一個GOP的幀——這就是封閉式GOP。
2、在HEVC中,一個GOP的第一幀預設不是IDR幀,而是普通的I幀,在處理一個GOP之前,編碼器不會把參考集清空,因此在HEVC中一個GOP是會參考另一個GOP的資料,造成了GOP之間的資料依賴性。但是又不能簡單的把GOP的第一幀設定為IDR來解決這個問題。
3、因為在HEVC中,序列的第一幀比較特別,它總是會被當成一個單獨的GOP進行處理。例如有如下的幀序列:IBBBIBBBIBBB ,把GOP的大小設定為4,按照原來的猜測這個序列會被分成3個GOP進行處理,即:IBBB  IBBB IBBB,但是因為在HEVC中第一幀被當作一個單獨的GOP處理了,實際上幀序列會按照下面的方式進行處理:I  BBBI  BBBI  BBB。序列分成了4個GOP,而且除了第一個GOP之外,其餘的GOP都是以B幀開頭,這就出現了與原來設想完全不一樣的結果!

4、後面在除錯程式的時候發現了一個引數IntraPeriod(可以把它叫做重新整理週期),這個引數指明瞭編碼器按照某一個週期清空參考影象集,這個引數必須要比GOP大,且是GOP大小的整數倍。這個引數實現了H.264GOP第一幀清空參考集的功能!因此實際上一個重新整理週期數量的幀相當於H.264中的一個GOP,而HEVC中指定的GOP大小隻是表明了編碼器一次處理的幀的數量而已 5、例如IBBB IBBBIBBBIBBB這樣的一個序列,設定GOP大小是4IntraPeriod設定為8,在編碼過程中實際的效果是,一個重新整理週期內的幀IBBB IBBB會按照下面的方式進行處理:I  BBBI  BBB
分成3GOP,由於HEVC預設情況下一個GOP會參考另一個GOP的資料,因此儘管第二個和第三個GOP的第一幀不是I幀也沒有問題,因為它們會參考第一個GOPI幀。而且編碼器也沒有要求一個GOP中實際的幀數一定要滿足GOP指定的大小
6、根據上面的分析,可以在實行GOP級別的並行編碼時,以一個重新整理週期數量的幀作為一個單獨處理的單位。因為一個重新整理週期內的幀絕對不會參考另一個週期的幀。