使用二分法求解GOP级别的lambda
Double TEncRCGOP::xSolveEqua( Double targetBpp, Double* equaCoeffA, Double* equaCoeffB, Int GOPSize )
{
Double solution = 100.0;
Double minNumber = 0.1;
Double maxNumber = 10000.0;
for ( Int i=0; i<g_RCIterationNum; i++ )
{
Double fx = 0.0;
for ( Int j=0; j<GOPSize; j++ )
{
fx += equaCoeffA[j] * pow( solution, equaCoeffB[j] );
}
if ( fabs( fx - targetBpp ) < 0.000001 )
{
break;
}
if ( fx > targetBpp )
{
minNumber = solution;
solution = ( solution + maxNumber ) / 2.0;
}
else
{
maxNumber = solution;
solution = ( solution + minNumber ) / 2.0;
}
}
solution = Clip3( 0.1, 10000.0, solution );
return solution;
}