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