summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@google.com>2013-04-23 15:29:19 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-04-23 15:29:19 -0700
commit276a1106e6db3d880e9b009725df81eacc2b316b (patch)
tree24911ff2a7f1658def37e9fffbb0f0c612498945 /vp9/common
parenta21359cbead9a68ba3b2e15088c925824d620406 (diff)
parent5ba98ebcf15ab91f9c54370ab020f7d5e3a8d8d4 (diff)
downloadlibvpx-276a1106e6db3d880e9b009725df81eacc2b316b.tar
libvpx-276a1106e6db3d880e9b009725df81eacc2b316b.tar.gz
libvpx-276a1106e6db3d880e9b009725df81eacc2b316b.tar.bz2
libvpx-276a1106e6db3d880e9b009725df81eacc2b316b.zip
Merge changes I54acef34,I72d42971 into experimental
* changes: Make some sb_type comparisons independent of literal enum values. Make loopfilter aware of rectangular blocks.
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_loopfilter.c71
-rw-r--r--vp9/common/vp9_pred_common.c2
2 files changed, 37 insertions, 36 deletions
diff --git a/vp9/common/vp9_loopfilter.c b/vp9/common/vp9_loopfilter.c
index 4943e42af..8d8a8df92 100644
--- a/vp9/common/vp9_loopfilter.c
+++ b/vp9/common/vp9_loopfilter.c
@@ -281,66 +281,67 @@ static void lpf_sb32(VP9_COMMON *cm, const MODE_INFO *mode_info_context,
uint8_t *y_ptr, uint8_t *u_ptr, uint8_t *v_ptr,
int y_stride, int uv_stride,
int y_only, int dering) {
- BLOCK_SIZE_TYPE sb_type = mode_info_context->mbmi.sb_type;
- TX_SIZE tx_size = mode_info_context->mbmi.txfm_size;
- int do_left_v, do_above_h;
- int do_left_v_mbuv, do_above_h_mbuv;
- int mis = cm->mode_info_stride;
- const MODE_INFO *mi;
-
- // process 1st MB top-left
- mi = mode_info_context;
- do_left_v = (mb_col > 0);
- do_above_h = (mb_row > 0);
- do_left_v_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
+ BLOCK_SIZE_TYPE sb_type = mode_info_context->mbmi.sb_type;
+ const int wbl = b_width_log2(sb_type), hbl = b_height_log2(sb_type);
+ TX_SIZE tx_size = mode_info_context->mbmi.txfm_size;
+ int do_left_v, do_above_h;
+ int do_left_v_mbuv, do_above_h_mbuv;
+ int mis = cm->mode_info_stride;
+ const MODE_INFO *mi;
+
+ // process 1st MB top-left
+ mi = mode_info_context;
+ do_left_v = (mb_col > 0);
+ do_above_h = (mb_row > 0);
+ do_left_v_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
tx_size >= TX_32X32 && (mb_col & 2));
- do_above_h_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
+ do_above_h_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
tx_size >= TX_32X32 && (mb_row & 2));
- lpf_mb(cm, mi, do_left_v, do_above_h,
+ lpf_mb(cm, mi, do_left_v, do_above_h,
do_left_v_mbuv, do_above_h_mbuv,
y_ptr,
y_only? 0 : u_ptr,
y_only? 0 : v_ptr,
y_stride, uv_stride, dering);
- // process 2nd MB top-right
- mi = mode_info_context + 1;
- do_left_v = !(sb_type && (tx_size >= TX_32X32 ||
+ // process 2nd MB top-right
+ mi = mode_info_context + 1;
+ do_left_v = !(wbl >= 3 /* 32x16 or >=32x32 */ && (tx_size >= TX_32X32 ||
sb_mb_lf_skip(mode_info_context, mi)));
- do_above_h = (mb_row > 0);
- do_left_v_mbuv = do_left_v;
- do_above_h_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
+ do_above_h = (mb_row > 0);
+ do_left_v_mbuv = do_left_v;
+ do_above_h_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
tx_size >= TX_32X32 && (mb_row & 2));
- lpf_mb(cm, mi, do_left_v, do_above_h,
+ lpf_mb(cm, mi, do_left_v, do_above_h,
do_left_v_mbuv, do_above_h_mbuv,
y_ptr + 16,
y_only ? 0 : (u_ptr + 8),
y_only ? 0 : (v_ptr + 8),
y_stride, uv_stride, dering);
- // process 3rd MB bottom-left
- mi = mode_info_context + mis;
- do_left_v = (mb_col > 0);
- do_above_h =!(sb_type && (tx_size >= TX_32X32 ||
+ // process 3rd MB bottom-left
+ mi = mode_info_context + mis;
+ do_left_v = (mb_col > 0);
+ do_above_h = !(hbl >= 3 /* 16x32 or >=32x32 */ && (tx_size >= TX_32X32 ||
sb_mb_lf_skip(mode_info_context, mi)));
- do_left_v_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
+ do_left_v_mbuv = !(sb_type >= BLOCK_SIZE_SB64X64 &&
tx_size >= TX_32X32 && (mb_col & 2));
- do_above_h_mbuv = do_above_h;
- lpf_mb(cm, mi, do_left_v, do_above_h,
+ do_above_h_mbuv = do_above_h;
+ lpf_mb(cm, mi, do_left_v, do_above_h,
do_left_v_mbuv, do_above_h_mbuv,
y_ptr + 16 * y_stride,
y_only ? 0 : (u_ptr + 8 * uv_stride),
y_only ? 0 : (v_ptr + 8 * uv_stride),
y_stride, uv_stride, dering);
- // process 4th MB bottom right
- mi = mode_info_context + mis + 1;
- do_left_v = !(sb_type && (tx_size >= TX_32X32 ||
+ // process 4th MB bottom right
+ mi = mode_info_context + mis + 1;
+ do_left_v = !(wbl >= 3 /* 32x16 or >=32x32 */ && (tx_size >= TX_32X32 ||
sb_mb_lf_skip(mi - 1, mi)));
- do_above_h =!(sb_type && (tx_size >= TX_32X32 ||
+ do_above_h = !(hbl >= 3 /* 16x32 or >=32x32 */ && (tx_size >= TX_32X32 ||
sb_mb_lf_skip(mode_info_context + 1, mi)));
- do_left_v_mbuv = do_left_v;
- do_above_h_mbuv = do_above_h;
- lpf_mb(cm, mi, do_left_v, do_above_h,
+ do_left_v_mbuv = do_left_v;
+ do_above_h_mbuv = do_above_h;
+ lpf_mb(cm, mi, do_left_v, do_above_h,
do_left_v_mbuv, do_above_h_mbuv,
y_ptr + 16 * y_stride + 16,
y_only ? 0 : (u_ptr + 8 * uv_stride + 8),
diff --git a/vp9/common/vp9_pred_common.c b/vp9/common/vp9_pred_common.c
index e110cff44..581049169 100644
--- a/vp9/common/vp9_pred_common.c
+++ b/vp9/common/vp9_pred_common.c
@@ -230,7 +230,7 @@ void vp9_set_pred_flag(MACROBLOCKD *const xd,
int vp9_get_pred_mb_segid(VP9_COMMON *cm, BLOCK_SIZE_TYPE sb_type,
int mb_row, int mb_col) {
const int mb_index = mb_row * cm->mb_cols + mb_col;
- if (sb_type) {
+ if (sb_type > BLOCK_SIZE_MB16X16) {
const int bw = 1 << mb_width_log2(sb_type);
const int bh = 1 << mb_height_log2(sb_type);
const int ymbs = MIN(cm->mb_rows - mb_row, bh);