diff options
author | Yunqing Wang <yunqingwang@google.com> | 2011-06-23 13:54:02 -0400 |
---|---|---|
committer | Yunqing Wang <yunqingwang@google.com> | 2011-06-23 13:54:02 -0400 |
commit | 0d87098e080707947378dc7b192a56503c12c6bf (patch) | |
tree | 0824ddefe9a55382100ced507ff21d4398a16687 /vp8/encoder/pickinter.c | |
parent | 109c20299c5845ecb383b7b4c8c8eaf63a44950b (diff) | |
download | libvpx-0d87098e080707947378dc7b192a56503c12c6bf.tar libvpx-0d87098e080707947378dc7b192a56503c12c6bf.tar.gz libvpx-0d87098e080707947378dc7b192a56503c12c6bf.tar.bz2 libvpx-0d87098e080707947378dc7b192a56503c12c6bf.zip |
Copy macroblock data to a buffer before encoding it
I got this idea from Pascal (Thanks). Before encoding a macroblock,
copy it to a 16x16 buffer, and then read source data from there
instead. This will help keep the source data in cache, and help
with the performance.
Change-Id: Id05f4cb601299150511d59dcba0ae62c49b5b757
Diffstat (limited to 'vp8/encoder/pickinter.c')
-rw-r--r-- | vp8/encoder/pickinter.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index b60d2419f..99d69f6af 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -610,7 +610,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, rate2 += rate; distortion2 = VARIANCE_INVOKE (&cpi->rtcd.variance, var16x16)( - x->src.y_buffer, x->src.y_stride, + *(b->base_src), b->src_stride, x->e_mbd.predictor, 16, &sse); this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2); @@ -635,7 +635,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) (&x->e_mbd); distortion2 = VARIANCE_INVOKE(&cpi->rtcd.variance, var16x16) - (x->src.y_buffer, x->src.y_stride, + (*(b->base_src), b->src_stride, x->e_mbd.predictor, 16, &sse); rate2 += x->mbmode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.mode]; this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2); @@ -904,6 +904,7 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_) MB_PREDICTION_MODE mode, best_mode = DC_PRED; int this_rd; unsigned int sse; + BLOCK *b = &x->block[0]; x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; @@ -915,7 +916,7 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_) RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) (&x->e_mbd); distortion = VARIANCE_INVOKE(&cpi->rtcd.variance, var16x16) - (x->src.y_buffer, x->src.y_stride, x->e_mbd.predictor, 16, &sse); + (*(b->base_src), b->src_stride, x->e_mbd.predictor, 16, &sse); rate = x->mbmode_cost[x->e_mbd.frame_type][mode]; this_rd = RDCOST(x->rdmult, x->rddiv, rate, distortion); |