summaryrefslogtreecommitdiffstats
path: root/libvpx/vp9/common/vp9_pred_common.c
diff options
context:
space:
mode:
authorhkuang <hkuang@google.com>2013-08-06 11:07:19 -0700
committerHangyu Kuang <hkuang@google.com>2013-08-06 18:31:37 +0000
commitf3bed9137f66ef693bd406e43b17e9a1114f1e14 (patch)
treecd1bea0cd923c6d125cb5b3e7b3404d7c2f70208 /libvpx/vp9/common/vp9_pred_common.c
parenta8b927ab4f06e2fc0d16d9606b57672df9899ac1 (diff)
downloadandroid_external_libvpx-f3bed9137f66ef693bd406e43b17e9a1114f1e14.tar.gz
android_external_libvpx-f3bed9137f66ef693bd406e43b17e9a1114f1e14.tar.bz2
android_external_libvpx-f3bed9137f66ef693bd406e43b17e9a1114f1e14.zip
Roll latest libvpx into Android.
The latest libvpx just added initial multithread vp9 decoding support and more neon optimization. Checkout is from master branch(hash:33afddadb9af6569bd8296ef1d48d0511b651e9d). Change-Id: I54be2f48bc033c00876b6b1d0a3ff1eccb92a2fa
Diffstat (limited to 'libvpx/vp9/common/vp9_pred_common.c')
-rw-r--r--libvpx/vp9/common/vp9_pred_common.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/libvpx/vp9/common/vp9_pred_common.c b/libvpx/vp9/common/vp9_pred_common.c
index e8bcdea..795962a 100644
--- a/libvpx/vp9/common/vp9_pred_common.c
+++ b/libvpx/vp9/common/vp9_pred_common.c
@@ -55,34 +55,28 @@ unsigned char vp9_get_pred_context_switchable_interp(const MACROBLOCKD *xd) {
}
// Returns a context number for the given MB prediction signal
unsigned char vp9_get_pred_context_intra_inter(const MACROBLOCKD *xd) {
- int pred_context;
const MODE_INFO *const mi = xd->mode_info_context;
const MB_MODE_INFO *const above_mbmi = &mi[-xd->mode_info_stride].mbmi;
const MB_MODE_INFO *const left_mbmi = &mi[-1].mbmi;
const int left_in_image = xd->left_available && left_mbmi->mb_in_image;
const int above_in_image = xd->up_available && above_mbmi->mb_in_image;
- // Note:
- // The mode info data structure has a one element border above and to the
- // left of the entries correpsonding to real macroblocks.
- // The prediction flags in these dummy entries are initialised to 0.
- if (above_in_image && left_in_image) { // both edges available
- if (left_mbmi->ref_frame[0] == INTRA_FRAME &&
- above_mbmi->ref_frame[0] == INTRA_FRAME) { // intra/intra (3)
- pred_context = 3;
- } else { // intra/inter (1) or inter/inter (0)
- pred_context = left_mbmi->ref_frame[0] == INTRA_FRAME ||
- above_mbmi->ref_frame[0] == INTRA_FRAME;
- }
- } else if (above_in_image || left_in_image) { // one edge available
- const MB_MODE_INFO *edge_mbmi = above_in_image ? above_mbmi : left_mbmi;
+ const int left_intra = !is_inter_block(left_mbmi);
+ const int above_intra = !is_inter_block(above_mbmi);
- // inter: 0, intra: 2
- pred_context = 2 * (edge_mbmi->ref_frame[0] == INTRA_FRAME);
- } else {
- pred_context = 0;
- }
- assert(pred_context >= 0 && pred_context < INTRA_INTER_CONTEXTS);
- return pred_context;
+ // The mode info data structure has a one element border above and to the
+ // left of the entries corresponding to real macroblocks.
+ // The prediction flags in these dummy entries are initialized to 0.
+ // 0 - inter/inter, inter/--, --/inter, --/--
+ // 1 - intra/inter, inter/intra
+ // 2 - intra/--, --/intra
+ // 3 - intra/intra
+ if (above_in_image && left_in_image) // both edges available
+ return left_intra && above_intra ? 3
+ : left_intra || above_intra;
+ else if (above_in_image || left_in_image) // one edge available
+ return 2 * (above_in_image ? above_intra : left_intra);
+ else
+ return 0;
}
// Returns a context number for the given MB prediction signal
unsigned char vp9_get_pred_context_comp_inter_inter(const VP9_COMMON *cm,