summaryrefslogtreecommitdiff
path: root/vp8/encoder/rdopt.c
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2011-04-08 14:21:36 +0100
committerPaul Wilkins <paulwilkins@google.com>2011-04-08 14:21:36 +0100
commitde4e9e3b444b2796e5631d516a7a0bf11bdbaa07 (patch)
tree563e186501eb36a61ea8c5d3151bc707050d80b3 /vp8/encoder/rdopt.c
parent2de858b9fcdc1b8c0db265047c5bf387fe31de3a (diff)
downloadlibvpx-de4e9e3b444b2796e5631d516a7a0bf11bdbaa07.tar
libvpx-de4e9e3b444b2796e5631d516a7a0bf11bdbaa07.tar.gz
libvpx-de4e9e3b444b2796e5631d516a7a0bf11bdbaa07.tar.bz2
libvpx-de4e9e3b444b2796e5631d516a7a0bf11bdbaa07.zip
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
Diffstat (limited to 'vp8/encoder/rdopt.c')
-rw-r--r--vp8/encoder/rdopt.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 59d19e6fe..aa097b7f7 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -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);
}
-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 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;
x->e_mbd.mode_info_context->mbmi.uv_mode = mode_selected;
- return best_rd;
}
#endif
@@ -1722,7 +1721,7 @@ void vp8_cal_sad(VP8_COMP *cpi, MACROBLOCKD *xd, MACROBLOCK *x, int recon_yoffse
}
#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];
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 rate;
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 rate2, distortion2;
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_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
@@ -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;
-
- 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;
-
- return best_rd;
}
#endif