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