[rc]: add init qp estimation

if outside doesn't set init qp value, mpp will estimate one init qp
according to resolution and bitrate.

Change-Id: If5415f6a3bfa3f2981ffd4eb044614bf9b035d2f
Signed-off-by: Jung Zhao <jung.zhao@rock-chips.com>
This commit is contained in:
Jung Zhao
2017-01-16 16:27:11 +08:00
committed by Herman Chen
parent cab7420bd7
commit 038a3bd665
4 changed files with 89 additions and 54 deletions

View File

@@ -55,3 +55,54 @@ RK_S32 mpp_log2_16bit(RK_U32 v)
return n;
}
RK_S32 axb_div_c(RK_S32 a, RK_S32 b, RK_S32 c)
{
RK_U32 left = 32;
RK_U32 right = 0;
RK_U32 shift;
RK_S32 sign = 1;
RK_S32 tmp;
if (a == 0 || b == 0)
return 0;
else if ((a * b / b) == a && c != 0)
return (a * b / c);
if (a < 0) {
sign = -1;
a = -a;
}
if (b < 0) {
sign *= -1;
b = -b;
}
if (c < 0) {
sign *= -1;
c = -c;
}
if (c == 0)
return 0x7FFFFFFF * sign;
if (b > a) {
tmp = b;
b = a;
a = tmp;
}
for (--left; (((RK_U32)a << left) >> left) != (RK_U32)a; --left)
;
left--;
while (((RK_U32)b >> right) > (RK_U32)c)
right++;
if (right > left) {
return 0x7FFFFFFF * sign;
} else {
shift = left - right;
return (RK_S32)((((RK_U32)a << shift) /
(RK_U32)c * (RK_U32)b) >> shift) * sign;
}
}