Ticket #646: collocated_from_l0_bug.patch

File collocated_from_l0_bug.patch, 9.4 KB (added by bheng, 12 years ago)
  • source/Lib/TLibCommon/TComDataCU.cpp

     
    36943694  TComMv cColMv;
    36953695
    36963696  // use coldir.
    3697   TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? getSlice()->getColDir() : 0), getSlice()->getColRefIdx());
     3697  TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
    36983698  TComDataCU *pColCU = pColPic->getCU( uiCUAddr );
    36993699  if(pColCU->getPic()==0||pColCU->getPartitionSize(uiPartUnitIdx)==SIZE_NONE)
    37003700  {
     
    37083708  {
    37093709    return false;
    37103710  }
    3711   eColRefPicList = getSlice()->getCheckLDC() ? eRefPicList : RefPicList(1-getSlice()->getColDir());
     3711  eColRefPicList = getSlice()->getCheckLDC() ? eRefPicList : RefPicList(getSlice()->getColFromL0Flag());
    37123712
    37133713  Int iColRefIdx = pColCU->getCUMvField(RefPicList(eColRefPicList))->getRefIdx(uiAbsPartAddr);
    37143714
     
    38313831  Int iCurrPOC = m_pcSlice->getPOC();
    38323832 
    38333833  // use coldir.
    3834   TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? getSlice()->getColDir() : 0), getSlice()->getColRefIdx());
     3834  TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
    38353835  TComDataCU *pColCU = pColPic->getCU( m_uiCUAddr );
    38363836 
    38373837  Int iColPOC = pColCU->getSlice()->getPOC();
  • source/Lib/TLibCommon/TComSlice.cpp

     
    7474, m_pcSPS                         ( NULL )
    7575, m_pcPPS                         ( NULL )
    7676, m_pcPic                         ( NULL )
    77 , m_uiColDir                      ( 0 )
     77, m_colFromL0                      ( 1 )
    7878, m_colRefIdx                     ( 0 )
    7979#if ALF_CHROMA_LAMBDA || SAO_CHROMA_LAMBDA
    8080, m_dLambdaLuma( 0.0 )
     
    160160  m_aiNumRefIdx[0]      = 0;
    161161  m_aiNumRefIdx[1]      = 0;
    162162 
    163   m_uiColDir = 0;
     163  m_colFromL0 = 1;
    164164 
    165165  m_colRefIdx = 0;
    166166  initEqualRef();
     
    553553{
    554554  Int i;
    555555  TComSlice* curSlice = pic->getSlice(curSliceIdx);
    556   Int currColRefPOC =  curSlice->getRefPOC( RefPicList(curSlice->getColDir()), curSlice->getColRefIdx());
     556  Int currColRefPOC =  curSlice->getRefPOC( RefPicList(1-curSlice->getColFromL0Flag()), curSlice->getColRefIdx());
    557557  TComSlice* preSlice;
    558558  Int preColRefPOC;
    559559  for(i=curSliceIdx-1; i>=0; i--)
     
    561561    preSlice = pic->getSlice(i);
    562562    if(preSlice->getSliceType() != I_SLICE)
    563563    {
    564       preColRefPOC  = preSlice->getRefPOC( RefPicList(preSlice->getColDir()), preSlice->getColRefIdx());
     564      preColRefPOC  = preSlice->getRefPOC( RefPicList(1-preSlice->getColFromL0Flag()), preSlice->getColRefIdx());
    565565      if(currColRefPOC != preColRefPOC)
    566566      {
    567567        printf("Collocated_ref_idx shall always be the same for all slices of a coded picture!\n");
     
    769769  m_iAPSId               = pSrc->m_iAPSId;
    770770#endif
    771771
    772   m_uiColDir             = pSrc->m_uiColDir;
     772  m_colFromL0            = pSrc->m_colFromL0;
    773773  m_colRefIdx            = pSrc->m_colRefIdx;
    774774#if ALF_CHROMA_LAMBDA || SAO_CHROMA_LAMBDA
    775775  m_dLambdaLuma          = pSrc->m_dLambdaLuma;
  • source/Lib/TLibCommon/TComSlice.h

     
    12121212#if !REMOVE_APS
    12131213  TComAPS*    m_pcAPS;  //!< pointer to APS parameter object
    12141214#endif
    1215   UInt        m_uiColDir;  // direction to get colocated CUs
     1215  UInt        m_colFromL0;  // collocated picture from List0 flag
    12161216 
    12171217  UInt        m_colRefIdx;
    12181218
     
    13541354  TComPic*  getRefPic           ( RefPicList e, Int iRefIdx)    { return  m_apcRefPicList[e][iRefIdx];  }
    13551355  Int       getRefPOC           ( RefPicList e, Int iRefIdx)    { return  m_aiRefPOCList[e][iRefIdx];   }
    13561356  Int       getDepth            ()                              { return  m_iDepth;                     }
    1357   UInt      getColDir           ()                              { return  m_uiColDir;                   }
     1357  UInt      getColFromL0Flag    ()                              { return  m_colFromL0;                  }
    13581358  Bool      getColRefIdx        ()                              { return  m_colRefIdx;                  }
    13591359  Void      checkColRefIdx      (UInt curSliceIdx, TComPic* pic);
    13601360  Bool      getCheckLDC     ()                                  { return m_bCheckLDC; }
     
    14171417 
    14181418  Void      setRefPicList       ( TComList<TComPic*>& rcListPic );
    14191419  Void      setRefPOCList       ();
    1420   Void      setColDir           ( UInt uiDir ) { m_uiColDir = uiDir; }
     1420  Void      setColFromL0Flag    ( UInt colFromL0 ) { m_colFromL0 = colFromL0; }
    14211421  Void      setColRefIdx        ( UInt refIdx) { m_colRefIdx = refIdx; }
    14221422  Void      setCheckLDC         ( Bool b )                      { m_bCheckLDC = b; }
    14231423  Void      setMvdL1ZeroFlag     ( Bool b)                       { m_bLMvdL1Zero = b; }
  • source/Lib/TLibDecoder/TDecCAVLC.cpp

     
    14331433      if ( rpcSlice->getSliceType() == B_SLICE )
    14341434      {
    14351435        READ_FLAG( uiCode, "collocated_from_l0_flag" );
    1436         rpcSlice->setColDir(uiCode);
     1436        rpcSlice->setColFromL0Flag(uiCode);
    14371437      }
    14381438      else
    14391439      {
    1440         rpcSlice->setColDir( 0 );
     1440        rpcSlice->setColFromL0Flag( 1 );
    14411441      }
    14421442
    14431443      if ( rpcSlice->getSliceType() != I_SLICE &&
    1444         ((rpcSlice->getColDir()==0 && rpcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
    1445         (rpcSlice->getColDir() ==1 && rpcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
     1444        ((rpcSlice->getColFromL0Flag()==1 && rpcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
     1445        (rpcSlice->getColFromL0Flag() ==0 && rpcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
    14461446      {
    14471447        READ_UVLC( uiCode, "collocated_ref_idx" );
    14481448        rpcSlice->setColRefIdx(uiCode);
     
    15141514      if ( rpcSlice->getSliceType() == B_SLICE )
    15151515      {
    15161516        READ_FLAG( uiCode, "collocated_from_l0_flag" );
    1517         rpcSlice->setColDir(uiCode);
     1517        rpcSlice->setColFromL0Flag(uiCode);
    15181518      }
    15191519
    15201520      if ( rpcSlice->getSliceType() != I_SLICE &&
    1521         ((rpcSlice->getColDir()==0 && rpcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
    1522         (rpcSlice->getColDir() ==1 && rpcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
     1521        ((rpcSlice->getColFromL0Flag()==1 && rpcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
     1522        (rpcSlice->getColFromL0Flag() ==0 && rpcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
    15231523      {
    15241524        READ_UVLC( uiCode, "collocated_ref_idx" );
    15251525        rpcSlice->setColRefIdx(uiCode);
  • source/Lib/TLibEncoder/TEncCavlc.cpp

     
    10091009    {
    10101010      if ( pcSlice->getSliceType() == B_SLICE )
    10111011      {
    1012         WRITE_FLAG( pcSlice->getColDir(), "collocated_from_l0_flag" );
     1012        WRITE_FLAG( pcSlice->getColFromL0Flag(), "collocated_from_l0_flag" );
    10131013      }
    10141014
    10151015      if ( pcSlice->getSliceType() != I_SLICE &&
    1016         ((pcSlice->getColDir()==0 && pcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
    1017         (pcSlice->getColDir()==1  && pcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
     1016        ((pcSlice->getColFromL0Flag()==1 && pcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
     1017        (pcSlice->getColFromL0Flag()==0  && pcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
    10181018      {
    10191019        WRITE_UVLC( pcSlice->getColRefIdx(), "collocated_ref_idx" );
    10201020      }
     
    10591059    {
    10601060      if ( pcSlice->getSliceType() == B_SLICE )
    10611061      {
    1062         WRITE_FLAG( pcSlice->getColDir(), "collocated_from_l0_flag" );
     1062        WRITE_FLAG( pcSlice->getColFromL0Flag(), "collocated_from_l0_flag" );
    10631063      }
    10641064
    10651065      if ( pcSlice->getSliceType() != I_SLICE &&
    1066          ((pcSlice->getColDir()==0 && pcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
    1067          (pcSlice->getColDir()==1  && pcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
     1066         ((pcSlice->getColFromL0Flag()==1 && pcSlice->getNumRefIdx(REF_PIC_LIST_0)>1)||
     1067         (pcSlice->getColFromL0Flag()==0  && pcSlice->getNumRefIdx(REF_PIC_LIST_1)>1)))
    10681068      {
    10691069        WRITE_UVLC( pcSlice->getColRefIdx(), "collocated_ref_idx" );
    10701070      }
  • source/Lib/TLibEncoder/TEncGOP.cpp

     
    426426
    427427    if (pcSlice->getSliceType() == B_SLICE)
    428428    {
    429       pcSlice->setColDir(uiColDir);
     429      pcSlice->setColFromL0Flag(1-uiColDir);
    430430      Bool bLowDelay = true;
    431431      Int  iCurrPOC  = pcSlice->getPOC();
    432432      Int iRefIdx = 0;
     
    486486      }
    487487      else
    488488      {
    489         // Note: pcSlice->getColDir() is assumed to be always 1 and getcolRefIdx() is always 0.
     489        // Note: pcSlice->getColFromL0Flag() is assumed to be always 0 and getcolRefIdx() is always 0.
    490490        pcSlice->setEnableTMVPFlag(1);
    491491      }
    492492      pcSlice->getSPS()->setTMVPFlagsPresent(1);