setRefPOCList()解释(在 B 帧时记得验证一下)

这段代码涉及视频编码中参考帧列表的管理,包括设置参考帧的POC(Picture Order Count)列表和将列表1的索引映射到列表0。在I帧时,参考帧列表为空;在P帧时,只有一个参考帧列表使用;而在B帧时,两个列表都被使用。该过程对于理解视频编码中的预测和参考机制至关重要。
摘要由CSDN通过智能技术生成

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 。等后面在验证

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值