summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encodeintra.c
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2013-02-05 12:37:13 -0800
committerJingning Han <jingning@google.com>2013-02-07 10:07:46 -0800
commitd15e1da4940f813311035c3ed101a9c69f15b527 (patch)
tree7b544dbb891911381ccf1497e96267b55472a81a /vp9/encoder/vp9_encodeintra.c
parent29731308c4667de4fe4f02f92f0c2b29af86bbc1 (diff)
downloadlibvpx-d15e1da4940f813311035c3ed101a9c69f15b527.tar
libvpx-d15e1da4940f813311035c3ed101a9c69f15b527.tar.gz
libvpx-d15e1da4940f813311035c3ed101a9c69f15b527.tar.bz2
libvpx-d15e1da4940f813311035c3ed101a9c69f15b527.zip
Butterfly ADST based hybrid transform
Refactor the 8x8 inverse hybrid transform. It is now consistent with the new inverse DCT. Overall performance loss (due to the use of this variant ADST, and the rounding errors in the butterfly implementation) for std-hd is -0.02. Fixed BUILD warning. Devise a variant of the original ADST, which allows butterfly computation structure. This new transform has kernel of the form: sin((2k+1)*(2n+1) / (4N)). One of its butterfly structures using floating-point multiplications was reported in Z. Wang, "Fast algorithms for the discrete W transform and for the discrete Fourier transform", IEEE Trans. on ASSP, 1984. This patch includes the butterfly implementation of the inverse ADST/DCT hybrid transform of dimension 8x8. Change-Id: I3533cb715f749343a80b9087ce34b3e776d1581d
Diffstat (limited to 'vp9/encoder/vp9_encodeintra.c')
-rw-r--r--vp9/encoder/vp9_encodeintra.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encodeintra.c b/vp9/encoder/vp9_encodeintra.c
index eacc2cd28..fa7229714 100644
--- a/vp9/encoder/vp9_encodeintra.c
+++ b/vp9/encoder/vp9_encodeintra.c
@@ -152,8 +152,14 @@ void vp9_encode_intra8x8(MACROBLOCK *x, int ib) {
vp9_fht(be->src_diff, 32, (x->block + idx)->coeff,
tx_type, 8);
x->quantize_b_8x8(x->block + idx, xd->block + idx);
+
+#if CONFIG_INTHT
+ vp9_short_iht8x8(xd->block[idx].dqcoeff, xd->block[ib].diff,
+ tx_type, 32);
+#else
vp9_ihtllm(xd->block[idx].dqcoeff, xd->block[ib].diff, 32,
tx_type, 8, xd->block[idx].eob);
+#endif
} else {
x->vp9_short_fdct8x8(be->src_diff, (x->block + idx)->coeff, 32);
x->quantize_b_8x8(x->block + idx, xd->block + idx);