亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gopdecoder.cpp

?? JMVM MPEG MVC/3DAV 測試平臺 國際通用標準
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    m_pcCurrDPBUnit->destroy();
    m_pcCurrDPBUnit = 0;
  }
  return Err::m_nOK;
}



ErrVal
DecodedPicBuffer::xClearBuffer()
{

	//===== remove non-output/non-ref pictures =====
  //--- store in temporary list ---
  DPBUnitList cTempList;
  DPBUnitList::iterator iter  = m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end   = m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
    Bool  bNoOutput = ( !(*iter)->isExisting() || (*iter)->isBaseRep() || (*iter)->isOutputted() );
    Bool  bNonRef   = ( !(*iter)->isNeededForRef() );
		if( bNonRef && bNoOutput )
    {
      cTempList.push_back( *iter );
    }
  }
  //--- move to free list ---
  while( cTempList.size() )
  {
    DPBUnit*  pcDPBUnit = cTempList.popFront();
    RNOK( pcDPBUnit->uninit() );
    m_cUsedDPBUnitList.remove( pcDPBUnit );
    m_cFreeDPBUnitList.push_back( pcDPBUnit );
  }

  return Err::m_nOK;
}



ErrVal
DecodedPicBuffer::xUpdateMemory( SliceHeader* pcSliceHeader )
{
  ROTRS( pcSliceHeader && pcSliceHeader->getNalRefIdc() == NAL_REF_IDC_PRIORITY_LOWEST, Err::m_nOK );

  if( pcSliceHeader && pcSliceHeader->getAdaptiveRefPicBufferingFlag() )
  {
    RNOK( xMMCO( pcSliceHeader ) );
  }
  else
  {
    RNOK( xSlidingWindow() );
  }

  //===== clear buffer =====
  RNOK( xClearBuffer() );

  return Err::m_nOK;
}


ErrVal
DecodedPicBuffer::xMMCO( SliceHeader* pcSliceHeader )
{
  ROF( pcSliceHeader );

  MmcoOp            eMmcoOp;
  const MmcoBuffer& rcMmcoBuffer  = pcSliceHeader->getMmcoBuffer();
  Int               iIndex        = 0;
  UInt              uiVal1, uiVal2;

  while( MMCO_END != ( eMmcoOp = rcMmcoBuffer.get( iIndex++ ).getCommand( uiVal1, uiVal2 ) ) )
  {

    switch( eMmcoOp )
    {
    case MMCO_SHORT_TERM_UNUSED:
      RNOK( xMarkShortTermUnused( m_pcCurrDPBUnit, uiVal1 ) );
      break;
    case MMCO_RESET:
    case MMCO_MAX_LONG_TERM_IDX:
    case MMCO_ASSIGN_LONG_TERM:
    case MMCO_LONG_TERM_UNUSED:
    case MMCO_SET_LONG_TERM:
    default:
      fprintf( stderr,"\nERROR: MMCO COMMAND currently not supported in the software\n\n" );
      RERR();
    }
  }

  return Err::m_nOK;
}

//JVT-S036 lsj start
ErrVal
DecodedPicBuffer::xMMCOBase( SliceHeader* pcSliceHeader, UInt mCurrFrameNum ) 
{
	ROF( pcSliceHeader );

  MmcoOp            eMmcoOp;
  const MmcoBuffer& rcMmcoBaseBuffer = pcSliceHeader->getMmcoBaseBuffer();
  Int               iIndex        = 0;
  UInt              uiVal1, uiVal2;

  while( MMCO_END != (eMmcoOp = rcMmcoBaseBuffer.get( iIndex++ ).getCommand( uiVal1, uiVal2 ) ) )
 {
		switch( eMmcoOp )
		{
		case MMCO_SHORT_TERM_UNUSED:
			RNOK( xMarkShortTermUnusedBase( mCurrFrameNum, uiVal1 ) );
		break;
		case MMCO_RESET:
		case MMCO_MAX_LONG_TERM_IDX:
		case MMCO_ASSIGN_LONG_TERM:
		case MMCO_LONG_TERM_UNUSED:
		case MMCO_SET_LONG_TERM:
		default:
			fprintf( stderr,"\nERROR: MMCO COMMAND currently not supported in the software\n\n" );
		RERR();
		}
 }
  return Err::m_nOK;
}
ErrVal
DecodedPicBuffer::xMarkShortTermUnusedBase( UInt mCurrFrameNum, UInt uiDiffOfPicNums ) 
{
//  ROF( pcCurrentDPBUnit );

  //UInt uiCurrPicNum = pcCurrentDPBUnit->getFrameNum();
  Int  iPicNumN     = (Int)mCurrFrameNum - (Int)uiDiffOfPicNums - 1;

  DPBUnitList::iterator iter      = m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end       = m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
	  if( (*iter)->isNeededForRef() && (*iter)->getFrameNum() == iPicNumN && (*iter)->isBaseRep() ) 
    {
      (*iter)->markNonRef();
    }
  }
  return Err::m_nOK;
}

//JVT-S036 lsj end

ErrVal
DecodedPicBuffer::xMarkShortTermUnused( DPBUnit* pcCurrentDPBUnit, UInt uiDiffOfPicNums )
{
  ROF( pcCurrentDPBUnit );

  UInt uiCurrPicNum = pcCurrentDPBUnit->getFrameNum();
  Int  iPicNumN     = (Int)uiCurrPicNum - (Int)uiDiffOfPicNums - 1;

  DPBUnitList::iterator iter      = m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end       = m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
    if( (*iter)->isNeededForRef() && (*iter)->getPicNum(uiCurrPicNum,m_uiMaxFrameNum) == iPicNumN )
    {
      (*iter)->markNonRef();
    }
  }
  return Err::m_nOK;
}


ErrVal
DecodedPicBuffer::xSlidingWindow()
{
  //===== get number of reference frames =====
  UInt uiCurrNumRefFrames     = 0;
  DPBUnitList::iterator iter  = m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end   = m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
    if( (*iter)->isNeededForRef() && !(*iter)->isBaseRep() )
    {
      uiCurrNumRefFrames++;
    }
  }
  ROTRS( uiCurrNumRefFrames <= m_uiNumRefFrames, Err::m_nOK );

  //===== sliding window reference picture update =====
  //--- look for last ref frame that shall be removed ---
  UInt uiRefFramesToRemove = uiCurrNumRefFrames - m_uiNumRefFrames;
  iter                     = m_cUsedDPBUnitList.begin();
  for( ; iter != end; iter++ )
  {
    if( (*iter)->isNeededForRef() && !(*iter)->isBaseRep() )
    {
      uiRefFramesToRemove--;
      if( uiRefFramesToRemove == 0 )
      {
        break;
      }
    }
  }
  ROT( uiRefFramesToRemove );
  //--- delete reference label ---
  end   = ++iter;
  iter  = m_cUsedDPBUnitList.begin();
  for( ; iter != end; iter++ )
  {
    if( (*iter)->isNeededForRef() )
    {
      RNOK( (*iter)->markNonRef() );
    }
  }

  return Err::m_nOK;
}


//JVT-S036 lsj start
ErrVal
DecodedPicBuffer::xSlidingWindowBase( UInt mCurrFrameNum ) 
{
  //===== get number of reference frames =====
  DPBUnitList::iterator iter  = m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end   = m_cUsedDPBUnitList.end  ();
  DPBUnitList::iterator iiter;
  for( ; iter != end; iter++ )
  {
	  if( (*iter)->isBaseRep() && (*iter)->getFrameNum() != mCurrFrameNum )
    {
		for( iiter = m_cUsedDPBUnitList.begin(); iiter != end; iiter++ )
		{
			if ( (*iiter)->getFrameNum() == (*iter)->getFrameNum() && !(*iiter)->isBaseRep() )
			{
				if((*iter)->isNeededForRef())  
				{
					RNOK( (*iter)->markNonRef() );
				}
			}
		}
    }
  }
  
  return Err::m_nOK;
}
//JVT-S036 lsj end 

