diff options
author | Scott LaVarnway <slavarnway@google.com> | 2011-10-19 10:24:48 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2011-10-19 10:24:48 -0700 |
commit | 63a77cbed9cfe3373defec6caca7b9d018f5b90e (patch) | |
tree | 50ae337b6d72875142b273924abf2dbfbef67e21 /vp8/encoder | |
parent | efa17efced83246a81a7081f76b1f015680301b5 (diff) | |
parent | ed9c66f5844cd6fd28c7f92e84a769170a56462e (diff) | |
download | libvpx-63a77cbed9cfe3373defec6caca7b9d018f5b90e.tar libvpx-63a77cbed9cfe3373defec6caca7b9d018f5b90e.tar.gz libvpx-63a77cbed9cfe3373defec6caca7b9d018f5b90e.tar.bz2 libvpx-63a77cbed9cfe3373defec6caca7b9d018f5b90e.zip |
Merge "Remove usage of predict buffer for decode"
Diffstat (limited to 'vp8/encoder')
-rw-r--r-- | vp8/encoder/encodeintra.c | 9 | ||||
-rw-r--r-- | vp8/encoder/encodemb.c | 69 | ||||
-rw-r--r-- | vp8/encoder/pickinter.c | 2 | ||||
-rw-r--r-- | vp8/encoder/rdopt.c | 6 |
4 files changed, 69 insertions, 17 deletions
diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c index 4a77c1ff3..74e40323d 100644 --- a/vp8/encoder/encodeintra.c +++ b/vp8/encoder/encodeintra.c @@ -64,7 +64,7 @@ void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *rtcd, BLOCK *be = &x->block[ib]; RECON_INVOKE(&rtcd->common->recon, intra4x4_predict) - (b, b->bmi.as_mode, b->predictor); + (b, b->bmi.as_mode, b->predictor, 16); ENCODEMB_INVOKE(&rtcd->encodemb, subb)(be, b, 16); @@ -72,9 +72,8 @@ void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *rtcd, x->quantize_b(be, b); - vp8_inverse_transform_b(IF_RTCD(&rtcd->common->idct), b, 32); + vp8_inverse_transform_b(IF_RTCD(&rtcd->common->idct), b, 16); - RECON_INVOKE(&rtcd->common->recon, recon)(b->predictor, b->diff, *(b->base_dst) + b->dst, b->dst_stride); } void vp8_encode_intra4x4mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *mb) @@ -106,9 +105,6 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd); - RECON_INVOKE(&rtcd->common->recon, recon_mby) - (IF_RTCD(&rtcd->common->recon), &x->e_mbd); - } void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) @@ -126,5 +122,4 @@ void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) vp8_inverse_transform_mbuv(IF_RTCD(&rtcd->common->idct), &x->e_mbd); - vp8_recon_intra_mbuv(IF_RTCD(&rtcd->common->recon), &x->e_mbd); } diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c index ff9e3e6ee..b3c7df502 100644 --- a/vp8/encoder/encodemb.c +++ b/vp8/encoder/encodemb.c @@ -577,9 +577,70 @@ void vp8_optimize_mbuv(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd) } } +static void recon_dcblock(MACROBLOCKD *x) +{ + BLOCKD *b = &x->block[24]; + int i; + + for (i = 0; i < 16; i++) + { + x->block[i].dqcoeff[0] = b->diff[i]; + } + +} + + +static void inverse_transform_mb(const vp8_idct_rtcd_vtable_t *rtcd, + MACROBLOCKD *x) +{ + int i; + + if (x->mode_info_context->mbmi.mode != B_PRED && + x->mode_info_context->mbmi.mode != SPLITMV) + { + /* do 2nd order transform on the dc block */ + + IDCT_INVOKE(rtcd, iwalsh16)(&x->block[24].dqcoeff[0], x->block[24].diff); + recon_dcblock(x); + } + + for (i = 0; i < 16; i++) + { + BLOCKD *b = &x->block[i]; + + if (b->eob > 1) + { + IDCT_INVOKE(rtcd, idct16)(b->dqcoeff, b->predictor, 16, + *(b->base_dst) + b->dst, b->dst_stride); + } + else + { + IDCT_INVOKE(rtcd, idct1_scalar_add)(b->dqcoeff[0], b->predictor, 16, + *(b->base_dst) + b->dst, b->dst_stride); + } + } + + + for (i = 16; i < 24; i++) + { + BLOCKD *b = &x->block[i]; + + if (b->eob > 1) + { + IDCT_INVOKE(rtcd, idct16)(b->dqcoeff, b->predictor, 8, + *(b->base_dst) + b->dst, b->dst_stride); + } + else + { + IDCT_INVOKE(rtcd, idct1_scalar_add)(b->dqcoeff[0], b->predictor, 8, + *(b->base_dst) + b->dst, b->dst_stride); + } + } + +} void vp8_encode_inter16x16(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) { - vp8_build_inter_predictors_mb(&x->e_mbd); + vp8_build_inter_predictors_mb_e(&x->e_mbd); vp8_subtract_mb(rtcd, x); @@ -590,10 +651,8 @@ void vp8_encode_inter16x16(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) if (x->optimize) optimize_mb(x, rtcd); - vp8_inverse_transform_mb(IF_RTCD(&rtcd->common->idct), &x->e_mbd); + inverse_transform_mb(IF_RTCD(&rtcd->common->idct), &x->e_mbd); - RECON_INVOKE(&rtcd->common->recon, recon_mb) - (IF_RTCD(&rtcd->common->recon), &x->e_mbd); } @@ -612,6 +671,4 @@ void vp8_encode_inter16x16y(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd); - RECON_INVOKE(&rtcd->common->recon, recon_mby) - (IF_RTCD(&rtcd->common->recon), &x->e_mbd); } diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index 4a8258170..62e644dea 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -157,7 +157,7 @@ static int pick_intra4x4block( rate = mode_costs[mode]; RECON_INVOKE(&rtcd->common->recon, intra4x4_predict) - (b, mode, b->predictor); + (b, mode, b->predictor, 16); distortion = get_prediction_error(be, b, &rtcd->variance); this_rd = RDCOST(x->rdmult, x->rddiv, rate, distortion); diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 124cfe564..fdb519c19 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -631,7 +631,7 @@ static int rd_pick_intra4x4block( rate = bmode_costs[mode]; RECON_INVOKE(&cpi->rtcd.common->recon, intra4x4_predict) - (b, mode, b->predictor); + (b, mode, b->predictor, 16); ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), subb)(be, b, 16); x->vp8_short_fdct4x4(be->src_diff, be->coeff, 32); x->quantize_b(be, b); @@ -660,8 +660,8 @@ static int rd_pick_intra4x4block( } b->bmi.as_mode = (B_PREDICTION_MODE)(*best_mode); - IDCT_INVOKE(IF_RTCD(&cpi->rtcd.common->idct), idct16)(best_dqcoeff, b->diff, 32); - RECON_INVOKE(IF_RTCD(&cpi->rtcd.common->recon), recon)(best_predictor, b->diff, *(b->base_dst) + b->dst, b->dst_stride); + IDCT_INVOKE(IF_RTCD(&cpi->rtcd.common->idct), idct16)(best_dqcoeff, + best_predictor, 16, *(b->base_dst) + b->dst, b->dst_stride); return best_rd; } |