Ticket #928: colref_fix.patch

File colref_fix.patch, 5.8 KB (added by mcoban, 9 years ago)
  • Lib/TLibCommon/TComDataCU.cpp

     
    35493549
    35503550  iCurrRefPOC = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getPOC();
    35513551  Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getIsLongTerm();
    3552   Bool bIsColRefLongTerm = pColCU->getSlice()->getRefPic(eColRefPicList, iColRefIdx)->getIsUsedAsLongTerm();
     3552  Bool bIsColRefLongTerm = pColCU->getSlice()->getIsUsedAsLongTerm(eColRefPicList, iColRefIdx);
    35533553
    35543554  if ( bIsCurrRefLongTerm != bIsColRefLongTerm )
    35553555  {
     
    37013701 
    37023702  Int iCurrRefPOC = m_pcSlice->getRefPic(eRefPicList, iRefIdx)->getPOC();
    37033703  Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, iRefIdx)->getIsLongTerm();
    3704   Bool bIsColRefLongTerm = pColCU->getSlice()->getRefPic(eColRefPicList, pColCU->getCUMvField(eColRefPicList)->getRefIdx(uiPartIdxCenter))->getIsUsedAsLongTerm();
     3704  Bool bIsColRefLongTerm = pColCU->getSlice()->getIsUsedAsLongTerm(eColRefPicList, pColCU->getCUMvField(eColRefPicList)->getRefIdx(uiPartIdxCenter));
    37053705
    37063706  if ( bIsCurrRefLongTerm != bIsColRefLongTerm )
    37073707  {
  • Lib/TLibCommon/TComPic.h

     
    101101  Void          setUsedByCurr( Bool bUsed ) { m_bUsedByCurr = bUsed; }
    102102  Bool          getIsLongTerm()             { return m_bIsLongTerm; }
    103103  Void          setIsLongTerm( Bool lt ) { m_bIsLongTerm = lt; }
    104   Bool          getIsUsedAsLongTerm()          { return m_bIsUsedAsLongTerm; }
    105   Void          setIsUsedAsLongTerm( Bool lt ) { m_bIsUsedAsLongTerm = lt; }
    106104  Void          setCheckLTMSBPresent     (Bool b ) {m_bCheckLTMSB=b;}
    107105  Bool          getCheckLTMSBPresent     () { return m_bCheckLTMSB;}
    108106
  • Lib/TLibCommon/TComSlice.cpp

     
    370370    {
    371371      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
    372372      pcRefPic->setIsLongTerm(0);
    373       pcRefPic->setIsUsedAsLongTerm(0);
    374373      pcRefPic->getPicYuvRec()->extendPicBorder();
    375374      RefPicSetStCurr0[NumPocStCurr0] = pcRefPic;
    376375      NumPocStCurr0++;
     
    383382    {
    384383      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
    385384      pcRefPic->setIsLongTerm(0);
    386       pcRefPic->setIsUsedAsLongTerm(0);
    387385      pcRefPic->getPicYuvRec()->extendPicBorder();
    388386      RefPicSetStCurr1[NumPocStCurr1] = pcRefPic;
    389387      NumPocStCurr1++;
     
    396394    {
    397395      pcRefPic = xGetLongTermRefPic(rcListPic, m_pcRPS->getPOC(i));
    398396      pcRefPic->setIsLongTerm(1);
    399       pcRefPic->setIsUsedAsLongTerm(1);
    400397      pcRefPic->getPicYuvRec()->extendPicBorder();
    401398      RefPicSetLtCurr[NumPocLtCurr] = pcRefPic;
    402399      NumPocLtCurr++;
     
    447444    }
    448445  }
    449446
     447  ::memset(m_bIsUsedAsLongTerm, 0, sizeof(m_bIsUsedAsLongTerm));
     448
    450449  for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[0]-1); rIdx ++)
    451450  {
    452451    m_apcRefPicList[0][rIdx] = m_RefPicListModification.getRefPicListModificationFlagL0() ? rpsCurrList0[ m_RefPicListModification.getRefPicSetIdxL0(rIdx) ] : rpsCurrList0[rIdx % numPocTotalCurr];
     452    m_bIsUsedAsLongTerm[0][rIdx] = m_RefPicListModification.getRefPicListModificationFlagL0() ? (m_RefPicListModification.getRefPicSetIdxL0(rIdx) >= (NumPocStCurr0 + NumPocStCurr1))
     453                                  : ((rIdx % numPocTotalCurr) >= (NumPocStCurr0 + NumPocStCurr1));
    453454  }
    454455  if ( m_eSliceType == P_SLICE )
    455456  {
     
    461462    for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[1]-1); rIdx ++)
    462463    {
    463464      m_apcRefPicList[1][rIdx] = m_RefPicListModification.getRefPicListModificationFlagL1() ? rpsCurrList1[ m_RefPicListModification.getRefPicSetIdxL1(rIdx) ] : rpsCurrList1[rIdx % numPocTotalCurr];
     465      m_bIsUsedAsLongTerm[1][rIdx] = m_RefPicListModification.getRefPicListModificationFlagL1() ?
     466                                  (m_RefPicListModification.getRefPicSetIdxL1(rIdx) >= (NumPocStCurr0 + NumPocStCurr1)): ((rIdx % numPocTotalCurr) >= (NumPocStCurr0 + NumPocStCurr1));
    464467    }
    465468  }
    466469#else
     
    886889        isReference = 1;
    887890        rpcPic->setUsedByCurr(pReferencePictureSet->getUsed(i));
    888891        rpcPic->setIsLongTerm(0);
    889         rpcPic->setIsUsedAsLongTerm(0);
    890892      }
    891893    }
    892894    for(;i<pReferencePictureSet->getNumberOfPictures();i++)
     
    981983        {
    982984          isAvailable = 1;
    983985          rpcPic->setIsLongTerm(1);
    984           rpcPic->setIsUsedAsLongTerm(1);
    985986          break;
    986987        }
    987988      }
  • Lib/TLibCommon/TComSlice.h

     
    11711171  Int         m_iSliceQpDeltaCr;
    11721172  TComPic*    m_apcRefPicList [2][MAX_NUM_REF+1];
    11731173  Int         m_aiRefPOCList  [2][MAX_NUM_REF+1];
     1174  Bool        m_bIsUsedAsLongTerm[2][MAX_NUM_REF+1];
    11741175  Int         m_iDepth;
    11751176 
    11761177  // referenced slice?
     
    12981299  UInt      getColFromL0Flag    ()                              { return  m_colFromL0Flag;              }
    12991300  UInt      getColRefIdx        ()                              { return  m_colRefIdx;                  }
    13001301  Void      checkColRefIdx      (UInt curSliceIdx, TComPic* pic);
     1302  Bool      getIsUsedAsLongTerm (Int i, Int j)                  { return m_bIsUsedAsLongTerm[i][j]; }
    13011303  Bool      getCheckLDC     ()                                  { return m_bCheckLDC; }
    13021304  Bool      getMvdL1ZeroFlag ()                                  { return m_bLMvdL1Zero;    }
    13031305  Int       getNumRpsCurrTempList();