From 73987d140a961c6644261491bec023b5e3b074c1 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 10 Nov 2012 08:39:51 -0800 Subject: [PATCH] Remove 'thismb' data pointer when superblock experiment is on. This should prevent inconsistent results between identical encodes with the superblock experiment turned on. Change-Id: I41a005fae53f2eb59736cc70041185fb7d63cfca --- vp9/encoder/block.h | 2 ++ vp9/encoder/encodeframe.c | 21 +++++++++++++++++++++ vp9/encoder/firstpass.c | 2 ++ 3 files changed, 25 insertions(+) diff --git a/vp9/encoder/block.h b/vp9/encoder/block.h index 7c0099368..9f4d060cc 100644 --- a/vp9/encoder/block.h +++ b/vp9/encoder/block.h @@ -86,9 +86,11 @@ typedef struct { typedef struct macroblock { DECLARE_ALIGNED(16, short, src_diff[400]); // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y DECLARE_ALIGNED(16, short, coeff[400]); // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y +#if !CONFIG_SUPERBLOCKS DECLARE_ALIGNED(16, unsigned char, thismb[256]); // 16x16 Y unsigned char *thismb_ptr; +#endif // 16 Y blocks, 4 U blocks, 4 V blocks, // 1 DC 2nd order block each with 16 entries BLOCK block[25]; diff --git a/vp9/encoder/encodeframe.c b/vp9/encoder/encodeframe.c index 12e517a36..18ab2f0c1 100644 --- a/vp9/encoder/encodeframe.c +++ b/vp9/encoder/encodeframe.c @@ -294,8 +294,10 @@ static void build_activity_map(VP9_COMP *cpi) { xd->left_available = (mb_col != 0); recon_yoffset += 16; #endif +#if !CONFIG_SUPERBLOCKS // Copy current mb to a buffer vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16); +#endif // measure activity mb_activity = mb_activity_measure(cpi, x, mb_row, mb_col); @@ -575,8 +577,10 @@ static void pick_mb_modes(VP9_COMP *cpi, xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset; xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset; +#if !CONFIG_SUPERBLOCKS // Copy current MB to a work buffer vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16); +#endif x->rddiv = cpi->RDDIV; x->rdmult = cpi->RDMULT; @@ -953,8 +957,10 @@ static void encode_sb(VP9_COMP *cpi, xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset; xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset; +#if !CONFIG_SUPERBLOCKS // Copy current MB to a work buffer vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16); +#endif if (cpi->oxcf.tuning == VP8_TUNE_SSIM) vp9_activity_masking(cpi, x); @@ -1694,6 +1700,7 @@ void vp9_build_block_offsets(MACROBLOCK *x) { vp9_build_block_doffsets(&x->e_mbd); +#if !CONFIG_SUPERBLOCKS // y blocks x->thismb_ptr = &x->thismb[0]; for (br = 0; br < 4; br++) { @@ -1708,6 +1715,20 @@ void vp9_build_block_offsets(MACROBLOCK *x) { ++block; } } +#else + for (br = 0; br < 4; br++) { + for (bc = 0; bc < 4; bc++) { + BLOCK *this_block = &x->block[block]; + // this_block->base_src = &x->src.y_buffer; + // this_block->src_stride = x->src.y_stride; + // this_block->src = 4 * br * this_block->src_stride + 4 * bc; + this_block->base_src = &x->src.y_buffer; + this_block->src_stride = x->src.y_stride; + this_block->src = 4 * br * this_block->src_stride + 4 * bc; + ++block; + } + } +#endif // u blocks for (br = 0; br < 2; br++) { diff --git a/vp9/encoder/firstpass.c b/vp9/encoder/firstpass.c index efc9fb3e8..db7c4d771 100644 --- a/vp9/encoder/firstpass.c +++ b/vp9/encoder/firstpass.c @@ -521,8 +521,10 @@ void vp9_first_pass(VP9_COMP *cpi) { xd->dst.v_buffer = new_yv12->v_buffer + recon_uvoffset; xd->left_available = (mb_col != 0); +#if !CONFIG_SUPERBLOCKS // Copy current mb to a buffer vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16); +#endif // do intra 16x16 prediction this_error = vp9_encode_intra(cpi, x, use_dc_pred); -- 2.40.0