summaryrefslogtreecommitdiff
path: root/vp8/encoder/encodeintra.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@google.com>2012-10-10 17:18:22 -0700
committerRonald S. Bultje <rbultje@google.com>2012-10-11 09:26:00 -0700
commitf39b0f192fed13cc788f76877dd2a6495cfe8dd4 (patch)
tree9a548c6d0f23ef74553130669fda64b515d4fca1 /vp8/encoder/encodeintra.c
parenta7333b0a5b9f9d435bba7b1dce72632ae70c0330 (diff)
downloadlibvpx-f39b0f192fed13cc788f76877dd2a6495cfe8dd4.tar
libvpx-f39b0f192fed13cc788f76877dd2a6495cfe8dd4.tar.gz
libvpx-f39b0f192fed13cc788f76877dd2a6495cfe8dd4.tar.bz2
libvpx-f39b0f192fed13cc788f76877dd2a6495cfe8dd4.zip
Use transform-size selection for i8x8_pred also.
Change-Id: Iecb282fc89f9b5145ef31c5eda294ad42bc32a5d
Diffstat (limited to 'vp8/encoder/encodeintra.c')
-rw-r--r--vp8/encoder/encodeintra.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c
index eee8efdd2..323df005b 100644
--- a/vp8/encoder/encodeintra.c
+++ b/vp8/encoder/encodeintra.c
@@ -238,7 +238,8 @@ void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) {
void vp8_encode_intra8x8(const VP8_ENCODER_RTCD *rtcd,
MACROBLOCK *x, int ib) {
- BLOCKD *b = &x->e_mbd.block[ib];
+ MACROBLOCKD *xd = &x->e_mbd;
+ BLOCKD *b = &xd->block[ib];
BLOCK *be = &x->block[ib];
const int iblock[4] = {0, 1, 4, 5};
int i;
@@ -255,8 +256,7 @@ void vp8_encode_intra8x8(const VP8_ENCODER_RTCD *rtcd,
}
#endif
- {
- MACROBLOCKD *xd = &x->e_mbd;
+ if (x->e_mbd.mode_info_context->mbmi.txfm_size == TX_8X8) {
int idx = (ib & 0x02) ? (ib + 2) : ib;
// generate residual blocks
@@ -274,14 +274,23 @@ void vp8_encode_intra8x8(const VP8_ENCODER_RTCD *rtcd,
x->quantize_b_8x8(x->block + idx, xd->block + idx);
vp8_idct_idct8(xd->block[idx].dqcoeff, xd->block[ib].diff, 32);
#endif
-
- // reconstruct submacroblock
+ } else {
for (i = 0; i < 4; i++) {
b = &xd->block[ib + iblock[i]];
- vp8_recon_b_c(b->predictor, b->diff, *(b->base_dst) + b->dst,
- b->dst_stride);
+ be = &x->block[ib + iblock[i]];
+ ENCODEMB_INVOKE(&rtcd->encodemb, subb)(be, b, 16);
+ x->vp8_short_fdct4x4(be->src_diff, be->coeff, 32);
+ x->quantize_b(be, b);
+ vp8_inverse_transform_b(IF_RTCD(&rtcd->common->idct), b, 32);
}
}
+
+ // reconstruct submacroblock
+ for (i = 0; i < 4; i++) {
+ b = &xd->block[ib + iblock[i]];
+ vp8_recon_b_c(b->predictor, b->diff, *(b->base_dst) + b->dst,
+ b->dst_stride);
+ }
}
void vp8_encode_intra8x8mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) {