diff options
author | Jingning Han <jingning@google.com> | 2013-04-15 09:31:27 -0700 |
---|---|---|
committer | Jingning Han <jingning@google.com> | 2013-04-18 14:59:36 -0700 |
commit | 6f43ff5824e16a4c0bbbcc890c5e54e74755447f (patch) | |
tree | 013431a1072acc3510fa40e53b48feb3b8310264 /vp9/encoder/vp9_encodemb.c | |
parent | 38f6232118a7aebdcc062ae0a10e59a32b6fdef8 (diff) | |
download | libvpx-6f43ff5824e16a4c0bbbcc890c5e54e74755447f.tar libvpx-6f43ff5824e16a4c0bbbcc890c5e54e74755447f.tar.gz libvpx-6f43ff5824e16a4c0bbbcc890c5e54e74755447f.tar.bz2 libvpx-6f43ff5824e16a4c0bbbcc890c5e54e74755447f.zip |
Make the use of pred buffers consistent in MB/SB
Use in-place buffers (dst of MACROBLOCKD) for macroblock prediction.
This makes the macroblock buffer handling consistent with those of
superblock. Remove predictor buffer MACROBLOCKD.
Change-Id: Id1bcd898961097b1e6230c10f0130753a59fc6df
Diffstat (limited to 'vp9/encoder/vp9_encodemb.c')
-rw-r--r-- | vp9/encoder/vp9_encodemb.c | 45 |
1 files changed, 19 insertions, 26 deletions
diff --git a/vp9/encoder/vp9_encodemb.c b/vp9/encoder/vp9_encodemb.c index 6ecaaa509..e786532a1 100644 --- a/vp9/encoder/vp9_encodemb.c +++ b/vp9/encoder/vp9_encodemb.c @@ -23,8 +23,9 @@ void vp9_subtract_b_c(BLOCK *be, BLOCKD *bd, int pitch) { uint8_t *src_ptr = (*(be->base_src) + be->src); int16_t *diff_ptr = be->src_diff; - uint8_t *pred_ptr = bd->predictor; + uint8_t *pred_ptr = *(bd->base_dst) + bd->dst; int src_stride = be->src_stride; + int dst_stride = bd->dst_stride; int r, c; @@ -33,7 +34,7 @@ void vp9_subtract_b_c(BLOCK *be, BLOCKD *bd, int pitch) { diff_ptr[c] = src_ptr[c] - pred_ptr[c]; diff_ptr += pitch; - pred_ptr += pitch; + pred_ptr += dst_stride; src_ptr += src_stride; } } @@ -41,8 +42,9 @@ void vp9_subtract_b_c(BLOCK *be, BLOCKD *bd, int pitch) { void vp9_subtract_4b_c(BLOCK *be, BLOCKD *bd, int pitch) { uint8_t *src_ptr = (*(be->base_src) + be->src); int16_t *diff_ptr = be->src_diff; - uint8_t *pred_ptr = bd->predictor; + uint8_t *pred_ptr = *(bd->base_dst) + bd->dst; int src_stride = be->src_stride; + int dst_stride = bd->dst_stride; int r, c; for (r = 0; r < 8; r++) { @@ -50,7 +52,7 @@ void vp9_subtract_4b_c(BLOCK *be, BLOCKD *bd, int pitch) { diff_ptr[c] = src_ptr[c] - pred_ptr[c]; diff_ptr += pitch; - pred_ptr += pitch; + pred_ptr += dst_stride; src_ptr += src_stride; } } @@ -102,25 +104,15 @@ void vp9_subtract_sbuv_s_c(int16_t *diff, const uint8_t *usrc, } } -void vp9_subtract_mby_c(int16_t *diff, uint8_t *src, - uint8_t *pred, int stride) { - vp9_subtract_sby_s_c(diff, src, stride, pred, 16, BLOCK_SIZE_MB16X16); -} - -void vp9_subtract_mbuv_c(int16_t *diff, uint8_t *usrc, - uint8_t *vsrc, uint8_t *pred, int stride) { - uint8_t *upred = pred + 256; - uint8_t *vpred = pred + 320; - - vp9_subtract_sbuv_s_c(diff, usrc, vsrc, stride, upred, vpred, 8, - BLOCK_SIZE_MB16X16); -} - static void subtract_mb(MACROBLOCK *x) { - vp9_subtract_mby(x->src_diff, x->src.y_buffer, x->e_mbd.predictor, - x->src.y_stride); - vp9_subtract_mbuv(x->src_diff, x->src.u_buffer, x->src.v_buffer, - x->e_mbd.predictor, x->src.uv_stride); + MACROBLOCKD *xd = &x->e_mbd; + vp9_subtract_sby_s_c(x->src_diff, x->src.y_buffer, x->src.y_stride, + xd->dst.y_buffer, xd->dst.y_stride, + BLOCK_SIZE_MB16X16); + vp9_subtract_sbuv_s_c(x->src_diff, x->src.u_buffer, x->src.v_buffer, + x->src.uv_stride, + xd->dst.u_buffer, xd->dst.v_buffer, xd->dst.uv_stride, + BLOCK_SIZE_MB16X16); } void vp9_transform_sby_32x32(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) { @@ -920,11 +912,12 @@ void vp9_encode_inter16x16(VP9_COMMON *const cm, MACROBLOCK *x, /* this function is used by first pass only */ void vp9_encode_inter16x16y(MACROBLOCK *x, int mb_row, int mb_col) { MACROBLOCKD *xd = &x->e_mbd; - BLOCK *b = &x->block[0]; - - vp9_build_inter16x16_predictors_mby(xd, xd->predictor, 16, mb_row, mb_col); - vp9_subtract_mby(x->src_diff, *(b->base_src), xd->predictor, b->src_stride); + vp9_build_inter_predictors_sby(xd, xd->dst.y_buffer, xd->dst.y_stride, + mb_row, mb_col, BLOCK_SIZE_MB16X16); + vp9_subtract_sby_s_c(x->src_diff, x->src.y_buffer, x->src.y_stride, + xd->dst.y_buffer, xd->dst.y_stride, + BLOCK_SIZE_MB16X16); vp9_transform_sby_4x4(x, BLOCK_SIZE_MB16X16); vp9_quantize_sby_4x4(x, BLOCK_SIZE_MB16X16); |