summaryrefslogtreecommitdiff
path: root/vp8/encoder/pickinter.c
diff options
context:
space:
mode:
authorYunqing Wang <yunqingwang@google.com>2011-06-23 13:54:02 -0400
committerYunqing Wang <yunqingwang@google.com>2011-06-23 13:54:02 -0400
commit0d87098e080707947378dc7b192a56503c12c6bf (patch)
tree0824ddefe9a55382100ced507ff21d4398a16687 /vp8/encoder/pickinter.c
parent109c20299c5845ecb383b7b4c8c8eaf63a44950b (diff)
downloadlibvpx-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.c7
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);