Commit 99df6bb6 authored by Paul Wilkins's avatar Paul Wilkins
Browse files

Further work on extended Q range.

Fixed bug in firspass.c call to vp8_initialize_rd_consts()

This was passing in vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)
 instead of (cm->base_qindex + cm->y1dc_delta_q).

It just so happens that for the value 26 used for cm->base_qindex in the
unextended Q case,  the two give similar results. However, when using
the extended Q range the two are very different.

Also added more stats output and partly disabled another broken feature.

Change-Id: Iddf6cf5ea8467c44b7c133f38e629f6ba6f2581e
parent 82733643
......@@ -102,8 +102,8 @@ int vp8_dc_uv_quant(int QIndex, int Delta)
QIndex = QIndex + Delta;
if (QIndex > 117)
QIndex = 117;
if (QIndex > 127)
QIndex = 127;
else if (QIndex < 0)
QIndex = 0;
......
......@@ -535,7 +535,7 @@ void vp8_first_pass(VP8_COMP *cpi)
//if ( 0 )
{
int flag[2] = {1, 1};
vp8_initialize_rd_consts(cpi, vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q));
vp8_initialize_rd_consts(cpi, cm->base_qindex + cm->y1dc_delta_q);
vpx_memcpy(cm->fc.mvc, vp8_default_mv_context, sizeof(vp8_default_mv_context));
vp8_build_component_cost_table(cpi->mb.mvcost, (const MV_CONTEXT *) cm->fc.mvc, flag);
}
......@@ -895,8 +895,8 @@ static double calc_correction_factor( double err_per_mb,
double error_term = err_per_mb / err_devisor;
double correction_factor;
// Adjustment based on Q to power term.
power_term = pt_low + (Q * 0.01);
// Adjustment based on actual quantizer to power term.
power_term = (vp8_convert_qindex_to_q(Q) * 0.01) + 0.36;
power_term = (power_term > pt_high) ? pt_high : power_term;
// Adjustments to error term
......@@ -973,6 +973,7 @@ static int estimate_max_q(VP8_COMP *cpi,
// Estimate of overhead bits per mb
// Correction to overhead bits for min allowed Q.
// PGW TODO.. This code is broken for the extended Q range
overhead_bits_per_mb = overhead_bits / num_mbs;
overhead_bits_per_mb *= pow( 0.98, (double)cpi->twopass.maxq_min_limit );
......@@ -1013,7 +1014,8 @@ static int estimate_max_q(VP8_COMP *cpi,
// Adjust maxq_min_limit and maxq_max_limit limits based on
// averaga q observed in clip for non kf/gf.arf frames
// Give average a chance to settle though.
if ( (cpi->ni_frames >
// PGW TODO.. This code is broken for the extended Q range
/*if ( (cpi->ni_frames >
((unsigned int)cpi->twopass.total_stats->count >> 8)) &&
(cpi->ni_frames > 150) )
{
......@@ -1021,7 +1023,7 @@ static int estimate_max_q(VP8_COMP *cpi,
? (cpi->ni_av_qi + 32) : cpi->worst_quality;
cpi->twopass.maxq_min_limit = ((cpi->ni_av_qi - 32) > cpi->best_quality)
? (cpi->ni_av_qi - 32) : cpi->best_quality;
}
}*/
return Q;
}
......
......@@ -4645,17 +4645,26 @@ static void encode_frame_to_data_rate
vp8_clear_system_state(); //__asm emms;
if (cpi->twopass.total_left_stats->coded_error != 0.0)
fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d %6d %6d"
"%6d %6d %6d %5d %5d %5d %8d %8.2f %10d %10.3f"
fprintf(f, "%10d %10d %10d %10d %10d %10d %10d"
"%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f"
"%6d %5d %5d %5d %8d %8.2f %10d %10.3f"
"%10.3f %8d\n",
cpi->common.current_video_frame, cpi->this_frame_target,
cpi->projected_frame_size,
(cpi->projected_frame_size - cpi->this_frame_target),
(int)cpi->total_target_vs_actual,
(cpi->oxcf.starting_buffer_level-cpi->bits_off_target),
(int)cpi->total_actual_bits, cm->base_qindex,
cpi->active_best_quality, cpi->active_worst_quality,
cpi->ni_av_qi, cpi->cq_target_quality,
(int)cpi->total_actual_bits,
vp8_convert_qindex_to_q(cm->base_qindex),
#if CONFIG_EXTEND_QRANGE
(double)vp8_dc_quant(cm->base_qindex,0)/4.0,
#else
(double)vp8_dc_quant(cm->base_qindex,0),
#endif
vp8_convert_qindex_to_q(cpi->active_best_quality),
vp8_convert_qindex_to_q(cpi->active_worst_quality),
vp8_convert_qindex_to_q(cpi->ni_av_qi),
vp8_convert_qindex_to_q(cpi->cq_target_quality),
cpi->zbin_over_quant,
//cpi->avg_frame_qindex, cpi->zbin_over_quant,
cm->refresh_golden_frame, cm->refresh_alt_ref_frame,
......@@ -4667,17 +4676,26 @@ static void encode_frame_to_data_rate
cpi->twopass.total_left_stats->coded_error,
cpi->tot_recode_hits);
else
fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d %6d %6d"
"%6d %6d %6d %5d %5d %5d %8d %8.2f %10d %10.3f"
fprintf(f, "%10d %10d %10d %10d %10d %10d %10d"
"%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f"
"%6d %5d %5d %5d %8d %8.2f %10d %10.3f"
"%8d\n",
cpi->common.current_video_frame,
cpi->this_frame_target, cpi->projected_frame_size,
(cpi->projected_frame_size - cpi->this_frame_target),
(int)cpi->total_target_vs_actual,
(cpi->oxcf.starting_buffer_level-cpi->bits_off_target),
(int)cpi->total_actual_bits, cm->base_qindex,
cpi->active_best_quality, cpi->active_worst_quality,
cpi->ni_av_qi, cpi->cq_target_quality,
(int)cpi->total_actual_bits,
vp8_convert_qindex_to_q(cm->base_qindex),
#if CONFIG_EXTEND_QRANGE
(double)vp8_dc_quant(cm->base_qindex,0)/4.0,
#else
(double)vp8_dc_quant(cm->base_qindex,0),
#endif
vp8_convert_qindex_to_q(cpi->active_best_quality),
vp8_convert_qindex_to_q(cpi->active_worst_quality),
vp8_convert_qindex_to_q(cpi->ni_av_qi),
vp8_convert_qindex_to_q(cpi->cq_target_quality),
cpi->zbin_over_quant,
//cpi->avg_frame_qindex, cpi->zbin_over_quant,
cm->refresh_golden_frame, cm->refresh_alt_ref_frame,
......
......@@ -255,8 +255,6 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int QIndex)
if (q < 8)
q = 8;
#if CONFIG_EXTEND_QRANGE
cpi->RDMULT *= 16;
#endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment