mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-24 02:24:07 +00:00
Disable debug prints, fix multiple bugs in the calculation
This commit is contained in:
parent
408fd4ccb6
commit
d353f7dd1a
|
@ -81,9 +81,9 @@ static int encoder_state_config_frame_init(encoder_state_t * const state) {
|
||||||
state->frame->new_ratecontrol.intra_pic_bpp = 0.0;
|
state->frame->new_ratecontrol.intra_pic_bpp = 0.0;
|
||||||
state->frame->new_ratecontrol.intra_pic_distortion = 0.0;
|
state->frame->new_ratecontrol.intra_pic_distortion = 0.0;
|
||||||
|
|
||||||
state->frame->bpp_d = fopen("bits.txt", "wb");
|
// state->frame->bpp_d = fopen("bits.txt", "wb");
|
||||||
state->frame->c_d = fopen("c.txt", "wb");
|
// state->frame->c_d = fopen("c.txt", "wb");
|
||||||
state->frame->k_d = fopen("k.txt", "wb");
|
// state->frame->k_d = fopen("k.txt", "wb");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -98,9 +98,9 @@ static void encoder_state_config_frame_finalize(encoder_state_t * const state) {
|
||||||
FREE_POINTER(state->frame->new_ratecontrol.k_para[i]);
|
FREE_POINTER(state->frame->new_ratecontrol.k_para[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(state->frame->bpp_d);
|
// fclose(state->frame->bpp_d);
|
||||||
fclose(state->frame->c_d);
|
// fclose(state->frame->c_d);
|
||||||
fclose(state->frame->k_d);
|
// fclose(state->frame->k_d);
|
||||||
|
|
||||||
kvz_image_list_destroy(state->frame->ref);
|
kvz_image_list_destroy(state->frame->ref);
|
||||||
FREE_POINTER(state->frame->lcu_stats);
|
FREE_POINTER(state->frame->lcu_stats);
|
||||||
|
|
|
@ -390,23 +390,24 @@ void kvz_estimate_pic_lambda(encoder_state_t * const state) {
|
||||||
|
|
||||||
double alpha;
|
double alpha;
|
||||||
double beta;
|
double beta;
|
||||||
//fprintf(state->frame->bpp_d, "Frame %d\tbits:\t%f\n", state->frame->num, bits);
|
|
||||||
if(state->frame->poc == 0) {
|
if(state->frame->poc == 0) {
|
||||||
alpha = state->frame->rc_alpha;
|
alpha = state->frame->rc_alpha;
|
||||||
beta = state->frame->rc_beta;
|
beta = state->frame->rc_beta;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alpha = -state->frame->new_ratecontrol.pic_c_para[state->frame->gop_offset] *
|
alpha = -state->frame->new_ratecontrol.pic_c_para[layer] *
|
||||||
state->frame->new_ratecontrol.pic_k_para[state->frame->gop_offset];
|
state->frame->new_ratecontrol.pic_k_para[layer];
|
||||||
beta = state->frame->new_ratecontrol.pic_k_para[state->frame->gop_offset] - 1;
|
beta = state->frame->new_ratecontrol.pic_k_para[layer] - 1;
|
||||||
}
|
}
|
||||||
double bits = pic_allocate_bits(state);
|
double bits = pic_allocate_bits(state);
|
||||||
|
// fprintf(state->frame->bpp_d, "Frame %d\tbits:\t%f\n", state->frame->num, bits);
|
||||||
state->frame->cur_pic_target_bits = bits;
|
state->frame->cur_pic_target_bits = bits;
|
||||||
|
|
||||||
double est_lambda;
|
double est_lambda;
|
||||||
int32_t num_pixels = state->encoder_control->cfg.width * state->encoder_control->cfg.height;
|
int32_t num_pixels = state->encoder_control->cfg.width * state->encoder_control->cfg.height;
|
||||||
double bpp = bits / num_pixels;
|
double bpp = bits / num_pixels;
|
||||||
if (state->frame->is_irap) {
|
if (state->frame->is_irap) {
|
||||||
|
state->frame->i_bits_left = bits;
|
||||||
double temp = pow(state->frame->icost / num_pixels, BETA1);
|
double temp = pow(state->frame->icost / num_pixels, BETA1);
|
||||||
est_lambda = alpha / 256 * pow(temp/bpp, beta);
|
est_lambda = alpha / 256 * pow(temp/bpp, beta);
|
||||||
}
|
}
|
||||||
|
@ -416,20 +417,22 @@ void kvz_estimate_pic_lambda(encoder_state_t * const state) {
|
||||||
|
|
||||||
double temp_lambda;
|
double temp_lambda;
|
||||||
if ((temp_lambda = state->frame->new_ratecontrol.previous_lambdas[layer]) > 0.0) {
|
if ((temp_lambda = state->frame->new_ratecontrol.previous_lambdas[layer]) > 0.0) {
|
||||||
|
temp_lambda = CLIP(0.1, 10000.0, temp_lambda);
|
||||||
est_lambda = CLIP(temp_lambda * pow(2.0, -1), temp_lambda * 2, est_lambda);
|
est_lambda = CLIP(temp_lambda * pow(2.0, -1), temp_lambda * 2, est_lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((temp_lambda = state->frame->new_ratecontrol.previous_frame_lambda) > 0.0) {
|
if((temp_lambda = state->frame->new_ratecontrol.previous_frame_lambda) > 0.0) {
|
||||||
|
temp_lambda = CLIP(0.1, 2000.0, temp_lambda);
|
||||||
est_lambda = CLIP(temp_lambda * pow(2.0, -10.0 / 3.0), temp_lambda * pow(2.0, 10.0 / 3.0), est_lambda);
|
est_lambda = CLIP(temp_lambda * pow(2.0, -10.0 / 3.0), temp_lambda * pow(2.0, 10.0 / 3.0), est_lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
est_lambda = MAX(est_lambda, 0.1);
|
est_lambda = CLIP(0.1, 10000.0, est_lambda);
|
||||||
|
|
||||||
double total_weight = 0;
|
double total_weight = 0;
|
||||||
|
|
||||||
if(!state->frame->is_irap) {
|
if(!state->frame->is_irap) {
|
||||||
|
double best_lambda = est_lambda;
|
||||||
if(!state->encoder_control->cfg.frame_allocation) {
|
if(!state->encoder_control->cfg.frame_allocation) {
|
||||||
double best_lambda = 0.0;
|
|
||||||
temp_lambda = est_lambda;
|
temp_lambda = est_lambda;
|
||||||
double taylor_e3;
|
double taylor_e3;
|
||||||
int iteration_number = 0;
|
int iteration_number = 0;
|
||||||
|
@ -447,7 +450,7 @@ void kvz_estimate_pic_lambda(encoder_state_t * const state) {
|
||||||
}
|
}
|
||||||
while (fabs(taylor_e3 - bits) > 0.01 && iteration_number <= 11);
|
while (fabs(taylor_e3 - bits) > 0.01 && iteration_number <= 11);
|
||||||
}
|
}
|
||||||
total_weight = calculate_weights(state, layer, ctu_count, est_lambda);
|
total_weight = calculate_weights(state, layer, ctu_count, best_lambda);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < ctu_count; ++i) {
|
for (int i = 0; i < ctu_count; ++i) {
|
||||||
|
@ -663,8 +666,8 @@ static void update_pic_ck(encoder_state_t * const state, double bpp, double dist
|
||||||
state->frame->new_ratecontrol.pic_c_para[layer] = new_c;
|
state->frame->new_ratecontrol.pic_c_para[layer] = new_c;
|
||||||
state->frame->new_ratecontrol.pic_k_para[layer] = new_k;
|
state->frame->new_ratecontrol.pic_k_para[layer] = new_k;
|
||||||
}
|
}
|
||||||
//fprintf(state->frame->c_d, "Frame %d\tC:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", state->frame->num, new_c, bpp, distortion, lambda);
|
// fprintf(state->frame->c_d, "Frame %d\tC:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", state->frame->num, new_c, bpp, distortion, lambda);
|
||||||
//fprintf(state->frame->k_d, "Frame %d\tK:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", state->frame->num, new_k, bpp, distortion, lambda);
|
// fprintf(state->frame->k_d, "Frame %d\tK:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", state->frame->num, new_k, bpp, distortion, lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -707,8 +710,8 @@ static void update_ck(encoder_state_t * const state, int ctu_index, int layer)
|
||||||
state->frame->new_ratecontrol.k_para[layer][ctu_index] = new_k;
|
state->frame->new_ratecontrol.k_para[layer][ctu_index] = new_k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//fprintf(state->frame->c_d, "CTU %d\tC:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", ctu_index, new_c, bpp, distortion, lambda);
|
// fprintf(state->frame->c_d, "CTU %d\tC:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", ctu_index, new_c, bpp, distortion, lambda);
|
||||||
//fprintf(state->frame->k_d, "CTU %d\tK:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", ctu_index, new_k, bpp, distortion, lambda);
|
// fprintf(state->frame->k_d, "CTU %d\tK:\t%f\tbpp\t%f\tdistortion\t%f\tlambda\t%f\n", ctu_index, new_k, bpp, distortion, lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue