media/libvpx/vp8/common/entropy.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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
michael@0 12 #ifndef __INC_ENTROPY_H
michael@0 13 #define __INC_ENTROPY_H
michael@0 14
michael@0 15 #include "treecoder.h"
michael@0 16 #include "blockd.h"
michael@0 17
michael@0 18 /* Coefficient token alphabet */
michael@0 19
michael@0 20 #define ZERO_TOKEN 0 /* 0 Extra Bits 0+0 */
michael@0 21 #define ONE_TOKEN 1 /* 1 Extra Bits 0+1 */
michael@0 22 #define TWO_TOKEN 2 /* 2 Extra Bits 0+1 */
michael@0 23 #define THREE_TOKEN 3 /* 3 Extra Bits 0+1 */
michael@0 24 #define FOUR_TOKEN 4 /* 4 Extra Bits 0+1 */
michael@0 25 #define DCT_VAL_CATEGORY1 5 /* 5-6 Extra Bits 1+1 */
michael@0 26 #define DCT_VAL_CATEGORY2 6 /* 7-10 Extra Bits 2+1 */
michael@0 27 #define DCT_VAL_CATEGORY3 7 /* 11-18 Extra Bits 3+1 */
michael@0 28 #define DCT_VAL_CATEGORY4 8 /* 19-34 Extra Bits 4+1 */
michael@0 29 #define DCT_VAL_CATEGORY5 9 /* 35-66 Extra Bits 5+1 */
michael@0 30 #define DCT_VAL_CATEGORY6 10 /* 67+ Extra Bits 11+1 */
michael@0 31 #define DCT_EOB_TOKEN 11 /* EOB Extra Bits 0+0 */
michael@0 32
michael@0 33 #define MAX_ENTROPY_TOKENS 12
michael@0 34 #define ENTROPY_NODES 11
michael@0 35
michael@0 36 extern const vp8_tree_index vp8_coef_tree[];
michael@0 37
michael@0 38 extern const struct vp8_token_struct vp8_coef_encodings[MAX_ENTROPY_TOKENS];
michael@0 39
michael@0 40 typedef struct
michael@0 41 {
michael@0 42 vp8_tree_p tree;
michael@0 43 const vp8_prob *prob;
michael@0 44 int Len;
michael@0 45 int base_val;
michael@0 46 } vp8_extra_bit_struct;
michael@0 47
michael@0 48 extern const vp8_extra_bit_struct vp8_extra_bits[12]; /* indexed by token value */
michael@0 49
michael@0 50 #define PROB_UPDATE_BASELINE_COST 7
michael@0 51
michael@0 52 #define MAX_PROB 255
michael@0 53 #define DCT_MAX_VALUE 2048
michael@0 54
michael@0 55
michael@0 56 /* Coefficients are predicted via a 3-dimensional probability table. */
michael@0 57
michael@0 58 /* Outside dimension. 0 = Y no DC, 1 = Y2, 2 = UV, 3 = Y with DC */
michael@0 59
michael@0 60 #define BLOCK_TYPES 4
michael@0 61
michael@0 62 /* Middle dimension is a coarsening of the coefficient's
michael@0 63 position within the 4x4 DCT. */
michael@0 64
michael@0 65 #define COEF_BANDS 8
michael@0 66 extern DECLARE_ALIGNED(16, const unsigned char, vp8_coef_bands[16]);
michael@0 67
michael@0 68 /* Inside dimension is 3-valued measure of nearby complexity, that is,
michael@0 69 the extent to which nearby coefficients are nonzero. For the first
michael@0 70 coefficient (DC, unless block type is 0), we look at the (already encoded)
michael@0 71 blocks above and to the left of the current block. The context index is
michael@0 72 then the number (0,1,or 2) of these blocks having nonzero coefficients.
michael@0 73 After decoding a coefficient, the measure is roughly the size of the
michael@0 74 most recently decoded coefficient (0 for 0, 1 for 1, 2 for >1).
michael@0 75 Note that the intuitive meaning of this measure changes as coefficients
michael@0 76 are decoded, e.g., prior to the first token, a zero means that my neighbors
michael@0 77 are empty while, after the first token, because of the use of end-of-block,
michael@0 78 a zero means we just decoded a zero and hence guarantees that a non-zero
michael@0 79 coefficient will appear later in this block. However, this shift
michael@0 80 in meaning is perfectly OK because our context depends also on the
michael@0 81 coefficient band (and since zigzag positions 0, 1, and 2 are in
michael@0 82 distinct bands). */
michael@0 83
michael@0 84 /*# define DC_TOKEN_CONTEXTS 3*/ /* 00, 0!0, !0!0 */
michael@0 85 # define PREV_COEF_CONTEXTS 3
michael@0 86
michael@0 87 extern DECLARE_ALIGNED(16, const unsigned char, vp8_prev_token_class[MAX_ENTROPY_TOKENS]);
michael@0 88
michael@0 89 extern const vp8_prob vp8_coef_update_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES];
michael@0 90
michael@0 91
michael@0 92 struct VP8Common;
michael@0 93 void vp8_default_coef_probs(struct VP8Common *);
michael@0 94
michael@0 95 extern DECLARE_ALIGNED(16, const int, vp8_default_zig_zag1d[16]);
michael@0 96 extern DECLARE_ALIGNED(16, const short, vp8_default_inv_zig_zag[16]);
michael@0 97 extern DECLARE_ALIGNED(16, const short, vp8_default_zig_zag_mask[16]);
michael@0 98 extern const int vp8_mb_feature_data_bits[MB_LVL_MAX];
michael@0 99
michael@0 100 void vp8_coef_tree_initialize(void);
michael@0 101 #endif

mercurial