ErrVal
DecodedPicBuffer::xOutput( PicBufferList&   rcOutputList,
                           PicBufferList&   rcUnusedList )
{
  ROTRS( m_cFreeDPBUnitList.size(), Err::m_nOK ); // no need for output
  
  //===== smallest non-ref/output poc value =====
  Int       iMinOutputPoc   = MSYS_INT_MAX;
  DPBUnit*  pcElemToRemove  = 0;
  DPBUnitList::iterator iter =  m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end  =  m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
    Bool bOutput = ( !(*iter)->isOutputted() && (*iter)->isExisting() && !(*iter)->isBaseRep() && !(*iter)->isNeededForRef() );
    if(  bOutput && (*iter)->getPoc() < iMinOutputPoc )
    {
      iMinOutputPoc   = (*iter)->getPoc();
      pcElemToRemove  = (*iter);
    }
  }
  ROF( pcElemToRemove ); // error, nothing can be removed

  //===== copy all output elements to temporary list =====
  DPBUnitList cOutputList;
  Int iMaxPoc = iMinOutputPoc;
  Int iMinPoc = MSYS_INT_MAX;
  iter        = m_cUsedDPBUnitList.begin();
  for( ; iter != end; iter++ )
  {
    Bool bOutput = ( (*iter)->getPoc() <= iMinOutputPoc && !(*iter)->isOutputted() );
    if( bOutput )
    {
      if( !(*iter)->isOutputted() )
      {
        RNOK( (*iter)->markOutputted() );
      }
      if( (*iter)->isExisting() && !(*iter)->isBaseRep() )
      {
        cOutputList.push_back( *iter );
        if( (*iter)->getPoc() < iMinPoc )
        {
          iMinPoc = (*iter)->getPoc();
        }
      }
    }
  }

  //===== real output =====
  for( Int iPoc = iMinPoc; iPoc <= iMaxPoc; iPoc++ )
  {
    iter = cOutputList.begin();
    end  = cOutputList.end  ();
    for( ; iter != end; iter++ )
    {
      if( (*iter)->getPoc() == iPoc )
      {
        DPBUnit* pcDPBUnit = *iter;
        cOutputList.remove( pcDPBUnit );

        //----- output -----
        ROT( m_cPicBufferList.empty() );
        PicBuffer*  pcPicBuffer = m_cPicBufferList.popFront();
        //JVT-T054{
        if(pcPicBuffer->isUsed())
          pcPicBuffer->setUnused(); 
        //JVT-T054}
        pcDPBUnit->getFrame()->store( pcPicBuffer );
        rcOutputList.push_back( pcPicBuffer );
        rcUnusedList.push_back( pcPicBuffer );
        break; // only one picture per Poc
      }
    }
  }
  ROT( cOutputList.size() );

  //===== clear buffer =====
  RNOK( xClearBuffer() );

  //===== check =====
  ROT( m_cFreeDPBUnitList.empty() ); // this should never happen

  return Err::m_nOK;
}



ErrVal
DecodedPicBuffer::xClearOutputAll( PicBufferList&   rcOutputList,
                                   PicBufferList&   rcUnusedList,
                                   Int&             riMaxPoc )
{
  //===== create output list =====
  DPBUnitList cOutputList;
  Int         iMinPoc = MSYS_INT_MAX;
  Int         iMaxPoc = MSYS_INT_MIN;
  DPBUnitList::iterator iter =  m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end  =  m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )  
  {
    Bool bOutput = ( !(*iter)->isOutputted() && (*iter)->isExisting() && !(*iter)->isBaseRep() );
    if(  bOutput )
    {
      cOutputList.push_back( *iter );
      if( (*iter)->getPoc() < iMinPoc ) iMinPoc = (*iter)->getPoc();
      if( (*iter)->getPoc() > iMaxPoc ) iMaxPoc = (*iter)->getPoc();
    }
  }

  //===== real output =====
  for( Int iPoc = iMinPoc; iPoc <= iMaxPoc; iPoc++ )
  {
    iter = cOutputList.begin();
    end  = cOutputList.end  ();
    for( ; iter != end; iter++ )
    {
      if( (*iter)->getPoc() == iPoc )
      {
        DPBUnit* pcDPBUnit = *iter;
        cOutputList.remove( pcDPBUnit );

        //----- output -----
        ROT( m_cPicBufferList.empty() );
        PicBuffer*  pcPicBuffer = m_cPicBufferList.popFront();
        pcDPBUnit->getFrame()->store( pcPicBuffer );
        rcOutputList.push_back( pcPicBuffer );
        rcUnusedList.push_back( pcPicBuffer );
//JVT-T054{
        if(pcPicBuffer->isUsed())
          pcPicBuffer->setUnused();
        pcDPBUnit->getCtrlData().setSliceHeader(NULL);
//JVT-T054}
        if( iPoc > riMaxPoc )
        {
          riMaxPoc = iPoc;
        }
        break; // only one picture per Poc
      }
    }
  }
  ROT( cOutputList.size() );

  //===== uninit all elements and move to free list =====
  while( m_cUsedDPBUnitList.size() )
  {
    DPBUnit* pcDPBUnit = m_cUsedDPBUnitList.popFront();
    RNOK( pcDPBUnit->uninit() );
    m_cFreeDPBUnitList.push_back( pcDPBUnit );
  }

  return Err::m_nOK;
}

