Ticket #596: RDOQ-14-bit-overflow_ontopof2483.patch

File RDOQ-14-bit-overflow_ontopof2483.patch, 3.0 KB (added by pandrivon, 12 years ago)

14-bit overflow fix on top of HM-7.1-dev r2483

  • source/Lib/TLibCommon/CommonDef.h

     
    112112
    113113#define MAX_UINT                    0xFFFFFFFFU ///< max. value of unsigned 32-bit integer
    114114#define MAX_INT                     2147483647  ///< max. value of signed 32-bit integer
     115#define MAX_INT64                   0x7FFFFFFFFFFFFFFF  ///< max. value of signed 64-bit integer
    115116#define MAX_DOUBLE                  1.7e+308    ///< max. value of double-type value
    116117
    117118#define MIN_QP                      0
  • source/Lib/TLibCommon/TComTrQuant.cpp

     
    21642164
    21652165  if( pcCU->getSlice()->getPPS()->getSignHideFlag() && uiAbsSum>=2)
    21662166  {
    2167     Int rdFactor = (Int)((Double)(g_invQuantScales[m_cQP.rem()])*(Double)(g_invQuantScales[m_cQP.rem()])*(Double)(1<<(2*m_cQP.m_iPer))/m_dLambda/16/(Double)(1<<(2*g_uiBitIncrement)) + 0.5);
     2167    Int64 rdFactor = (Int64)((Double)(g_invQuantScales[m_cQP.rem()])*(Double)(g_invQuantScales[m_cQP.rem()])*(Double)(1<<(2*m_cQP.m_iPer))/m_dLambda/16/(Double)(1<<(2*g_uiBitIncrement)) + 0.5);
    21682168#if !FIXED_SBH_THRESHOLD
    21692169    Int tsig = pcCU->getSlice()->getPPS()->getTSIG() ;
    21702170#endif
     
    22132213        if( signbit!=(absSum&0x1) )  // hide but need tune
    22142214        {
    22152215          // calculate the cost
    2216           Int minCostInc = MAX_INT,  minPos =-1, finalChange=0, curCost=MAX_INT, curChange=0;
     2216          Int64 minCostInc = MAX_INT64, curCost=MAX_INT64;
     2217          Int minPos =-1, finalChange=0, curChange=0;
    22172218
    22182219          for( n = (lastCG==1?lastNZPosInCG:SCAN_SET_SIZE-1) ; n >= 0; --n )
    22192220          {
    22202221            UInt uiBlkPos   = scan[ n + subPos ];
    22212222            if(piDstCoeff[ uiBlkPos ] != 0 )
    22222223            {
    2223               Int costUp   = rdFactor * ( - deltaU[uiBlkPos] ) + rateIncUp[uiBlkPos] ;
    2224               Int costDown = rdFactor * (   deltaU[uiBlkPos] ) + rateIncDown[uiBlkPos]
     2224              Int64 costUp   = rdFactor * ( - deltaU[uiBlkPos] ) + rateIncUp[uiBlkPos] ;
     2225              Int64 costDown = rdFactor * (   deltaU[uiBlkPos] ) + rateIncDown[uiBlkPos]
    22252226                -   ( abs(piDstCoeff[uiBlkPos])==1?((1<<15)+sigRateDelta[uiBlkPos]):0 );
    22262227
    22272228              if(lastCG==1 && lastNZPosInCG==n && abs(piDstCoeff[uiBlkPos])==1)
     
    22392240                curChange = -1 ;
    22402241                if(n==firstNZPosInCG && abs(piDstCoeff[uiBlkPos])==1)
    22412242                {
    2242                   curCost = MAX_INT ;
     2243                  curCost = MAX_INT64 ;
    22432244                }
    22442245                else
    22452246                {
     
    22572258                UInt thissignbit = (plSrcCoeff[uiBlkPos]>=0?0:1);
    22582259                if(thissignbit != signbit )
    22592260                {
    2260                   curCost = MAX_INT;
     2261                  curCost = MAX_INT64;
    22612262                }
    22622263              }
    22632264            }