1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_onyxc_int.h" 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_entropymv.h" 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 146ac915abcdb404a00d927fe6308a47fcf09d9519hkuang// Integer pel reference mv threshold for use of high-precision 1/8 mv 15f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang#define COMPANDED_MVREF_THRESH 8 16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vpx_tree_index vp9_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = { 18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_JOINT_ZERO, 2, 19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_JOINT_HNZVZ, 4, 20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ 21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 22ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vpx_tree_index vp9_mv_class_tree[TREE_SIZE(MV_CLASSES)] = { 24ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_0, 2, 25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_1, 4, 26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 6, 8, 27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_2, -MV_CLASS_3, 28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 10, 12, 29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_4, -MV_CLASS_5, 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_6, 14, 31ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 16, 18, 32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_7, -MV_CLASS_8, 33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -MV_CLASS_9, -MV_CLASS_10, 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vpx_tree_index vp9_mv_class0_tree[TREE_SIZE(CLASS0_SIZE)] = { 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -0, -1, 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vpx_tree_index vp9_mv_fp_tree[TREE_SIZE(MV_FP_SIZE)] = { 41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -0, 2, 42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -1, 4, 43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -2, -3 44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 4691037db265ecdd914a26e056cf69207b4f50924ehkuangstatic const nmv_context default_nmv_context = { 47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang {32, 64, 96}, 486ac915abcdb404a00d927fe6308a47fcf09d9519hkuang { 496ac915abcdb404a00d927fe6308a47fcf09d9519hkuang { // Vertical component 506ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 128, // sign 516ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {224, 144, 192, 168, 192, 176, 192, 198, 198, 245}, // class 526ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {216}, // class0 536ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits 546ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {{128, 128, 64}, {96, 112, 64}}, // class0_fp 556ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {64, 96, 64}, // fp 566ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 160, // class0_hp bit 576ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 128, // hp 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang }, 596ac915abcdb404a00d927fe6308a47fcf09d9519hkuang { // Horizontal component 606ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 128, // sign 616ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {216, 128, 176, 160, 176, 176, 192, 198, 198, 208}, // class 626ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {208}, // class0 636ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits 646ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {{128, 128, 64}, {96, 112, 64}}, // class0_fp 656ac915abcdb404a00d927fe6308a47fcf09d9519hkuang {64, 96, 64}, // fp 666ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 160, // class0_hp bit 676ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 128, // hp 68ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang }, 70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 721184aebb761cbeac9124c37189a80a1a58f04b6bhkuangstatic const uint8_t log_in_base_2[] = { 731184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 741184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 751184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 761184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 771184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 781184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 791184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 801184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 811184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 821184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 831184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 841184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 851184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 861184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 871184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 881184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 891184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 901184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 911184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 921184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 931184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 941184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 951184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 961184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 971184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 981184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 991184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1001184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1011184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1021184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1031184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1041184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1051184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1061184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1071184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1081184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1091184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1101184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1111184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1121184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1131184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1141184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1151184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 1161184aebb761cbeac9124c37189a80a1a58f04b6bhkuang}; 1171184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 1186ac915abcdb404a00d927fe6308a47fcf09d9519hkuangstatic INLINE int mv_class_base(MV_CLASS_TYPE c) { 1196ac915abcdb404a00d927fe6308a47fcf09d9519hkuang return c ? CLASS0_SIZE << (c + 2) : 0; 1206ac915abcdb404a00d927fe6308a47fcf09d9519hkuang} 1216ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 122ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangMV_CLASS_TYPE vp9_get_mv_class(int z, int *offset) { 1236ac915abcdb404a00d927fe6308a47fcf09d9519hkuang const MV_CLASS_TYPE c = (z >= CLASS0_SIZE * 4096) ? 1246ac915abcdb404a00d927fe6308a47fcf09d9519hkuang MV_CLASS_10 : (MV_CLASS_TYPE)log_in_base_2[z >> 3]; 125ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if (offset) 126ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *offset = z - mv_class_base(c); 127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang return c; 128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 129ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 13091037db265ecdd914a26e056cf69207b4f50924ehkuangint vp9_use_mv_hp(const MV *ref) { 131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang return (abs(ref->row) >> 3) < COMPANDED_MVREF_THRESH && 132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang (abs(ref->col) >> 3) < COMPANDED_MVREF_THRESH; 133ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 134ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 13591037db265ecdd914a26e056cf69207b4f50924ehkuangstatic void inc_mv_component(int v, nmv_component_counts *comp_counts, 13691037db265ecdd914a26e056cf69207b4f50924ehkuang int incr, int usehp) { 137ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int s, z, c, o, d, e, f; 1385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang assert(v != 0); /* should not be zero */ 139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang s = v < 0; 14091037db265ecdd914a26e056cf69207b4f50924ehkuang comp_counts->sign[s] += incr; 141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang z = (s ? -v : v) - 1; /* magnitude - 1 */ 142ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 143ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang c = vp9_get_mv_class(z, &o); 14491037db265ecdd914a26e056cf69207b4f50924ehkuang comp_counts->classes[c] += incr; 145ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 146ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang d = (o >> 3); /* int mv data */ 147ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang f = (o >> 1) & 3; /* fractional pel mv data */ 148ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang e = (o & 1); /* high precision mv data */ 1491184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 150ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if (c == MV_CLASS_0) { 15191037db265ecdd914a26e056cf69207b4f50924ehkuang comp_counts->class0[d] += incr; 1521184aebb761cbeac9124c37189a80a1a58f04b6bhkuang comp_counts->class0_fp[d][f] += incr; 1531184aebb761cbeac9124c37189a80a1a58f04b6bhkuang comp_counts->class0_hp[e] += usehp * incr; 154ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } else { 155ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int i; 156ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int b = c + CLASS0_BITS - 1; // number of bits 157ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for (i = 0; i < b; ++i) 15891037db265ecdd914a26e056cf69207b4f50924ehkuang comp_counts->bits[i][((d >> i) & 1)] += incr; 15991037db265ecdd914a26e056cf69207b4f50924ehkuang comp_counts->fp[f] += incr; 1601184aebb761cbeac9124c37189a80a1a58f04b6bhkuang comp_counts->hp[e] += usehp * incr; 161ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 162ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 163ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid vp9_inc_mv(const MV *mv, nmv_context_counts *counts) { 1655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang if (counts != NULL) { 1665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const MV_JOINT_TYPE j = vp9_get_mv_joint(mv); 1675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang ++counts->joints[j]; 168ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang if (mv_joint_vertical(j)) { 1705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang inc_mv_component(mv->row, &counts->comps[0], 1, 1); 1715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 172ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang if (mv_joint_horizontal(j)) { 1745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang inc_mv_component(mv->col, &counts->comps[1], 1, 1); 1755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 1761184aebb761cbeac9124c37189a80a1a58f04b6bhkuang } 177ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 178ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 179f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuangvoid vp9_adapt_mv_probs(VP9_COMMON *cm, int allow_hp) { 180ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int i, j; 181ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian nmv_context *fc = &cm->fc->nmvc; 1835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const nmv_context *pre_fc = &cm->frame_contexts[cm->frame_context_idx].nmvc; 1845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const nmv_context_counts *counts = &cm->counts.mv; 18591037db265ecdd914a26e056cf69207b4f50924ehkuang 1867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_merge_probs(vp9_mv_joint_tree, pre_fc->joints, counts->joints, 1877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian fc->joints); 188ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 189ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for (i = 0; i < 2; ++i) { 1905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang nmv_component *comp = &fc->comps[i]; 1915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const nmv_component *pre_comp = &pre_fc->comps[i]; 1925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const nmv_component_counts *c = &counts->comps[i]; 1935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->sign = mode_mv_merge_probs(pre_comp->sign, c->sign); 1957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_merge_probs(vp9_mv_class_tree, pre_comp->classes, c->classes, 1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->classes); 1977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_merge_probs(vp9_mv_class0_tree, pre_comp->class0, c->class0, 1987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->class0); 19991037db265ecdd914a26e056cf69207b4f50924ehkuang 20091037db265ecdd914a26e056cf69207b4f50924ehkuang for (j = 0; j < MV_OFFSET_BITS; ++j) 2017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->bits[j] = mode_mv_merge_probs(pre_comp->bits[j], c->bits[j]); 20291037db265ecdd914a26e056cf69207b4f50924ehkuang 20391037db265ecdd914a26e056cf69207b4f50924ehkuang for (j = 0; j < CLASS0_SIZE; ++j) 2047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_merge_probs(vp9_mv_fp_tree, pre_comp->class0_fp[j], 2057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian c->class0_fp[j], comp->class0_fp[j]); 20691037db265ecdd914a26e056cf69207b4f50924ehkuang 2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_merge_probs(vp9_mv_fp_tree, pre_comp->fp, c->fp, comp->fp); 20891037db265ecdd914a26e056cf69207b4f50924ehkuang 209f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang if (allow_hp) { 2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->class0_hp = mode_mv_merge_probs(pre_comp->class0_hp, c->class0_hp); 2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian comp->hp = mode_mv_merge_probs(pre_comp->hp, c->hp); 212ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 213ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 214ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 215ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 216ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid vp9_init_mv_probs(VP9_COMMON *cm) { 2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian cm->fc->nmvc = default_nmv_context; 218ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 219