﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
297	some TMVP code that can be cleaned up	LGE_VCC		"This ticket is reporting that some TMVP code in VTM can be cleaned up without change of performance.  (It’s not a bug.)
 
The following piece of TMVP code appeared four times in VTM5.0 (in `getInterMergeCandidates`, `fillMvpCand`, `fillAffineMvpCand`, `getAffineMergeCand`). 
The four `if/else` branches below can be reduced to only one `if` statement and get identical result.

{{{
#!C++
        Position posInCtu( posRB.x & pcv.maxCUWidthMask, posRB.y & pcv.maxCUHeightMask );

        if( ( posInCtu.x + 4 < pcv.maxCUWidth ) &&           / / is not at the last column of CTU
            ( posInCtu.y + 4 < pcv.maxCUHeight ) )           / / is not at the last row    of CTU
        {
          posC0 = posRB.offset( 4, 4 );
          C0Avail = true;
        }
        else if( posInCtu.x + 4 < pcv.maxCUWidth )           / / is not at the last column of CTU But is last row of CTU
        {
          posC0 = posRB.offset( 4, 4 );
          / / in the reference the CTU address is not set - thus probably resulting in no using this C0 possibility
        }
        else if( posInCtu.y + 4 < pcv.maxCUHeight )          / / is not at the last row of CTU But is last column of CTU
        {
          posC0 = posRB.offset( 4, 4 );
          C0Avail = true;
        }
        else / / is the right bottom corner of CTU
        {
          posC0 = posRB.offset( 4, 4 );
          / / same as for last column but not last row
        }
}}}

In the above code, the 4 branches and the resulting C0Avail are as follows:

{{{
     posInCtu.x+4<pcv.maxCUWidth      posInCtu.y+4<pcv.maxCUHeight     C0Avail
(1)  true                             true                             true
(2)  true                             false                            false
(3)  false                            true                             true
(4)  false                            false                            false
}}}

As can be seen from the combinations, given `posInCtu.y` , the true/false branches with `posInCtu.x` can be merged together, so the check on `posInCtu.x` is unnecessary, and above logic is identical to 
 
{{{
#!C++
      int posYInCtu = posRB.y & pcv.maxCUHeightMask;
      if (posYInCtu + 4 < pcv.maxCUHeight)
      {
        posC0 = posRB.offset(4, 4);
        C0Avail = true;
      }
}}}

I already tested this simplification, and got identical results on the top of VTM5.0.

In addition, TMVP code  appeared many times in VTM. It would be desirable to put it into a function. 

Best.

Jane"	enhancement	closed	minor		VTM	VTM-5.0	fixed		ksuehring XiangLi fbossen jvet@…
