Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(826)

Side by Side Diff: source/libvpx/vp9/common/vp9_entropy.c

Issue 11974002: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/common/vp9_entropy.h ('k') | source/libvpx/vp9/common/vp9_entropymode.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 11
12 #include <stdio.h> 12 #include <stdio.h>
13 13
14 #include "vp9/common/vp9_entropy.h" 14 #include "vp9/common/vp9_entropy.h"
15 #include "string.h" 15 #include "string.h"
16 #include "vp9/common/vp9_blockd.h" 16 #include "vp9/common/vp9_blockd.h"
17 #include "vp9/common/vp9_onyxc_int.h" 17 #include "vp9/common/vp9_onyxc_int.h"
18 #include "vp9/common/vp9_entropymode.h" 18 #include "vp9/common/vp9_entropymode.h"
19 #include "vpx_mem/vpx_mem.h" 19 #include "vpx_mem/vpx_mem.h"
20 20 #include "vpx/vpx_integer.h"
21 #define uchar unsigned char /* typedefs can clash */
22 #define uint unsigned int
23
24 typedef const uchar cuchar;
25 typedef const uint cuint;
26
27 typedef vp9_prob Prob;
28
29 #include "vp9/common/vp9_coefupdateprobs.h" 21 #include "vp9/common/vp9_coefupdateprobs.h"
30 22
31 const int vp9_i8x8_block[4] = {0, 2, 8, 10}; 23 const int vp9_i8x8_block[4] = {0, 2, 8, 10};
32 24
33 DECLARE_ALIGNED(16, const unsigned char, vp9_norm[256]) = { 25 DECLARE_ALIGNED(16, const uint8_t, vp9_norm[256]) = {
34 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 26 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
35 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 27 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
36 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 28 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
37 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 29 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
38 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
39 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
41 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
43 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
50 }; 42 };
51 43
52 DECLARE_ALIGNED(16, const int, vp9_coef_bands[16]) = { 44 DECLARE_ALIGNED(16, const int, vp9_coef_bands_4x4[16]) = {
53 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7 45 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7
54 }; 46 };
55 47
56 DECLARE_ALIGNED(16, cuchar, vp9_prev_token_class[MAX_ENTROPY_TOKENS]) = { 48 DECLARE_ALIGNED(16, const uint8_t, vp9_prev_token_class[MAX_ENTROPY_TOKENS]) = {
57 0, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 0 49 0, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 0
58 }; 50 };
59 51
60 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d[16]) = { 52 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_4x4[16]) = {
61 0, 1, 4, 8, 53 0, 1, 4, 8,
62 5, 2, 3, 6, 54 5, 2, 3, 6,
63 9, 12, 13, 10, 55 9, 12, 13, 10,
64 7, 11, 14, 15, 56 7, 11, 14, 15,
65 }; 57 };
66 58
67 DECLARE_ALIGNED(16, const int, vp9_col_scan[16]) = { 59 DECLARE_ALIGNED(16, const int, vp9_col_scan_4x4[16]) = {
68 0, 4, 8, 12, 60 0, 4, 8, 12,
69 1, 5, 9, 13, 61 1, 5, 9, 13,
70 2, 6, 10, 14, 62 2, 6, 10, 14,
71 3, 7, 11, 15 63 3, 7, 11, 15
72 }; 64 };
73 DECLARE_ALIGNED(16, const int, vp9_row_scan[16]) = { 65
66 DECLARE_ALIGNED(16, const int, vp9_row_scan_4x4[16]) = {
74 0, 1, 2, 3, 67 0, 1, 2, 3,
75 4, 5, 6, 7, 68 4, 5, 6, 7,
76 8, 9, 10, 11, 69 8, 9, 10, 11,
77 12, 13, 14, 15 70 12, 13, 14, 15
78 }; 71 };
79 72
73 DECLARE_ALIGNED(64, const int, vp9_coef_bands_8x8[64]) = {
74 0, 1, 2, 3, 5, 4, 4, 5,
75 5, 3, 6, 3, 5, 4, 6, 6,
76 6, 5, 5, 6, 6, 6, 6, 6,
77 6, 6, 6, 6, 6, 6, 6, 6,
78 6, 6, 6, 6, 7, 7, 7, 7,
79 7, 7, 7, 7, 7, 7, 7, 7,
80 7, 7, 7, 7, 7, 7, 7, 7,
81 7, 7, 7, 7, 7, 7, 7, 7
82 };
80 83
81 DECLARE_ALIGNED(64, const int, vp9_coef_bands_8x8[64]) = { 0, 1, 2, 3, 5, 4, 4, 5,
82 5, 3, 6, 3, 5, 4, 6, 6,
83 6, 5, 5, 6, 6, 6, 6, 6,
84 6, 6, 6, 6, 6, 6, 6, 6,
85 6, 6, 6, 6, 7, 7, 7, 7,
86 7, 7, 7, 7, 7, 7, 7, 7,
87 7, 7, 7, 7, 7, 7, 7, 7,
88 7, 7, 7, 7, 7, 7, 7, 7
89 };
90 DECLARE_ALIGNED(64, const int, vp9_default_zig_zag1d_8x8[64]) = { 84 DECLARE_ALIGNED(64, const int, vp9_default_zig_zag1d_8x8[64]) = {
91 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 85 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
92 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 86 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
93 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 87 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
94 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, 88 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63,
95 }; 89 };
96 90
97 // Table can be optimized. 91 // Table can be optimized.
98 DECLARE_ALIGNED(16, const int, vp9_coef_bands_16x16[256]) = { 92 DECLARE_ALIGNED(16, const int, vp9_coef_bands_16x16[256]) = {
99 0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6, 93 0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6,
100 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 94 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
101 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
102 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 96 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
103 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 97 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
104 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 98 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
105 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 99 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
106 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 100 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
107 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 101 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
108 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 102 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
109 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 103 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
110 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 104 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
111 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 105 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
112 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 106 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
113 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 107 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
114 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 108 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
115 }; 109 };
110
116 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_16x16[256]) = { 111 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_16x16[256]) = {
117 0, 1, 16, 32, 17, 2, 3, 18, 33, 48, 64, 49, 34, 19, 4, 5, 112 0, 1, 16, 32, 17, 2, 3, 18,
118 20, 35, 50, 65, 80, 96, 81, 66, 51, 36, 21, 6, 7, 22, 37, 52, 113 33, 48, 64, 49, 34, 19, 4, 5,
119 67, 82, 97, 112, 128, 113, 98, 83, 68, 53, 38, 23, 8, 9, 24, 39, 114 20, 35, 50, 65, 80, 96, 81, 66,
120 54, 69, 84, 99, 114, 129, 144, 160, 145, 130, 115, 100, 85, 70, 55, 40, 115 51, 36, 21, 6, 7, 22, 37, 52,
121 25, 10, 11, 26, 41, 56, 71, 86, 101, 116, 131, 146, 161, 176, 192, 1 77, 116 67, 82, 97, 112, 128, 113, 98, 83,
122 162, 147, 132, 117, 102, 87, 72, 57, 42, 27, 12, 13, 28, 43, 58, 73, 117 68, 53, 38, 23, 8, 9, 24, 39,
123 88, 103, 118, 133, 148, 163, 178, 193, 208, 224, 209, 194, 179, 164, 149, 1 34, 118 54, 69, 84, 99, 114, 129, 144, 160,
124 119, 104, 89, 74, 59, 44, 29, 14, 15, 30, 45, 60, 75, 90, 105, 1 20, 119 145, 130, 115, 100, 85, 70, 55, 40,
125 135, 150, 165, 180, 195, 210, 225, 240, 241, 226, 211, 196, 181, 166, 151, 1 36, 120 25, 10, 11, 26, 41, 56, 71, 86,
126 121, 106, 91, 76, 61, 46, 31, 47, 62, 77, 92, 107, 122, 137, 152, 1 67, 121 101, 116, 131, 146, 161, 176, 192, 177,
127 182, 197, 212, 227, 242, 243, 228, 213, 198, 183, 168, 153, 138, 123, 108, 93, 122 162, 147, 132, 117, 102, 87, 72, 57,
128 78, 63, 79, 94, 109, 124, 139, 154, 169, 184, 199, 214, 229, 244, 245, 2 30, 123 42, 27, 12, 13, 28, 43, 58, 73,
129 215, 200, 185, 170, 155, 140, 125, 110, 95, 111, 126, 141, 156, 171, 186, 2 01, 124 88, 103, 118, 133, 148, 163, 178, 193,
130 216, 231, 246, 247, 232, 217, 202, 187, 172, 157, 142, 127, 143, 158, 173, 1 88, 125 208, 224, 209, 194, 179, 164, 149, 134,
131 203, 218, 233, 248, 249, 234, 219, 204, 189, 174, 159, 175, 190, 205, 220, 2 35, 126 119, 104, 89, 74, 59, 44, 29, 14,
132 250, 251, 236, 221, 206, 191, 207, 222, 237, 252, 253, 238, 223, 239, 254, 2 55, 127 15, 30, 45, 60, 75, 90, 105, 120,
133 }; 128 135, 150, 165, 180, 195, 210, 225, 240,
134 129 241, 226, 211, 196, 181, 166, 151, 136,
130 121, 106, 91, 76, 61, 46, 31, 47,
131 62, 77, 92, 107, 122, 137, 152, 167,
132 182, 197, 212, 227, 242, 243, 228, 213,
133 198, 183, 168, 153, 138, 123, 108, 93,
134 78, 63, 79, 94, 109, 124, 139, 154,
135 169, 184, 199, 214, 229, 244, 245, 230,
136 215, 200, 185, 170, 155, 140, 125, 110,
137 95, 111, 126, 141, 156, 171, 186, 201,
138 216, 231, 246, 247, 232, 217, 202, 187,
139 172, 157, 142, 127, 143, 158, 173, 188,
140 203, 218, 233, 248, 249, 234, 219, 204,
141 189, 174, 159, 175, 190, 205, 220, 235,
142 250, 251, 236, 221, 206, 191, 207, 222,
143 237, 252, 253, 238, 223, 239, 254, 255,
144 };
145
146 #if CONFIG_DWTDCTHYBRID
147
148 #if DWTDCT_TYPE == DWTDCT16X16_LEAN
149 DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]) = {
150 0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6,
151 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
152 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
153 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
154 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
155 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
156 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
157 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
158 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
159 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
160 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
161 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
162 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
163 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
164 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
165 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
166
167 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
168 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
169 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
170 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
171 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
172 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
173 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
174 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
175 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
176 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
177 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
178 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
179 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
180 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
181 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
182 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
183
184 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
185 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
186 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
187 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
188 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
189 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
190 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
191 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
192 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
193 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
194 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
195 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
196 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
197 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
198 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
199 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
200
201 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
202 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
203 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
204 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
205 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
206 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
207 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
208 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
209 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
210 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
211 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
212 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
213 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
214 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
215 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
216 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
217 };
218
219 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_32x32[1024]) = {
220 0, 1, 32, 64, 33, 2, 3, 34,
221 65, 96, 128, 97, 66, 35, 4, 5,
222 36, 67, 98, 129, 160, 192, 161, 130,
223 99, 68, 37, 6, 7, 38, 69, 100,
224 131, 162, 193, 224, 256, 225, 194, 163,
225 132, 101, 70, 39, 8, 9, 40, 71,
226 102, 133, 164, 195, 226, 257, 288, 320,
227 289, 258, 227, 196, 165, 134, 103, 72,
228 41, 10, 11, 42, 73, 104, 135, 166,
229 197, 228, 259, 290, 321, 352, 384, 353,
230 322, 291, 260, 229, 198, 167, 136, 105,
231 74, 43, 12, 13, 44, 75, 106, 137,
232 168, 199, 230, 261, 292, 323, 354, 385,
233 416, 448, 417, 386, 355, 324, 293, 262,
234 231, 200, 169, 138, 107, 76, 45, 14,
235 15, 46, 77, 108, 139, 170, 201, 232,
236 263, 294, 325, 356, 387, 418, 449, 480,
237 481, 450, 419, 388, 357, 326, 295, 264,
238 233, 202, 171, 140, 109, 78, 47, 79,
239 110, 141, 172, 203, 234, 265, 296, 327,
240 358, 389, 420, 451, 482, 483, 452, 421,
241 390, 359, 328, 297, 266, 235, 204, 173,
242 142, 111, 143, 174, 205, 236, 267, 298,
243 329, 360, 391, 422, 453, 484, 485, 454,
244 423, 392, 361, 330, 299, 268, 237, 206,
245 175, 207, 238, 269, 300, 331, 362, 393,
246 424, 455, 486, 487, 456, 425, 394, 363,
247 332, 301, 270, 239, 271, 302, 333, 364,
248 395, 426, 457, 488, 489, 458, 427, 396,
249 365, 334, 303, 335, 366, 397, 428, 459,
250 490, 491, 460, 429, 398, 367, 399, 430,
251 461, 492, 493, 462, 431, 463, 494, 495,
252
253 16, 512, 528, 17, 513, 529, 48, 544,
254 560, 80, 576, 592, 49, 545, 561, 18,
255 514, 530, 19, 515, 531, 50, 546, 562,
256 81, 577, 593, 112, 608, 624, 144, 640,
257 656, 113, 609, 625, 82, 578, 594, 51,
258 547, 563, 20, 516, 532, 21, 517, 533,
259 52, 548, 564, 83, 579, 595, 114, 610,
260 626, 145, 641, 657, 176, 672, 688, 208,
261 704, 720, 177, 673, 689, 146, 642, 658,
262 115, 611, 627, 84, 580, 596, 53, 549,
263 565, 22, 518, 534, 23, 519, 535, 54,
264 550, 566, 85, 581, 597, 116, 612, 628,
265 147, 643, 659, 178, 674, 690, 209, 705,
266 721, 240, 736, 752, 272, 768, 784, 241,
267 737, 753, 210, 706, 722, 179, 675, 691,
268 148, 644, 660, 117, 613, 629, 86, 582,
269 598, 55, 551, 567, 24, 520, 536, 25,
270 521, 537, 56, 552, 568, 87, 583, 599,
271 118, 614, 630, 149, 645, 661, 180, 676,
272 692, 211, 707, 723, 242, 738, 754, 273,
273 769, 785, 304, 800, 816, 336, 832, 848,
274 305, 801, 817, 274, 770, 786, 243, 739,
275 755, 212, 708, 724, 181, 677, 693, 150,
276 646, 662, 119, 615, 631, 88, 584, 600,
277 57, 553, 569, 26, 522, 538, 27, 523,
278 539, 58, 554, 570, 89, 585, 601, 120,
279 616, 632, 151, 647, 663, 182, 678, 694,
280 213, 709, 725, 244, 740, 756, 275, 771,
281 787, 306, 802, 818, 337, 833, 849, 368,
282 864, 880, 400, 896, 912, 369, 865, 881,
283 338, 834, 850, 307, 803, 819, 276, 772,
284 788, 245, 741, 757, 214, 710, 726, 183,
285
286 679, 695, 152, 648, 664, 121, 617, 633,
287 90, 586, 602, 59, 555, 571, 28, 524,
288 540, 29, 525, 541, 60, 556, 572, 91,
289 587, 603, 122, 618, 634, 153, 649, 665,
290 184, 680, 696, 215, 711, 727, 246, 742,
291 758, 277, 773, 789, 308, 804, 820, 339,
292 835, 851, 370, 866, 882, 401, 897, 913,
293 432, 928, 944, 464, 960, 976, 433, 929,
294 945, 402, 898, 914, 371, 867, 883, 340,
295 836, 852, 309, 805, 821, 278, 774, 790,
296 247, 743, 759, 216, 712, 728, 185, 681,
297 697, 154, 650, 666, 123, 619, 635, 92,
298 588, 604, 61, 557, 573, 30, 526, 542,
299 31, 527, 543, 62, 558, 574, 93, 589,
300 605, 124, 620, 636, 155, 651, 667, 186,
301 682, 698, 217, 713, 729, 248, 744, 760,
302 279, 775, 791, 310, 806, 822, 341, 837,
303 853, 372, 868, 884, 403, 899, 915, 434,
304 930, 946, 465, 961, 977, 496, 992, 1008,
305 497, 993, 1009, 466, 962, 978, 435, 931,
306 947, 404, 900, 916, 373, 869, 885, 342,
307 838, 854, 311, 807, 823, 280, 776, 792,
308 249, 745, 761, 218, 714, 730, 187, 683,
309 699, 156, 652, 668, 125, 621, 637, 94,
310 590, 606, 63, 559, 575, 95, 591, 607,
311 126, 622, 638, 157, 653, 669, 188, 684,
312 700, 219, 715, 731, 250, 746, 762, 281,
313 777, 793, 312, 808, 824, 343, 839, 855,
314 374, 870, 886, 405, 901, 917, 436, 932,
315 948, 467, 963, 979, 498, 994, 1010, 499,
316 995, 1011, 468, 964, 980, 437, 933, 949,
317 406, 902, 918, 375, 871, 887, 344, 840,
318
319 856, 313, 809, 825, 282, 778, 794, 251,
320 747, 763, 220, 716, 732, 189, 685, 701,
321 158, 654, 670, 127, 623, 639, 159, 655,
322 671, 190, 686, 702, 221, 717, 733, 252,
323 748, 764, 283, 779, 795, 314, 810, 826,
324 345, 841, 857, 376, 872, 888, 407, 903,
325 919, 438, 934, 950, 469, 965, 981, 500,
326 996, 1012, 501, 997, 1013, 470, 966, 982,
327 439, 935, 951, 408, 904, 920, 377, 873,
328 889, 346, 842, 858, 315, 811, 827, 284,
329 780, 796, 253, 749, 765, 222, 718, 734,
330 191, 687, 703, 223, 719, 735, 254, 750,
331 766, 285, 781, 797, 316, 812, 828, 347,
332 843, 859, 378, 874, 890, 409, 905, 921,
333 440, 936, 952, 471, 967, 983, 502, 998,
334 1014, 503, 999, 1015, 472, 968, 984, 441,
335 937, 953, 410, 906, 922, 379, 875, 891,
336 348, 844, 860, 317, 813, 829, 286, 782,
337 798, 255, 751, 767, 287, 783, 799, 318,
338 814, 830, 349, 845, 861, 380, 876, 892,
339 411, 907, 923, 442, 938, 954, 473, 969,
340 985, 504, 1000, 1016, 505, 1001, 1017, 474,
341 970, 986, 443, 939, 955, 412, 908, 924,
342 381, 877, 893, 350, 846, 862, 319, 815,
343 831, 351, 847, 863, 382, 878, 894, 413,
344 909, 925, 444, 940, 956, 475, 971, 987,
345 506, 1002, 1018, 507, 1003, 1019, 476, 972,
346 988, 445, 941, 957, 414, 910, 926, 383,
347 879, 895, 415, 911, 927, 446, 942, 958,
348 477, 973, 989, 508, 1004, 1020, 509, 1005,
349 1021, 478, 974, 990, 447, 943, 959, 479,
350 975, 991, 510, 1006, 1022, 511, 1007, 1023,
351 };
352
353 #elif DWTDCT_TYPE == DWTDCT16X16
354
355 DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]) = {
356 0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6,
357 6, 6, 6,
358 6,
359 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
360 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
361 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
362 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
363 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
364 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
365 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
366 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
367 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
368 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
369 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
370 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
371 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
372 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
373 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
374
375 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
376 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
377 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
378 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
379 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
380 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
381 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
382 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
383 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
384 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
385 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
386 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
387 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
388 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
389 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
390 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
391
392 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
393 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
394 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
395 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
396 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
397 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
398 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
399 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
400 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
401 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
402 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
403 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
404 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
405 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
406 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
407 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
408
409 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
410 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
411 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
412 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
413 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
414 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
415 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
416 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
417 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
418 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
419 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
420 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
421 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
422 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
423 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
424 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
425 };
426
427 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_32x32[1024]) = {
428 0, 1, 32, 64, 33, 2, 3, 34,
429 65, 96, 128, 97, 66, 35, 4,
430 16, 512, 528,
431 5,
432 36, 67, 98, 129, 160, 192, 161, 130,
433 99, 68, 37, 6, 7, 38, 69, 100,
434 131, 162, 193, 224, 256, 225, 194, 163,
435 132, 101, 70, 39, 8, 9, 40, 71,
436 102, 133, 164, 195, 226, 257, 288, 320,
437 289, 258, 227, 196, 165, 134, 103, 72,
438 41, 10, 11, 42, 73, 104, 135, 166,
439 197, 228, 259, 290, 321, 352, 384, 353,
440 322, 291, 260, 229, 198, 167, 136, 105,
441 74, 43, 12, 13, 44, 75, 106, 137,
442 168, 199, 230, 261, 292, 323, 354, 385,
443 416, 448, 417, 386, 355, 324, 293, 262,
444 231, 200, 169, 138, 107, 76, 45, 14,
445 15, 46, 77, 108, 139, 170, 201, 232,
446 263, 294, 325, 356, 387, 418, 449, 480,
447 481, 450, 419, 388, 357, 326, 295, 264,
448 233, 202, 171, 140, 109, 78, 47, 79,
449 110, 141, 172, 203, 234, 265, 296, 327,
450 358, 389, 420, 451, 482, 483, 452, 421,
451 390, 359, 328, 297, 266, 235, 204, 173,
452 142, 111, 143, 174, 205, 236, 267, 298,
453 329, 360, 391, 422, 453, 484, 485, 454,
454 423, 392, 361, 330, 299, 268, 237, 206,
455 175, 207, 238, 269, 300, 331, 362, 393,
456 424, 455, 486, 487, 456, 425, 394, 363,
457 332, 301, 270, 239, 271, 302, 333, 364,
458 395, 426, 457, 488, 489, 458, 427, 396,
459 365, 334, 303, 335, 366, 397, 428, 459,
460 490, 491, 460, 429, 398, 367, 399, 430,
461 461, 492, 493, 462, 431, 463, 494, 495,
462
463 17, 513, 529, 48, 544,
464 560, 80, 576, 592, 49, 545, 561, 18,
465 514, 530, 19, 515, 531, 50, 546, 562,
466 81, 577, 593, 112, 608, 624, 144, 640,
467 656, 113, 609, 625, 82, 578, 594, 51,
468 547, 563, 20, 516, 532, 21, 517, 533,
469 52, 548, 564, 83, 579, 595, 114, 610,
470 626, 145, 641, 657, 176, 672, 688, 208,
471 704, 720, 177, 673, 689, 146, 642, 658,
472 115, 611, 627, 84, 580, 596, 53, 549,
473 565, 22, 518, 534, 23, 519, 535, 54,
474 550, 566, 85, 581, 597, 116, 612, 628,
475 147, 643, 659, 178, 674, 690, 209, 705,
476 721, 240, 736, 752, 272, 768, 784, 241,
477 737, 753, 210, 706, 722, 179, 675, 691,
478 148, 644, 660, 117, 613, 629, 86, 582,
479 598, 55, 551, 567, 24, 520, 536, 25,
480 521, 537, 56, 552, 568, 87, 583, 599,
481 118, 614, 630, 149, 645, 661, 180, 676,
482 692, 211, 707, 723, 242, 738, 754, 273,
483 769, 785, 304, 800, 816, 336, 832, 848,
484 305, 801, 817, 274, 770, 786, 243, 739,
485 755, 212, 708, 724, 181, 677, 693, 150,
486 646, 662, 119, 615, 631, 88, 584, 600,
487 57, 553, 569, 26, 522, 538, 27, 523,
488 539, 58, 554, 570, 89, 585, 601, 120,
489 616, 632, 151, 647, 663, 182, 678, 694,
490 213, 709, 725, 244, 740, 756, 275, 771,
491 787, 306, 802, 818, 337, 833, 849, 368,
492 864, 880, 400, 896, 912, 369, 865, 881,
493 338, 834, 850, 307, 803, 819, 276, 772,
494 788, 245, 741, 757, 214, 710, 726, 183,
495
496 679, 695, 152, 648, 664, 121, 617, 633,
497 90, 586, 602, 59, 555, 571, 28, 524,
498 540, 29, 525, 541, 60, 556, 572, 91,
499 587, 603, 122, 618, 634, 153, 649, 665,
500 184, 680, 696, 215, 711, 727, 246, 742,
501 758, 277, 773, 789, 308, 804, 820, 339,
502 835, 851, 370, 866, 882, 401, 897, 913,
503 432, 928, 944, 464, 960, 976, 433, 929,
504 945, 402, 898, 914, 371, 867, 883, 340,
505 836, 852, 309, 805, 821, 278, 774, 790,
506 247, 743, 759, 216, 712, 728, 185, 681,
507 697, 154, 650, 666, 123, 619, 635, 92,
508 588, 604, 61, 557, 573, 30, 526, 542,
509 31, 527, 543, 62, 558, 574, 93, 589,
510 605, 124, 620, 636, 155, 651, 667, 186,
511 682, 698, 217, 713, 729, 248, 744, 760,
512 279, 775, 791, 310, 806, 822, 341, 837,
513 853, 372, 868, 884, 403, 899, 915, 434,
514 930, 946, 465, 961, 977, 496, 992, 1008,
515 497, 993, 1009, 466, 962, 978, 435, 931,
516 947, 404, 900, 916, 373, 869, 885, 342,
517 838, 854, 311, 807, 823, 280, 776, 792,
518 249, 745, 761, 218, 714, 730, 187, 683,
519 699, 156, 652, 668, 125, 621, 637, 94,
520 590, 606, 63, 559, 575, 95, 591, 607,
521 126, 622, 638, 157, 653, 669, 188, 684,
522 700, 219, 715, 731, 250, 746, 762, 281,
523 777, 793, 312, 808, 824, 343, 839, 855,
524 374, 870, 886, 405, 901, 917, 436, 932,
525 948, 467, 963, 979, 498, 994, 1010, 499,
526 995, 1011, 468, 964, 980, 437, 933, 949,
527 406, 902, 918, 375, 871, 887, 344, 840,
528
529 856, 313, 809, 825, 282, 778, 794, 251,
530 747, 763, 220, 716, 732, 189, 685, 701,
531 158, 654, 670, 127, 623, 639, 159, 655,
532 671, 190, 686, 702, 221, 717, 733, 252,
533 748, 764, 283, 779, 795, 314, 810, 826,
534 345, 841, 857, 376, 872, 888, 407, 903,
535 919, 438, 934, 950, 469, 965, 981, 500,
536 996, 1012, 501, 997, 1013, 470, 966, 982,
537 439, 935, 951, 408, 904, 920, 377, 873,
538 889, 346, 842, 858, 315, 811, 827, 284,
539 780, 796, 253, 749, 765, 222, 718, 734,
540 191, 687, 703, 223, 719, 735, 254, 750,
541 766, 285, 781, 797, 316, 812, 828, 347,
542 843, 859, 378, 874, 890, 409, 905, 921,
543 440, 936, 952, 471, 967, 983, 502, 998,
544 1014, 503, 999, 1015, 472, 968, 984, 441,
545 937, 953, 410, 906, 922, 379, 875, 891,
546 348, 844, 860, 317, 813, 829, 286, 782,
547 798, 255, 751, 767, 287, 783, 799, 318,
548 814, 830, 349, 845, 861, 380, 876, 892,
549 411, 907, 923, 442, 938, 954, 473, 969,
550 985, 504, 1000, 1016, 505, 1001, 1017, 474,
551 970, 986, 443, 939, 955, 412, 908, 924,
552 381, 877, 893, 350, 846, 862, 319, 815,
553 831, 351, 847, 863, 382, 878, 894, 413,
554 909, 925, 444, 940, 956, 475, 971, 987,
555 506, 1002, 1018, 507, 1003, 1019, 476, 972,
556 988, 445, 941, 957, 414, 910, 926, 383,
557 879, 895, 415, 911, 927, 446, 942, 958,
558 477, 973, 989, 508, 1004, 1020, 509, 1005,
559 1021, 478, 974, 990, 447, 943, 959, 479,
560 975, 991, 510, 1006, 1022, 511, 1007, 1023,
561 };
562
563 #elif DWTDCT_TYPE == DWTDCT8X8
564
565 DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]) = {
566 0, 1, 2, 3, 5, 4, 4, 5,
567 5, 3, 6, 3, 5, 4, 6, 6,
568 6, 5, 5, 6, 6, 6, 6, 6,
569 6, 6, 6, 6, 6, 6, 6, 6,
570 6, 6, 6, 6, 7, 7, 7, 7,
571 7, 7, 7, 7, 7, 7, 7, 7,
572 7, 7, 7, 7, 7, 7, 7, 7,
573 7, 7, 7, 7, 7, 7, 7, 7,
574
575 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
576 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
577 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
578 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
579 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
580 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
581 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
582 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
583
584 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
585 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
586 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
587 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
588 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
589 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
590 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
591 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
592 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
593 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
594 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
595 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
596 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
597 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
598 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
599 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
600
601 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
602 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
603 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
604 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
605 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
606 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
607 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
608 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
609 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
610 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
611 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
612 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
613 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
614 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
615 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
616 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
617
618 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
619 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
620 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
621 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
622 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
623 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
624 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
625 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
626 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
627 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
628 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
629 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
630 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
631 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
632 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
633 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
634 };
635
636 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_32x32[1024]) = {
637 0, 1, 32, 64, 33, 2, 3, 34,
638 65, 96, 128, 97, 66, 35, 4, 5,
639 36, 67, 98, 129, 160, 192, 161, 130,
640 99, 68, 37, 6, 7, 38, 69, 100,
641 131, 162, 193, 224, 225, 194, 163, 132,
642 101, 70, 39, 71, 102, 133, 164, 195,
643 226, 227, 196, 165, 134, 103, 135, 166,
644 197, 228, 229, 198, 167, 199, 230, 231,
645
646 8, 256, 264, 9, 257, 265, 40, 288, 296, 72, 320, 328,
647 41, 289, 297, 10, 258, 266, 11, 259, 267, 42, 290, 298,
648 73, 321, 329, 104, 352, 360, 136, 384, 392, 105, 353, 361,
649 74, 322, 330, 43, 291, 299, 12, 260, 268, 13, 261, 269,
650 44, 292, 300, 75, 323, 331, 106, 354, 362, 137, 385, 393,
651 168, 416, 424, 200, 448, 456, 169, 417, 425, 138, 386, 394,
652 107, 355, 363, 76, 324, 332, 45, 293, 301, 14, 262, 270,
653 15, 263, 271, 46, 294, 302, 77, 325, 333, 108, 356, 364,
654 139, 387, 395, 170, 418, 426, 201, 449, 457, 232, 480, 488,
655 233, 481, 489, 202, 450, 458, 171, 419, 427, 140, 388, 396,
656 109, 357, 365, 78, 326, 334, 47, 295, 303, 79, 327, 335,
657 110, 358, 366, 141, 389, 397, 172, 420, 428, 203, 451, 459,
658 234, 482, 490, 235, 483, 491, 204, 452, 460, 173, 421, 429,
659 142, 390, 398, 111, 359, 367, 143, 391, 399, 174, 422, 430,
660 205, 453, 461, 236, 484, 492, 237, 485, 493, 206, 454, 462,
661 175, 423, 431, 207, 455, 463, 238, 486, 494, 239, 487, 495,
662
663 16, 512, 528, 17, 513, 529, 18, 514,
664 530, 19, 515, 531, 20, 516, 532, 21,
665 517, 533, 22, 518, 534, 23, 519, 535,
666 24, 520, 536, 25, 521, 537, 26, 522,
667 538, 27, 523, 539, 28, 524, 540, 29,
668 525, 541, 30, 526, 542, 31, 527, 543,
669 48, 544, 560, 49, 545, 561, 50, 546,
670 562, 51, 547, 563, 52, 548, 564, 53,
671 549, 565, 54, 550, 566, 55, 551, 567,
672 56, 552, 568, 57, 553, 569, 58, 554,
673 570, 59, 555, 571, 60, 556, 572, 61,
674 557, 573, 62, 558, 574, 63, 559, 575,
675 80, 576, 592, 81, 577, 593, 82, 578,
676 594, 83, 579, 595, 84, 580, 596, 85,
677 581, 597, 86, 582, 598, 87, 583, 599,
678 88, 584, 600, 89, 585, 601, 90, 586,
679 602, 91, 587, 603, 92, 588, 604, 93,
680 589, 605, 94, 590, 606, 95, 591, 607,
681 112, 608, 624, 113, 609, 625, 114, 610,
682 626, 115, 611, 627, 116, 612, 628, 117,
683 613, 629, 118, 614, 630, 119, 615, 631,
684 120, 616, 632, 121, 617, 633, 122, 618,
685 634, 123, 619, 635, 124, 620, 636, 125,
686 621, 637, 126, 622, 638, 127, 623, 639,
687 144, 640, 656, 145, 641, 657, 146, 642,
688 658, 147, 643, 659, 148, 644, 660, 149,
689 645, 661, 150, 646, 662, 151, 647, 663,
690 152, 648, 664, 153, 649, 665, 154, 650,
691 666, 155, 651, 667, 156, 652, 668, 157,
692 653, 669, 158, 654, 670, 159, 655, 671,
693 176, 672, 688, 177, 673, 689, 178, 674,
694 690, 179, 675, 691, 180, 676, 692, 181,
695 677, 693, 182, 678, 694, 183, 679, 695,
696 184, 680, 696, 185, 681, 697, 186, 682,
697 698, 187, 683, 699, 188, 684, 700, 189,
698 685, 701, 190, 686, 702, 191, 687, 703,
699 208, 704, 720, 209, 705, 721, 210, 706,
700 722, 211, 707, 723, 212, 708, 724, 213,
701 709, 725, 214, 710, 726, 215, 711, 727,
702 216, 712, 728, 217, 713, 729, 218, 714,
703 730, 219, 715, 731, 220, 716, 732, 221,
704 717, 733, 222, 718, 734, 223, 719, 735,
705 240, 736, 752, 241, 737, 753, 242, 738,
706 754, 243, 739, 755, 244, 740, 756, 245,
707 741, 757, 246, 742, 758, 247, 743, 759,
708 248, 744, 760, 249, 745, 761, 250, 746,
709 762, 251, 747, 763, 252, 748, 764, 253,
710 749, 765, 254, 750, 766, 255, 751, 767,
711 272, 768, 784, 273, 769, 785, 274, 770,
712 786, 275, 771, 787, 276, 772, 788, 277,
713 773, 789, 278, 774, 790, 279, 775, 791,
714 280, 776, 792, 281, 777, 793, 282, 778,
715 794, 283, 779, 795, 284, 780, 796, 285,
716 781, 797, 286, 782, 798, 287, 783, 799,
717 304, 800, 816, 305, 801, 817, 306, 802,
718 818, 307, 803, 819, 308, 804, 820, 309,
719 805, 821, 310, 806, 822, 311, 807, 823,
720 312, 808, 824, 313, 809, 825, 314, 810,
721 826, 315, 811, 827, 316, 812, 828, 317,
722 813, 829, 318, 814, 830, 319, 815, 831,
723 336, 832, 848, 337, 833, 849, 338, 834,
724 850, 339, 835, 851, 340, 836, 852, 341,
725 837, 853, 342, 838, 854, 343, 839, 855,
726 344, 840, 856, 345, 841, 857, 346, 842,
727 858, 347, 843, 859, 348, 844, 860, 349,
728 845, 861, 350, 846, 862, 351, 847, 863,
729 368, 864, 880, 369, 865, 881, 370, 866,
730 882, 371, 867, 883, 372, 868, 884, 373,
731 869, 885, 374, 870, 886, 375, 871, 887,
732 376, 872, 888, 377, 873, 889, 378, 874,
733 890, 379, 875, 891, 380, 876, 892, 381,
734 877, 893, 382, 878, 894, 383, 879, 895,
735 400, 896, 912, 401, 897, 913, 402, 898,
736 914, 403, 899, 915, 404, 900, 916, 405,
737 901, 917, 406, 902, 918, 407, 903, 919,
738 408, 904, 920, 409, 905, 921, 410, 906,
739 922, 411, 907, 923, 412, 908, 924, 413,
740 909, 925, 414, 910, 926, 415, 911, 927,
741 432, 928, 944, 433, 929, 945, 434, 930,
742 946, 435, 931, 947, 436, 932, 948, 437,
743 933, 949, 438, 934, 950, 439, 935, 951,
744 440, 936, 952, 441, 937, 953, 442, 938,
745 954, 443, 939, 955, 444, 940, 956, 445,
746 941, 957, 446, 942, 958, 447, 943, 959,
747 464, 960, 976, 465, 961, 977, 466, 962,
748 978, 467, 963, 979, 468, 964, 980, 469,
749 965, 981, 470, 966, 982, 471, 967, 983,
750 472, 968, 984, 473, 969, 985, 474, 970,
751 986, 475, 971, 987, 476, 972, 988, 477,
752 973, 989, 478, 974, 990, 479, 975, 991,
753 496, 992, 1008, 497, 993, 1009, 498, 994,
754 1010, 499, 995, 1011, 500, 996, 1012, 501,
755 997, 1013, 502, 998, 1014, 503, 999, 1015,
756 504, 1000, 1016, 505, 1001, 1017, 506, 1002,
757 1018, 507, 1003, 1019, 508, 1004, 1020, 509,
758 1005, 1021, 510, 1006, 1022, 511, 1007, 1023,
759 };
760 #endif
761
762 #else
763
764 DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]) = {
765 0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6,
766 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
767 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
768 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
769 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
770 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
771 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
772 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
773 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
774 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
775 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
776 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
777 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
778 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
779 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
780 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
781
782 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
783 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
784 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
785 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
786 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
787 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
788 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
789 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
790 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
791 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
792 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
793 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
794 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
795 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
796 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
797 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
798
799 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
800 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
801 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
802 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
803 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
804 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
805 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
806 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
807 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
808 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
809 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
810 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
811 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
812 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
813 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
814 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
815
816 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
817 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
818 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
819 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
820 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
821 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
822 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
823 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
824 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
825 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
826 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
827 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
828 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
829 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
830 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
831 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
832 };
833
834 DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_32x32[1024]) = {
835 0, 1, 32, 64, 33, 2, 3, 34, 65, 96, 128, 97, 66, 35, 4, 5, 36, 67, 98, 129, 160, 192, 161, 130, 99, 68, 3 7, 6, 7, 38, 69, 100,
836 131, 162, 193, 224, 256, 225, 194, 163, 132, 101, 70, 39, 8, 9, 40, 71, 102, 133, 164, 195, 226, 257, 288, 320, 289, 258, 22 7, 196, 165, 134, 103, 72,
837 41, 10, 11, 42, 73, 104, 135, 166, 197, 228, 259, 290, 321, 352, 384, 353, 322, 291, 260, 229, 198, 167, 136, 105, 74, 43, 1 2, 13, 44, 75, 106, 137,
838 168, 199, 230, 261, 292, 323, 354, 385, 416, 448, 417, 386, 355, 324, 293, 262, 231, 200, 169, 138, 107, 76, 45, 14, 15, 46, 7 7, 108, 139, 170, 201, 232,
839 263, 294, 325, 356, 387, 418, 449, 480, 512, 481, 450, 419, 388, 357, 326, 295, 264, 233, 202, 171, 140, 109, 78, 47, 16, 17, 4 8, 79, 110, 141, 172, 203,
840 234, 265, 296, 327, 358, 389, 420, 451, 482, 513, 544, 576, 545, 514, 483, 452, 421, 390, 359, 328, 297, 266, 235, 204, 173, 142, 11 1, 80, 49, 18, 19, 50,
841 81, 112, 143, 174, 205, 236, 267, 298, 329, 360, 391, 422, 453, 484, 515, 546, 577, 608, 640, 609, 578, 547, 516, 485, 454, 423, 39 2, 361, 330, 299, 268, 237,
842 206, 175, 144, 113, 82, 51, 20, 21, 52, 83, 114, 145, 176, 207, 238, 269, 300, 331, 362, 393, 424, 455, 486, 517, 548, 579, 61 0, 641, 672, 704, 673, 642,
843 611, 580, 549, 518, 487, 456, 425, 394, 363, 332, 301, 270, 239, 208, 177, 146, 115, 84, 53, 22, 23, 54, 85, 116, 147, 178, 20 9, 240, 271, 302, 333, 364,
844 395, 426, 457, 488, 519, 550, 581, 612, 643, 674, 705, 736, 768, 737, 706, 675, 644, 613, 582, 551, 520, 489, 458, 427, 396, 365, 33 4, 303, 272, 241, 210, 179,
845 148, 117, 86, 55, 24, 25, 56, 87, 118, 149, 180, 211, 242, 273, 304, 335, 366, 397, 428, 459, 490, 521, 552, 583, 614, 645, 67 6, 707, 738, 769, 800, 832,
846 801, 770, 739, 708, 677, 646, 615, 584, 553, 522, 491, 460, 429, 398, 367, 336, 305, 274, 243, 212, 181, 150, 119, 88, 57, 26, 2 7, 58, 89, 120, 151, 182,
847 213, 244, 275, 306, 337, 368, 399, 430, 461, 492, 523, 554, 585, 616, 647, 678, 709, 740, 771, 802, 833, 864, 896, 865, 834, 803, 77 2, 741, 710, 679, 648, 617,
848 586, 555, 524, 493, 462, 431, 400, 369, 338, 307, 276, 245, 214, 183, 152, 121, 90, 59, 28, 29, 60, 91, 122, 153, 184, 215, 24 6, 277, 308, 339, 370, 401,
849 432, 463, 494, 525, 556, 587, 618, 649, 680, 711, 742, 773, 804, 835, 866, 897, 928, 960, 929, 898, 867, 836, 805, 774, 743, 712, 68 1, 650, 619, 588, 557, 526,
850 495, 464, 433, 402, 371, 340, 309, 278, 247, 216, 185, 154, 123, 92, 61, 30, 31, 62, 93, 124, 155, 186, 217, 248, 279, 310, 34 1, 372, 403, 434, 465, 496,
851 527, 558, 589, 620, 651, 682, 713, 744, 775, 806, 837, 868, 899, 930, 961, 992, 993, 962, 931, 900, 869, 838, 807, 776, 745, 714, 68 3, 652, 621, 590, 559, 528,
852 497, 466, 435, 404, 373, 342, 311, 280, 249, 218, 187, 156, 125, 94, 63, 95, 126, 157, 188, 219, 250, 281, 312, 343, 374, 405, 43 6, 467, 498, 529, 560, 591,
853 622, 653, 684, 715, 746, 777, 808, 839, 870, 901, 932, 963, 994, 995, 964, 933, 902, 871, 840, 809, 778, 747, 716, 685, 654, 623, 59 2, 561, 530, 499, 468, 437,
854 406, 375, 344, 313, 282, 251, 220, 189, 158, 127, 159, 190, 221, 252, 283, 314, 345, 376, 407, 438, 469, 500, 531, 562, 593, 624, 65 5, 686, 717, 748, 779, 810,
855 841, 872, 903, 934, 965, 996, 997, 966, 935, 904, 873, 842, 811, 780, 749, 718, 687, 656, 625, 594, 563, 532, 501, 470, 439, 408, 37 7, 346, 315, 284, 253, 222,
856 191, 223, 254, 285, 316, 347, 378, 409, 440, 471, 502, 533, 564, 595, 626, 657, 688, 719, 750, 781, 812, 843, 874, 905, 936, 967, 99 8, 999, 968, 937, 906, 875,
857 844, 813, 782, 751, 720, 689, 658, 627, 596, 565, 534, 503, 472, 441, 410, 379, 348, 317, 286, 255, 287, 318, 349, 380, 411, 442, 47 3, 504, 535, 566, 597, 628,
858 659, 690, 721, 752, 783, 814, 845, 876, 907, 938, 969, 1000, 1001, 970, 939, 908, 877, 846, 815, 784, 753, 722, 691, 660, 629, 598, 56 7, 536, 505, 474, 443, 412,
859 381, 350, 319, 351, 382, 413, 444, 475, 506, 537, 568, 599, 630, 661, 692, 723, 754, 785, 816, 847, 878, 909, 940, 971, 1002, 1003, 97 2, 941, 910, 879, 848, 817,
860 786, 755, 724, 693, 662, 631, 600, 569, 538, 507, 476, 445, 414, 383, 415, 446, 477, 508, 539, 570, 601, 632, 663, 694, 725, 756, 78 7, 818, 849, 880, 911, 942,
861 973, 1004, 1005, 974, 943, 912, 881, 850, 819, 788, 757, 726, 695, 664, 633, 602, 571, 540, 509, 478, 447, 479, 510, 541, 572, 603, 63 4, 665, 696, 727, 758, 789,
862 820, 851, 882, 913, 944, 975, 1006, 1007, 976, 945, 914, 883, 852, 821, 790, 759, 728, 697, 666, 635, 604, 573, 542, 511, 543, 574, 60 5, 636, 667, 698, 729, 760,
863 791, 822, 853, 884, 915, 946, 977, 1008, 1009, 978, 947, 916, 885, 854, 823, 792, 761, 730, 699, 668, 637, 606, 575, 607, 638, 669, 70 0, 731, 762, 793, 824, 855,
864 886, 917, 948, 979, 1010, 1011, 980, 949, 918, 887, 856, 825, 794, 763, 732, 701, 670, 639, 671, 702, 733, 764, 795, 826, 857, 888, 91 9, 950, 981, 1012, 1013, 982,
865 951, 920, 889, 858, 827, 796, 765, 734, 703, 735, 766, 797, 828, 859, 890, 921, 952, 983, 1014, 1015, 984, 953, 922, 891, 860, 829, 79 8, 767, 799, 830, 861, 892,
866 923, 954, 985, 1016, 1017, 986, 955, 924, 893, 862, 831, 863, 894, 925, 956, 987, 1018, 1019, 988, 957, 926, 895, 927, 958, 989, 1020, 102 1, 990, 959, 991, 1022, 1023,
867 };
868 #endif // CONFIG_DWTDCTHYBRID
135 869
136 /* Array indices are identical to previously-existing CONTEXT_NODE indices */ 870 /* Array indices are identical to previously-existing CONTEXT_NODE indices */
137 871
138 const vp9_tree_index vp9_coef_tree[ 22] = /* corresponding _CONTEXT_NODEs */ 872 const vp9_tree_index vp9_coef_tree[ 22] = /* corresponding _CONTEXT_NODEs */
139 { 873 {
140 -DCT_EOB_TOKEN, 2, /* 0 = EOB */ 874 -DCT_EOB_TOKEN, 2, /* 0 = EOB */
141 -ZERO_TOKEN, 4, /* 1 = ZERO */ 875 -ZERO_TOKEN, 4, /* 1 = ZERO */
142 -ONE_TOKEN, 6, /* 2 = ONE */ 876 -ONE_TOKEN, 6, /* 2 = ONE */
143 8, 12, /* 3 = LOW_VAL */ 877 8, 12, /* 3 = LOW_VAL */
144 -TWO_TOKEN, 10, /* 4 = TWO */ 878 -TWO_TOKEN, 10, /* 4 = TWO */
145 -THREE_TOKEN, -FOUR_TOKEN, /* 5 = THREE */ 879 -THREE_TOKEN, -FOUR_TOKEN, /* 5 = THREE */
146 14, 16, /* 6 = HIGH_LOW */ 880 14, 16, /* 6 = HIGH_LOW */
147 -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2, /* 7 = CAT_ONE */ 881 -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2, /* 7 = CAT_ONE */
148 18, 20, /* 8 = CAT_THREEFOUR */ 882 18, 20, /* 8 = CAT_THREEFOUR */
149 -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4, /* 9 = CAT_THREE */ 883 -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4, /* 9 = CAT_THREE */
150 -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6 /* 10 = CAT_FIVE */ 884 -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6 /* 10 = CAT_FIVE */
151 }; 885 };
152 886
153 struct vp9_token_struct vp9_coef_encodings[MAX_ENTROPY_TOKENS]; 887 struct vp9_token_struct vp9_coef_encodings[MAX_ENTROPY_TOKENS];
154 888
155 /* Trees for extra bits. Probabilities are constant and 889 /* Trees for extra bits. Probabilities are constant and
156 do not depend on previously encoded bits */ 890 do not depend on previously encoded bits */
157 891
158 static const Prob Pcat1[] = { 159}; 892 static const vp9_prob Pcat1[] = { 159};
159 static const Prob Pcat2[] = { 165, 145}; 893 static const vp9_prob Pcat2[] = { 165, 145};
160 static const Prob Pcat3[] = { 173, 148, 140}; 894 static const vp9_prob Pcat3[] = { 173, 148, 140};
161 static const Prob Pcat4[] = { 176, 155, 140, 135}; 895 static const vp9_prob Pcat4[] = { 176, 155, 140, 135};
162 static const Prob Pcat5[] = { 180, 157, 141, 134, 130}; 896 static const vp9_prob Pcat5[] = { 180, 157, 141, 134, 130};
163 static const Prob Pcat6[] = 897 static const vp9_prob Pcat6[] = {
164 { 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129}; 898 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
899 };
165 900
166 static vp9_tree_index cat1[2], cat2[4], cat3[6], cat4[8], cat5[10], cat6[26]; 901 static vp9_tree_index cat1[2], cat2[4], cat3[6], cat4[8], cat5[10], cat6[28];
167 902
168 static void init_bit_tree(vp9_tree_index *p, int n) { 903 static void init_bit_tree(vp9_tree_index *p, int n) {
169 int i = 0; 904 int i = 0;
170 905
171 while (++i < n) { 906 while (++i < n) {
172 p[0] = p[1] = i << 1; 907 p[0] = p[1] = i << 1;
173 p += 2; 908 p += 2;
174 } 909 }
175 910
176 p[0] = p[1] = 0; 911 p[0] = p[1] = 0;
177 } 912 }
178 913
179 static void init_bit_trees() { 914 static void init_bit_trees() {
180 init_bit_tree(cat1, 1); 915 init_bit_tree(cat1, 1);
181 init_bit_tree(cat2, 2); 916 init_bit_tree(cat2, 2);
182 init_bit_tree(cat3, 3); 917 init_bit_tree(cat3, 3);
183 init_bit_tree(cat4, 4); 918 init_bit_tree(cat4, 4);
184 init_bit_tree(cat5, 5); 919 init_bit_tree(cat5, 5);
185 init_bit_tree(cat6, 13); 920 init_bit_tree(cat6, 14);
186 } 921 }
187 922
188 vp9_extra_bit_struct vp9_extra_bits[12] = { 923 vp9_extra_bit_struct vp9_extra_bits[12] = {
189 { 0, 0, 0, 0}, 924 { 0, 0, 0, 0},
190 { 0, 0, 0, 1}, 925 { 0, 0, 0, 1},
191 { 0, 0, 0, 2}, 926 { 0, 0, 0, 2},
192 { 0, 0, 0, 3}, 927 { 0, 0, 0, 3},
193 { 0, 0, 0, 4}, 928 { 0, 0, 0, 4},
194 { cat1, Pcat1, 1, 5}, 929 { cat1, Pcat1, 1, 5},
195 { cat2, Pcat2, 2, 7}, 930 { cat2, Pcat2, 2, 7},
196 { cat3, Pcat3, 3, 11}, 931 { cat3, Pcat3, 3, 11},
197 { cat4, Pcat4, 4, 19}, 932 { cat4, Pcat4, 4, 19},
198 { cat5, Pcat5, 5, 35}, 933 { cat5, Pcat5, 5, 35},
199 { cat6, Pcat6, 13, 67}, 934 { cat6, Pcat6, 14, 67},
200 { 0, 0, 0, 0} 935 { 0, 0, 0, 0}
201 }; 936 };
202 937
203 #include "vp9/common/vp9_default_coef_probs.h" 938 #include "vp9/common/vp9_default_coef_probs.h"
204 939
940 #if CONFIG_NEWCOEFCONTEXT
941
942 // Neighborhood 5-tuples for various scans and blocksizes,
943 // in {top, left, topleft, topright, bottomleft} order
944 // for each position in raster scan order.
945 // -1 indicates the neighbor does not exist.
946 DECLARE_ALIGNED(16, int,
947 vp9_default_zig_zag1d_4x4_neighbors[16 * MAX_NEIGHBORS]);
948 DECLARE_ALIGNED(16, int,
949 vp9_col_scan_4x4_neighbors[16 * MAX_NEIGHBORS]);
950 DECLARE_ALIGNED(16, int,
951 vp9_row_scan_4x4_neighbors[16 * MAX_NEIGHBORS]);
952 DECLARE_ALIGNED(16, int,
953 vp9_default_zig_zag1d_8x8_neighbors[64 * MAX_NEIGHBORS]);
954 DECLARE_ALIGNED(16, int,
955 vp9_default_zig_zag1d_16x16_neighbors[256 * MAX_NEIGHBORS]);
956 DECLARE_ALIGNED(16, int,
957 vp9_default_zig_zag1d_32x32_neighbors[1024 * MAX_NEIGHBORS]);
958
959 static int find_in_scan(const int *scan, int l, int m) {
960 int i, l2 = l * l;
961 for (i = 0; i < l2; ++i) {
962 if (scan[i] == m)
963 return i;
964 }
965 return -1;
966 }
967
968 static void init_scan_neighbors(const int *scan, int l, int *neighbors) {
969 int l2 = l * l;
970 int m, n, i, j, k;
971 for (n = 0; n < l2; ++n) {
972 int locn = find_in_scan(scan, l, n);
973 int z = -1;
974 i = n / l;
975 j = n % l;
976 for (k = 0; k < MAX_NEIGHBORS; ++k)
977 neighbors[MAX_NEIGHBORS * n + k] = -1;
978 if (i - 1 >= 0) {
979 m = (i - 1) * l + j;
980 if (find_in_scan(scan, l, m) < locn) {
981 neighbors[MAX_NEIGHBORS * n] = m;
982 if (m == 0) z = 0;
983 }
984 }
985 if (j - 1 >= 0) {
986 m = i * l + j - 1;
987 if (find_in_scan(scan, l, m) < locn) {
988 neighbors[MAX_NEIGHBORS * n + 1] = m;
989 if (m == 0) z = 1;
990 }
991 }
992 if (i - 1 >= 0 && j - 1 >= 0) {
993 m = (i - 1) * l + j - 1;
994 if (find_in_scan(scan, l, m) < locn) {
995 neighbors[MAX_NEIGHBORS * n + 2] = m;
996 if (m == 0) z = 2;
997 }
998 }
999 if (i - 1 >= 0 && j + 1 < l) {
1000 m = (i - 1) * l + j + 1;
1001 if (find_in_scan(scan, l, m) < locn) {
1002 neighbors[MAX_NEIGHBORS * n + 3] = m;
1003 if (m == 0) z = 3;
1004 }
1005 }
1006 if (i + 1 < l && j - 1 >= 0) {
1007 m = (i + 1) * l + j - 1;
1008 if (find_in_scan(scan, l, m) < locn) {
1009 neighbors[MAX_NEIGHBORS * n + 4] = m;
1010 if (m == 0) z = 4;
1011 }
1012 }
1013 if (z != -1) { // zero exists
1014 int v = 0;
1015 for (k = 0; k < MAX_NEIGHBORS; ++k)
1016 v += (neighbors[MAX_NEIGHBORS * n + k] > 0);
1017 if (v) {
1018 neighbors[MAX_NEIGHBORS * n + z] = -1;
1019 }
1020 }
1021 }
1022 }
1023
1024 void vp9_init_neighbors() {
1025 init_scan_neighbors(vp9_default_zig_zag1d_4x4, 4,
1026 vp9_default_zig_zag1d_4x4_neighbors);
1027 init_scan_neighbors(vp9_row_scan_4x4, 4,
1028 vp9_row_scan_4x4_neighbors);
1029 init_scan_neighbors(vp9_col_scan_4x4, 4,
1030 vp9_col_scan_4x4_neighbors);
1031 init_scan_neighbors(vp9_default_zig_zag1d_8x8, 8,
1032 vp9_default_zig_zag1d_8x8_neighbors);
1033 init_scan_neighbors(vp9_default_zig_zag1d_16x16, 16,
1034 vp9_default_zig_zag1d_16x16_neighbors);
1035 init_scan_neighbors(vp9_default_zig_zag1d_32x32, 32,
1036 vp9_default_zig_zag1d_32x32_neighbors);
1037 }
1038
1039 const int *vp9_get_coef_neighbors_handle(const int *scan) {
1040 if (scan == vp9_default_zig_zag1d_4x4) {
1041 return vp9_default_zig_zag1d_4x4_neighbors;
1042 } else if (scan == vp9_row_scan_4x4) {
1043 return vp9_row_scan_4x4_neighbors;
1044 } else if (scan == vp9_col_scan_4x4) {
1045 return vp9_col_scan_4x4_neighbors;
1046 } else if (scan == vp9_default_zig_zag1d_8x8) {
1047 return vp9_default_zig_zag1d_8x8_neighbors;
1048 } else if (scan == vp9_default_zig_zag1d_16x16) {
1049 return vp9_default_zig_zag1d_16x16_neighbors;
1050 } else if (scan == vp9_default_zig_zag1d_32x32) {
1051 return vp9_default_zig_zag1d_32x32_neighbors;
1052 }
1053 return vp9_default_zig_zag1d_4x4_neighbors;
1054 }
1055
1056 int vp9_get_coef_neighbor_context(const short int *qcoeff_ptr, int nodc,
1057 const int *neigbor_handle, int rc) {
1058 static int neighbors_used = MAX_NEIGHBORS; // maximum is MAX_NEIGHBORS
1059 const int *nb = neigbor_handle + rc * MAX_NEIGHBORS;
1060 int i, v, val = 0, n = 0;
1061 for (i = 0; i < neighbors_used; ++i) {
1062 if (nb[i] == -1 || (nb[i] == 0 && nodc)) {
1063 continue;
1064 }
1065 v = abs(qcoeff_ptr[nb[i]]);
1066 val = (v > val ? v : val);
1067 n++;
1068 }
1069 if (n == 0)
1070 return 0;
1071 else if (val <= 1)
1072 return val;
1073 else if (val < 4)
1074 return 2;
1075 else
1076 return 3;
1077 }
1078 #endif /* CONFIG_NEWCOEFCONTEXT */
1079
205 void vp9_default_coef_probs(VP9_COMMON *pc) { 1080 void vp9_default_coef_probs(VP9_COMMON *pc) {
206 vpx_memcpy(pc->fc.coef_probs, default_coef_probs, 1081 vpx_memcpy(pc->fc.coef_probs_4x4, default_coef_probs_4x4,
207 sizeof(pc->fc.coef_probs)); 1082 sizeof(pc->fc.coef_probs_4x4));
208 vpx_memcpy(pc->fc.hybrid_coef_probs, default_hybrid_coef_probs, 1083 vpx_memcpy(pc->fc.hybrid_coef_probs_4x4, default_hybrid_coef_probs_4x4,
209 sizeof(pc->fc.hybrid_coef_probs)); 1084 sizeof(pc->fc.hybrid_coef_probs_4x4));
210 1085
211 vpx_memcpy(pc->fc.coef_probs_8x8, default_coef_probs_8x8, 1086 vpx_memcpy(pc->fc.coef_probs_8x8, default_coef_probs_8x8,
212 sizeof(pc->fc.coef_probs_8x8)); 1087 sizeof(pc->fc.coef_probs_8x8));
213 vpx_memcpy(pc->fc.hybrid_coef_probs_8x8, default_hybrid_coef_probs_8x8, 1088 vpx_memcpy(pc->fc.hybrid_coef_probs_8x8, default_hybrid_coef_probs_8x8,
214 sizeof(pc->fc.hybrid_coef_probs_8x8)); 1089 sizeof(pc->fc.hybrid_coef_probs_8x8));
215 1090
216 vpx_memcpy(pc->fc.coef_probs_16x16, default_coef_probs_16x16, 1091 vpx_memcpy(pc->fc.coef_probs_16x16, default_coef_probs_16x16,
217 sizeof(pc->fc.coef_probs_16x16)); 1092 sizeof(pc->fc.coef_probs_16x16));
218 vpx_memcpy(pc->fc.hybrid_coef_probs_16x16, 1093 vpx_memcpy(pc->fc.hybrid_coef_probs_16x16,
219 default_hybrid_coef_probs_16x16, 1094 default_hybrid_coef_probs_16x16,
220 sizeof(pc->fc.hybrid_coef_probs_16x16)); 1095 sizeof(pc->fc.hybrid_coef_probs_16x16));
1096 vpx_memcpy(pc->fc.coef_probs_32x32, default_coef_probs_32x32,
1097 sizeof(pc->fc.coef_probs_32x32));
221 } 1098 }
222 1099
223 void vp9_coef_tree_initialize() { 1100 void vp9_coef_tree_initialize() {
224 init_bit_trees(); 1101 init_bit_trees();
225 vp9_tokens_from_tree(vp9_coef_encodings, vp9_coef_tree); 1102 vp9_tokens_from_tree(vp9_coef_encodings, vp9_coef_tree);
226 } 1103 }
227 1104
228 // #define COEF_COUNT_TESTING 1105 // #define COEF_COUNT_TESTING
229 1106
230 #define COEF_COUNT_SAT 24 1107 #define COEF_COUNT_SAT 24
231 #define COEF_MAX_UPDATE_FACTOR 112 1108 #define COEF_MAX_UPDATE_FACTOR 112
232 #define COEF_COUNT_SAT_KEY 24 1109 #define COEF_COUNT_SAT_KEY 24
233 #define COEF_MAX_UPDATE_FACTOR_KEY 112 1110 #define COEF_MAX_UPDATE_FACTOR_KEY 112
234 #define COEF_COUNT_SAT_AFTER_KEY 24 1111 #define COEF_COUNT_SAT_AFTER_KEY 24
235 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128 1112 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128
236 1113
237 void vp9_adapt_coef_probs(VP9_COMMON *cm) { 1114 static void update_coef_probs(vp9_coeff_probs *dst_coef_probs,
1115 vp9_coeff_probs *pre_coef_probs,
1116 int block_types, vp9_coeff_count *coef_counts,
1117 int count_sat, int update_factor) {
238 int t, i, j, k, count; 1118 int t, i, j, k, count;
239 unsigned int branch_ct[ENTROPY_NODES][2]; 1119 unsigned int branch_ct[ENTROPY_NODES][2];
240 vp9_prob coef_probs[ENTROPY_NODES]; 1120 vp9_prob coef_probs[ENTROPY_NODES];
1121 int factor;
1122
1123 for (i = 0; i < block_types; ++i)
1124 for (j = 0; j < COEF_BANDS; ++j)
1125 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
1126 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
1127 continue;
1128 vp9_tree_probs_from_distribution(MAX_ENTROPY_TOKENS,
1129 vp9_coef_encodings, vp9_coef_tree,
1130 coef_probs, branch_ct,
1131 coef_counts[i][j][k]);
1132 for (t = 0; t < ENTROPY_NODES; ++t) {
1133 count = branch_ct[t][0] + branch_ct[t][1];
1134 count = count > count_sat ? count_sat : count;
1135 factor = (update_factor * count / count_sat);
1136 dst_coef_probs[i][j][k][t] = weighted_prob(pre_coef_probs[i][j][k][t],
1137 coef_probs[t], factor);
1138 }
1139 }
1140 }
1141
1142 void vp9_adapt_coef_probs(VP9_COMMON *cm) {
1143 #ifdef COEF_COUNT_TESTING
1144 int t, i, j, k;
1145 #endif
1146 int count_sat;
241 int update_factor; /* denominator 256 */ 1147 int update_factor; /* denominator 256 */
242 int factor;
243 int count_sat;
244 1148
245 // printf("Frame type: %d\n", cm->frame_type); 1149 // printf("Frame type: %d\n", cm->frame_type);
246 if (cm->frame_type == KEY_FRAME) { 1150 if (cm->frame_type == KEY_FRAME) {
247 update_factor = COEF_MAX_UPDATE_FACTOR_KEY; 1151 update_factor = COEF_MAX_UPDATE_FACTOR_KEY;
248 count_sat = COEF_COUNT_SAT_KEY; 1152 count_sat = COEF_COUNT_SAT_KEY;
249 } else if (cm->last_frame_type == KEY_FRAME) { 1153 } else if (cm->last_frame_type == KEY_FRAME) {
250 update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY; /* adapt quickly */ 1154 update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY; /* adapt quickly */
251 count_sat = COEF_COUNT_SAT_AFTER_KEY; 1155 count_sat = COEF_COUNT_SAT_AFTER_KEY;
252 } else { 1156 } else {
253 update_factor = COEF_MAX_UPDATE_FACTOR; 1157 update_factor = COEF_MAX_UPDATE_FACTOR;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 printf("},\n"); 1210 printf("},\n");
307 } 1211 }
308 printf(" },\n"); 1212 printf(" },\n");
309 } 1213 }
310 printf(" },\n"); 1214 printf(" },\n");
311 } 1215 }
312 printf("};\n"); 1216 printf("};\n");
313 } 1217 }
314 #endif 1218 #endif
315 1219
316 for (i = 0; i < BLOCK_TYPES; ++i) 1220 update_coef_probs(cm->fc.coef_probs_4x4, cm->fc.pre_coef_probs_4x4,
317 for (j = 0; j < COEF_BANDS; ++j) 1221 BLOCK_TYPES_4X4, cm->fc.coef_counts_4x4,
318 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) { 1222 count_sat, update_factor);
319 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0))) 1223 update_coef_probs(cm->fc.hybrid_coef_probs_4x4,
320 continue; 1224 cm->fc.pre_hybrid_coef_probs_4x4,
321 vp9_tree_probs_from_distribution( 1225 BLOCK_TYPES_4X4, cm->fc.hybrid_coef_counts_4x4,
322 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree, 1226 count_sat, update_factor);
323 coef_probs, branch_ct, cm->fc.coef_counts [i][j][k], 1227 update_coef_probs(cm->fc.coef_probs_8x8, cm->fc.pre_coef_probs_8x8,
324 256, 1); 1228 BLOCK_TYPES_8X8, cm->fc.coef_counts_8x8,
325 for (t = 0; t < ENTROPY_NODES; ++t) { 1229 count_sat, update_factor);
326 int prob; 1230 update_coef_probs(cm->fc.hybrid_coef_probs_8x8,
327 count = branch_ct[t][0] + branch_ct[t][1]; 1231 cm->fc.pre_hybrid_coef_probs_8x8,
328 count = count > count_sat ? count_sat : count; 1232 BLOCK_TYPES_8X8, cm->fc.hybrid_coef_counts_8x8,
329 factor = (update_factor * count / count_sat); 1233 count_sat, update_factor);
330 prob = ((int)cm->fc.pre_coef_probs[i][j][k][t] * (256 - factor) + 1234 update_coef_probs(cm->fc.coef_probs_16x16, cm->fc.pre_coef_probs_16x16,
331 (int)coef_probs[t] * factor + 128) >> 8; 1235 BLOCK_TYPES_16X16, cm->fc.coef_counts_16x16,
332 if (prob <= 0) cm->fc.coef_probs[i][j][k][t] = 1; 1236 count_sat, update_factor);
333 else if (prob > 255) cm->fc.coef_probs[i][j][k][t] = 255; 1237 update_coef_probs(cm->fc.hybrid_coef_probs_16x16,
334 else cm->fc.coef_probs[i][j][k][t] = prob; 1238 cm->fc.pre_hybrid_coef_probs_16x16,
335 } 1239 BLOCK_TYPES_16X16, cm->fc.hybrid_coef_counts_16x16,
336 } 1240 count_sat, update_factor);
337 1241 update_coef_probs(cm->fc.coef_probs_32x32, cm->fc.pre_coef_probs_32x32,
338 for (i = 0; i < BLOCK_TYPES; ++i) 1242 BLOCK_TYPES_32X32, cm->fc.coef_counts_32x32,
339 for (j = 0; j < COEF_BANDS; ++j) 1243 count_sat, update_factor);
340 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
341 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
342 continue;
343 vp9_tree_probs_from_distribution(
344 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree,
345 coef_probs, branch_ct, cm->fc.hybrid_coef_counts [i][j][k],
346 256, 1);
347 for (t = 0; t < ENTROPY_NODES; ++t) {
348 int prob;
349 count = branch_ct[t][0] + branch_ct[t][1];
350 count = count > count_sat ? count_sat : count;
351 factor = (update_factor * count / count_sat);
352 prob = ((int)cm->fc.pre_hybrid_coef_probs[i][j][k][t] * (256 - factor) +
353 (int)coef_probs[t] * factor + 128) >> 8;
354 if (prob <= 0) cm->fc.hybrid_coef_probs[i][j][k][t] = 1;
355 else if (prob > 255) cm->fc.hybrid_coef_probs[i][j][k][t] = 255;
356 else cm->fc.hybrid_coef_probs[i][j][k][t] = prob;
357 }
358 }
359
360 for (i = 0; i < BLOCK_TYPES_8X8; ++i)
361 for (j = 0; j < COEF_BANDS; ++j)
362 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
363 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
364 continue;
365 vp9_tree_probs_from_distribution(
366 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree,
367 coef_probs, branch_ct, cm->fc.coef_counts_8x8 [i][j][k],
368 256, 1);
369 for (t = 0; t < ENTROPY_NODES; ++t) {
370 int prob;
371 count = branch_ct[t][0] + branch_ct[t][1];
372 count = count > count_sat ? count_sat : count;
373 factor = (update_factor * count / count_sat);
374 prob = ((int)cm->fc.pre_coef_probs_8x8[i][j][k][t] * (256 - factor) +
375 (int)coef_probs[t] * factor + 128) >> 8;
376 if (prob <= 0) cm->fc.coef_probs_8x8[i][j][k][t] = 1;
377 else if (prob > 255) cm->fc.coef_probs_8x8[i][j][k][t] = 255;
378 else cm->fc.coef_probs_8x8[i][j][k][t] = prob;
379 }
380 }
381
382 for (i = 0; i < BLOCK_TYPES_8X8; ++i)
383 for (j = 0; j < COEF_BANDS; ++j)
384 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
385 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
386 continue;
387 vp9_tree_probs_from_distribution(
388 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree,
389 coef_probs, branch_ct, cm->fc.hybrid_coef_counts_8x8 [i][j][k],
390 256, 1);
391 for (t = 0; t < ENTROPY_NODES; ++t) {
392 int prob;
393 count = branch_ct[t][0] + branch_ct[t][1];
394 count = count > count_sat ? count_sat : count;
395 factor = (update_factor * count / count_sat);
396 prob = ((int)cm->fc.pre_hybrid_coef_probs_8x8[i][j][k][t] *
397 (256 - factor) +
398 (int)coef_probs[t] * factor + 128) >> 8;
399 if (prob <= 0) cm->fc.hybrid_coef_probs_8x8[i][j][k][t] = 1;
400 else if (prob > 255) cm->fc.hybrid_coef_probs_8x8[i][j][k][t] = 255;
401 else cm->fc.hybrid_coef_probs_8x8[i][j][k][t] = prob;
402 }
403 }
404
405 for (i = 0; i < BLOCK_TYPES_16X16; ++i)
406 for (j = 0; j < COEF_BANDS; ++j)
407 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
408 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
409 continue;
410 vp9_tree_probs_from_distribution(
411 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree,
412 coef_probs, branch_ct, cm->fc.coef_counts_16x16[i][j][k], 256, 1);
413 for (t = 0; t < ENTROPY_NODES; ++t) {
414 int prob;
415 count = branch_ct[t][0] + branch_ct[t][1];
416 count = count > count_sat ? count_sat : count;
417 factor = (update_factor * count / count_sat);
418 prob = ((int)cm->fc.pre_coef_probs_16x16[i][j][k][t] *
419 (256 - factor) +
420 (int)coef_probs[t] * factor + 128) >> 8;
421 if (prob <= 0) cm->fc.coef_probs_16x16[i][j][k][t] = 1;
422 else if (prob > 255) cm->fc.coef_probs_16x16[i][j][k][t] = 255;
423 else cm->fc.coef_probs_16x16[i][j][k][t] = prob;
424 }
425 }
426
427 for (i = 0; i < BLOCK_TYPES_16X16; ++i)
428 for (j = 0; j < COEF_BANDS; ++j)
429 for (k = 0; k < PREV_COEF_CONTEXTS; ++k) {
430 if (k >= 3 && ((i == 0 && j == 1) || (i > 0 && j == 0)))
431 continue;
432 vp9_tree_probs_from_distribution(
433 MAX_ENTROPY_TOKENS, vp9_coef_encodings, vp9_coef_tree,
434 coef_probs, branch_ct, cm->fc.hybrid_coef_counts_16x16[i][j][k], 256, 1);
435 for (t = 0; t < ENTROPY_NODES; ++t) {
436 int prob;
437 count = branch_ct[t][0] + branch_ct[t][1];
438 count = count > count_sat ? count_sat : count;
439 factor = (update_factor * count / count_sat);
440 prob = ((int)cm->fc.pre_hybrid_coef_probs_16x16[i][j][k][t] * (256 - f actor) +
441 (int)coef_probs[t] * factor + 128) >> 8;
442 if (prob <= 0) cm->fc.hybrid_coef_probs_16x16[i][j][k][t] = 1;
443 else if (prob > 255) cm->fc.hybrid_coef_probs_16x16[i][j][k][t] = 255;
444 else cm->fc.hybrid_coef_probs_16x16[i][j][k][t] = prob;
445 }
446 }
447 } 1244 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/vp9_entropy.h ('k') | source/libvpx/vp9/common/vp9_entropymode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698