11b362b15af34006e6a11974088a46d42b903418eJohann/* 21b362b15af34006e6a11974088a46d42b903418eJohann * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 31b362b15af34006e6a11974088a46d42b903418eJohann * 41b362b15af34006e6a11974088a46d42b903418eJohann * Use of this source code is governed by a BSD-style license 51b362b15af34006e6a11974088a46d42b903418eJohann * that can be found in the LICENSE file in the root of the source 61b362b15af34006e6a11974088a46d42b903418eJohann * tree. An additional intellectual property rights grant can be found 71b362b15af34006e6a11974088a46d42b903418eJohann * in the file PATENTS. All contributing project authors may 81b362b15af34006e6a11974088a46d42b903418eJohann * be found in the AUTHORS file in the root of the source tree. 91b362b15af34006e6a11974088a46d42b903418eJohann */ 101b362b15af34006e6a11974088a46d42b903418eJohann 111b362b15af34006e6a11974088a46d42b903418eJohann#include "entropy.h" 121b362b15af34006e6a11974088a46d42b903418eJohann#include "blockd.h" 131b362b15af34006e6a11974088a46d42b903418eJohann#include "onyxc_int.h" 141b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_mem/vpx_mem.h" 151b362b15af34006e6a11974088a46d42b903418eJohann 161b362b15af34006e6a11974088a46d42b903418eJohann#include "coefupdateprobs.h" 171b362b15af34006e6a11974088a46d42b903418eJohann 181b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const unsigned char, vp8_norm[256]) = 191b362b15af34006e6a11974088a46d42b903418eJohann{ 201b362b15af34006e6a11974088a46d42b903418eJohann 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 211b362b15af34006e6a11974088a46d42b903418eJohann 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 221b362b15af34006e6a11974088a46d42b903418eJohann 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 231b362b15af34006e6a11974088a46d42b903418eJohann 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 241b362b15af34006e6a11974088a46d42b903418eJohann 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 251b362b15af34006e6a11974088a46d42b903418eJohann 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 261b362b15af34006e6a11974088a46d42b903418eJohann 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 271b362b15af34006e6a11974088a46d42b903418eJohann 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 281b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351b362b15af34006e6a11974088a46d42b903418eJohann 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 361b362b15af34006e6a11974088a46d42b903418eJohann}; 371b362b15af34006e6a11974088a46d42b903418eJohann 381b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const unsigned char, vp8_coef_bands[16]) = 391b362b15af34006e6a11974088a46d42b903418eJohann{ 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7}; 401b362b15af34006e6a11974088a46d42b903418eJohann 411b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const unsigned char, 421b362b15af34006e6a11974088a46d42b903418eJohann vp8_prev_token_class[MAX_ENTROPY_TOKENS]) = 431b362b15af34006e6a11974088a46d42b903418eJohann{ 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0}; 441b362b15af34006e6a11974088a46d42b903418eJohann 451b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const int, vp8_default_zig_zag1d[16]) = 461b362b15af34006e6a11974088a46d42b903418eJohann{ 471b362b15af34006e6a11974088a46d42b903418eJohann 0, 1, 4, 8, 481b362b15af34006e6a11974088a46d42b903418eJohann 5, 2, 3, 6, 491b362b15af34006e6a11974088a46d42b903418eJohann 9, 12, 13, 10, 501b362b15af34006e6a11974088a46d42b903418eJohann 7, 11, 14, 15, 511b362b15af34006e6a11974088a46d42b903418eJohann}; 521b362b15af34006e6a11974088a46d42b903418eJohann 531b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const short, vp8_default_inv_zig_zag[16]) = 541b362b15af34006e6a11974088a46d42b903418eJohann{ 551b362b15af34006e6a11974088a46d42b903418eJohann 1, 2, 6, 7, 561b362b15af34006e6a11974088a46d42b903418eJohann 3, 5, 8, 13, 571b362b15af34006e6a11974088a46d42b903418eJohann 4, 9, 12, 14, 581b362b15af34006e6a11974088a46d42b903418eJohann 10, 11, 15, 16 591b362b15af34006e6a11974088a46d42b903418eJohann}; 601b362b15af34006e6a11974088a46d42b903418eJohann 611b362b15af34006e6a11974088a46d42b903418eJohann/* vp8_default_zig_zag_mask generated with: 621b362b15af34006e6a11974088a46d42b903418eJohann 631b362b15af34006e6a11974088a46d42b903418eJohann void vp8_init_scan_order_mask() 641b362b15af34006e6a11974088a46d42b903418eJohann { 651b362b15af34006e6a11974088a46d42b903418eJohann int i; 661b362b15af34006e6a11974088a46d42b903418eJohann 671b362b15af34006e6a11974088a46d42b903418eJohann for (i = 0; i < 16; i++) 681b362b15af34006e6a11974088a46d42b903418eJohann { 691b362b15af34006e6a11974088a46d42b903418eJohann vp8_default_zig_zag_mask[vp8_default_zig_zag1d[i]] = 1 << i; 701b362b15af34006e6a11974088a46d42b903418eJohann } 711b362b15af34006e6a11974088a46d42b903418eJohann 721b362b15af34006e6a11974088a46d42b903418eJohann } 731b362b15af34006e6a11974088a46d42b903418eJohann*/ 741b362b15af34006e6a11974088a46d42b903418eJohannDECLARE_ALIGNED(16, const short, vp8_default_zig_zag_mask[16]) = 751b362b15af34006e6a11974088a46d42b903418eJohann{ 761b362b15af34006e6a11974088a46d42b903418eJohann 1, 2, 32, 64, 771b362b15af34006e6a11974088a46d42b903418eJohann 4, 16, 128, 4096, 781b362b15af34006e6a11974088a46d42b903418eJohann 8, 256, 2048, 8192, 791b362b15af34006e6a11974088a46d42b903418eJohann 512, 1024, 16384, -32768 801b362b15af34006e6a11974088a46d42b903418eJohann}; 811b362b15af34006e6a11974088a46d42b903418eJohann 821b362b15af34006e6a11974088a46d42b903418eJohannconst int vp8_mb_feature_data_bits[MB_LVL_MAX] = {7, 6}; 831b362b15af34006e6a11974088a46d42b903418eJohann 841b362b15af34006e6a11974088a46d42b903418eJohann/* Array indices are identical to previously-existing CONTEXT_NODE indices */ 851b362b15af34006e6a11974088a46d42b903418eJohann 861b362b15af34006e6a11974088a46d42b903418eJohannconst vp8_tree_index vp8_coef_tree[ 22] = /* corresponding _CONTEXT_NODEs */ 871b362b15af34006e6a11974088a46d42b903418eJohann{ 881b362b15af34006e6a11974088a46d42b903418eJohann -DCT_EOB_TOKEN, 2, /* 0 = EOB */ 891b362b15af34006e6a11974088a46d42b903418eJohann -ZERO_TOKEN, 4, /* 1 = ZERO */ 901b362b15af34006e6a11974088a46d42b903418eJohann -ONE_TOKEN, 6, /* 2 = ONE */ 911b362b15af34006e6a11974088a46d42b903418eJohann 8, 12, /* 3 = LOW_VAL */ 921b362b15af34006e6a11974088a46d42b903418eJohann -TWO_TOKEN, 10, /* 4 = TWO */ 931b362b15af34006e6a11974088a46d42b903418eJohann -THREE_TOKEN, -FOUR_TOKEN, /* 5 = THREE */ 941b362b15af34006e6a11974088a46d42b903418eJohann 14, 16, /* 6 = HIGH_LOW */ 951b362b15af34006e6a11974088a46d42b903418eJohann -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2, /* 7 = CAT_ONE */ 961b362b15af34006e6a11974088a46d42b903418eJohann 18, 20, /* 8 = CAT_THREEFOUR */ 971b362b15af34006e6a11974088a46d42b903418eJohann -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4, /* 9 = CAT_THREE */ 981b362b15af34006e6a11974088a46d42b903418eJohann -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6 /* 10 = CAT_FIVE */ 991b362b15af34006e6a11974088a46d42b903418eJohann}; 1001b362b15af34006e6a11974088a46d42b903418eJohann 1011b362b15af34006e6a11974088a46d42b903418eJohann/* vp8_coef_encodings generated with: 1021b362b15af34006e6a11974088a46d42b903418eJohann vp8_tokens_from_tree(vp8_coef_encodings, vp8_coef_tree); 1031b362b15af34006e6a11974088a46d42b903418eJohann*/ 1041b362b15af34006e6a11974088a46d42b903418eJohannvp8_token vp8_coef_encodings[MAX_ENTROPY_TOKENS] = 1051b362b15af34006e6a11974088a46d42b903418eJohann{ 1061b362b15af34006e6a11974088a46d42b903418eJohann {2, 2}, 1071b362b15af34006e6a11974088a46d42b903418eJohann {6, 3}, 1081b362b15af34006e6a11974088a46d42b903418eJohann {28, 5}, 1091b362b15af34006e6a11974088a46d42b903418eJohann {58, 6}, 1101b362b15af34006e6a11974088a46d42b903418eJohann {59, 6}, 1111b362b15af34006e6a11974088a46d42b903418eJohann {60, 6}, 1121b362b15af34006e6a11974088a46d42b903418eJohann {61, 6}, 1131b362b15af34006e6a11974088a46d42b903418eJohann {124, 7}, 1141b362b15af34006e6a11974088a46d42b903418eJohann {125, 7}, 1151b362b15af34006e6a11974088a46d42b903418eJohann {126, 7}, 1161b362b15af34006e6a11974088a46d42b903418eJohann {127, 7}, 1171b362b15af34006e6a11974088a46d42b903418eJohann {0, 1} 1181b362b15af34006e6a11974088a46d42b903418eJohann}; 1191b362b15af34006e6a11974088a46d42b903418eJohann 1201b362b15af34006e6a11974088a46d42b903418eJohann/* Trees for extra bits. Probabilities are constant and 1211b362b15af34006e6a11974088a46d42b903418eJohann do not depend on previously encoded bits */ 1221b362b15af34006e6a11974088a46d42b903418eJohann 1231b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat1[] = { 159}; 1241b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat2[] = { 165, 145}; 1251b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat3[] = { 173, 148, 140}; 1261b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat4[] = { 176, 155, 140, 135}; 1271b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat5[] = { 180, 157, 141, 134, 130}; 1281b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_prob Pcat6[] = 1291b362b15af34006e6a11974088a46d42b903418eJohann{ 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129}; 1301b362b15af34006e6a11974088a46d42b903418eJohann 1311b362b15af34006e6a11974088a46d42b903418eJohann 1321b362b15af34006e6a11974088a46d42b903418eJohann/* tree index tables generated with: 1331b362b15af34006e6a11974088a46d42b903418eJohann 1341b362b15af34006e6a11974088a46d42b903418eJohann void init_bit_tree(vp8_tree_index *p, int n) 1351b362b15af34006e6a11974088a46d42b903418eJohann { 1361b362b15af34006e6a11974088a46d42b903418eJohann int i = 0; 1371b362b15af34006e6a11974088a46d42b903418eJohann 1381b362b15af34006e6a11974088a46d42b903418eJohann while (++i < n) 1391b362b15af34006e6a11974088a46d42b903418eJohann { 1401b362b15af34006e6a11974088a46d42b903418eJohann p[0] = p[1] = i << 1; 1411b362b15af34006e6a11974088a46d42b903418eJohann p += 2; 1421b362b15af34006e6a11974088a46d42b903418eJohann } 1431b362b15af34006e6a11974088a46d42b903418eJohann 1441b362b15af34006e6a11974088a46d42b903418eJohann p[0] = p[1] = 0; 1451b362b15af34006e6a11974088a46d42b903418eJohann } 1461b362b15af34006e6a11974088a46d42b903418eJohann 1471b362b15af34006e6a11974088a46d42b903418eJohann void init_bit_trees() 1481b362b15af34006e6a11974088a46d42b903418eJohann { 1491b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat1, 1); 1501b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat2, 2); 1511b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat3, 3); 1521b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat4, 4); 1531b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat5, 5); 1541b362b15af34006e6a11974088a46d42b903418eJohann init_bit_tree(cat6, 11); 1551b362b15af34006e6a11974088a46d42b903418eJohann } 1561b362b15af34006e6a11974088a46d42b903418eJohann*/ 1571b362b15af34006e6a11974088a46d42b903418eJohann 1581b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat1[2] = { 0, 0 }; 1591b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat2[4] = { 2, 2, 0, 0 }; 1601b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat3[6] = { 2, 2, 4, 4, 0, 0 }; 1611b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat4[8] = { 2, 2, 4, 4, 6, 6, 0, 0 }; 1621b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat5[10] = { 2, 2, 4, 4, 6, 6, 8, 8, 0, 0 }; 1631b362b15af34006e6a11974088a46d42b903418eJohannstatic const vp8_tree_index cat6[22] = { 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 1641b362b15af34006e6a11974088a46d42b903418eJohann 14, 14, 16, 16, 18, 18, 20, 20, 0, 0 }; 1651b362b15af34006e6a11974088a46d42b903418eJohann 1661b362b15af34006e6a11974088a46d42b903418eJohannconst vp8_extra_bit_struct vp8_extra_bits[12] = 1671b362b15af34006e6a11974088a46d42b903418eJohann{ 1681b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 0}, 1691b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 1}, 1701b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 2}, 1711b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 3}, 1721b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 4}, 1731b362b15af34006e6a11974088a46d42b903418eJohann { cat1, Pcat1, 1, 5}, 1741b362b15af34006e6a11974088a46d42b903418eJohann { cat2, Pcat2, 2, 7}, 1751b362b15af34006e6a11974088a46d42b903418eJohann { cat3, Pcat3, 3, 11}, 1761b362b15af34006e6a11974088a46d42b903418eJohann { cat4, Pcat4, 4, 19}, 1771b362b15af34006e6a11974088a46d42b903418eJohann { cat5, Pcat5, 5, 35}, 1781b362b15af34006e6a11974088a46d42b903418eJohann { cat6, Pcat6, 11, 67}, 1791b362b15af34006e6a11974088a46d42b903418eJohann { 0, 0, 0, 0} 1801b362b15af34006e6a11974088a46d42b903418eJohann}; 1811b362b15af34006e6a11974088a46d42b903418eJohann 1821b362b15af34006e6a11974088a46d42b903418eJohann#include "default_coef_probs.h" 1831b362b15af34006e6a11974088a46d42b903418eJohann 1841b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_default_coef_probs(VP8_COMMON *pc) 1851b362b15af34006e6a11974088a46d42b903418eJohann{ 1861b362b15af34006e6a11974088a46d42b903418eJohann vpx_memcpy(pc->fc.coef_probs, default_coef_probs, 1871b362b15af34006e6a11974088a46d42b903418eJohann sizeof(default_coef_probs)); 1881b362b15af34006e6a11974088a46d42b903418eJohann} 1891b362b15af34006e6a11974088a46d42b903418eJohann 190