Error accumulator stats bug.
The error accumulator stats values cpi->prediction_error and cpi->intra_error were being populated with rd values not distortion values. These are only "currently" used in a limited way for RT compress key frame detection. Change-Id: I2702ba1cab6e49ab8dc096ba75b6b34ab3573021
This commit is contained in:
@@ -1147,7 +1147,7 @@ static void sum_intra_stats(VP8_COMP *cpi, MACROBLOCK *x)
|
|||||||
}
|
}
|
||||||
int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
||||||
{
|
{
|
||||||
int Error4x4, Error16x16, error_uv;
|
int Error4x4, Error16x16;
|
||||||
int rate4x4, rate16x16, rateuv;
|
int rate4x4, rate16x16, rateuv;
|
||||||
int dist4x4, dist16x16, distuv;
|
int dist4x4, dist16x16, distuv;
|
||||||
int rate = 0;
|
int rate = 0;
|
||||||
@@ -1160,7 +1160,7 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
|||||||
#if !(CONFIG_REALTIME_ONLY)
|
#if !(CONFIG_REALTIME_ONLY)
|
||||||
if (cpi->sf.RD && cpi->compressor_speed != 2)
|
if (cpi->sf.RD && cpi->compressor_speed != 2)
|
||||||
{
|
{
|
||||||
error_uv = vp8_rd_pick_intra_mbuv_mode(cpi, x, &rateuv, &rateuv_tokenonly, &distuv);
|
vp8_rd_pick_intra_mbuv_mode(cpi, x, &rateuv, &rateuv_tokenonly, &distuv);
|
||||||
rate += rateuv;
|
rate += rateuv;
|
||||||
|
|
||||||
Error16x16 = vp8_rd_pick_intra16x16mby_mode(cpi, x, &rate16x16, &rate16x16_tokenonly, &dist16x16);
|
Error16x16 = vp8_rd_pick_intra16x16mby_mode(cpi, x, &rate16x16, &rate16x16_tokenonly, &dist16x16);
|
||||||
@@ -1231,7 +1231,6 @@ int vp8cx_encode_inter_macroblock
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
MACROBLOCKD *const xd = &x->e_mbd;
|
MACROBLOCKD *const xd = &x->e_mbd;
|
||||||
int inter_error;
|
|
||||||
int intra_error = 0;
|
int intra_error = 0;
|
||||||
int rate;
|
int rate;
|
||||||
int distortion;
|
int distortion;
|
||||||
@@ -1258,7 +1257,7 @@ int vp8cx_encode_inter_macroblock
|
|||||||
* do not recalculate */
|
* do not recalculate */
|
||||||
cpi->zbin_mode_boost_enabled = 0;
|
cpi->zbin_mode_boost_enabled = 0;
|
||||||
}
|
}
|
||||||
inter_error = vp8_rd_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, &distortion, &intra_error);
|
vp8_rd_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, &distortion, &intra_error);
|
||||||
|
|
||||||
/* switch back to the regular quantizer for the encode */
|
/* switch back to the regular quantizer for the encode */
|
||||||
if (cpi->sf.improved_quant)
|
if (cpi->sf.improved_quant)
|
||||||
@@ -1272,10 +1271,9 @@ int vp8cx_encode_inter_macroblock
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
inter_error = vp8_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, &distortion, &intra_error);
|
vp8_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, &distortion, &intra_error);
|
||||||
|
|
||||||
|
cpi->prediction_error += distortion;
|
||||||
cpi->prediction_error += inter_error;
|
|
||||||
cpi->intra_error += intra_error;
|
cpi->intra_error += intra_error;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@@ -263,7 +263,7 @@ int vp8_pick_intra4x4mby_modes(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *mb, int
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vp8_pick_intra_mbuv_mode(MACROBLOCK *mb)
|
void vp8_pick_intra_mbuv_mode(MACROBLOCK *mb)
|
||||||
{
|
{
|
||||||
|
|
||||||
MACROBLOCKD *x = &mb->e_mbd;
|
MACROBLOCKD *x = &mb->e_mbd;
|
||||||
@@ -408,11 +408,10 @@ int vp8_pick_intra_mbuv_mode(MACROBLOCK *mb)
|
|||||||
|
|
||||||
|
|
||||||
mb->e_mbd.mode_info_context->mbmi.uv_mode = best_mode;
|
mb->e_mbd.mode_info_context->mbmi.uv_mode = best_mode;
|
||||||
return best_error;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra)
|
void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra)
|
||||||
{
|
{
|
||||||
BLOCK *b = &x->block[0];
|
BLOCK *b = &x->block[0];
|
||||||
BLOCKD *d = &x->e_mbd.block[0];
|
BLOCKD *d = &x->e_mbd.block[0];
|
||||||
@@ -504,7 +503,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
|||||||
|
|
||||||
cpi->mbs_tested_so_far++; // Count of the number of MBs tested so far this frame
|
cpi->mbs_tested_so_far++; // Count of the number of MBs tested so far this frame
|
||||||
|
|
||||||
*returnintra = best_intra_rd;
|
*returnintra = INT_MAX;
|
||||||
x->skip = 0;
|
x->skip = 0;
|
||||||
|
|
||||||
ref_frame_cost[INTRA_FRAME] = vp8_cost_zero(cpi->prob_intra_coded);
|
ref_frame_cost[INTRA_FRAME] = vp8_cost_zero(cpi->prob_intra_coded);
|
||||||
@@ -649,7 +648,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
|||||||
if (this_rd < best_intra_rd)
|
if (this_rd < best_intra_rd)
|
||||||
{
|
{
|
||||||
best_intra_rd = this_rd;
|
best_intra_rd = this_rd;
|
||||||
*returnintra = best_intra_rd ;
|
*returnintra = distortion2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -673,9 +672,8 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
|||||||
if (this_rd < best_intra_rd)
|
if (this_rd < best_intra_rd)
|
||||||
{
|
{
|
||||||
best_intra_rd = this_rd;
|
best_intra_rd = this_rd;
|
||||||
*returnintra = best_intra_rd ;
|
*returnintra = distortion2;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NEWMV:
|
case NEWMV:
|
||||||
@@ -934,8 +932,6 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
|||||||
}
|
}
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.mv.as_int = 0;
|
x->e_mbd.mode_info_context->mbmi.mv.as_int = 0;
|
||||||
|
|
||||||
return best_rd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -955,6 +951,4 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
|||||||
}
|
}
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.mv.as_mv = x->e_mbd.block[15].bmi.mv.as_mv;
|
x->e_mbd.mode_info_context->mbmi.mv.as_mv = x->e_mbd.block[15].bmi.mv.as_mv;
|
||||||
|
|
||||||
return best_rd;
|
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,6 @@
|
|||||||
|
|
||||||
#define RD_ESTIMATE(RM,DM,R,D) ( ((128+(R)*(RM)) >> 8) + (DM)*(D) )
|
#define RD_ESTIMATE(RM,DM,R,D) ( ((128+(R)*(RM)) >> 8) + (DM)*(D) )
|
||||||
extern int vp8_pick_intra4x4mby_modes(const VP8_ENCODER_RTCD *, MACROBLOCK *mb, int *Rate, int *Distortion);
|
extern int vp8_pick_intra4x4mby_modes(const VP8_ENCODER_RTCD *, MACROBLOCK *mb, int *Rate, int *Distortion);
|
||||||
extern int vp8_pick_intra_mbuv_mode(MACROBLOCK *mb);
|
extern void vp8_pick_intra_mbuv_mode(MACROBLOCK *mb);
|
||||||
extern int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra);
|
extern void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -803,7 +803,7 @@ static int vp8_rd_inter_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *distort
|
|||||||
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
||||||
}
|
}
|
||||||
|
|
||||||
int vp8_rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *rate_tokenonly, int *distortion)
|
void vp8_rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *rate_tokenonly, int *distortion)
|
||||||
{
|
{
|
||||||
MB_PREDICTION_MODE mode;
|
MB_PREDICTION_MODE mode;
|
||||||
MB_PREDICTION_MODE UNINITIALIZED_IS_SAFE(mode_selected);
|
MB_PREDICTION_MODE UNINITIALIZED_IS_SAFE(mode_selected);
|
||||||
@@ -846,7 +846,6 @@ int vp8_rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *ra
|
|||||||
*distortion = d;
|
*distortion = d;
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.uv_mode = mode_selected;
|
x->e_mbd.mode_info_context->mbmi.uv_mode = mode_selected;
|
||||||
return best_rd;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1722,7 +1721,7 @@ void vp8_cal_sad(VP8_COMP *cpi, MACROBLOCKD *xd, MACROBLOCK *x, int recon_yoffse
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !(CONFIG_REALTIME_ONLY)
|
#if !(CONFIG_REALTIME_ONLY)
|
||||||
int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra)
|
void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra)
|
||||||
{
|
{
|
||||||
BLOCK *b = &x->block[0];
|
BLOCK *b = &x->block[0];
|
||||||
BLOCKD *d = &x->e_mbd.block[0];
|
BLOCKD *d = &x->e_mbd.block[0];
|
||||||
@@ -1741,7 +1740,8 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
|||||||
int mdcounts[4];
|
int mdcounts[4];
|
||||||
int rate;
|
int rate;
|
||||||
int distortion;
|
int distortion;
|
||||||
int best_rd = INT_MAX; // 1 << 30;
|
int best_rd = INT_MAX;
|
||||||
|
int best_intra_rd = INT_MAX;
|
||||||
int ref_frame_cost[MAX_REF_FRAMES];
|
int ref_frame_cost[MAX_REF_FRAMES];
|
||||||
int rate2, distortion2;
|
int rate2, distortion2;
|
||||||
int uv_intra_rate, uv_intra_distortion, uv_intra_rate_tokenonly;
|
int uv_intra_rate, uv_intra_distortion, uv_intra_rate_tokenonly;
|
||||||
@@ -2358,9 +2358,12 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
|||||||
//all_rates[mode_index] = rate2;
|
//all_rates[mode_index] = rate2;
|
||||||
//all_dist[mode_index] = distortion2;
|
//all_dist[mode_index] = distortion2;
|
||||||
|
|
||||||
if ((x->e_mbd.mode_info_context->mbmi.ref_frame == INTRA_FRAME) && (this_rd < *returnintra))
|
// Keep record of best intra distortion
|
||||||
|
if ((x->e_mbd.mode_info_context->mbmi.ref_frame == INTRA_FRAME) &&
|
||||||
|
(this_rd < best_intra_rd) )
|
||||||
{
|
{
|
||||||
*returnintra = this_rd ;
|
best_intra_rd = this_rd;
|
||||||
|
*returnintra = distortion2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Did this mode help.. i.i is it the new best mode
|
// Did this mode help.. i.i is it the new best mode
|
||||||
@@ -2476,8 +2479,6 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.mv.as_int = 0;
|
x->e_mbd.mode_info_context->mbmi.mv.as_int = 0;
|
||||||
|
|
||||||
return best_rd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2500,7 +2501,5 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.mv.as_mv = x->e_mbd.block[15].bmi.mv.as_mv;
|
x->e_mbd.mode_info_context->mbmi.mv.as_mv = x->e_mbd.block[15].bmi.mv.as_mv;
|
||||||
|
|
||||||
return best_rd;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
#ifndef __INC_RDOPT_H
|
#ifndef __INC_RDOPT_H
|
||||||
#define __INC_RDOPT_H
|
#define __INC_RDOPT_H
|
||||||
void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue);
|
extern void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue);
|
||||||
int vp8_rd_pick_intra4x4mby_modes(VP8_COMP *cpi, MACROBLOCK *mb, int *rate, int *rate_to, int *distortion, int best_rd);
|
extern int vp8_rd_pick_intra4x4mby_modes(VP8_COMP *cpi, MACROBLOCK *mb, int *rate, int *rate_to, int *distortion, int best_rd);
|
||||||
int vp8_rd_pick_intra16x16mby_mode(VP8_COMP *cpi, MACROBLOCK *x, int *returnrate, int *rate_to, int *returndistortion);
|
extern int vp8_rd_pick_intra16x16mby_mode(VP8_COMP *cpi, MACROBLOCK *x, int *returnrate, int *rate_to, int *returndistortion);
|
||||||
int vp8_rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *rate_to, int *distortion);
|
extern void vp8_rd_pick_intra_mbuv_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *rate_to, int *distortion);
|
||||||
extern int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra);
|
extern void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset, int *returnrate, int *returndistortion, int *returnintra);
|
||||||
|
|
||||||
extern void vp8_mv_pred
|
extern void vp8_mv_pred
|
||||||
(
|
(
|
||||||
|
Reference in New Issue
Block a user