Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 1 | /* |
Yaowu Xu | 2ab7ff0 | 2016-09-02 12:04:54 -0700 | [diff] [blame] | 2 | * Copyright (c) 2016, Alliance for Open Media. All rights reserved |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 3 | * |
Yaowu Xu | 2ab7ff0 | 2016-09-02 12:04:54 -0700 | [diff] [blame] | 4 | * This source code is subject to the terms of the BSD 2 Clause License and |
| 5 | * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
| 6 | * was not distributed with this source code in the LICENSE file, you can |
| 7 | * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
| 8 | * Media Patent License 1.0 was not distributed with this source code in the |
| 9 | * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 10 | */ |
| 11 | |
| 12 | #include "av1/common/onyxc_int.h" |
| 13 | #include "av1/common/entropymv.h" |
| 14 | |
| 15 | // Integer pel reference mv threshold for use of high-precision 1/8 mv |
| 16 | #define COMPANDED_MVREF_THRESH 8 |
| 17 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 18 | const aom_tree_index av1_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 19 | -MV_JOINT_ZERO, 2, -MV_JOINT_HNZVZ, 4, -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ |
| 20 | }; |
| 21 | |
| 22 | /* clang-format off */ |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 23 | const aom_tree_index av1_mv_class_tree[TREE_SIZE(MV_CLASSES)] = { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 24 | -MV_CLASS_0, 2, |
| 25 | -MV_CLASS_1, 4, |
| 26 | 6, 8, |
| 27 | -MV_CLASS_2, -MV_CLASS_3, |
| 28 | 10, 12, |
| 29 | -MV_CLASS_4, -MV_CLASS_5, |
| 30 | -MV_CLASS_6, 14, |
| 31 | 16, 18, |
| 32 | -MV_CLASS_7, -MV_CLASS_8, |
| 33 | -MV_CLASS_9, -MV_CLASS_10, |
| 34 | }; |
| 35 | /* clang-format on */ |
| 36 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 37 | const aom_tree_index av1_mv_class0_tree[TREE_SIZE(CLASS0_SIZE)] = { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 38 | -0, -1, |
| 39 | }; |
| 40 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 41 | const aom_tree_index av1_mv_fp_tree[TREE_SIZE(MV_FP_SIZE)] = { -0, 2, -1, |
| 42 | 4, -2, -3 }; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 43 | |
| 44 | static const nmv_context default_nmv_context = { |
Nathan E. Egge | 5f7fd7a | 2016-09-08 11:22:03 -0400 | [diff] [blame] | 45 | { 32, 64, 96 }, // joints |
Timothy B. Terriberry | f6c807c | 2017-03-25 16:09:29 -0700 | [diff] [blame] | 46 | { AOM_ICDF(4096), AOM_ICDF(11264), AOM_ICDF(19328), AOM_ICDF(32768), |
| 47 | 0 }, // joint_cdf |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 48 | { { |
| 49 | // Vertical component |
| 50 | 128, // sign |
| 51 | { 224, 144, 192, 168, 192, 176, 192, 198, 198, 245 }, // class |
Timothy B. Terriberry | f6c807c | 2017-03-25 16:09:29 -0700 | [diff] [blame] | 52 | { AOM_ICDF(28672), AOM_ICDF(30976), AOM_ICDF(31858), AOM_ICDF(32320), |
| 53 | AOM_ICDF(32551), AOM_ICDF(32656), AOM_ICDF(32740), AOM_ICDF(32757), |
| 54 | AOM_ICDF(32762), AOM_ICDF(32767), AOM_ICDF(32768), 0 }, // class_cdf |
Nathan E. Egge | 476c63c | 2017-05-18 18:35:16 -0400 | [diff] [blame] | 55 | { 216 }, // class0 |
| 56 | { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, // bits |
| 57 | { { 128, 128, 64 }, { 96, 112, 64 } }, // class0_fp |
| 58 | { 64, 96, 64 }, // fp |
Timothy B. Terriberry | f6c807c | 2017-03-25 16:09:29 -0700 | [diff] [blame] | 59 | { { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(26624), AOM_ICDF(32768), |
| 60 | 0 }, |
| 61 | { AOM_ICDF(12288), AOM_ICDF(21248), AOM_ICDF(24128), AOM_ICDF(32768), |
| 62 | 0 } }, // class0_fp_cdf |
| 63 | { AOM_ICDF(8192), AOM_ICDF(17408), AOM_ICDF(21248), AOM_ICDF(32768), |
| 64 | 0 }, // fp_cdf |
Nathan E. Egge | cd53951 | 2017-05-16 12:00:36 -0400 | [diff] [blame] | 65 | 160, // class0_hp bit |
| 66 | 128, // hp |
Thomas Davies | 599395e | 2017-07-21 18:02:48 +0100 | [diff] [blame] | 67 | #if CONFIG_NEW_MULTISYMBOL |
| 68 | { AOM_ICDF(160 * 128), AOM_ICDF(32768), 0 }, |
| 69 | { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 }, |
| 70 | { AOM_ICDF(216 * 128), AOM_ICDF(32768), 0 }, |
| 71 | #endif |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 72 | }, |
| 73 | { |
| 74 | // Horizontal component |
| 75 | 128, // sign |
| 76 | { 216, 128, 176, 160, 176, 176, 192, 198, 198, 208 }, // class |
Timothy B. Terriberry | f6c807c | 2017-03-25 16:09:29 -0700 | [diff] [blame] | 77 | { AOM_ICDF(28672), AOM_ICDF(30976), AOM_ICDF(31858), AOM_ICDF(32320), |
| 78 | AOM_ICDF(32551), AOM_ICDF(32656), AOM_ICDF(32740), AOM_ICDF(32757), |
| 79 | AOM_ICDF(32762), AOM_ICDF(32767), AOM_ICDF(32768), 0 }, // class_cdf |
Nathan E. Egge | 476c63c | 2017-05-18 18:35:16 -0400 | [diff] [blame] | 80 | { 208 }, // class0 |
| 81 | { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, // bits |
| 82 | { { 128, 128, 64 }, { 96, 112, 64 } }, // class0_fp |
| 83 | { 64, 96, 64 }, // fp |
Timothy B. Terriberry | f6c807c | 2017-03-25 16:09:29 -0700 | [diff] [blame] | 84 | { { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(26624), AOM_ICDF(32768), |
| 85 | 0 }, |
| 86 | { AOM_ICDF(12288), AOM_ICDF(21248), AOM_ICDF(24128), AOM_ICDF(32768), |
| 87 | 0 } }, // class0_fp_cdf |
| 88 | { AOM_ICDF(8192), AOM_ICDF(17408), AOM_ICDF(21248), AOM_ICDF(32768), |
| 89 | 0 }, // fp_cdf |
Nathan E. Egge | cd53951 | 2017-05-16 12:00:36 -0400 | [diff] [blame] | 90 | 160, // class0_hp bit |
| 91 | 128, // hp |
Thomas Davies | 599395e | 2017-07-21 18:02:48 +0100 | [diff] [blame] | 92 | #if CONFIG_NEW_MULTISYMBOL |
| 93 | { AOM_ICDF(160 * 128), AOM_ICDF(32768), 0 }, |
| 94 | { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 }, |
| 95 | { AOM_ICDF(216 * 128), AOM_ICDF(32768), 0 }, |
| 96 | #endif |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 97 | } }, |
| 98 | }; |
| 99 | |
| 100 | static const uint8_t log_in_base_2[] = { |
| 101 | 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| 102 | 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, |
| 103 | 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, |
| 104 | 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, |
| 105 | 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, |
| 106 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 107 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 108 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 109 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 110 | 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, |
| 111 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 112 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 113 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 114 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 115 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 116 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 117 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 118 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 119 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
| 120 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, |
| 121 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 122 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 123 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 124 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 125 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 126 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 127 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 128 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 129 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 130 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 131 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 132 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 133 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 134 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 135 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 136 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 137 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 138 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 139 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 140 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 |
| 141 | }; |
| 142 | |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 143 | static INLINE int mv_class_base(MV_CLASS_TYPE c) { |
| 144 | return c ? CLASS0_SIZE << (c + 2) : 0; |
| 145 | } |
| 146 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 147 | MV_CLASS_TYPE av1_get_mv_class(int z, int *offset) { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 148 | const MV_CLASS_TYPE c = (z >= CLASS0_SIZE * 4096) |
| 149 | ? MV_CLASS_10 |
| 150 | : (MV_CLASS_TYPE)log_in_base_2[z >> 3]; |
| 151 | if (offset) *offset = z - mv_class_base(c); |
| 152 | return c; |
| 153 | } |
| 154 | |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 155 | static void inc_mv_component(int v, nmv_component_counts *comp_counts, int incr, |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 156 | MvSubpelPrecision precision) { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 157 | int s, z, c, o, d, e, f; |
| 158 | assert(v != 0); /* should not be zero */ |
| 159 | s = v < 0; |
| 160 | comp_counts->sign[s] += incr; |
| 161 | z = (s ? -v : v) - 1; /* magnitude - 1 */ |
| 162 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 163 | c = av1_get_mv_class(z, &o); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 164 | comp_counts->classes[c] += incr; |
| 165 | |
| 166 | d = (o >> 3); /* int mv data */ |
| 167 | f = (o >> 1) & 3; /* fractional pel mv data */ |
| 168 | e = (o & 1); /* high precision mv data */ |
| 169 | |
| 170 | if (c == MV_CLASS_0) { |
| 171 | comp_counts->class0[d] += incr; |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 172 | #if CONFIG_INTRABC || CONFIG_AMVR |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 173 | if (precision > MV_SUBPEL_NONE) |
| 174 | #endif |
| 175 | comp_counts->class0_fp[d][f] += incr; |
| 176 | if (precision > MV_SUBPEL_LOW_PRECISION) comp_counts->class0_hp[e] += incr; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 177 | } else { |
| 178 | int i; |
| 179 | int b = c + CLASS0_BITS - 1; // number of bits |
| 180 | for (i = 0; i < b; ++i) comp_counts->bits[i][((d >> i) & 1)] += incr; |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 181 | #if CONFIG_INTRABC || CONFIG_AMVR |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 182 | if (precision > MV_SUBPEL_NONE) |
| 183 | #endif |
| 184 | comp_counts->fp[f] += incr; |
| 185 | if (precision > MV_SUBPEL_LOW_PRECISION) comp_counts->hp[e] += incr; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 186 | } |
| 187 | } |
| 188 | |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 189 | void av1_inc_mv(const MV *mv, nmv_context_counts *counts, |
| 190 | MvSubpelPrecision precision) { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 191 | if (counts != NULL) { |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 192 | const MV_JOINT_TYPE j = av1_get_mv_joint(mv); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 193 | ++counts->joints[j]; |
| 194 | |
| 195 | if (mv_joint_vertical(j)) |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 196 | inc_mv_component(mv->row, &counts->comps[0], 1, precision); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 197 | |
| 198 | if (mv_joint_horizontal(j)) |
Alex Converse | 6b2584c | 2017-05-02 09:51:21 -0700 | [diff] [blame] | 199 | inc_mv_component(mv->col, &counts->comps[1], 1, precision); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 200 | } |
| 201 | } |
| 202 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 203 | void av1_adapt_mv_probs(AV1_COMMON *cm, int allow_hp) { |
Joe Young | 947fa97 | 2017-03-16 10:34:32 -0700 | [diff] [blame] | 204 | int i, j; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 205 | int idx; |
| 206 | for (idx = 0; idx < NMV_CONTEXTS; ++idx) { |
Thomas Daede | 10e1da9 | 2017-04-26 13:22:21 -0700 | [diff] [blame] | 207 | nmv_context *nmvc = &cm->fc->nmvc[idx]; |
| 208 | const nmv_context *pre_nmvc = &cm->pre_fc->nmvc[idx]; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 209 | const nmv_context_counts *counts = &cm->counts.mv[idx]; |
Thomas Daede | 10e1da9 | 2017-04-26 13:22:21 -0700 | [diff] [blame] | 210 | aom_tree_merge_probs(av1_mv_joint_tree, pre_nmvc->joints, counts->joints, |
| 211 | nmvc->joints); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 212 | for (i = 0; i < 2; ++i) { |
Thomas Daede | 10e1da9 | 2017-04-26 13:22:21 -0700 | [diff] [blame] | 213 | nmv_component *comp = &nmvc->comps[i]; |
| 214 | const nmv_component *pre_comp = &pre_nmvc->comps[i]; |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 215 | const nmv_component_counts *c = &counts->comps[i]; |
| 216 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 217 | comp->sign = av1_mode_mv_merge_probs(pre_comp->sign, c->sign); |
| 218 | aom_tree_merge_probs(av1_mv_class_tree, pre_comp->classes, c->classes, |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 219 | comp->classes); |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 220 | aom_tree_merge_probs(av1_mv_class0_tree, pre_comp->class0, c->class0, |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 221 | comp->class0); |
| 222 | |
| 223 | for (j = 0; j < MV_OFFSET_BITS; ++j) |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 224 | comp->bits[j] = av1_mode_mv_merge_probs(pre_comp->bits[j], c->bits[j]); |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 225 | #if CONFIG_AMVR |
| 226 | if (cm->cur_frame_mv_precision_level == 0) { |
| 227 | #endif |
| 228 | for (j = 0; j < CLASS0_SIZE; ++j) |
| 229 | aom_tree_merge_probs(av1_mv_fp_tree, pre_comp->class0_fp[j], |
| 230 | c->class0_fp[j], comp->class0_fp[j]); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 231 | |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 232 | aom_tree_merge_probs(av1_mv_fp_tree, pre_comp->fp, c->fp, comp->fp); |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 233 | |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 234 | if (allow_hp) { |
| 235 | comp->class0_hp = |
| 236 | av1_mode_mv_merge_probs(pre_comp->class0_hp, c->class0_hp); |
| 237 | comp->hp = av1_mode_mv_merge_probs(pre_comp->hp, c->hp); |
| 238 | } |
| 239 | #if CONFIG_AMVR |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 240 | } |
RogerZhou | 3b63524 | 2017-09-19 10:06:46 -0700 | [diff] [blame] | 241 | #endif |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 242 | } |
| 243 | } |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 244 | } |
| 245 | |
Yaowu Xu | f883b42 | 2016-08-30 14:01:10 -0700 | [diff] [blame] | 246 | void av1_init_mv_probs(AV1_COMMON *cm) { |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 247 | int i; |
Thomas Davies | 05fdc39 | 2017-02-22 14:15:39 +0000 | [diff] [blame] | 248 | for (i = 0; i < NMV_CONTEXTS; ++i) { |
| 249 | // NB: this sets CDFs too |
| 250 | cm->fc->nmvc[i] = default_nmv_context; |
| 251 | } |
Alex Converse | 2874430 | 2017-04-13 14:46:22 -0700 | [diff] [blame] | 252 | #if CONFIG_INTRABC |
| 253 | cm->fc->ndvc = default_nmv_context; |
| 254 | #endif // CONFIG_INTRABC |
Yaowu Xu | c27fc14 | 2016-08-22 16:08:15 -0700 | [diff] [blame] | 255 | } |