1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "vp9/common/vp9_entropy.h" 12 #include "vp9/common/vp9_blockd.h" 13 #include "vp9/common/vp9_onyxc_int.h" 14 #include "vp9/common/vp9_entropymode.h" 15 #include "vpx_mem/vpx_mem.h" 16 #include "vpx/vpx_integer.h" 17 18 // Unconstrained Node Tree 19 const vp9_tree_index vp9_coef_con_tree[TREE_SIZE(ENTROPY_TOKENS)] = { 20 2, 6, // 0 = LOW_VAL 21 -TWO_TOKEN, 4, // 1 = TWO 22 -THREE_TOKEN, -FOUR_TOKEN, // 2 = THREE 23 8, 10, // 3 = HIGH_LOW 24 -CATEGORY1_TOKEN, -CATEGORY2_TOKEN, // 4 = CAT_ONE 25 12, 14, // 5 = CAT_THREEFOUR 26 -CATEGORY3_TOKEN, -CATEGORY4_TOKEN, // 6 = CAT_THREE 27 -CATEGORY5_TOKEN, -CATEGORY6_TOKEN // 7 = CAT_FIVE 28 }; find_if(InputIterator first,InputIterator last,UnaryPredicate predicate,command_queue & queue=system::default_queue ())29 30 const vp9_prob vp9_cat1_prob[] = { 159 }; 31 const vp9_prob vp9_cat2_prob[] = { 165, 145 }; 32 const vp9_prob vp9_cat3_prob[] = { 173, 148, 140 }; 33 const vp9_prob vp9_cat4_prob[] = { 176, 155, 140, 135 }; 34 const vp9_prob vp9_cat5_prob[] = { 180, 157, 141, 134, 130 }; 35 const vp9_prob vp9_cat6_prob[] = { 36 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 37 }; 38 #if CONFIG_VP9_HIGHBITDEPTH 39 const vp9_prob vp9_cat1_prob_high10[] = { 159 }; 40 const vp9_prob vp9_cat2_prob_high10[] = { 165, 145 }; 41 const vp9_prob vp9_cat3_prob_high10[] = { 173, 148, 140 }; 42 const vp9_prob vp9_cat4_prob_high10[] = { 176, 155, 140, 135 }; 43 const vp9_prob vp9_cat5_prob_high10[] = { 180, 157, 141, 134, 130 }; 44 const vp9_prob vp9_cat6_prob_high10[] = { 45 255, 255, 254, 254, 254, 252, 249, 243, 46 230, 196, 177, 153, 140, 133, 130, 129 47 }; 48 const vp9_prob vp9_cat1_prob_high12[] = { 159 }; 49 const vp9_prob vp9_cat2_prob_high12[] = { 165, 145 }; 50 const vp9_prob vp9_cat3_prob_high12[] = { 173, 148, 140 }; 51 const vp9_prob vp9_cat4_prob_high12[] = { 176, 155, 140, 135 }; 52 const vp9_prob vp9_cat5_prob_high12[] = { 180, 157, 141, 134, 130 }; 53 const vp9_prob vp9_cat6_prob_high12[] = { 54 255, 255, 255, 255, 254, 254, 254, 252, 249, 55 243, 230, 196, 177, 153, 140, 133, 130, 129 56 }; 57 #endif 58 59 const uint8_t vp9_coefband_trans_8x8plus[1024] = { 60 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 61 4, 4, 4, 4, 4, 5, 62 // beyond MAXBAND_INDEX+1 all values are filled as 5 63 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 64 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 65 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 66 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 67 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 68 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 69 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 70 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 71 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 72 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 73 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 74 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 75 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 76 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 77 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 78 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 79 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 80 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 81 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 82 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 83 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 84 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 85 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 86 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 87 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 88 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 89 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 90 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 91 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 92 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 93 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 94 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 95 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 96 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 97 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 98 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 99 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 100 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 101 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 102 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, 5, 5, 5, 5, 104 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 105 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 106 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 107 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 108 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 109 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 110 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 111 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 112 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 113 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 114 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 115 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 116 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 117 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 118 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 119 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 120 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 121 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 122 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 123 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 124 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 126 }; 127 128 const uint8_t vp9_coefband_trans_4x4[16] = { 129 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 130 }; 131 132 const uint8_t vp9_pt_energy_class[ENTROPY_TOKENS] = { 133 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5 134 }; 135 136 const vp9_tree_index vp9_coefmodel_tree[TREE_SIZE(UNCONSTRAINED_NODES + 1)] = { 137 -EOB_MODEL_TOKEN, 2, 138 -ZERO_TOKEN, 4, 139 -ONE_TOKEN, -TWO_TOKEN, 140 }; 141 142 // Model obtained from a 2-sided zero-centerd distribuition derived 143 // from a Pareto distribution. The cdf of the distribution is: 144 // cdf(x) = 0.5 + 0.5 * sgn(x) * [1 - {alpha/(alpha + |x|)} ^ beta] 145 // 146 // For a given beta and a given probablity of the 1-node, the alpha 147 // is first solved, and then the {alpha, beta} pair is used to generate 148 // the probabilities for the rest of the nodes. 149 150 // beta = 8 151 152 // Every odd line in this table can be generated from the even lines 153 // by averaging : 154 // vp9_pareto8_full[l][node] = (vp9_pareto8_full[l-1][node] + 155 // vp9_pareto8_full[l+1][node] ) >> 1; 156 const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = { 157 { 3, 86, 128, 6, 86, 23, 88, 29}, 158 { 6, 86, 128, 11, 87, 42, 91, 52}, 159 { 9, 86, 129, 17, 88, 61, 94, 76}, 160 { 12, 86, 129, 22, 88, 77, 97, 93}, 161 { 15, 87, 129, 28, 89, 93, 100, 110}, 162 { 17, 87, 129, 33, 90, 105, 103, 123}, 163 { 20, 88, 130, 38, 91, 118, 106, 136}, 164 { 23, 88, 130, 43, 91, 128, 108, 146}, 165 { 26, 89, 131, 48, 92, 139, 111, 156}, 166 { 28, 89, 131, 53, 93, 147, 114, 163}, 167 { 31, 90, 131, 58, 94, 156, 117, 171}, 168 { 34, 90, 131, 62, 94, 163, 119, 177}, 169 { 37, 90, 132, 66, 95, 171, 122, 184}, 170 { 39, 90, 132, 70, 96, 177, 124, 189}, 171 { 42, 91, 132, 75, 97, 183, 127, 194}, 172 { 44, 91, 132, 79, 97, 188, 129, 198}, 173 { 47, 92, 133, 83, 98, 193, 132, 202}, 174 { 49, 92, 133, 86, 99, 197, 134, 205}, 175 { 52, 93, 133, 90, 100, 201, 137, 208}, 176 { 54, 93, 133, 94, 100, 204, 139, 211}, 177 { 57, 94, 134, 98, 101, 208, 142, 214}, 178 { 59, 94, 134, 101, 102, 211, 144, 216}, 179 { 62, 94, 135, 105, 103, 214, 146, 218}, 180 { 64, 94, 135, 108, 103, 216, 148, 220}, 181 { 66, 95, 135, 111, 104, 219, 151, 222}, 182 { 68, 95, 135, 114, 105, 221, 153, 223}, 183 { 71, 96, 136, 117, 106, 224, 155, 225}, 184 { 73, 96, 136, 120, 106, 225, 157, 226}, 185 { 76, 97, 136, 123, 107, 227, 159, 228}, 186 { 78, 97, 136, 126, 108, 229, 160, 229}, 187 { 80, 98, 137, 129, 109, 231, 162, 231}, 188 { 82, 98, 137, 131, 109, 232, 164, 232}, 189 { 84, 98, 138, 134, 110, 234, 166, 233}, 190 { 86, 98, 138, 137, 111, 235, 168, 234}, 191 { 89, 99, 138, 140, 112, 236, 170, 235}, 192 { 91, 99, 138, 142, 112, 237, 171, 235}, 193 { 93, 100, 139, 145, 113, 238, 173, 236}, 194 { 95, 100, 139, 147, 114, 239, 174, 237}, 195 { 97, 101, 140, 149, 115, 240, 176, 238}, 196 { 99, 101, 140, 151, 115, 241, 177, 238}, 197 {101, 102, 140, 154, 116, 242, 179, 239}, 198 {103, 102, 140, 156, 117, 242, 180, 239}, 199 {105, 103, 141, 158, 118, 243, 182, 240}, 200 {107, 103, 141, 160, 118, 243, 183, 240}, 201 {109, 104, 141, 162, 119, 244, 185, 241}, 202 {111, 104, 141, 164, 119, 244, 186, 241}, 203 {113, 104, 142, 166, 120, 245, 187, 242}, 204 {114, 104, 142, 168, 121, 245, 188, 242}, 205 {116, 105, 143, 170, 122, 246, 190, 243}, 206 {118, 105, 143, 171, 122, 246, 191, 243}, 207 {120, 106, 143, 173, 123, 247, 192, 244}, 208 {121, 106, 143, 175, 124, 247, 193, 244}, 209 {123, 107, 144, 177, 125, 248, 195, 244}, 210 {125, 107, 144, 178, 125, 248, 196, 244}, 211 {127, 108, 145, 180, 126, 249, 197, 245}, 212 {128, 108, 145, 181, 127, 249, 198, 245}, 213 {130, 109, 145, 183, 128, 249, 199, 245}, 214 {132, 109, 145, 184, 128, 249, 200, 245}, 215 {134, 110, 146, 186, 129, 250, 201, 246}, 216 {135, 110, 146, 187, 130, 250, 202, 246}, 217 {137, 111, 147, 189, 131, 251, 203, 246}, 218 {138, 111, 147, 190, 131, 251, 204, 246}, 219 {140, 112, 147, 192, 132, 251, 205, 247}, 220 {141, 112, 147, 193, 132, 251, 206, 247}, 221 {143, 113, 148, 194, 133, 251, 207, 247}, 222 {144, 113, 148, 195, 134, 251, 207, 247}, 223 {146, 114, 149, 197, 135, 252, 208, 248}, 224 {147, 114, 149, 198, 135, 252, 209, 248}, 225 {149, 115, 149, 199, 136, 252, 210, 248}, 226 {150, 115, 149, 200, 137, 252, 210, 248}, 227 {152, 115, 150, 201, 138, 252, 211, 248}, 228 {153, 115, 150, 202, 138, 252, 212, 248}, 229 {155, 116, 151, 204, 139, 253, 213, 249}, 230 {156, 116, 151, 205, 139, 253, 213, 249}, 231 {158, 117, 151, 206, 140, 253, 214, 249}, 232 {159, 117, 151, 207, 141, 253, 215, 249}, 233 {161, 118, 152, 208, 142, 253, 216, 249}, 234 {162, 118, 152, 209, 142, 253, 216, 249}, 235 {163, 119, 153, 210, 143, 253, 217, 249}, 236 {164, 119, 153, 211, 143, 253, 217, 249}, 237 {166, 120, 153, 212, 144, 254, 218, 250}, 238 {167, 120, 153, 212, 145, 254, 219, 250}, 239 {168, 121, 154, 213, 146, 254, 220, 250}, 240 {169, 121, 154, 214, 146, 254, 220, 250}, 241 {171, 122, 155, 215, 147, 254, 221, 250}, 242 {172, 122, 155, 216, 147, 254, 221, 250}, 243 {173, 123, 155, 217, 148, 254, 222, 250}, 244 {174, 123, 155, 217, 149, 254, 222, 250}, 245 {176, 124, 156, 218, 150, 254, 223, 250}, 246 {177, 124, 156, 219, 150, 254, 223, 250}, 247 {178, 125, 157, 220, 151, 254, 224, 251}, 248 {179, 125, 157, 220, 151, 254, 224, 251}, 249 {180, 126, 157, 221, 152, 254, 225, 251}, 250 {181, 126, 157, 221, 152, 254, 225, 251}, 251 {183, 127, 158, 222, 153, 254, 226, 251}, 252 {184, 127, 158, 223, 154, 254, 226, 251}, 253 {185, 128, 159, 224, 155, 255, 227, 251}, 254 {186, 128, 159, 224, 155, 255, 227, 251}, 255 {187, 129, 160, 225, 156, 255, 228, 251}, 256 {188, 130, 160, 225, 156, 255, 228, 251}, 257 {189, 131, 160, 226, 157, 255, 228, 251}, 258 {190, 131, 160, 226, 158, 255, 228, 251}, 259 {191, 132, 161, 227, 159, 255, 229, 251}, 260 {192, 132, 161, 227, 159, 255, 229, 251}, 261 {193, 133, 162, 228, 160, 255, 230, 252}, 262 {194, 133, 162, 229, 160, 255, 230, 252}, 263 {195, 134, 163, 230, 161, 255, 231, 252}, 264 {196, 134, 163, 230, 161, 255, 231, 252}, 265 {197, 135, 163, 231, 162, 255, 231, 252}, 266 {198, 135, 163, 231, 162, 255, 231, 252}, 267 {199, 136, 164, 232, 163, 255, 232, 252}, 268 {200, 136, 164, 232, 164, 255, 232, 252}, 269 {201, 137, 165, 233, 165, 255, 233, 252}, 270 {201, 137, 165, 233, 165, 255, 233, 252}, 271 {202, 138, 166, 233, 166, 255, 233, 252}, 272 {203, 138, 166, 233, 166, 255, 233, 252}, 273 {204, 139, 166, 234, 167, 255, 234, 252}, 274 {205, 139, 166, 234, 167, 255, 234, 252}, 275 {206, 140, 167, 235, 168, 255, 235, 252}, 276 {206, 140, 167, 235, 168, 255, 235, 252}, 277 {207, 141, 168, 236, 169, 255, 235, 252}, 278 {208, 141, 168, 236, 170, 255, 235, 252}, 279 {209, 142, 169, 237, 171, 255, 236, 252}, 280 {209, 143, 169, 237, 171, 255, 236, 252}, 281 {210, 144, 169, 237, 172, 255, 236, 252}, 282 {211, 144, 169, 237, 172, 255, 236, 252}, 283 {212, 145, 170, 238, 173, 255, 237, 252}, 284 {213, 145, 170, 238, 173, 255, 237, 252}, 285 {214, 146, 171, 239, 174, 255, 237, 253}, 286 {214, 146, 171, 239, 174, 255, 237, 253}, 287 {215, 147, 172, 240, 175, 255, 238, 253}, 288 {215, 147, 172, 240, 175, 255, 238, 253}, 289 {216, 148, 173, 240, 176, 255, 238, 253}, 290 {217, 148, 173, 240, 176, 255, 238, 253}, 291 {218, 149, 173, 241, 177, 255, 239, 253}, 292 {218, 149, 173, 241, 178, 255, 239, 253}, 293 {219, 150, 174, 241, 179, 255, 239, 253}, 294 {219, 151, 174, 241, 179, 255, 239, 253}, 295 {220, 152, 175, 242, 180, 255, 240, 253}, 296 {221, 152, 175, 242, 180, 255, 240, 253}, 297 {222, 153, 176, 242, 181, 255, 240, 253}, 298 {222, 153, 176, 242, 181, 255, 240, 253}, 299 {223, 154, 177, 243, 182, 255, 240, 253}, 300 {223, 154, 177, 243, 182, 255, 240, 253}, 301 {224, 155, 178, 244, 183, 255, 241, 253}, 302 {224, 155, 178, 244, 183, 255, 241, 253}, 303 {225, 156, 178, 244, 184, 255, 241, 253}, 304 {225, 157, 178, 244, 184, 255, 241, 253}, 305 {226, 158, 179, 244, 185, 255, 242, 253}, 306 {227, 158, 179, 244, 185, 255, 242, 253}, 307 {228, 159, 180, 245, 186, 255, 242, 253}, 308 {228, 159, 180, 245, 186, 255, 242, 253}, 309 {229, 160, 181, 245, 187, 255, 242, 253}, 310 {229, 160, 181, 245, 187, 255, 242, 253}, 311 {230, 161, 182, 246, 188, 255, 243, 253}, 312 {230, 162, 182, 246, 188, 255, 243, 253}, 313 {231, 163, 183, 246, 189, 255, 243, 253}, 314 {231, 163, 183, 246, 189, 255, 243, 253}, 315 {232, 164, 184, 247, 190, 255, 243, 253}, 316 {232, 164, 184, 247, 190, 255, 243, 253}, 317 {233, 165, 185, 247, 191, 255, 244, 253}, 318 {233, 165, 185, 247, 191, 255, 244, 253}, 319 {234, 166, 185, 247, 192, 255, 244, 253}, 320 {234, 167, 185, 247, 192, 255, 244, 253}, 321 {235, 168, 186, 248, 193, 255, 244, 253}, 322 {235, 168, 186, 248, 193, 255, 244, 253}, 323 {236, 169, 187, 248, 194, 255, 244, 253}, 324 {236, 169, 187, 248, 194, 255, 244, 253}, 325 {236, 170, 188, 248, 195, 255, 245, 253}, 326 {236, 170, 188, 248, 195, 255, 245, 253}, 327 {237, 171, 189, 249, 196, 255, 245, 254}, 328 {237, 172, 189, 249, 196, 255, 245, 254}, 329 {238, 173, 190, 249, 197, 255, 245, 254}, 330 {238, 173, 190, 249, 197, 255, 245, 254}, 331 {239, 174, 191, 249, 198, 255, 245, 254}, 332 {239, 174, 191, 249, 198, 255, 245, 254}, 333 {240, 175, 192, 249, 199, 255, 246, 254}, 334 {240, 176, 192, 249, 199, 255, 246, 254}, 335 {240, 177, 193, 250, 200, 255, 246, 254}, 336 {240, 177, 193, 250, 200, 255, 246, 254}, 337 {241, 178, 194, 250, 201, 255, 246, 254}, 338 {241, 178, 194, 250, 201, 255, 246, 254}, 339 {242, 179, 195, 250, 202, 255, 246, 254}, 340 {242, 180, 195, 250, 202, 255, 246, 254}, 341 {242, 181, 196, 250, 203, 255, 247, 254}, 342 {242, 181, 196, 250, 203, 255, 247, 254}, 343 {243, 182, 197, 251, 204, 255, 247, 254}, 344 {243, 183, 197, 251, 204, 255, 247, 254}, 345 {244, 184, 198, 251, 205, 255, 247, 254}, 346 {244, 184, 198, 251, 205, 255, 247, 254}, 347 {244, 185, 199, 251, 206, 255, 247, 254}, 348 {244, 185, 199, 251, 206, 255, 247, 254}, 349 {245, 186, 200, 251, 207, 255, 247, 254}, 350 {245, 187, 200, 251, 207, 255, 247, 254}, 351 {246, 188, 201, 252, 207, 255, 248, 254}, 352 {246, 188, 201, 252, 207, 255, 248, 254}, 353 {246, 189, 202, 252, 208, 255, 248, 254}, 354 {246, 190, 202, 252, 208, 255, 248, 254}, 355 {247, 191, 203, 252, 209, 255, 248, 254}, 356 {247, 191, 203, 252, 209, 255, 248, 254}, 357 {247, 192, 204, 252, 210, 255, 248, 254}, 358 {247, 193, 204, 252, 210, 255, 248, 254}, 359 {248, 194, 205, 252, 211, 255, 248, 254}, 360 {248, 194, 205, 252, 211, 255, 248, 254}, 361 {248, 195, 206, 252, 212, 255, 249, 254}, 362 {248, 196, 206, 252, 212, 255, 249, 254}, 363 {249, 197, 207, 253, 213, 255, 249, 254}, 364 {249, 197, 207, 253, 213, 255, 249, 254}, 365 {249, 198, 208, 253, 214, 255, 249, 254}, 366 {249, 199, 209, 253, 214, 255, 249, 254}, 367 {250, 200, 210, 253, 215, 255, 249, 254}, 368 {250, 200, 210, 253, 215, 255, 249, 254}, 369 {250, 201, 211, 253, 215, 255, 249, 254}, 370 {250, 202, 211, 253, 215, 255, 249, 254}, 371 {250, 203, 212, 253, 216, 255, 249, 254}, 372 {250, 203, 212, 253, 216, 255, 249, 254}, 373 {251, 204, 213, 253, 217, 255, 250, 254}, 374 {251, 205, 213, 253, 217, 255, 250, 254}, 375 {251, 206, 214, 254, 218, 255, 250, 254}, 376 {251, 206, 215, 254, 218, 255, 250, 254}, 377 {252, 207, 216, 254, 219, 255, 250, 254}, 378 {252, 208, 216, 254, 219, 255, 250, 254}, 379 {252, 209, 217, 254, 220, 255, 250, 254}, 380 {252, 210, 217, 254, 220, 255, 250, 254}, 381 {252, 211, 218, 254, 221, 255, 250, 254}, 382 {252, 212, 218, 254, 221, 255, 250, 254}, 383 {253, 213, 219, 254, 222, 255, 250, 254}, 384 {253, 213, 220, 254, 222, 255, 250, 254}, 385 {253, 214, 221, 254, 223, 255, 250, 254}, 386 {253, 215, 221, 254, 223, 255, 250, 254}, 387 {253, 216, 222, 254, 224, 255, 251, 254}, 388 {253, 217, 223, 254, 224, 255, 251, 254}, 389 {253, 218, 224, 254, 225, 255, 251, 254}, 390 {253, 219, 224, 254, 225, 255, 251, 254}, 391 {254, 220, 225, 254, 225, 255, 251, 254}, 392 {254, 221, 226, 254, 225, 255, 251, 254}, 393 {254, 222, 227, 255, 226, 255, 251, 254}, 394 {254, 223, 227, 255, 226, 255, 251, 254}, 395 {254, 224, 228, 255, 227, 255, 251, 254}, 396 {254, 225, 229, 255, 227, 255, 251, 254}, 397 {254, 226, 230, 255, 228, 255, 251, 254}, 398 {254, 227, 230, 255, 229, 255, 251, 254}, 399 {255, 228, 231, 255, 230, 255, 251, 254}, 400 {255, 229, 232, 255, 230, 255, 251, 254}, 401 {255, 230, 233, 255, 231, 255, 252, 254}, 402 {255, 231, 234, 255, 231, 255, 252, 254}, 403 {255, 232, 235, 255, 232, 255, 252, 254}, 404 {255, 233, 236, 255, 232, 255, 252, 254}, 405 {255, 235, 237, 255, 233, 255, 252, 254}, 406 {255, 236, 238, 255, 234, 255, 252, 254}, 407 {255, 238, 240, 255, 235, 255, 252, 255}, 408 {255, 239, 241, 255, 235, 255, 252, 254}, 409 {255, 241, 243, 255, 236, 255, 252, 254}, 410 {255, 243, 245, 255, 237, 255, 252, 254}, 411 {255, 246, 247, 255, 239, 255, 253, 255}, 412 {255, 246, 247, 255, 239, 255, 253, 255}, 413 }; 414 415 static const vp9_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = { 416 { // Y plane 417 { // Intra 418 { // Band 0 419 { 195, 29, 183 }, { 84, 49, 136 }, { 8, 42, 71 } 420 }, { // Band 1 421 { 31, 107, 169 }, { 35, 99, 159 }, { 17, 82, 140 }, 422 { 8, 66, 114 }, { 2, 44, 76 }, { 1, 19, 32 } 423 }, { // Band 2 424 { 40, 132, 201 }, { 29, 114, 187 }, { 13, 91, 157 }, 425 { 7, 75, 127 }, { 3, 58, 95 }, { 1, 28, 47 } 426 }, { // Band 3 427 { 69, 142, 221 }, { 42, 122, 201 }, { 15, 91, 159 }, 428 { 6, 67, 121 }, { 1, 42, 77 }, { 1, 17, 31 } 429 }, { // Band 4 430 { 102, 148, 228 }, { 67, 117, 204 }, { 17, 82, 154 }, 431 { 6, 59, 114 }, { 2, 39, 75 }, { 1, 15, 29 } 432 }, { // Band 5 433 { 156, 57, 233 }, { 119, 57, 212 }, { 58, 48, 163 }, 434 { 29, 40, 124 }, { 12, 30, 81 }, { 3, 12, 31 } 435 } 436 }, { // Inter 437 { // Band 0 438 { 191, 107, 226 }, { 124, 117, 204 }, { 25, 99, 155 } 439 }, { // Band 1 440 { 29, 148, 210 }, { 37, 126, 194 }, { 8, 93, 157 }, 441 { 2, 68, 118 }, { 1, 39, 69 }, { 1, 17, 33 } 442 }, { // Band 2 443 { 41, 151, 213 }, { 27, 123, 193 }, { 3, 82, 144 }, 444 { 1, 58, 105 }, { 1, 32, 60 }, { 1, 13, 26 } 445 }, { // Band 3 446 { 59, 159, 220 }, { 23, 126, 198 }, { 4, 88, 151 }, 447 { 1, 66, 114 }, { 1, 38, 71 }, { 1, 18, 34 } 448 }, { // Band 4 449 { 114, 136, 232 }, { 51, 114, 207 }, { 11, 83, 155 }, 450 { 3, 56, 105 }, { 1, 33, 65 }, { 1, 17, 34 } 451 }, { // Band 5 452 { 149, 65, 234 }, { 121, 57, 215 }, { 61, 49, 166 }, 453 { 28, 36, 114 }, { 12, 25, 76 }, { 3, 16, 42 } 454 } 455 } 456 }, { // UV plane 457 { // Intra 458 { // Band 0 459 { 214, 49, 220 }, { 132, 63, 188 }, { 42, 65, 137 } 460 }, { // Band 1 461 { 85, 137, 221 }, { 104, 131, 216 }, { 49, 111, 192 }, 462 { 21, 87, 155 }, { 2, 49, 87 }, { 1, 16, 28 } 463 }, { // Band 2 464 { 89, 163, 230 }, { 90, 137, 220 }, { 29, 100, 183 }, 465 { 10, 70, 135 }, { 2, 42, 81 }, { 1, 17, 33 } 466 }, { // Band 3 467 { 108, 167, 237 }, { 55, 133, 222 }, { 15, 97, 179 }, 468 { 4, 72, 135 }, { 1, 45, 85 }, { 1, 19, 38 } 469 }, { // Band 4 470 { 124, 146, 240 }, { 66, 124, 224 }, { 17, 88, 175 }, 471 { 4, 58, 122 }, { 1, 36, 75 }, { 1, 18, 37 } 472 }, { // Band 5 473 { 141, 79, 241 }, { 126, 70, 227 }, { 66, 58, 182 }, 474 { 30, 44, 136 }, { 12, 34, 96 }, { 2, 20, 47 } 475 } 476 }, { // Inter 477 { // Band 0 478 { 229, 99, 249 }, { 143, 111, 235 }, { 46, 109, 192 } 479 }, { // Band 1 480 { 82, 158, 236 }, { 94, 146, 224 }, { 25, 117, 191 }, 481 { 9, 87, 149 }, { 3, 56, 99 }, { 1, 33, 57 } 482 }, { // Band 2 483 { 83, 167, 237 }, { 68, 145, 222 }, { 10, 103, 177 }, 484 { 2, 72, 131 }, { 1, 41, 79 }, { 1, 20, 39 } 485 }, { // Band 3 486 { 99, 167, 239 }, { 47, 141, 224 }, { 10, 104, 178 }, 487 { 2, 73, 133 }, { 1, 44, 85 }, { 1, 22, 47 } 488 }, { // Band 4 489 { 127, 145, 243 }, { 71, 129, 228 }, { 17, 93, 177 }, 490 { 3, 61, 124 }, { 1, 41, 84 }, { 1, 21, 52 } 491 }, { // Band 5 492 { 157, 78, 244 }, { 140, 72, 231 }, { 69, 58, 184 }, 493 { 31, 44, 137 }, { 14, 38, 105 }, { 8, 23, 61 } 494 } 495 } 496 } 497 }; 498 499 static const vp9_coeff_probs_model default_coef_probs_8x8[PLANE_TYPES] = { 500 { // Y plane 501 { // Intra 502 { // Band 0 503 { 125, 34, 187 }, { 52, 41, 133 }, { 6, 31, 56 } 504 }, { // Band 1 505 { 37, 109, 153 }, { 51, 102, 147 }, { 23, 87, 128 }, 506 { 8, 67, 101 }, { 1, 41, 63 }, { 1, 19, 29 } 507 }, { // Band 2 508 { 31, 154, 185 }, { 17, 127, 175 }, { 6, 96, 145 }, 509 { 2, 73, 114 }, { 1, 51, 82 }, { 1, 28, 45 } 510 }, { // Band 3 511 { 23, 163, 200 }, { 10, 131, 185 }, { 2, 93, 148 }, 512 { 1, 67, 111 }, { 1, 41, 69 }, { 1, 14, 24 } 513 }, { // Band 4 514 { 29, 176, 217 }, { 12, 145, 201 }, { 3, 101, 156 }, 515 { 1, 69, 111 }, { 1, 39, 63 }, { 1, 14, 23 } 516 }, { // Band 5 517 { 57, 192, 233 }, { 25, 154, 215 }, { 6, 109, 167 }, 518 { 3, 78, 118 }, { 1, 48, 69 }, { 1, 21, 29 } 519 } 520 }, { // Inter 521 { // Band 0 522 { 202, 105, 245 }, { 108, 106, 216 }, { 18, 90, 144 } 523 }, { // Band 1 524 { 33, 172, 219 }, { 64, 149, 206 }, { 14, 117, 177 }, 525 { 5, 90, 141 }, { 2, 61, 95 }, { 1, 37, 57 } 526 }, { // Band 2 527 { 33, 179, 220 }, { 11, 140, 198 }, { 1, 89, 148 }, 528 { 1, 60, 104 }, { 1, 33, 57 }, { 1, 12, 21 } 529 }, { // Band 3 530 { 30, 181, 221 }, { 8, 141, 198 }, { 1, 87, 145 }, 531 { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 20 } 532 }, { // Band 4 533 { 32, 186, 224 }, { 7, 142, 198 }, { 1, 86, 143 }, 534 { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 22 } 535 }, { // Band 5 536 { 57, 192, 227 }, { 20, 143, 204 }, { 3, 96, 154 }, 537 { 1, 68, 112 }, { 1, 42, 69 }, { 1, 19, 32 } 538 } 539 } 540 }, { // UV plane 541 { // Intra 542 { // Band 0 543 { 212, 35, 215 }, { 113, 47, 169 }, { 29, 48, 105 } 544 }, { // Band 1 545 { 74, 129, 203 }, { 106, 120, 203 }, { 49, 107, 178 }, 546 { 19, 84, 144 }, { 4, 50, 84 }, { 1, 15, 25 } 547 }, { // Band 2 548 { 71, 172, 217 }, { 44, 141, 209 }, { 15, 102, 173 }, 549 { 6, 76, 133 }, { 2, 51, 89 }, { 1, 24, 42 } 550 }, { // Band 3 551 { 64, 185, 231 }, { 31, 148, 216 }, { 8, 103, 175 }, 552 { 3, 74, 131 }, { 1, 46, 81 }, { 1, 18, 30 } 553 }, { // Band 4 554 { 65, 196, 235 }, { 25, 157, 221 }, { 5, 105, 174 }, 555 { 1, 67, 120 }, { 1, 38, 69 }, { 1, 15, 30 } 556 }, { // Band 5 557 { 65, 204, 238 }, { 30, 156, 224 }, { 7, 107, 177 }, 558 { 2, 70, 124 }, { 1, 42, 73 }, { 1, 18, 34 } 559 } 560 }, { // Inter 561 { // Band 0 562 { 225, 86, 251 }, { 144, 104, 235 }, { 42, 99, 181 } 563 }, { // Band 1 564 { 85, 175, 239 }, { 112, 165, 229 }, { 29, 136, 200 }, 565 { 12, 103, 162 }, { 6, 77, 123 }, { 2, 53, 84 } 566 }, { // Band 2 567 { 75, 183, 239 }, { 30, 155, 221 }, { 3, 106, 171 }, 568 { 1, 74, 128 }, { 1, 44, 76 }, { 1, 17, 28 } 569 }, { // Band 3 570 { 73, 185, 240 }, { 27, 159, 222 }, { 2, 107, 172 }, 571 { 1, 75, 127 }, { 1, 42, 73 }, { 1, 17, 29 } 572 }, { // Band 4 573 { 62, 190, 238 }, { 21, 159, 222 }, { 2, 107, 172 }, 574 { 1, 72, 122 }, { 1, 40, 71 }, { 1, 18, 32 } 575 }, { // Band 5 576 { 61, 199, 240 }, { 27, 161, 226 }, { 4, 113, 180 }, 577 { 1, 76, 129 }, { 1, 46, 80 }, { 1, 23, 41 } 578 } 579 } 580 } 581 }; 582 583 static const vp9_coeff_probs_model default_coef_probs_16x16[PLANE_TYPES] = { 584 { // Y plane 585 { // Intra 586 { // Band 0 587 { 7, 27, 153 }, { 5, 30, 95 }, { 1, 16, 30 } 588 }, { // Band 1 589 { 50, 75, 127 }, { 57, 75, 124 }, { 27, 67, 108 }, 590 { 10, 54, 86 }, { 1, 33, 52 }, { 1, 12, 18 } 591 }, { // Band 2 592 { 43, 125, 151 }, { 26, 108, 148 }, { 7, 83, 122 }, 593 { 2, 59, 89 }, { 1, 38, 60 }, { 1, 17, 27 } 594 }, { // Band 3 595 { 23, 144, 163 }, { 13, 112, 154 }, { 2, 75, 117 }, 596 { 1, 50, 81 }, { 1, 31, 51 }, { 1, 14, 23 } 597 }, { // Band 4 598 { 18, 162, 185 }, { 6, 123, 171 }, { 1, 78, 125 }, 599 { 1, 51, 86 }, { 1, 31, 54 }, { 1, 14, 23 } 600 }, { // Band 5 601 { 15, 199, 227 }, { 3, 150, 204 }, { 1, 91, 146 }, 602 { 1, 55, 95 }, { 1, 30, 53 }, { 1, 11, 20 } 603 } 604 }, { // Inter 605 { // Band 0 606 { 19, 55, 240 }, { 19, 59, 196 }, { 3, 52, 105 } 607 }, { // Band 1 608 { 41, 166, 207 }, { 104, 153, 199 }, { 31, 123, 181 }, 609 { 14, 101, 152 }, { 5, 72, 106 }, { 1, 36, 52 } 610 }, { // Band 2 611 { 35, 176, 211 }, { 12, 131, 190 }, { 2, 88, 144 }, 612 { 1, 60, 101 }, { 1, 36, 60 }, { 1, 16, 28 } 613 }, { // Band 3 614 { 28, 183, 213 }, { 8, 134, 191 }, { 1, 86, 142 }, 615 { 1, 56, 96 }, { 1, 30, 53 }, { 1, 12, 20 } 616 }, { // Band 4 617 { 20, 190, 215 }, { 4, 135, 192 }, { 1, 84, 139 }, 618 { 1, 53, 91 }, { 1, 28, 49 }, { 1, 11, 20 } 619 }, { // Band 5 620 { 13, 196, 216 }, { 2, 137, 192 }, { 1, 86, 143 }, 621 { 1, 57, 99 }, { 1, 32, 56 }, { 1, 13, 24 } 622 } 623 } 624 }, { // UV plane 625 { // Intra 626 { // Band 0 627 { 211, 29, 217 }, { 96, 47, 156 }, { 22, 43, 87 } 628 }, { // Band 1 629 { 78, 120, 193 }, { 111, 116, 186 }, { 46, 102, 164 }, 630 { 15, 80, 128 }, { 2, 49, 76 }, { 1, 18, 28 } 631 }, { // Band 2 632 { 71, 161, 203 }, { 42, 132, 192 }, { 10, 98, 150 }, 633 { 3, 69, 109 }, { 1, 44, 70 }, { 1, 18, 29 } 634 }, { // Band 3 635 { 57, 186, 211 }, { 30, 140, 196 }, { 4, 93, 146 }, 636 { 1, 62, 102 }, { 1, 38, 65 }, { 1, 16, 27 } 637 }, { // Band 4 638 { 47, 199, 217 }, { 14, 145, 196 }, { 1, 88, 142 }, 639 { 1, 57, 98 }, { 1, 36, 62 }, { 1, 15, 26 } 640 }, { // Band 5 641 { 26, 219, 229 }, { 5, 155, 207 }, { 1, 94, 151 }, 642 { 1, 60, 104 }, { 1, 36, 62 }, { 1, 16, 28 } 643 } 644 }, { // Inter 645 { // Band 0 646 { 233, 29, 248 }, { 146, 47, 220 }, { 43, 52, 140 } 647 }, { // Band 1 648 { 100, 163, 232 }, { 179, 161, 222 }, { 63, 142, 204 }, 649 { 37, 113, 174 }, { 26, 89, 137 }, { 18, 68, 97 } 650 }, { // Band 2 651 { 85, 181, 230 }, { 32, 146, 209 }, { 7, 100, 164 }, 652 { 3, 71, 121 }, { 1, 45, 77 }, { 1, 18, 30 } 653 }, { // Band 3 654 { 65, 187, 230 }, { 20, 148, 207 }, { 2, 97, 159 }, 655 { 1, 68, 116 }, { 1, 40, 70 }, { 1, 14, 29 } 656 }, { // Band 4 657 { 40, 194, 227 }, { 8, 147, 204 }, { 1, 94, 155 }, 658 { 1, 65, 112 }, { 1, 39, 66 }, { 1, 14, 26 } 659 }, { // Band 5 660 { 16, 208, 228 }, { 3, 151, 207 }, { 1, 98, 160 }, 661 { 1, 67, 117 }, { 1, 41, 74 }, { 1, 17, 31 } 662 } 663 } 664 } 665 }; 666 667 static const vp9_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = { 668 { // Y plane 669 { // Intra 670 { // Band 0 671 { 17, 38, 140 }, { 7, 34, 80 }, { 1, 17, 29 } 672 }, { // Band 1 673 { 37, 75, 128 }, { 41, 76, 128 }, { 26, 66, 116 }, 674 { 12, 52, 94 }, { 2, 32, 55 }, { 1, 10, 16 } 675 }, { // Band 2 676 { 50, 127, 154 }, { 37, 109, 152 }, { 16, 82, 121 }, 677 { 5, 59, 85 }, { 1, 35, 54 }, { 1, 13, 20 } 678 }, { // Band 3 679 { 40, 142, 167 }, { 17, 110, 157 }, { 2, 71, 112 }, 680 { 1, 44, 72 }, { 1, 27, 45 }, { 1, 11, 17 } 681 }, { // Band 4 682 { 30, 175, 188 }, { 9, 124, 169 }, { 1, 74, 116 }, 683 { 1, 48, 78 }, { 1, 30, 49 }, { 1, 11, 18 } 684 }, { // Band 5 685 { 10, 222, 223 }, { 2, 150, 194 }, { 1, 83, 128 }, 686 { 1, 48, 79 }, { 1, 27, 45 }, { 1, 11, 17 } 687 } 688 }, { // Inter 689 { // Band 0 690 { 36, 41, 235 }, { 29, 36, 193 }, { 10, 27, 111 } 691 }, { // Band 1 692 { 85, 165, 222 }, { 177, 162, 215 }, { 110, 135, 195 }, 693 { 57, 113, 168 }, { 23, 83, 120 }, { 10, 49, 61 } 694 }, { // Band 2 695 { 85, 190, 223 }, { 36, 139, 200 }, { 5, 90, 146 }, 696 { 1, 60, 103 }, { 1, 38, 65 }, { 1, 18, 30 } 697 }, { // Band 3 698 { 72, 202, 223 }, { 23, 141, 199 }, { 2, 86, 140 }, 699 { 1, 56, 97 }, { 1, 36, 61 }, { 1, 16, 27 } 700 }, { // Band 4 701 { 55, 218, 225 }, { 13, 145, 200 }, { 1, 86, 141 }, 702 { 1, 57, 99 }, { 1, 35, 61 }, { 1, 13, 22 } 703 }, { // Band 5 704 { 15, 235, 212 }, { 1, 132, 184 }, { 1, 84, 139 }, 705 { 1, 57, 97 }, { 1, 34, 56 }, { 1, 14, 23 } 706 } 707 } 708 }, { // UV plane 709 { // Intra 710 { // Band 0 711 { 181, 21, 201 }, { 61, 37, 123 }, { 10, 38, 71 } 712 }, { // Band 1 713 { 47, 106, 172 }, { 95, 104, 173 }, { 42, 93, 159 }, 714 { 18, 77, 131 }, { 4, 50, 81 }, { 1, 17, 23 } 715 }, { // Band 2 716 { 62, 147, 199 }, { 44, 130, 189 }, { 28, 102, 154 }, 717 { 18, 75, 115 }, { 2, 44, 65 }, { 1, 12, 19 } 718 }, { // Band 3 719 { 55, 153, 210 }, { 24, 130, 194 }, { 3, 93, 146 }, 720 { 1, 61, 97 }, { 1, 31, 50 }, { 1, 10, 16 } 721 }, { // Band 4 722 { 49, 186, 223 }, { 17, 148, 204 }, { 1, 96, 142 }, 723 { 1, 53, 83 }, { 1, 26, 44 }, { 1, 11, 17 } 724 }, { // Band 5 725 { 13, 217, 212 }, { 2, 136, 180 }, { 1, 78, 124 }, 726 { 1, 50, 83 }, { 1, 29, 49 }, { 1, 14, 23 } 727 } 728 }, { // Inter 729 { // Band 0 730 { 197, 13, 247 }, { 82, 17, 222 }, { 25, 17, 162 } 731 }, { // Band 1 732 { 126, 186, 247 }, { 234, 191, 243 }, { 176, 177, 234 }, 733 { 104, 158, 220 }, { 66, 128, 186 }, { 55, 90, 137 } 734 }, { // Band 2 735 { 111, 197, 242 }, { 46, 158, 219 }, { 9, 104, 171 }, 736 { 2, 65, 125 }, { 1, 44, 80 }, { 1, 17, 91 } 737 }, { // Band 3 738 { 104, 208, 245 }, { 39, 168, 224 }, { 3, 109, 162 }, 739 { 1, 79, 124 }, { 1, 50, 102 }, { 1, 43, 102 } 740 }, { // Band 4 741 { 84, 220, 246 }, { 31, 177, 231 }, { 2, 115, 180 }, 742 { 1, 79, 134 }, { 1, 55, 77 }, { 1, 60, 79 } 743 }, { // Band 5 744 { 43, 243, 240 }, { 8, 180, 217 }, { 1, 115, 166 }, 745 { 1, 84, 121 }, { 1, 51, 67 }, { 1, 16, 6 } 746 } 747 } 748 } 749 }; 750 751 static void extend_to_full_distribution(vp9_prob *probs, vp9_prob p) { 752 memcpy(probs, vp9_pareto8_full[p = 0 ? 0 : p - 1], 753 MODEL_NODES * sizeof(vp9_prob)); 754 } 755 756 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full) { 757 if (full != model) 758 memcpy(full, model, sizeof(vp9_prob) * UNCONSTRAINED_NODES); 759 extend_to_full_distribution(&full[UNCONSTRAINED_NODES], model[PIVOT_NODE]); 760 } 761 762 void vp9_default_coef_probs(VP9_COMMON *cm) { 763 vp9_copy(cm->fc->coef_probs[TX_4X4], default_coef_probs_4x4); 764 vp9_copy(cm->fc->coef_probs[TX_8X8], default_coef_probs_8x8); 765 vp9_copy(cm->fc->coef_probs[TX_16X16], default_coef_probs_16x16); 766 vp9_copy(cm->fc->coef_probs[TX_32X32], default_coef_probs_32x32); 767 } 768 769 #define COEF_COUNT_SAT 24 770 #define COEF_MAX_UPDATE_FACTOR 112 771 #define COEF_COUNT_SAT_KEY 24 772 #define COEF_MAX_UPDATE_FACTOR_KEY 112 773 #define COEF_COUNT_SAT_AFTER_KEY 24 774 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128 775 776 static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE tx_size, 777 unsigned int count_sat, 778 unsigned int update_factor) { 779 const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx]; 780 vp9_coeff_probs_model *const probs = cm->fc->coef_probs[tx_size]; 781 const vp9_coeff_probs_model *const pre_probs = pre_fc->coef_probs[tx_size]; 782 vp9_coeff_count_model *counts = cm->counts.coef[tx_size]; 783 unsigned int (*eob_counts)[REF_TYPES][COEF_BANDS][COEFF_CONTEXTS] = 784 cm->counts.eob_branch[tx_size]; 785 int i, j, k, l, m; 786 787 for (i = 0; i < PLANE_TYPES; ++i) 788 for (j = 0; j < REF_TYPES; ++j) 789 for (k = 0; k < COEF_BANDS; ++k) 790 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l) { 791 const int n0 = counts[i][j][k][l][ZERO_TOKEN]; 792 const int n1 = counts[i][j][k][l][ONE_TOKEN]; 793 const int n2 = counts[i][j][k][l][TWO_TOKEN]; 794 const int neob = counts[i][j][k][l][EOB_MODEL_TOKEN]; 795 const unsigned int branch_ct[UNCONSTRAINED_NODES][2] = { 796 { neob, eob_counts[i][j][k][l] - neob }, 797 { n0, n1 + n2 }, 798 { n1, n2 } 799 }; 800 for (m = 0; m < UNCONSTRAINED_NODES; ++m) 801 probs[i][j][k][l][m] = merge_probs(pre_probs[i][j][k][l][m], 802 branch_ct[m], 803 count_sat, update_factor); 804 } 805 } 806 807 void vp9_adapt_coef_probs(VP9_COMMON *cm) { 808 TX_SIZE t; 809 unsigned int count_sat, update_factor; 810 811 if (frame_is_intra_only(cm)) { 812 update_factor = COEF_MAX_UPDATE_FACTOR_KEY; 813 count_sat = COEF_COUNT_SAT_KEY; 814 } else if (cm->last_frame_type == KEY_FRAME) { 815 update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY; /* adapt quickly */ 816 count_sat = COEF_COUNT_SAT_AFTER_KEY; 817 } else { 818 update_factor = COEF_MAX_UPDATE_FACTOR; 819 count_sat = COEF_COUNT_SAT; 820 } 821 for (t = TX_4X4; t <= TX_32X32; t++) 822 adapt_coef_probs(cm, t, count_sat, update_factor); 823 } 824