summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2013-06-07 18:16:16 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-06-07 18:16:16 -0700
commitb7da6d0c5a8f07da0b816d4da378b755e74f8046 (patch)
treeceebb862c7b2b3d77c15ca2a2aa21221f1e983c0 /vp9/common
parent07a5777bded233ee9f017f9013d7ac27f98943b5 (diff)
parent78b8190cc71a7d4110aafde39e49a24cdb8168ea (diff)
downloadlibvpx-b7da6d0c5a8f07da0b816d4da378b755e74f8046.tar
libvpx-b7da6d0c5a8f07da0b816d4da378b755e74f8046.tar.gz
libvpx-b7da6d0c5a8f07da0b816d4da378b755e74f8046.tar.bz2
libvpx-b7da6d0c5a8f07da0b816d4da378b755e74f8046.zip
Merge "Handle partition type coding of boundary blocks" into experimental
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_alloccommon.c7
-rw-r--r--vp9/common/vp9_onyxc_int.h24
2 files changed, 28 insertions, 3 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index 496096373..10bf77667 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -74,7 +74,7 @@ static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) {
cm->mi_cols = aligned_width >> LOG2_MI_SIZE;
cm->mi_rows = aligned_height >> LOG2_MI_SIZE;
- cm->mode_info_stride = cm->mi_cols + 1;
+ cm->mode_info_stride = cm->mi_cols + 64 / MI_SIZE;
}
static void setup_mi(VP9_COMMON *cm) {
@@ -131,12 +131,13 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
set_mb_mi(oci, aligned_width, aligned_height);
// Allocation
- oci->mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1),
+ oci->mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 64 / MI_SIZE),
sizeof(MODE_INFO));
if (!oci->mip)
goto fail;
- oci->prev_mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1),
+ oci->prev_mip = vpx_calloc(oci->mode_info_stride *
+ (oci->mi_rows + 64 / MI_SIZE),
sizeof(MODE_INFO));
if (!oci->prev_mip)
goto fail;
diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h
index 791dbb948..d91483d31 100644
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -310,6 +310,30 @@ static INLINE void set_partition_seg_context(VP9_COMMON *cm,
xd->left_seg_context = cm->left_seg_context + (mi_row & MI_MASK);
}
+static int check_bsize_coverage(VP9_COMMON *cm, MACROBLOCKD *xd,
+ int mi_row, int mi_col,
+ BLOCK_SIZE_TYPE bsize) {
+ int bsl = mi_width_log2(bsize), bs = 1 << bsl;
+ int ms = bs / 2;
+
+ if ((mi_row + bs <= cm->mi_rows) && (mi_col + ms < cm->mi_cols))
+ return 0;
+ if ((mi_col + bs <= cm->mi_cols) && (mi_row + ms < cm->mi_rows))
+ return 0;
+
+ // frame width/height are multiples of 8, hence 8x8 block should always
+ // pass the above check
+ assert(bsize > BLOCK_SIZE_SB8X8);
+
+ // return the node index in the prob tree for binary coding
+ if ((mi_col + bs <= cm->mi_cols) && (mi_row + ms >= cm->mi_rows))
+ return 1;
+ if ((mi_row + bs <= cm->mi_rows) && (mi_col + ms >= cm->mi_cols))
+ return 2;
+
+ return -1;
+}
+
static void set_mi_row_col(VP9_COMMON *cm, MACROBLOCKD *xd,
int mi_row, int bh,
int mi_col, int bw) {