使用二分法求解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;
}
转载请注明原文地址: https://ju.6miu.com/read-4659.html