HEVC参照ソフトウェアHMのコードの内部(4) TEncGOP.cppについて

ここではTEncGOP.cppを見ていく。

https://hevc.hhi.fraunhofer.de/HM-doc/_t_enc_g_o_p_8cpp_source.html

 

TEncGOP.cppには具体的に符号化を行うための関数が含まれる。

符号化の関数は1155行目の

 Void TEncGOP::compressGOP

である。

具体的なフレームごとの符号化は1194行目の

for ( Int iGOPid=0; iGOPid < m_iGopSize; iGOPid++ )

から始まる。終わりは1962行目にある。

このループが終わる直前に

m_iNumPicCoded++; (1943行目)

m_totalCoded ++; (1944行目)

とし、符号化したフレーム数をインクリメントしている。

 1946行目には

printf("\n");

があり、これはログにおいてフレームごとの出力を次の行にするためのものだ。

 

GOPごとに符号化は行われ、符号化したかしてないかはフラグで判断する。

1188行目の// reset flag indicating whether pictures have been encoded

からも分かるように、始めはすべてされてない(false)とする。

m_pcCfg->setEncodedFlag(iGOPid, false);

 

符号化の処理はsliceごとに行われ、1つ1つのsliceの処理時間は1202行目の

clock_t iBeforeTime = clock();

から1872行目の

Double dEncTime = (Double)(clock()-iBeforeTime) / CLOCKS_PER_SEC;

までで測られる。

 

なお、sliceごとのイテレーション(ループは)1757行目の

for( UInt sliceSegmentStartCtuTsAddr = 0, sliceIdxCount=0; sliceSegmentStartCtuTsAddr < pcPic->getPicSym()->getNumberOfCtusInFrame(); sliceIdxCount++, sliceSegmentStartCtuTsAddr=pcSlice->getSliceSegmentCurEndCtuTsAddr() )

 

から1864行目までとなっている。

(終わりは// end iteration over slicesと書いてあることからも判断出来る)

 

 

まとめると

compressGOP: 1155

compressGOP loop: 1194 - 1962

clock for each slice: 1202 - 1872

each slice loop: 1757 - 1864