summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encodemb.c
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2013-12-02 18:44:08 -0800
committerJingning Han <jingning@google.com>2013-12-02 18:48:51 -0800
commitf01ad926d0b2b5c7f79f39f05168d6837cfd54a7 (patch)
treec310116bc67b001382816353143b19bbfe89e860 /vp9/encoder/vp9_encodemb.c
parent9f81a50c853c902f575dbff4f0e61db7ebfa12fa (diff)
downloadlibvpx-f01ad926d0b2b5c7f79f39f05168d6837cfd54a7.tar
libvpx-f01ad926d0b2b5c7f79f39f05168d6837cfd54a7.tar.gz
libvpx-f01ad926d0b2b5c7f79f39f05168d6837cfd54a7.tar.bz2
libvpx-f01ad926d0b2b5c7f79f39f05168d6837cfd54a7.zip
Fix intra prediction ref selection in skip_encode
This commit fixes the intra prediction reference source selection in the settings of skip_encode. Use original boundary pixels as prediction reference, when the inverse transform and reconstruction are skipped in the per block size rate-distortion optimization loop. Change-Id: I36081aa30aa46e203e0e6f4e8a420fd08269469a
Diffstat (limited to 'vp9/encoder/vp9_encodemb.c')
-rw-r--r--vp9/encoder/vp9_encodemb.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/vp9/encoder/vp9_encodemb.c b/vp9/encoder/vp9_encodemb.c
index 83f87b066..3691e7a7b 100644
--- a/vp9/encoder/vp9_encodemb.c
+++ b/vp9/encoder/vp9_encodemb.c
@@ -559,8 +559,9 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
block >>= 6;
vp9_predict_intra_block(xd, block, bwl, TX_32X32, mode,
- dst, pd->dst.stride, dst, pd->dst.stride);
-
+ x->skip_encode ? src : dst,
+ x->skip_encode ? p->src.stride : pd->dst.stride,
+ dst, pd->dst.stride);
if (!x->skip_recode) {
vp9_subtract_block(32, 32, src_diff, diff_stride,
src, p->src.stride, dst, pd->dst.stride);
@@ -582,7 +583,9 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
block >>= 4;
vp9_predict_intra_block(xd, block, bwl, TX_16X16, mode,
- dst, pd->dst.stride, dst, pd->dst.stride);
+ x->skip_encode ? src : dst,
+ x->skip_encode ? p->src.stride : pd->dst.stride,
+ dst, pd->dst.stride);
if (!x->skip_recode) {
vp9_subtract_block(16, 16, src_diff, diff_stride,
src, p->src.stride, dst, pd->dst.stride);
@@ -600,7 +603,9 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
block >>= 2;
vp9_predict_intra_block(xd, block, bwl, TX_8X8, mode,
- dst, pd->dst.stride, dst, pd->dst.stride);
+ x->skip_encode ? src : dst,
+ x->skip_encode ? p->src.stride : pd->dst.stride,
+ dst, pd->dst.stride);
if (!x->skip_recode) {
vp9_subtract_block(8, 8, src_diff, diff_stride,
src, p->src.stride, dst, pd->dst.stride);
@@ -621,7 +626,9 @@ void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize,
mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
vp9_predict_intra_block(xd, block, bwl, TX_4X4, mode,
- dst, pd->dst.stride, dst, pd->dst.stride);
+ x->skip_encode ? src : dst,
+ x->skip_encode ? p->src.stride : pd->dst.stride,
+ dst, pd->dst.stride);
if (!x->skip_recode) {
vp9_subtract_block(4, 4, src_diff, diff_stride,