Commit 459eed80 authored by Karsten Suehring's avatar Karsten Suehring

Merge branch 'M0471-Improve-Readability' into 'master'

M0471: Modifications to improve readability

See merge request !217
parents f7b1ff7d 880169f1
Pipeline #694 passed with stage
......@@ -438,6 +438,10 @@ void LoopFilter::xSetLoopfilterParam( const CodingUnit& cu )
unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const DeblockEdgeDir edgeDir, const Position& localPos ) const
{
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
// The boundary strength that is output by the function xGetBoundaryStrengthSingle is a multi component boundary strength that contains boundary strength for luma (bits 0 to 1), cb (bits 2 to 3) and cr (bits 4 to 5).
#endif
const Slice& sliceQ = *cu.slice;
const Position& cuPosLuma = cu.lumaPos();
......@@ -455,13 +459,7 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
if( ( MODE_INTRA == cuP.predMode ) || ( MODE_INTRA == cuQ.predMode ) )
{
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
// The boundary strength that is output by the function xGetBoundaryStrengthSingle is a temporary boundary strength that contains both info for luma and chroma, where specific chroma component information related to chroma component cbf also is included.
// In addition to filter a chroma component if P or Q is intra, a chroma component can also be filtered if P and Q has non-zero chroma component tu coefficents.
// Both luma and chroma can be filtered with a boundary strength of 2 when the temporary boundary strength is 16 (indicating intra)
// Luma can be filtered with a boundary strength of 1 if the temporary boundary strength is 8, 10, 12, 14 (indicating non-zero luma coeffs), or 1, 3, 5 or 7 (indicating motion difference)
// Chroma Cb component can be filtered with a boundary strength of 1 if the temporary boundary strength is 4,5,6,7,12 or 14 (indicating non-zero chroma Cb coeffs)
// Chroma Cr component can be filtered with a boundary strength of 1 if the temporary boundary strength is 2,3,6,7,10 or 14 (indicating non-zero chroma Cr coeffs)
return 16;
return (BsSet(2, COMPONENT_Y) + BsSet(2, COMPONENT_Cb) + BsSet(2, COMPONENT_Cr));
#else
return 2;
#endif
......@@ -478,19 +476,19 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
// Y
if (m_aapucBS[edgeDir][rasterIdx] && (TU::getCbf(tuQ, COMPONENT_Y) || TU::getCbf(tuP, COMPONENT_Y)))
{
tmpBs += 8;
tmpBs += BsSet(1, COMPONENT_Y);
}
// U
if (m_aapucBS[edgeDir][rasterIdx] && (TU::getCbf(tuQ, COMPONENT_Cb) || TU::getCbf(tuP, COMPONENT_Cb)))
{
tmpBs += 4;
tmpBs += BsSet(1, COMPONENT_Cb);
}
// V
if (m_aapucBS[edgeDir][rasterIdx] && (TU::getCbf(tuQ, COMPONENT_Cr) || TU::getCbf(tuP, COMPONENT_Cr)))
{
tmpBs += 2;
tmpBs += BsSet(1, COMPONENT_Cr);
}
if ((tmpBs >> 3) & 0x01)
if (BsGet(tmpBs, COMPONENT_Y) == 1)
{
return tmpBs;
}
......@@ -684,20 +682,7 @@ void LoopFilter::xEdgeFilterLuma(const CodingUnit& cu, const DeblockEdgeDir edge
uiBsAbsIdx = getRasterIdx( pos, pcv );
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
unsigned tmpBs = m_aapucBS[edgeDir][uiBsAbsIdx];
if ((tmpBs >> 4) & 0x01)
{
uiBs = 2;
}
else if (((tmpBs >> 3) & 0x01) || (tmpBs & 0x01))
{
uiBs = 1;
}
else
{
uiBs = 0;
}
uiBs = BsGet(m_aapucBS[edgeDir][uiBsAbsIdx], COMPONENT_Y);
#else
uiBs = m_aapucBS[edgeDir][uiBsAbsIdx];
#endif
......@@ -945,9 +930,10 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
unsigned uiNumParts = ( edgeDir == EDGE_VER ) ? lumaSize.height / pcv.minCUHeight : lumaSize.width / pcv.minCUWidth ;
int uiNumPelsLuma = pcv.minCUWidth;
unsigned uiBsAbsIdx;
unsigned ucBs;
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
bool dfChroma[2];
unsigned bS[2];
#else
unsigned ucBs;
#endif
Pel* piTmpSrcCb = piSrcCb;
......@@ -989,27 +975,15 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
unsigned tmpBs = m_aapucBS[edgeDir][uiBsAbsIdx];
if ((tmpBs >> 4) & 0x01)
{
ucBs = 2;
}
else if (((tmpBs >> 2) & 0x01) || ((tmpBs >> 1) & 0x01)) // cbf_cb or cbf_cr only
{
ucBs = 1;
}
else
{
ucBs = 0;
}
dfChroma[0] = ((((tmpBs >> 4) & 0x01) == 1) || (((tmpBs >> 2) & 0x01) == 1)); // cb
dfChroma[1] = ((((tmpBs >> 4) & 0x01) == 1) || (((tmpBs >> 1) & 0x01) == 1)); // cr
tmpBs = m_aapucBS[edgeDir][uiBsAbsIdx];
bS[0] = BsGet(tmpBs, COMPONENT_Cb);
bS[1] = BsGet(tmpBs, COMPONENT_Cr);
#else
ucBs = m_aapucBS[edgeDir][uiBsAbsIdx];
#endif
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
if (ucBs > 0)
if (bS[0] > 0 || bS[1] > 0)
#else
if (ucBs > 1)
#endif
......@@ -1061,13 +1035,11 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
largeBoundary = false;
}
if ((ucBs == 2) || (largeBoundary && (ucBs == 1)))
{
#endif
for( int chromaIdx = 0; chromaIdx < 2; chromaIdx++ )
{
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
if (dfChroma[chromaIdx])
if ((bS[chromaIdx] == 2) || (largeBoundary && (bS[chromaIdx] == 1)))
{
#endif
const ClpRng& clpRng( cu.cs->slice->clpRng( ComponentID( chromaIdx + 1 )) );
......@@ -1091,7 +1063,11 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
iQP = getScaledChromaQP(iQP, sps.getChromaFormatIdc());
}
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
const int iIndexTC = Clip3<int>(0, MAX_QP + DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET * (bS[chromaIdx] - 1) + (tcOffsetDiv2 << 1));
#else
const int iIndexTC = Clip3<int>( 0, MAX_QP + DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET*( ucBs - 1 ) + ( tcOffsetDiv2 << 1 ) );
#endif
const int iTc = sm_tcTable[iIndexTC] * iBitdepthScale;
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
......@@ -1139,9 +1115,6 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
}
#endif
}
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
}// if ((ucBs == 2) || (bLBs && (ucBs == 1)))
#endif
}
}
}
......@@ -1519,4 +1492,9 @@ inline int LoopFilter::xCalcDQ( Pel* piSrc, const int iOffset ) const
return abs( piSrc[0] - 2 * piSrc[iOffset] + piSrc[iOffset * 2] );
}
#if JVET_M0471_LONG_DEBLOCKING_FILTERS
inline unsigned LoopFilter::BsSet(unsigned val, const ComponentID compIdx) const { return (val << (compIdx << 1)); }
inline unsigned LoopFilter::BsGet(unsigned val, const ComponentID compIdx) const { return ((val >> (compIdx << 1)) & 3); }
#endif
//! \}
......@@ -92,6 +92,8 @@ private:
inline void xPelFilterLuma ( Pel* piSrc, const int iOffset, const int tc, const bool sw, const bool bPartPNoFilter, const bool bPartQNoFilter, const int iThrCut, const bool bFilterSecondP, const bool bFilterSecondQ, const ClpRng& clpRng, bool sidePisLarge = false, bool sideQisLarge = false, int maxFilterLengthP = 7, int maxFilterLengthQ = 7 ) const;
inline void xPelFilterChroma ( Pel* piSrc, const int iOffset, const int tc, const bool sw, const bool bPartPNoFilter, const bool bPartQNoFilter, const ClpRng& clpRng, const bool largeBoundary ) const;
inline bool xUseStrongFiltering ( Pel* piSrc, const int iOffset, const int d, const int beta, const int tc, bool sidePisLarge = false, bool sideQisLarge = false, int maxFilterLengthP = 7, int maxFilterLengthQ = 7 ) const;//move the computation outside the function
inline unsigned BsSet(unsigned val, const ComponentID compIdx) const;
inline unsigned BsGet(unsigned val, const ComponentID compIdx) const;
#else
inline void xPelFilterLuma ( Pel* piSrc, const int iOffset, const int tc, const bool sw, const bool bPartPNoFilter, const bool bPartQNoFilter, const int iThrCut, const bool bFilterSecondP, const bool bFilterSecondQ, const ClpRng& clpRng ) const;
inline void xPelFilterChroma ( Pel* piSrc, const int iOffset, const int tc, const bool bPartPNoFilter, const bool bPartQNoFilter, const ClpRng& clpRng ) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment