VTM10.0代码学习1:DecApp_decode()

此系列是为了记录自己学习VTM10.0的过程和锻炼表达能力,主要是从解码端进行入手。由于本人水平有限,出现的错误恳请大家指正,欢迎与大家一起交流进步。

1.初始化

int                 poc;//picture order count
PicList* pcListPic = NULL;//存有图片的线性表
ifstream bitstreamFile(m_bitstreamFileName.c_str(), ifstream::in | ifstream::binary);//c_str()将string类型转换为c语言的字符串,in代表输入,binary代表为二进制模式。创建一个文件输入比特流。
InputByteStream bytestream(bitstreamFile);//将比特流转为字节流
// 创建解码器类
xCreateDecLib();
//舍弃RAP的前置图像中为RASL,更新the last displayed POC?
m_iPOCLastDisplay += m_iSkipFrame;      // set the last displayed POC correctly for skip forward.
bool loopFiltered[MAX_VPS_LAYERS] = {
    false };//标记是否已进行环路滤波
bool bPicSkipped = false;//表示是否跳过解码图像
bool isEosPresentInPu = false;//表示前一个NALU所在的PU是否是Eos

poc:帧的播放顺序

pcListPic:存放着解码出来的帧

bitstreamFile和bytestream:解码端的输入码流,一个是以比特为单位,另一个是以字节为单位

xCreateDecLib():函数包含着解码器类的创建和初始化,存在ROM上变量的初始化,量化和变换相关的初始化

m_iPOCLastDisplay += m_iSkipFrame :不确定

loopFiltered:标记是否已经环路滤波

bPicSkipped:是否跳过解码上一个NALU所在的图像

isEosPresentInPu:判断前一个NALU是否是EOS

2.循环进行NALU解码

  while (!!bitstreamFile)
  {
   
    //创建NALU类
    InputNALUnit nalu;
    nalu.m_nalUnitType = NAL_UNIT_INVALID;
      
    bool bNewPicture = m_cDecLib.isNewPicture(&bitstreamFile, &bytestream);//将要解码的NALU是否是图像中的第一个NALU
    bool bNewAccessUnit = bNewPicture && m_cDecLib.isNewAccessUnit( bNewPicture, &bitstreamFile, &bytestream );//将要解码的NALU是否是新的一帧中的第一个NALU,同时也是新的AU中的第一个NALU
      
    if(!bNewPicture)
    {
   //分支1
    }
      
    if ((bNewPicture || !bitstreamFile || nalu.m_nalUnitType == NAL_UNIT_EOS) && !m_cDecLib.getFirstSliceInSequence(nalu.m_nuhLayerId) && !bPicSkipped)
    {
   //分支2
     //满足不是跳过解码的图像,同时满足不是sequence中的第一个slice,同时满足以下至少一个条件:1)将要解码的NALU是图像中的第一个NALU;2)比特流文件eof?;3)上一个NALU的类型是EOS
    }
    else if ( (bNewPicture || !bitstreamFile || nalu.m_nalUnitType == NAL_UNIT_EOS ) &&
      m_cDecLib.getFirstSliceInSequence(nalu.m_nuhLayerId))//在下一个NALU所在的slice将是sequence中的第一个slice的情况下,同时满足以下至少一个条件:1)将要解码的NALU是图像中的第一个NALU;
    {
                                                         //2)比特流文件eof?;3)上一个NALU的类型是EOS。则下一个NALU所在的slice也是picture中的第一个slice。
      m_cDecLib.setFirstSliceInPicture (true
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值