|
@@ -447,20 +447,19 @@ static void copy_samples(FlacEncodeContext *s, int16_t *samples) |
|
|
|
|
|
|
|
|
#define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k))) |
|
|
#define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k))) |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0 |
|
|
|
|
|
*/ |
|
|
static int find_optimal_param(uint32_t sum, int n) |
|
|
static int find_optimal_param(uint32_t sum, int n) |
|
|
{ |
|
|
{ |
|
|
int k, k_opt; |
|
|
|
|
|
uint32_t nbits[MAX_RICE_PARAM+1]; |
|
|
|
|
|
|
|
|
|
|
|
k_opt = 0; |
|
|
|
|
|
nbits[0] = UINT32_MAX; |
|
|
|
|
|
for(k=0; k<=MAX_RICE_PARAM; k++) { |
|
|
|
|
|
nbits[k] = rice_encode_count(sum, n, k); |
|
|
|
|
|
if(nbits[k] < nbits[k_opt]) { |
|
|
|
|
|
k_opt = k; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return k_opt; |
|
|
|
|
|
|
|
|
int k; |
|
|
|
|
|
uint32_t sum2; |
|
|
|
|
|
|
|
|
|
|
|
if(sum <= n>>1) |
|
|
|
|
|
return 0; |
|
|
|
|
|
sum2 = sum-(n>>1); |
|
|
|
|
|
k = av_log2(n<256 ? FASTDIV(sum2,n) : sum2/n); |
|
|
|
|
|
return FFMIN(k, MAX_RICE_PARAM); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static uint32_t calc_optimal_rice_params(RiceContext *rc, int porder, |
|
|
static uint32_t calc_optimal_rice_params(RiceContext *rc, int porder, |
|
|