media/libvpx/vp8/common/entropy.c

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

michael@0 1 /*
michael@0 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
michael@0 3 *
michael@0 4 * Use of this source code is governed by a BSD-style license
michael@0 5 * that can be found in the LICENSE file in the root of the source
michael@0 6 * tree. An additional intellectual property rights grant can be found
michael@0 7 * in the file PATENTS. All contributing project authors may
michael@0 8 * be found in the AUTHORS file in the root of the source tree.
michael@0 9 */
michael@0 10
michael@0 11 #include "entropy.h"
michael@0 12 #include "blockd.h"
michael@0 13 #include "onyxc_int.h"
michael@0 14 #include "vpx_mem/vpx_mem.h"
michael@0 15
michael@0 16 #include "coefupdateprobs.h"
michael@0 17
michael@0 18 DECLARE_ALIGNED(16, const unsigned char, vp8_norm[256]) =
michael@0 19 {
michael@0 20 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
michael@0 21 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
michael@0 22 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
michael@0 23 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
michael@0 24 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
michael@0 25 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
michael@0 26 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
michael@0 27 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
michael@0 28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 31 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 33 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 34 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
michael@0 35 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
michael@0 36 };
michael@0 37
michael@0 38 DECLARE_ALIGNED(16, const unsigned char, vp8_coef_bands[16]) =
michael@0 39 { 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7};
michael@0 40
michael@0 41 DECLARE_ALIGNED(16, const unsigned char,
michael@0 42 vp8_prev_token_class[MAX_ENTROPY_TOKENS]) =
michael@0 43 { 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0};
michael@0 44
michael@0 45 DECLARE_ALIGNED(16, const int, vp8_default_zig_zag1d[16]) =
michael@0 46 {
michael@0 47 0, 1, 4, 8,
michael@0 48 5, 2, 3, 6,
michael@0 49 9, 12, 13, 10,
michael@0 50 7, 11, 14, 15,
michael@0 51 };
michael@0 52
michael@0 53 DECLARE_ALIGNED(16, const short, vp8_default_inv_zig_zag[16]) =
michael@0 54 {
michael@0 55 1, 2, 6, 7,
michael@0 56 3, 5, 8, 13,
michael@0 57 4, 9, 12, 14,
michael@0 58 10, 11, 15, 16
michael@0 59 };
michael@0 60
michael@0 61 /* vp8_default_zig_zag_mask generated with:
michael@0 62
michael@0 63 void vp8_init_scan_order_mask()
michael@0 64 {
michael@0 65 int i;
michael@0 66
michael@0 67 for (i = 0; i < 16; i++)
michael@0 68 {
michael@0 69 vp8_default_zig_zag_mask[vp8_default_zig_zag1d[i]] = 1 << i;
michael@0 70 }
michael@0 71
michael@0 72 }
michael@0 73 */
michael@0 74 DECLARE_ALIGNED(16, const short, vp8_default_zig_zag_mask[16]) =
michael@0 75 {
michael@0 76 1, 2, 32, 64,
michael@0 77 4, 16, 128, 4096,
michael@0 78 8, 256, 2048, 8192,
michael@0 79 512, 1024, 16384, -32768
michael@0 80 };
michael@0 81
michael@0 82 const int vp8_mb_feature_data_bits[MB_LVL_MAX] = {7, 6};
michael@0 83
michael@0 84 /* Array indices are identical to previously-existing CONTEXT_NODE indices */
michael@0 85
michael@0 86 const vp8_tree_index vp8_coef_tree[ 22] = /* corresponding _CONTEXT_NODEs */
michael@0 87 {
michael@0 88 -DCT_EOB_TOKEN, 2, /* 0 = EOB */
michael@0 89 -ZERO_TOKEN, 4, /* 1 = ZERO */
michael@0 90 -ONE_TOKEN, 6, /* 2 = ONE */
michael@0 91 8, 12, /* 3 = LOW_VAL */
michael@0 92 -TWO_TOKEN, 10, /* 4 = TWO */
michael@0 93 -THREE_TOKEN, -FOUR_TOKEN, /* 5 = THREE */
michael@0 94 14, 16, /* 6 = HIGH_LOW */
michael@0 95 -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2, /* 7 = CAT_ONE */
michael@0 96 18, 20, /* 8 = CAT_THREEFOUR */
michael@0 97 -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4, /* 9 = CAT_THREE */
michael@0 98 -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6 /* 10 = CAT_FIVE */
michael@0 99 };
michael@0 100
michael@0 101 /* vp8_coef_encodings generated with:
michael@0 102 vp8_tokens_from_tree(vp8_coef_encodings, vp8_coef_tree);
michael@0 103 */
michael@0 104 vp8_token vp8_coef_encodings[MAX_ENTROPY_TOKENS] =
michael@0 105 {
michael@0 106 {2, 2},
michael@0 107 {6, 3},
michael@0 108 {28, 5},
michael@0 109 {58, 6},
michael@0 110 {59, 6},
michael@0 111 {60, 6},
michael@0 112 {61, 6},
michael@0 113 {124, 7},
michael@0 114 {125, 7},
michael@0 115 {126, 7},
michael@0 116 {127, 7},
michael@0 117 {0, 1}
michael@0 118 };
michael@0 119
michael@0 120 /* Trees for extra bits. Probabilities are constant and
michael@0 121 do not depend on previously encoded bits */
michael@0 122
michael@0 123 static const vp8_prob Pcat1[] = { 159};
michael@0 124 static const vp8_prob Pcat2[] = { 165, 145};
michael@0 125 static const vp8_prob Pcat3[] = { 173, 148, 140};
michael@0 126 static const vp8_prob Pcat4[] = { 176, 155, 140, 135};
michael@0 127 static const vp8_prob Pcat5[] = { 180, 157, 141, 134, 130};
michael@0 128 static const vp8_prob Pcat6[] =
michael@0 129 { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129};
michael@0 130
michael@0 131
michael@0 132 /* tree index tables generated with:
michael@0 133
michael@0 134 void init_bit_tree(vp8_tree_index *p, int n)
michael@0 135 {
michael@0 136 int i = 0;
michael@0 137
michael@0 138 while (++i < n)
michael@0 139 {
michael@0 140 p[0] = p[1] = i << 1;
michael@0 141 p += 2;
michael@0 142 }
michael@0 143
michael@0 144 p[0] = p[1] = 0;
michael@0 145 }
michael@0 146
michael@0 147 void init_bit_trees()
michael@0 148 {
michael@0 149 init_bit_tree(cat1, 1);
michael@0 150 init_bit_tree(cat2, 2);
michael@0 151 init_bit_tree(cat3, 3);
michael@0 152 init_bit_tree(cat4, 4);
michael@0 153 init_bit_tree(cat5, 5);
michael@0 154 init_bit_tree(cat6, 11);
michael@0 155 }
michael@0 156 */
michael@0 157
michael@0 158 static const vp8_tree_index cat1[2] = { 0, 0 };
michael@0 159 static const vp8_tree_index cat2[4] = { 2, 2, 0, 0 };
michael@0 160 static const vp8_tree_index cat3[6] = { 2, 2, 4, 4, 0, 0 };
michael@0 161 static const vp8_tree_index cat4[8] = { 2, 2, 4, 4, 6, 6, 0, 0 };
michael@0 162 static const vp8_tree_index cat5[10] = { 2, 2, 4, 4, 6, 6, 8, 8, 0, 0 };
michael@0 163 static const vp8_tree_index cat6[22] = { 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12,
michael@0 164 14, 14, 16, 16, 18, 18, 20, 20, 0, 0 };
michael@0 165
michael@0 166 const vp8_extra_bit_struct vp8_extra_bits[12] =
michael@0 167 {
michael@0 168 { 0, 0, 0, 0},
michael@0 169 { 0, 0, 0, 1},
michael@0 170 { 0, 0, 0, 2},
michael@0 171 { 0, 0, 0, 3},
michael@0 172 { 0, 0, 0, 4},
michael@0 173 { cat1, Pcat1, 1, 5},
michael@0 174 { cat2, Pcat2, 2, 7},
michael@0 175 { cat3, Pcat3, 3, 11},
michael@0 176 { cat4, Pcat4, 4, 19},
michael@0 177 { cat5, Pcat5, 5, 35},
michael@0 178 { cat6, Pcat6, 11, 67},
michael@0 179 { 0, 0, 0, 0}
michael@0 180 };
michael@0 181
michael@0 182 #include "default_coef_probs.h"
michael@0 183
michael@0 184 void vp8_default_coef_probs(VP8_COMMON *pc)
michael@0 185 {
michael@0 186 vpx_memcpy(pc->fc.coef_probs, default_coef_probs,
michael@0 187 sizeof(default_coef_probs));
michael@0 188 }
michael@0 189

mercurial