1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/*
2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  Use of this source code is governed by a BSD-style license
5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  that can be found in the LICENSE file in the root of the source
6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  tree. An additional intellectual property rights grant can be found
7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  in the file PATENTS.  All contributing project authors may
8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  be found in the AUTHORS file in the root of the source tree.
9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */
10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
112ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include <assert.h>
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <math.h>
13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <stdio.h>
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <string.h>
152ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vpx_mem/vpx_mem.h"
17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
182ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include "vp9/common/vp9_entropy.h"
19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_pred_common.h"
207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vp9/common/vp9_scan.h"
21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_seg_common.h"
222ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
232ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include "vp9/encoder/vp9_cost.h"
24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "vp9/encoder/vp9_encoder.h"
252ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include "vp9/encoder/vp9_tokenize.h"
26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const TOKENVALUE dct_cat_lt_10_value_tokens[] = {
287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 63}, {9, 61}, {9, 59}, {9, 57}, {9, 55}, {9, 53}, {9, 51}, {9, 49},
297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 47}, {9, 45}, {9, 43}, {9, 41}, {9, 39}, {9, 37}, {9, 35}, {9, 33},
307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 31}, {9, 29}, {9, 27}, {9, 25}, {9, 23}, {9, 21}, {9, 19}, {9, 17},
317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 15}, {9, 13}, {9, 11}, {9, 9}, {9, 7}, {9, 5}, {9, 3}, {9, 1},
327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 31}, {8, 29}, {8, 27}, {8, 25}, {8, 23}, {8, 21},
337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 19}, {8, 17}, {8, 15}, {8, 13}, {8, 11}, {8, 9},
347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 7}, {8, 5}, {8, 3}, {8, 1},
357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {7, 15}, {7, 13}, {7, 11}, {7, 9}, {7, 7}, {7, 5}, {7, 3}, {7, 1},
367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {6, 7}, {6, 5}, {6, 3}, {6, 1}, {5, 3}, {5, 1},
377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 0},
387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {1, 0},  {2, 0}, {3, 0}, {4, 0},
397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {5, 0}, {5, 2}, {6, 0}, {6, 2}, {6, 4}, {6, 6},
407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {7, 0}, {7, 2}, {7, 4}, {7, 6}, {7, 8}, {7, 10}, {7, 12}, {7, 14},
417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 0}, {8, 2}, {8, 4}, {8, 6}, {8, 8}, {8, 10}, {8, 12},
427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 14}, {8, 16}, {8, 18}, {8, 20}, {8, 22}, {8, 24},
437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {8, 26}, {8, 28}, {8, 30}, {9, 0}, {9, 2},
447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 4}, {9, 6}, {9, 8}, {9, 10}, {9, 12}, {9, 14}, {9, 16},
457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 18}, {9, 20}, {9, 22}, {9, 24}, {9, 26}, {9, 28},
467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 30}, {9, 32}, {9, 34}, {9, 36}, {9, 38}, {9, 40},
477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 42}, {9, 44}, {9, 46}, {9, 48}, {9, 50}, {9, 52},
487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {9, 54}, {9, 56}, {9, 58}, {9, 60}, {9, 62}
497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst TOKENVALUE *vp9_dct_cat_lt_10_value_tokens = dct_cat_lt_10_value_tokens +
517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    (sizeof(dct_cat_lt_10_value_tokens) / sizeof(*dct_cat_lt_10_value_tokens))
527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    / 2;
532ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
542ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian// Array indices are identical to previously-existing CONTEXT_NODE indices
557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vpx_tree_index vp9_coef_tree[TREE_SIZE(ENTROPY_TOKENS)] = {
562ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -EOB_TOKEN, 2,                       // 0  = EOB
572ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -ZERO_TOKEN, 4,                      // 1  = ZERO
582ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -ONE_TOKEN, 6,                       // 2  = ONE
592ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  8, 12,                               // 3  = LOW_VAL
602ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -TWO_TOKEN, 10,                      // 4  = TWO
612ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -THREE_TOKEN, -FOUR_TOKEN,           // 5  = THREE
622ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  14, 16,                              // 6  = HIGH_LOW
632ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -CATEGORY1_TOKEN, -CATEGORY2_TOKEN,  // 7  = CAT_ONE
642ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  18, 20,                              // 8  = CAT_THREEFOUR
652ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -CATEGORY3_TOKEN, -CATEGORY4_TOKEN,  // 9  = CAT_THREE
662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  -CATEGORY5_TOKEN, -CATEGORY6_TOKEN   // 10 = CAT_FIVE
672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian};
682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat1[2] = {0, 0};
707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat2[4] = {2, 2, 0, 0};
717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat3[6] = {2, 2, 4, 4, 0, 0};
727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat4[8] = {2, 2, 4, 4, 6, 6, 0, 0};
737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat5[10] = {2, 2, 4, 4, 6, 6, 8, 8, 0, 0};
747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat6[28] = {2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12,
757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 0, 0};
767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t zero_cost[] = {0};
787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t one_cost[] = {255, 257};
797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t two_cost[] = {255, 257};
807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t three_cost[] = {255, 257};
817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t four_cost[] = {255, 257};
827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t cat1_cost[] = {429, 431, 616, 618};
837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t cat2_cost[] = {624, 626, 727, 729, 848, 850, 951, 953};
847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t cat3_cost[] = {
857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  820, 822, 893, 895, 940, 942, 1013, 1015, 1096, 1098, 1169, 1171, 1216, 1218,
867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1289, 1291
877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t cat4_cost[] = {
897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1032, 1034, 1075, 1077, 1105, 1107, 1148, 1150, 1194, 1196, 1237, 1239,
907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1267, 1269, 1310, 1312, 1328, 1330, 1371, 1373, 1401, 1403, 1444, 1446,
917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1490, 1492, 1533, 1535, 1563, 1565, 1606, 1608
927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const int16_t cat5_cost[] = {
947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1269, 1271, 1283, 1285, 1306, 1308, 1320,
957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1322, 1347, 1349, 1361, 1363, 1384, 1386, 1398, 1400, 1443, 1445, 1457,
967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1459, 1480, 1482, 1494, 1496, 1521, 1523, 1535, 1537, 1558, 1560, 1572,
977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1574, 1592, 1594, 1606, 1608, 1629, 1631, 1643, 1645, 1670, 1672, 1684,
987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1686, 1707, 1709, 1721, 1723, 1766, 1768, 1780, 1782, 1803, 1805, 1817,
997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1819, 1844, 1846, 1858, 1860, 1881, 1883, 1895, 1897
1007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
1017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst int16_t vp9_cat6_low_cost[256] = {
1027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1638, 1640, 1646, 1648, 1652, 1654, 1660, 1662,
1037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1670, 1672, 1678, 1680, 1684, 1686, 1692, 1694, 1711, 1713, 1719, 1721,
1047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1725, 1727, 1733, 1735, 1743, 1745, 1751, 1753, 1757, 1759, 1765, 1767,
1057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1787, 1789, 1795, 1797, 1801, 1803, 1809, 1811, 1819, 1821, 1827, 1829,
1067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1833, 1835, 1841, 1843, 1860, 1862, 1868, 1870, 1874, 1876, 1882, 1884,
1077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1892, 1894, 1900, 1902, 1906, 1908, 1914, 1916, 1940, 1942, 1948, 1950,
1087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1954, 1956, 1962, 1964, 1972, 1974, 1980, 1982, 1986, 1988, 1994, 1996,
1097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2013, 2015, 2021, 2023, 2027, 2029, 2035, 2037, 2045, 2047, 2053, 2055,
1107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2059, 2061, 2067, 2069, 2089, 2091, 2097, 2099, 2103, 2105, 2111, 2113,
1117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2121, 2123, 2129, 2131, 2135, 2137, 2143, 2145, 2162, 2164, 2170, 2172,
1127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2176, 2178, 2184, 2186, 2194, 2196, 2202, 2204, 2208, 2210, 2216, 2218,
1137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2082, 2084, 2090, 2092, 2096, 2098, 2104, 2106, 2114, 2116, 2122, 2124,
1147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2128, 2130, 2136, 2138, 2155, 2157, 2163, 2165, 2169, 2171, 2177, 2179,
1157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2187, 2189, 2195, 2197, 2201, 2203, 2209, 2211, 2231, 2233, 2239, 2241,
1167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2245, 2247, 2253, 2255, 2263, 2265, 2271, 2273, 2277, 2279, 2285, 2287,
1177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2304, 2306, 2312, 2314, 2318, 2320, 2326, 2328, 2336, 2338, 2344, 2346,
1187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2350, 2352, 2358, 2360, 2384, 2386, 2392, 2394, 2398, 2400, 2406, 2408,
1197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2416, 2418, 2424, 2426, 2430, 2432, 2438, 2440, 2457, 2459, 2465, 2467,
1207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2471, 2473, 2479, 2481, 2489, 2491, 2497, 2499, 2503, 2505, 2511, 2513,
1217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2533, 2535, 2541, 2543, 2547, 2549, 2555, 2557, 2565, 2567, 2573, 2575,
1227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2579, 2581, 2587, 2589, 2606, 2608, 2614, 2616, 2620, 2622, 2628, 2630,
1237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2638, 2640, 2646, 2648, 2652, 2654, 2660, 2662
1247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
1257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst int16_t vp9_cat6_high_cost[128] = {
1267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  72, 892, 1183, 2003, 1448, 2268, 2559, 3379,
1277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  1709, 2529, 2820, 3640, 3085, 3905, 4196, 5016, 2118, 2938, 3229, 4049,
1287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  3494, 4314, 4605, 5425, 3755, 4575, 4866, 5686, 5131, 5951, 6242, 7062,
1297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2118, 2938, 3229, 4049, 3494, 4314, 4605, 5425, 3755, 4575, 4866, 5686,
1307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5131, 5951, 6242, 7062, 4164, 4984, 5275, 6095, 5540, 6360, 6651, 7471,
1317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5801, 6621, 6912, 7732, 7177, 7997, 8288, 9108, 2118, 2938, 3229, 4049,
1327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  3494, 4314, 4605, 5425, 3755, 4575, 4866, 5686, 5131, 5951, 6242, 7062,
1337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  4164, 4984, 5275, 6095, 5540, 6360, 6651, 7471, 5801, 6621, 6912, 7732,
1347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7177, 7997, 8288, 9108, 4164, 4984, 5275, 6095, 5540, 6360, 6651, 7471,
1357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5801, 6621, 6912, 7732, 7177, 7997, 8288, 9108, 6210, 7030, 7321, 8141,
1367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7586, 8406, 8697, 9517, 7847, 8667, 8958, 9778, 9223, 10043, 10334, 11154
1372ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian};
1382ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst int16_t vp9_cat6_high10_high_cost[512] = {
1417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  74, 894, 1185, 2005, 1450, 2270, 2561,
1427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  3381, 1711, 2531, 2822, 3642, 3087, 3907, 4198, 5018, 2120, 2940, 3231,
1437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  4051, 3496, 4316, 4607, 5427, 3757, 4577, 4868, 5688, 5133, 5953, 6244,
1447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7064, 2120, 2940, 3231, 4051, 3496, 4316, 4607, 5427, 3757, 4577, 4868,
1457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5688, 5133, 5953, 6244, 7064, 4166, 4986, 5277, 6097, 5542, 6362, 6653,
1467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290, 9110, 2120, 2940, 3231,
1477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  4051, 3496, 4316, 4607, 5427, 3757, 4577, 4868, 5688, 5133, 5953, 6244,
1487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7064, 4166, 4986, 5277, 6097, 5542, 6362, 6653, 7473, 5803, 6623, 6914,
1497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7734, 7179, 7999, 8290, 9110, 4166, 4986, 5277, 6097, 5542, 6362, 6653,
1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290, 9110, 6212, 7032, 7323,
1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960, 9780, 9225, 10045, 10336,
1527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11156, 2120, 2940, 3231, 4051, 3496, 4316, 4607, 5427, 3757, 4577, 4868,
1537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5688, 5133, 5953, 6244, 7064, 4166, 4986, 5277, 6097, 5542, 6362, 6653,
1547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290, 9110, 4166, 4986, 5277,
1557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6097, 5542, 6362, 6653, 7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290,
1567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9110, 6212, 7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960,
1577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9780, 9225, 10045, 10336, 11156, 4166, 4986, 5277, 6097, 5542, 6362, 6653,
1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290, 9110, 6212, 7032, 7323,
1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960, 9780, 9225, 10045, 10336,
1607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11156, 6212, 7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960,
1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9780, 9225, 10045, 10336, 11156, 8258, 9078, 9369, 10189, 9634, 10454,
1627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10745, 11565, 9895, 10715, 11006, 11826, 11271, 12091, 12382, 13202, 2120,
1637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2940, 3231, 4051, 3496, 4316, 4607, 5427, 3757, 4577, 4868, 5688, 5133,
1647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5953, 6244, 7064, 4166, 4986, 5277, 6097, 5542, 6362, 6653, 7473, 5803,
1657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6623, 6914, 7734, 7179, 7999, 8290, 9110, 4166, 4986, 5277, 6097, 5542,
1667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6362, 6653, 7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290, 9110, 6212,
1677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960, 9780, 9225,
1687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10045, 10336, 11156, 4166, 4986, 5277, 6097, 5542, 6362, 6653, 7473, 5803,
1697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6623, 6914, 7734, 7179, 7999, 8290, 9110, 6212, 7032, 7323, 8143, 7588,
1707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8408, 8699, 9519, 7849, 8669, 8960, 9780, 9225, 10045, 10336, 11156, 6212,
1717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960, 9780, 9225,
1727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10045, 10336, 11156, 8258, 9078, 9369, 10189, 9634, 10454, 10745, 11565,
1737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9895, 10715, 11006, 11826, 11271, 12091, 12382, 13202, 4166, 4986, 5277,
1747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6097, 5542, 6362, 6653, 7473, 5803, 6623, 6914, 7734, 7179, 7999, 8290,
1757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9110, 6212, 7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669, 8960,
1767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9780, 9225, 10045, 10336, 11156, 6212, 7032, 7323, 8143, 7588, 8408, 8699,
1777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9519, 7849, 8669, 8960, 9780, 9225, 10045, 10336, 11156, 8258, 9078, 9369,
1787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10189, 9634, 10454, 10745, 11565, 9895, 10715, 11006, 11826, 11271, 12091,
1797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12382, 13202, 6212, 7032, 7323, 8143, 7588, 8408, 8699, 9519, 7849, 8669,
1807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8960, 9780, 9225, 10045, 10336, 11156, 8258, 9078, 9369, 10189, 9634, 10454,
1817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10745, 11565, 9895, 10715, 11006, 11826, 11271, 12091, 12382, 13202, 8258,
1827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9078, 9369, 10189, 9634, 10454, 10745, 11565, 9895, 10715, 11006, 11826,
1837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11271, 12091, 12382, 13202, 10304, 11124, 11415, 12235, 11680, 12500, 12791,
1847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13611, 11941, 12761, 13052, 13872, 13317, 14137, 14428, 15248,
1857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
1867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst int16_t vp9_cat6_high12_high_cost[2048] = {
1877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  76, 896, 1187, 2007, 1452, 2272, 2563,
1887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  3383, 1713, 2533, 2824, 3644, 3089, 3909, 4200, 5020, 2122, 2942, 3233,
1897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870, 5690, 5135, 5955, 6246,
1907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7066, 2122, 2942, 3233, 4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870,
1917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5690, 5135, 5955, 6246, 7066, 4168, 4988, 5279, 6099, 5544, 6364, 6655,
1927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 2122, 2942, 3233,
1937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870, 5690, 5135, 5955, 6246,
1947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7066, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916,
1957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7736, 7181, 8001, 8292, 9112, 4168, 4988, 5279, 6099, 5544, 6364, 6655,
1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325,
1977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338,
1987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11158, 2122, 2942, 3233, 4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870,
1997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5690, 5135, 5955, 6246, 7066, 4168, 4988, 5279, 6099, 5544, 6364, 6655,
2007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 4168, 4988, 5279,
2017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292,
2027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962,
2037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9782, 9227, 10047, 10338, 11158, 4168, 4988, 5279, 6099, 5544, 6364, 6655,
2047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325,
2057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338,
2067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11158, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962,
2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456,
2087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 2122,
2097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  2942, 3233, 4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870, 5690, 5135,
2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5955, 6246, 7066, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805,
2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6625, 6916, 7736, 7181, 8001, 8292, 9112, 4168, 4988, 5279, 6099, 5544,
2127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214,
2137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227,
2147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10047, 10338, 11158, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805,
2157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145, 7590,
2167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 6214,
2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227,
2187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567,
2197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 4168, 4988, 5279,
2207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292,
2217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962,
2227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9782, 9227, 10047, 10338, 11158, 6214, 7034, 7325, 8145, 7590, 8410, 8701,
2237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371,
2247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093,
2257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12384, 13204, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671,
2267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456,
2277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 8260,
2287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828,
2297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11273, 12093, 12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793,
2307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 2122, 2942,
2317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  3233, 4053, 3498, 4318, 4609, 5429, 3759, 4579, 4870, 5690, 5135, 5955,
2327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6246, 7066, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625,
2337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6916, 7736, 7181, 8001, 8292, 9112, 4168, 4988, 5279, 6099, 5544, 6364,
2347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034,
2357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047,
2367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10338, 11158, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625,
2377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145, 7590, 8410,
2387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 6214, 7034,
2397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047,
2407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897,
2417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10717, 11008, 11828, 11273, 12093, 12384, 13204, 4168, 4988, 5279, 6099,
2427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112,
2437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782,
2447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9227, 10047, 10338, 11158, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521,
2457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191,
2467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384,
2477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13204, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962,
2487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456,
2497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 8260,
2507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828,
2517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11273, 12093, 12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793,
2527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 4168, 4988,
2537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001,
2547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8292, 9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671,
2557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8962, 9782, 9227, 10047, 10338, 11158, 6214, 7034, 7325, 8145, 7590, 8410,
2567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080,
2577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273,
2587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12093, 12384, 13204, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851,
2597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636,
2607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204,
2617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008,
2627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11828, 11273, 12093, 12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502,
2637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12793, 13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 6214,
2647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227,
2657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567,
2667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 8260, 9080, 9371,
2677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093,
2687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943,
2697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12763, 13054, 13874, 13319, 14139, 14430, 15250, 8260, 9080, 9371, 10191,
2707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384,
2717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763,
2727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13054, 13874, 13319, 14139, 14430, 15250, 10306, 11126, 11417, 12237, 11682,
2737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250,
2747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12352, 13172, 13463, 14283, 13728, 14548, 14839, 15659, 13989, 14809, 15100,
2757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  15920, 15365, 16185, 16476, 17296, 2122, 2942, 3233, 4053, 3498, 4318, 4609,
2767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5429, 3759, 4579, 4870, 5690, 5135, 5955, 6246, 7066, 4168, 4988, 5279,
2777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292,
2787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9112, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916,
2797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701,
2807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 4168, 4988, 5279,
2817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916, 7736, 7181, 8001, 8292,
2827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962,
2837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9782, 9227, 10047, 10338, 11158, 6214, 7034, 7325, 8145, 7590, 8410, 8701,
2847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371,
2857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093,
2867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12384, 13204, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625,
2877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145, 7590, 8410,
2887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 6214, 7034,
2897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047,
2907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897,
2917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10717, 11008, 11828, 11273, 12093, 12384, 13204, 6214, 7034, 7325, 8145,
2927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158,
2937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008,
2947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11828, 11273, 12093, 12384, 13204, 8260, 9080, 9371, 10191, 9636, 10456,
2957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306,
2967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874,
2977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13319, 14139, 14430, 15250, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475,
2987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  5805, 6625, 6916, 7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145,
2997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158,
3007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782,
3017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747,
3027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 6214, 7034,
3037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7325, 8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047,
3047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10338, 11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897,
3057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10717, 11008, 11828, 11273, 12093, 12384, 13204, 8260, 9080, 9371, 10191,
3067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384,
3077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763,
3087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13054, 13874, 13319, 14139, 14430, 15250, 6214, 7034, 7325, 8145, 7590,
3097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260,
3107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828,
3117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11273, 12093, 12384, 13204, 8260, 9080, 9371, 10191, 9636, 10456, 10747,
3127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306, 11126,
3137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319,
3147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14139, 14430, 15250, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567,
3157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306, 11126, 11417,
3167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319, 14139,
3177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14430, 15250, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943,
3187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12763, 13054, 13874, 13319, 14139, 14430, 15250, 12352, 13172, 13463, 14283,
3197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13728, 14548, 14839, 15659, 13989, 14809, 15100, 15920, 15365, 16185, 16476,
3207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  17296, 4168, 4988, 5279, 6099, 5544, 6364, 6655, 7475, 5805, 6625, 6916,
3217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  7736, 7181, 8001, 8292, 9112, 6214, 7034, 7325, 8145, 7590, 8410, 8701,
3227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 6214, 7034, 7325,
3237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338,
3247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717,
3257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11008, 11828, 11273, 12093, 12384, 13204, 6214, 7034, 7325, 8145, 7590,
3267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260,
3277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828,
3287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11273, 12093, 12384, 13204, 8260, 9080, 9371, 10191, 9636, 10456, 10747,
3297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306, 11126,
3307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319,
3317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14139, 14430, 15250, 6214, 7034, 7325, 8145, 7590, 8410, 8701, 9521, 7851,
3327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8671, 8962, 9782, 9227, 10047, 10338, 11158, 8260, 9080, 9371, 10191, 9636,
3337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204,
3347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008,
3357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11828, 11273, 12093, 12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502,
3367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12793, 13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 8260,
3377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717, 11008, 11828,
3387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11273, 12093, 12384, 13204, 10306, 11126, 11417, 12237, 11682, 12502, 12793,
3397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 10306, 11126,
3407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319,
3417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14139, 14430, 15250, 12352, 13172, 13463, 14283, 13728, 14548, 14839, 15659,
3427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13989, 14809, 15100, 15920, 15365, 16185, 16476, 17296, 6214, 7034, 7325,
3437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  8145, 7590, 8410, 8701, 9521, 7851, 8671, 8962, 9782, 9227, 10047, 10338,
3447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11158, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567, 9897, 10717,
3457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11008, 11828, 11273, 12093, 12384, 13204, 8260, 9080, 9371, 10191, 9636,
3467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10456, 10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204,
3477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054,
3487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13874, 13319, 14139, 14430, 15250, 8260, 9080, 9371, 10191, 9636, 10456,
3497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  10747, 11567, 9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306,
3507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874,
3517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13319, 14139, 14430, 15250, 10306, 11126, 11417, 12237, 11682, 12502, 12793,
3527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13613, 11943, 12763, 13054, 13874, 13319, 14139, 14430, 15250, 12352, 13172,
3537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13463, 14283, 13728, 14548, 14839, 15659, 13989, 14809, 15100, 15920, 15365,
3547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  16185, 16476, 17296, 8260, 9080, 9371, 10191, 9636, 10456, 10747, 11567,
3557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  9897, 10717, 11008, 11828, 11273, 12093, 12384, 13204, 10306, 11126, 11417,
3567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12237, 11682, 12502, 12793, 13613, 11943, 12763, 13054, 13874, 13319, 14139,
3577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14430, 15250, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943,
3587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12763, 13054, 13874, 13319, 14139, 14430, 15250, 12352, 13172, 13463, 14283,
3597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13728, 14548, 14839, 15659, 13989, 14809, 15100, 15920, 15365, 16185, 16476,
3607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  17296, 10306, 11126, 11417, 12237, 11682, 12502, 12793, 13613, 11943, 12763,
3617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  13054, 13874, 13319, 14139, 14430, 15250, 12352, 13172, 13463, 14283, 13728,
3627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  14548, 14839, 15659, 13989, 14809, 15100, 15920, 15365, 16185, 16476, 17296,
3637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12352, 13172, 13463, 14283, 13728, 14548, 14839, 15659, 13989, 14809, 15100,
3647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  15920, 15365, 16185, 16476, 17296, 14398, 15218, 15509, 16329, 15774, 16594,
3657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  16885, 17705, 16035, 16855, 17146, 17966, 17411, 18231, 18522, 19342
3667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
3677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif
3687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
3697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
3707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat1_high10[2] = {0, 0};
3717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat2_high10[4] = {2, 2, 0, 0};
3727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat3_high10[6] = {2, 2, 4, 4, 0, 0};
3737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat4_high10[8] = {2, 2, 4, 4, 6, 6, 0, 0};
3747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat5_high10[10] = {2, 2, 4, 4, 6, 6, 8, 8, 0, 0};
3757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat6_high10[32] = {2, 2, 4, 4, 6, 6, 8, 8, 10, 10,
3767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28,
3777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  30, 30, 0, 0};
3787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat1_high12[2] = {0, 0};
3797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat2_high12[4] = {2, 2, 0, 0};
3807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat3_high12[6] = {2, 2, 4, 4, 0, 0};
3817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat4_high12[8] = {2, 2, 4, 4, 6, 6, 0, 0};
3827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat5_high12[10] = {2, 2, 4, 4, 6, 6, 8, 8, 0, 0};
3837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic const vpx_tree_index cat6_high12[36] = {2, 2, 4, 4, 6, 6, 8, 8, 10, 10,
3847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28,
3857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  30, 30, 32, 32, 34, 34, 0, 0};
3867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif
3872ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
3882ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianconst vp9_extra_bit vp9_extra_bits[ENTROPY_TOKENS] = {
3897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost},                             // ZERO_TOKEN
3907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 1, one_cost},                              // ONE_TOKEN
3917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 2, two_cost},                              // TWO_TOKEN
3927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 3, three_cost},                            // THREE_TOKEN
3937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 4, four_cost},                             // FOUR_TOKEN
3947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat1, vp9_cat1_prob, 1,  CAT1_MIN_VAL, cat1_cost},  // CATEGORY1_TOKEN
3957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat2, vp9_cat2_prob, 2,  CAT2_MIN_VAL, cat2_cost},  // CATEGORY2_TOKEN
3967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat3, vp9_cat3_prob, 3,  CAT3_MIN_VAL, cat3_cost},  // CATEGORY3_TOKEN
3977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat4, vp9_cat4_prob, 4,  CAT4_MIN_VAL, cat4_cost},  // CATEGORY4_TOKEN
3987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat5, vp9_cat5_prob, 5,  CAT5_MIN_VAL, cat5_cost},  // CATEGORY5_TOKEN
3997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat6, vp9_cat6_prob, 14, CAT6_MIN_VAL, 0},          // CATEGORY6_TOKEN
4007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost}                              // EOB_TOKEN
4012ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian};
4022ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
4037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
4047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vp9_extra_bit vp9_extra_bits_high10[ENTROPY_TOKENS] = {
4057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost},                                           // ZERO
4067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 1, one_cost},                                            // ONE
4077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 2, two_cost},                                            // TWO
4087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 3, three_cost},                                          // THREE
4097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 4, four_cost},                                           // FOUR
4107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat1_high10, vp9_cat1_prob_high10, 1,  CAT1_MIN_VAL, cat1_cost},  // CAT1
4117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat2_high10, vp9_cat2_prob_high10, 2,  CAT2_MIN_VAL, cat2_cost},  // CAT2
4127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat3_high10, vp9_cat3_prob_high10, 3,  CAT3_MIN_VAL, cat3_cost},  // CAT3
4137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat4_high10, vp9_cat4_prob_high10, 4,  CAT4_MIN_VAL, cat4_cost},  // CAT4
4147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat5_high10, vp9_cat5_prob_high10, 5,  CAT5_MIN_VAL, cat5_cost},  // CAT5
4157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat6_high10, vp9_cat6_prob_high10, 16, CAT6_MIN_VAL, 0},          // CAT6
4167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost}                                            // EOB
4177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
4187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst vp9_extra_bit vp9_extra_bits_high12[ENTROPY_TOKENS] = {
4197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost},                                           // ZERO
4207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 1, one_cost},                                            // ONE
4217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 2, two_cost},                                            // TWO
4227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 3, three_cost},                                          // THREE
4237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 4, four_cost},                                           // FOUR
4247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat1_high12, vp9_cat1_prob_high12, 1,  CAT1_MIN_VAL, cat1_cost},  // CAT1
4257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat2_high12, vp9_cat2_prob_high12, 2,  CAT2_MIN_VAL, cat2_cost},  // CAT2
4267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat3_high12, vp9_cat3_prob_high12, 3,  CAT3_MIN_VAL, cat3_cost},  // CAT3
4277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat4_high12, vp9_cat4_prob_high12, 4,  CAT4_MIN_VAL, cat4_cost},  // CAT4
4287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat5_high12, vp9_cat5_prob_high12, 5,  CAT5_MIN_VAL, cat5_cost},  // CAT5
4297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {cat6_high12, vp9_cat6_prob_high12, 18, CAT6_MIN_VAL, 0},          // CAT6
4307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {0, 0, 0, 0, zero_cost}                                            // EOB
4317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
4327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif
433ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
4347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst struct vp9_token vp9_coef_encodings[ENTROPY_TOKENS] = {
4357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {2, 2}, {6, 3}, {28, 5}, {58, 6}, {59, 6}, {60, 6}, {61, 6}, {124, 7},
4367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {125, 7}, {126, 7}, {127, 7}, {0, 1}
4377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
438ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
439ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
440ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstruct tokenize_b_args {
441ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  VP9_COMP *cpi;
4427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  ThreadData *td;
443ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  TOKENEXTRA **tp;
444ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
445ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
4461184aebb761cbeac9124c37189a80a1a58f04b6bhkuangstatic void set_entropy_context_b(int plane, int block, BLOCK_SIZE plane_bsize,
4471184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                                  TX_SIZE tx_size, void *arg) {
448f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  struct tokenize_b_args* const args = arg;
4497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  ThreadData *const td = args->td;
4507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCK *const x = &td->mb;
4517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCKD *const xd = &x->e_mbd;
4527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct macroblock_plane *p = &x->plane[plane];
4531184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  struct macroblockd_plane *pd = &xd->plane[plane];
4541184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  int aoff, loff;
4551184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &aoff, &loff);
4562ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  vp9_set_contexts(xd, pd, plane_bsize, tx_size, p->eobs[block] > 0,
4572ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                   aoff, loff);
4582ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
4592ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
4607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void add_token(TOKENEXTRA **t, const vpx_prob *context_tree,
4617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                             int32_t extra, uint8_t token,
4622ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                             uint8_t skip_eob_node,
4632ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                             unsigned int *counts) {
4642ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->token = token;
4652ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->extra = extra;
4662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->context_tree = context_tree;
4672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->skip_eob_node = skip_eob_node;
4682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)++;
4692ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  ++counts[token];
4702ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
4712ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
4722ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic INLINE void add_token_no_extra(TOKENEXTRA **t,
4737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                      const vpx_prob *context_tree,
4742ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                                      uint8_t token,
4752ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                                      uint8_t skip_eob_node,
4762ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                                      unsigned int *counts) {
4772ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->token = token;
4782ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->context_tree = context_tree;
4792ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)->skip_eob_node = skip_eob_node;
4802ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  (*t)++;
4812ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  ++counts[token];
4822ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
4832ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
4842ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic INLINE int get_tx_eob(const struct segmentation *seg, int segment_id,
4852ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                             TX_SIZE tx_size) {
4862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  const int eob_max = 16 << (tx_size << 1);
4877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  return segfeature_active(seg, segment_id, SEG_LVL_SKIP) ? 0 : eob_max;
488f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang}
489f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
4901184aebb761cbeac9124c37189a80a1a58f04b6bhkuangstatic void tokenize_b(int plane, int block, BLOCK_SIZE plane_bsize,
4911184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                       TX_SIZE tx_size, void *arg) {
492ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  struct tokenize_b_args* const args = arg;
493ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  VP9_COMP *cpi = args->cpi;
4947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  ThreadData *const td = args->td;
4957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCK *const x = &td->mb;
4967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCKD *const xd = &x->e_mbd;
497ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  TOKENEXTRA **tp = args->tp;
4984fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang  uint8_t token_cache[32 * 32];
4997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct macroblock_plane *p = &x->plane[plane];
5001184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  struct macroblockd_plane *pd = &xd->plane[plane];
5014fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang  MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
502ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int pt; /* near block/prev token context index */
5032ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  int c;
504ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  TOKENEXTRA *t = *tp;        /* store tokens starting here */
5052ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  int eob = p->eobs[block];
5061184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  const PLANE_TYPE type = pd->plane_type;
5077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  const tran_low_t *qcoeff = BLOCK_OFFSET(p->qcoeff, block);
508ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  const int segment_id = mbmi->segment_id;
50991037db265ecdd914a26e056cf69207b4f50924ehkuang  const int16_t *scan, *nb;
5102ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  const scan_order *so;
511f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  const int ref = is_inter_block(mbmi);
5122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  unsigned int (*const counts)[COEFF_CONTEXTS][ENTROPY_TOKENS] =
5137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      td->rd_counts.coef_counts[tx_size][type][ref];
5147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  vpx_prob (*const coef_probs)[COEFF_CONTEXTS][UNCONSTRAINED_NODES] =
5157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      cpi->common.fc->coef_probs[tx_size][type][ref];
5162ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  unsigned int (*const eob_branch)[COEFF_CONTEXTS] =
5177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      td->counts->eob_branch[tx_size][type][ref];
5182ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  const uint8_t *const band = get_band_translate(tx_size);
5191184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  const int seg_eob = get_tx_eob(&cpi->common.seg, segment_id, tx_size);
5207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  int16_t token;
5217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  EXTRABIT extra;
5221184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  int aoff, loff;
5231184aebb761cbeac9124c37189a80a1a58f04b6bhkuang  txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &aoff, &loff);
524ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
5255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang  pt = get_entropy_context(tx_size, pd->above_context + aoff,
5262ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                           pd->left_context + loff);
5272ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  so = get_scan(xd, tx_size, type, block);
5282ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  scan = so->scan;
5292ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  nb = so->neighbors;
530ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  c = 0;
5317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
5322ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  while (c < eob) {
533ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    int v = 0;
5342ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    int skip_eob = 0;
5352ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    v = qcoeff[scan[c]];
536ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
5372ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    while (!v) {
5382ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      add_token_no_extra(&t, coef_probs[band[c]][pt], ZERO_TOKEN, skip_eob,
5392ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                         counts[band[c]][pt]);
5402ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      eob_branch[band[c]][pt] += !skip_eob;
541ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
5422ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      skip_eob = 1;
5432ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      token_cache[scan[c]] = 0;
5442ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      ++c;
5452ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      pt = get_coef_context(nb, token_cache, c);
5462ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian      v = qcoeff[scan[c]];
5472ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    }
548f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
5497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vp9_get_token_extra(v, &token, &extra);
5507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
5517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    add_token(&t, coef_probs[band[c]][pt], extra, (uint8_t)token,
5527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian              (uint8_t)skip_eob, counts[band[c]][pt]);
5532ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    eob_branch[band[c]][pt] += !skip_eob;
5542ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
5557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    token_cache[scan[c]] = vp9_pt_energy_class[token];
5562ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    ++c;
5572ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    pt = get_coef_context(nb, token_cache, c);
5582ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  }
5592ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  if (c < seg_eob) {
5602ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    add_token_no_extra(&t, coef_probs[band[c]][pt], EOB_TOKEN, 0,
5612ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                       counts[band[c]][pt]);
5622ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    ++eob_branch[band[c]][pt];
5632ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  }
564ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
565ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  *tp = t;
5661184aebb761cbeac9124c37189a80a1a58f04b6bhkuang
5672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  vp9_set_contexts(xd, pd, plane_bsize, tx_size, c > 0, aoff, loff);
568ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
569ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
570ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstruct is_skippable_args {
5717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  uint16_t *eobs;
572ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int *skippable;
573ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
574ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstatic void is_skippable(int plane, int block,
5751184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                         BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
5761184aebb761cbeac9124c37189a80a1a58f04b6bhkuang                         void *argv) {
577ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  struct is_skippable_args *args = argv;
5787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  (void)plane;
579ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  (void)plane_bsize;
580ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  (void)tx_size;
5817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  args->skippable[0] &= (!args->eobs[block]);
582ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
583ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
584ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(yaowu): rewrite and optimize this function to remove the usage of
585ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//              vp9_foreach_transform_block() and simplify is_skippable().
5862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianint vp9_is_skippable_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) {
587ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int result = 1;
5887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct is_skippable_args args = {x->plane[plane].eobs, &result};
5892ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  vp9_foreach_transformed_block_in_plane(&x->e_mbd, bsize, plane, is_skippable,
5902ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian                                         &args);
591ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  return result;
592ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
593ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
5947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic void has_high_freq_coeff(int plane, int block,
5957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
5967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                void *argv) {
5977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct is_skippable_args *args = argv;
5987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  int eobs = (tx_size == TX_4X4) ? 3 : 10;
5997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  (void) plane;
6007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  (void) plane_bsize;
6017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
6027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  *(args->skippable) |= (args->eobs[block] > eobs);
6037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian}
6047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
6057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianint vp9_has_high_freq_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) {
6067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  int result = 0;
6077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct is_skippable_args args = {x->plane[plane].eobs, &result};
6087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  vp9_foreach_transformed_block_in_plane(&x->e_mbd, bsize, plane,
6097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                         has_high_freq_coeff, &args);
6107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  return result;
6117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian}
6127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
6137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_tokenize_sb(VP9_COMP *cpi, ThreadData *td, TOKENEXTRA **t,
6147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                     int dry_run, BLOCK_SIZE bsize) {
61591037db265ecdd914a26e056cf69207b4f50924ehkuang  VP9_COMMON *const cm = &cpi->common;
6167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCK *const x = &td->mb;
6177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  MACROBLOCKD *const xd = &x->e_mbd;
6184fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang  MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
6192ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  const int ctx = vp9_get_skip_context(xd);
6207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  const int skip_inc = !segfeature_active(&cm->seg, mbmi->segment_id,
6217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                          SEG_LVL_SKIP);
6227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  struct tokenize_b_args arg = {cpi, td, t};
6232ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian  if (mbmi->skip) {
624ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    if (!dry_run)
6257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      td->counts->skip[ctx][1] += skip_inc;
6261184aebb761cbeac9124c37189a80a1a58f04b6bhkuang    reset_skip_context(xd, bsize);
627ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return;
628ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  }
629ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
630f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  if (!dry_run) {
6317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    td->counts->skip[ctx][0] += skip_inc;
6322ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    vp9_foreach_transformed_block(xd, bsize, tokenize_b, &arg);
633f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  } else {
6342ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian    vp9_foreach_transformed_block(xd, bsize, set_entropy_context_b, &arg);
635f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang  }
636ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
637