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行目の
である。
具体的なフレームごとの符号化は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