setRefPOCList()
void Slice::setRefPOCList ()
{
for (int iDir = 0; iDir < NUM_REF_PIC_LIST_01; iDir++)
{
for (int iNumRefIdx = 0; iNumRefIdx < m_aiNumRefIdx[iDir]; iNumRefIdx++)
{
m_aiRefPOCList[iDir][iNumRefIdx] = m_apcRefPicList[iDir][iNumRefIdx]->getPOC();
}
}
}
NUM_REF_PIC_LIST_01默认设置为2,推测是为了方便不同类型的帧对参考帧列表POC的修改。因为下面还有一个for循环,比如如果是I 帧,则m_aiNumRefIdx[iDir]这个数组,不管iDir = 1或0,其中的参考帧列表值都为0,0,0....。或者为P 帧,在iDir为1时,参考帧列表值都为0,0,0....。
只有为B帧时,两个参考帧列表才同时运用,这时m_apcRefPicList[iDir][iNumRefIdx]从getPOC()中得到各个参考帧的POC序号,并存在这个二维数组中,在赋值给 m_aiRefPOCList[iDir][iNumRefIdx]。
可能不对,在之后B帧的时候再验证一下
setList1IdxToList0Idx()
void Slice::setList1IdxToList0Idx()
{
int idxL0, idxL1;
for ( idxL1 = 0; idxL1 < getNumRefIdx( REF_PIC_LIST_1 ); idxL1++ )
{
m_list1IdxToList0Idx[idxL1] = -1;
for ( idxL0 = 0; idxL0 < getNumRefIdx( REF_PIC_LIST_0 ); idxL0++ )
{
if ( m_apcRefPicList[REF_PIC_LIST_0][idxL0]->getPOC() == m_apcRefPicList[REF_PIC_LIST_1][idxL1]->getPOC() )
{
m_list1IdxToList0Idx[idxL1] = idxL0;
break;
}
}
}
}
参考帧列表1里有几个参考帧,idxL1就循环几次。试了一次
using namespace std;
cout << m_aiNumRefIdx[1] << endl;
因为现在是I 帧,所以参考帧列表1中为空,等于0 。等后面在验证