Opened 12 years ago Closed 12 years ago #798 closed defect (duplicate)algorithm of deciding block availability doesn't work well if in a dependent slice
Descriptionif ( (bEnforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || m_pcCUAbove->getSCUAddr()+uiAPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx))) || (bEnforceDependentSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || m_pcCUAbove->getSCUAddr()+uiAPartUnitIdx < m_pcPic->getCU( getAddr() )->getDependentSliceStartCU(uiCurrPartUnitIdx))) || (bEnforceTileRestriction &&(m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())))) ) { return NULL; }
The function TComDataCU::getPUAbove returns NULL when the slice of current LCU is dependent slice, the slice of above LCU is dependent/independent slice and the slice of above-right LCU is independet.
The start CU address of the slice(getSliceStartCU) is referred when deciding block availability as you can confirm in the following code.
In addition, it seems that #643 ticket and this problem are caused by same reason.
It need to be correct in the view of HM stabiliy testing as well as clearing mismatch with WD. Change History (3)comment:1 Changed 12 years ago by DefaultCC Plugin
comment:2 Changed 12 years ago by ksuehringcomment:3 Changed 12 years ago by ksuehring
Note: See
TracTickets for help on using
tickets. | This list contains all users that will be notified about changes made to this ticket. These roles will be notified: Reporter, Owner, Subscriber, Participant
|
bEnforceDependentSliceRestriction should have been named bEnforceEntropySliceRestriction. It should currently be used only for context derivation and if indeed entropy slices are enabled.