From 3e345cd4d8760fc6343c5606cbf6d867f1c3f0e7 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Thu, 2 May 2013 07:54:18 -0700 Subject: [PATCH] Fix some more offset errors in sb8x8. Change-Id: I83677227f7610fdf2db9f15f87fecd4d8e072427 --- vp9/common/vp9_blockd.h | 8 +++++++- vp9/common/vp9_reconintra.c | 8 ++++---- vp9/encoder/vp9_encodeframe.c | 10 ++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index 4f07afc..f1c2b16 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -498,10 +498,16 @@ static INLINE void update_partition_context(MACROBLOCKD *xd, static INLINE int partition_plane_context(MACROBLOCKD *xd, BLOCK_SIZE_TYPE sb_type) { - int bsl = mi_width_log2(sb_type), bs = 1 << bsl; + int bsl = mi_width_log2(sb_type), bs; int above = 0, left = 0, i; int boffset = mi_width_log2(BLOCK_SIZE_SB64X64) - bsl; +#if CONFIG_SB8X8 + bs = 1 << (bsl - 1); +#else + bs = 1 << bsl; +#endif + assert(mi_width_log2(sb_type) == mi_height_log2(sb_type)); assert(bsl >= 0); assert(boffset >= 0); diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c index a0155d9..91e33ee 100644 --- a/vp9/common/vp9_reconintra.c +++ b/vp9/common/vp9_reconintra.c @@ -545,8 +545,8 @@ void vp9_build_interintra_predictors_sbuv(MACROBLOCKD *xd, void vp9_build_intra_predictors_sby_s(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize) { - const int bwl = mi_width_log2(bsize), bw = MI_SIZE << bwl; - const int bhl = mi_height_log2(bsize), bh = MI_SIZE << bhl; + const int bwl = b_width_log2(bsize), bw = 4 << bwl; + const int bhl = b_height_log2(bsize), bh = 4 << bhl; vp9_build_intra_predictors(xd->plane[0].dst.buf, xd->plane[0].dst.stride, xd->plane[0].dst.buf, xd->plane[0].dst.stride, @@ -558,8 +558,8 @@ void vp9_build_intra_predictors_sby_s(MACROBLOCKD *xd, void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize) { - const int bwl = mi_width_log2(bsize), bw = MI_UV_SIZE << bwl; - const int bhl = mi_height_log2(bsize), bh = MI_UV_SIZE << bhl; + const int bwl = b_width_log2(bsize), bw = 2 << bwl; + const int bhl = b_height_log2(bsize), bh = 2 << bhl; vp9_build_intra_predictors(xd->plane[1].dst.buf, xd->plane[1].dst.stride, xd->plane[1].dst.buf, xd->plane[1].dst.stride, diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 2a50a15..2586d44 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1071,8 +1071,8 @@ static void encode_sb_row(VP9_COMP *cpi, xd->b_index = k; // try 8x8 coding - pick_sb_modes(cpi, mi_row + y_idx_m + (k & 1), - mi_col + x_idx_m + (k >> 1), + pick_sb_modes(cpi, mi_row + y_idx_m + (k >> 1), + mi_col + x_idx_m + (k & 1), tp, &r, &d, BLOCK_SIZE_SB8X8, &x->sb8_context[xd->sb_index][xd->mb_index] [xd->b_index]); @@ -1082,7 +1082,8 @@ static void encode_sb_row(VP9_COMP *cpi, [xd->b_index], BLOCK_SIZE_SB8X8, 0); encode_superblock(cpi, tp, - 0, mi_row + y_idx_m, mi_col + x_idx_m, + 0, mi_row + y_idx_m + (k >> 1), + mi_col + x_idx_m + (k & 1), BLOCK_SIZE_SB8X8); } set_partition_seg_context(cpi, mi_row + y_idx_m, mi_col + x_idx_m); @@ -2430,7 +2431,8 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, vp9_subtract_sbuv(x, bsize); vp9_transform_sbuv_4x4(x, bsize); vp9_quantize_sbuv_4x4(x, bsize); - vp9_optimize_sbuv(cm, x, bsize); + if (x->optimize) + vp9_optimize_sbuv(cm, x, bsize); vp9_inverse_transform_sbuv_4x4(xd, bsize); vp9_recon_sbuv(xd, bsize); -- 2.7.4