//JVT-T054{
ErrVal DecodedPicBuffer::xUpdateDPBUnitList(DPBUnit *pcDPBUnit)
{
  ROF( pcDPBUnit == m_pcCurrDPBUnit ); // check
  DPBUnit*  pcElemToReplace  = 0;
  DPBUnitList::iterator iter =  m_cUsedDPBUnitList.begin();
  DPBUnitList::iterator end  =  m_cUsedDPBUnitList.end  ();
  for( ; iter != end; iter++ )
  {
    if( !(*iter)->isBaseRep() && (*iter)->getPoc() == pcDPBUnit->getPoc() 
      && (*iter)->getQualityLevel()+1 == pcDPBUnit->getQualityLevel() )
    {
      pcElemToReplace  = (*iter);
      m_cUsedDPBUnitList.remove(pcElemToReplace);
      m_cFreeDPBUnitList.push_back(pcElemToReplace);
      m_cUsedDPBUnitList.push_back(pcDPBUnit);   
      break;
    }
  }
  return Err::m_nOK;
}
//JVT-T054}

ErrVal
DecodedPicBuffer::xStorePicture( DPBUnit*       pcDPBUnit,
                                 PicBufferList& rcOutputList,
                                 PicBufferList& rcUnusedList,
                                 Bool           bTreatAsIdr,
                                 UInt           uiQualityLevel, //JVT-T054
                                 Bool           bRef) //JVT-T054
{
  ROF( pcDPBUnit == m_pcCurrDPBUnit ); // check

  //---- fill border ----
  RNOK( m_pcYuvBufferCtrl->initMb() );
  RNOK( pcDPBUnit->getFrame()->extendFrame( NULL ) );
//JVT-T054{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品国产国产专区| 国产精品午夜久久| 午夜视频在线观看一区二区| 成人午夜视频福利| 欧美成人a视频| 同产精品九九九| 成人h动漫精品一区二区| 欧美日韩美女一区二区| 亚洲欧洲av色图| 丁香啪啪综合成人亚洲小说| 日韩精品最新网址| 日韩精品一区第一页| 在线视频欧美区| 18成人在线观看| 国产在线精品免费| 3751色影院一区二区三区| 一区二区三区在线免费视频| 成人av资源网站| 国产精品网曝门| 成人免费av资源| 国产日本欧洲亚洲| 成人午夜视频在线| 中文子幕无线码一区tr| 国产一区欧美日韩| 2023国产精品| 精东粉嫩av免费一区二区三区| 555夜色666亚洲国产免| 午夜免费欧美电影| 91国偷自产一区二区三区成为亚洲经典| 国产精品三级电影| 大白屁股一区二区视频| 中文字幕av一区二区三区免费看| 国产成人免费av在线| 国产日本欧洲亚洲| 99久精品国产| 亚洲精品视频免费看| 在线观看不卡视频| 激情综合色播五月| 日韩亚洲欧美综合| 激情综合一区二区三区| 久久久久国色av免费看影院| 国产精品一区在线观看你懂的| 久久久国产精品麻豆| 成人黄色综合网站| 日韩理论在线观看| 欧美在线高清视频| 日日欢夜夜爽一区| 日韩精品一区二区三区视频播放| 激情综合色综合久久| 国产拍欧美日韩视频二区| 9人人澡人人爽人人精品| 亚洲欧美电影院| 欧美在线你懂得| 亚洲国产欧美另类丝袜| 91精品国产麻豆| 久久精品国产77777蜜臀| 久久精品一区二区| 色天使久久综合网天天| 亚洲成va人在线观看| 日韩一区二区在线看| 国产精品一线二线三线精华| 国产偷国产偷精品高清尤物 | 欧美一级黄色录像| 毛片av中文字幕一区二区| 久久影院视频免费| 91在线观看免费视频| 亚洲成av人片一区二区三区| 欧美成人一区二区| 成人午夜在线免费| 亚洲成a人v欧美综合天堂| 日韩欧美在线综合网| 国产91在线观看丝袜| 亚洲一区二区三区影院| 日韩午夜三级在线| 成人黄页在线观看| 日本视频中文字幕一区二区三区 | av不卡免费在线观看| 亚洲视频一区二区在线| 91精品国产丝袜白色高跟鞋| 国产99精品视频| 亚洲大片在线观看| 国产色产综合产在线视频| 欧美主播一区二区三区美女| 久久精工是国产品牌吗| 久久精品夜色噜噜亚洲aⅴ| 日本久久电影网| 国内精品伊人久久久久av一坑| 亚洲人快播电影网| 精品少妇一区二区三区视频免付费| www.爱久久.com| 亚洲国产欧美一区二区三区丁香婷| 久久久精品国产99久久精品芒果| 色综合久久久久综合体| 伦理电影国产精品| 亚洲激情在线播放| 久久婷婷国产综合精品青草| 色综合网色综合| 国产九色sp调教91| 香蕉加勒比综合久久| 国产日韩成人精品| 欧美日韩高清一区二区不卡| 国产a久久麻豆| 日本vs亚洲vs韩国一区三区 | 欧美精品一区二区三区四区 | 色综合久久久网| 国产精品综合在线视频| 日韩av网站免费在线| 国产精品美女www爽爽爽| 欧美一区二区高清| 日本韩国精品在线| 国产91综合网| 久久不见久久见中文字幕免费| 亚洲风情在线资源站| 亚洲精品一区二区三区福利| 欧美浪妇xxxx高跟鞋交| av电影天堂一区二区在线| 国产在线麻豆精品观看| 日韩精品亚洲一区| 亚洲一二三四区不卡| 久久欧美一区二区| 精品视频一区二区不卡| 99精品一区二区| 国产高清在线精品| 久久机这里只有精品| 亚洲成在人线免费| 欧美国产精品一区二区三区| 欧美一级欧美一级在线播放| 欧美日韩午夜在线| 欧美亚州韩日在线看免费版国语版| 成人动漫av在线| 国产99久久久国产精品 | 麻豆精品视频在线| 毛片av一区二区三区| 久久国产乱子精品免费女| 裸体健美xxxx欧美裸体表演| 美国十次了思思久久精品导航| 久久99热99| 国产老妇另类xxxxx| 国产不卡在线播放| 99精品视频一区二区| 91视频精品在这里| 欧洲精品在线观看| 欧美日本在线视频| 日韩天堂在线观看| 欧美精品一区二区三区蜜桃视频 | 日韩三级精品电影久久久| 日韩三级.com| 久久看人人爽人人| 国产精品国模大尺度视频| 亚洲视频每日更新| 亚洲一级二级在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲成av人影院| 美女视频一区二区三区| 国产一区二区三区四区五区美女| 成人午夜短视频| 91久久一区二区| 91精品国产高清一区二区三区 | 久久国产综合精品| 国产a久久麻豆| 日本道免费精品一区二区三区| 欧美精品在线一区二区三区| 精品日韩一区二区三区 | 成人欧美一区二区三区白人| 亚洲乱码中文字幕综合| 丝袜亚洲另类欧美综合| 九色综合国产一区二区三区| 国产成人精品影视| 色欧美乱欧美15图片| 日韩一二三四区| 中文字幕av免费专区久久| 亚洲国产日日夜夜| 精品一区二区三区在线播放 | 成人天堂资源www在线| 色94色欧美sute亚洲线路一ni| 欧美二区三区的天堂| 日本一区二区三区在线观看| 一区二区三区在线观看国产| 日av在线不卡| 成人免费观看视频| 欧美放荡的少妇| 国产精品色哟哟| 婷婷亚洲久悠悠色悠在线播放| 国产一区二区三区高清播放| 91免费精品国自产拍在线不卡| 欧美精品三级在线观看| 国产欧美精品在线观看| 亚洲高清不卡在线观看| 国产成人av影院| 欧美高清视频不卡网| 国产三级精品视频| 亚洲bt欧美bt精品| 粉嫩av亚洲一区二区图片| 欧美日韩国产精品自在自线| 久久久99精品久久| 午夜久久久影院| 99视频热这里只有精品免费| 69久久99精品久久久久婷婷 | 蜜桃视频在线观看一区二区| av男人天堂一区|