summaryrefslogtreecommitdiff
path: root/vp8/encoder
diff options
context:
space:
mode:
authorScott LaVarnway <slavarnway@google.com>2011-10-19 10:24:48 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2011-10-19 10:24:48 -0700
commit63a77cbed9cfe3373defec6caca7b9d018f5b90e (patch)
tree50ae337b6d72875142b273924abf2dbfbef67e21 /vp8/encoder
parentefa17efced83246a81a7081f76b1f015680301b5 (diff)
parented9c66f5844cd6fd28c7f92e84a769170a56462e (diff)
downloadlibvpx-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.c9
-rw-r--r--vp8/encoder/encodemb.c69
-rw-r--r--vp8/encoder/pickinter.c2
-rw-r--r--vp8/encoder/rdopt.c6
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;
}