xref: /aosp_15_r20/external/libvpx/vp9/common/vp9_common_data.c (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker #include "vp9/common/vp9_common_data.h"
12*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/vpx_dsp_common.h"
13*fb1b10abSAndroid Build Coastguard Worker 
14*fb1b10abSAndroid Build Coastguard Worker // Log 2 conversion lookup tables for block width and height
15*fb1b10abSAndroid Build Coastguard Worker const uint8_t b_width_log2_lookup[BLOCK_SIZES] = { 0, 0, 1, 1, 1, 2, 2,
16*fb1b10abSAndroid Build Coastguard Worker                                                    2, 3, 3, 3, 4, 4 };
17*fb1b10abSAndroid Build Coastguard Worker const uint8_t b_height_log2_lookup[BLOCK_SIZES] = { 0, 1, 0, 1, 2, 1, 2,
18*fb1b10abSAndroid Build Coastguard Worker                                                     3, 2, 3, 4, 3, 4 };
19*fb1b10abSAndroid Build Coastguard Worker const uint8_t num_4x4_blocks_wide_lookup[BLOCK_SIZES] = { 1, 1, 2, 2, 2,  4, 4,
20*fb1b10abSAndroid Build Coastguard Worker                                                           4, 8, 8, 8, 16, 16 };
21*fb1b10abSAndroid Build Coastguard Worker const uint8_t num_4x4_blocks_high_lookup[BLOCK_SIZES] = { 1, 2, 1, 2,  4, 2, 4,
22*fb1b10abSAndroid Build Coastguard Worker                                                           8, 4, 8, 16, 8, 16 };
23*fb1b10abSAndroid Build Coastguard Worker // Log 2 conversion lookup tables for modeinfo width and height
24*fb1b10abSAndroid Build Coastguard Worker const uint8_t mi_width_log2_lookup[BLOCK_SIZES] = { 0, 0, 0, 0, 0, 1, 1,
25*fb1b10abSAndroid Build Coastguard Worker                                                     1, 2, 2, 2, 3, 3 };
26*fb1b10abSAndroid Build Coastguard Worker const uint8_t num_8x8_blocks_wide_lookup[BLOCK_SIZES] = { 1, 1, 1, 1, 1, 2, 2,
27*fb1b10abSAndroid Build Coastguard Worker                                                           2, 4, 4, 4, 8, 8 };
28*fb1b10abSAndroid Build Coastguard Worker const uint8_t num_8x8_blocks_high_lookup[BLOCK_SIZES] = { 1, 1, 1, 1, 2, 1, 2,
29*fb1b10abSAndroid Build Coastguard Worker                                                           4, 2, 4, 8, 4, 8 };
30*fb1b10abSAndroid Build Coastguard Worker 
31*fb1b10abSAndroid Build Coastguard Worker // VPXMIN(3, VPXMIN(b_width_log2_lookup(bsize), b_height_log2_lookup(bsize)))
32*fb1b10abSAndroid Build Coastguard Worker const uint8_t size_group_lookup[BLOCK_SIZES] = { 0, 0, 0, 1, 1, 1, 2,
33*fb1b10abSAndroid Build Coastguard Worker                                                  2, 2, 3, 3, 3, 3 };
34*fb1b10abSAndroid Build Coastguard Worker 
35*fb1b10abSAndroid Build Coastguard Worker const uint8_t num_pels_log2_lookup[BLOCK_SIZES] = { 4, 5, 5,  6,  7,  7, 8,
36*fb1b10abSAndroid Build Coastguard Worker                                                     9, 9, 10, 11, 11, 12 };
37*fb1b10abSAndroid Build Coastguard Worker 
38*fb1b10abSAndroid Build Coastguard Worker const PARTITION_TYPE partition_lookup[][BLOCK_SIZES] = {
39*fb1b10abSAndroid Build Coastguard Worker   { // 4X4
40*fb1b10abSAndroid Build Coastguard Worker     // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
41*fb1b10abSAndroid Build Coastguard Worker     PARTITION_NONE, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
42*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
43*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
44*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID },
45*fb1b10abSAndroid Build Coastguard Worker   { // 8X8
46*fb1b10abSAndroid Build Coastguard Worker     // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
47*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
48*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
49*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
50*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID },
51*fb1b10abSAndroid Build Coastguard Worker   { // 16X16
52*fb1b10abSAndroid Build Coastguard Worker     // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
53*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
54*fb1b10abSAndroid Build Coastguard Worker     PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE, PARTITION_INVALID,
55*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
56*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID },
57*fb1b10abSAndroid Build Coastguard Worker   { // 32X32
58*fb1b10abSAndroid Build Coastguard Worker     // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
59*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
60*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_VERT,
61*fb1b10abSAndroid Build Coastguard Worker     PARTITION_HORZ, PARTITION_NONE, PARTITION_INVALID, PARTITION_INVALID,
62*fb1b10abSAndroid Build Coastguard Worker     PARTITION_INVALID },
63*fb1b10abSAndroid Build Coastguard Worker   { // 64X64
64*fb1b10abSAndroid Build Coastguard Worker     // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
65*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
66*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
67*fb1b10abSAndroid Build Coastguard Worker     PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_VERT, PARTITION_HORZ,
68*fb1b10abSAndroid Build Coastguard Worker     PARTITION_NONE }
69*fb1b10abSAndroid Build Coastguard Worker };
70*fb1b10abSAndroid Build Coastguard Worker 
71*fb1b10abSAndroid Build Coastguard Worker const BLOCK_SIZE subsize_lookup[PARTITION_TYPES][BLOCK_SIZES] = {
72*fb1b10abSAndroid Build Coastguard Worker   { // PARTITION_NONE
73*fb1b10abSAndroid Build Coastguard Worker     BLOCK_4X4, BLOCK_4X8, BLOCK_8X4, BLOCK_8X8, BLOCK_8X16, BLOCK_16X8,
74*fb1b10abSAndroid Build Coastguard Worker     BLOCK_16X16, BLOCK_16X32, BLOCK_32X16, BLOCK_32X32, BLOCK_32X64,
75*fb1b10abSAndroid Build Coastguard Worker     BLOCK_64X32, BLOCK_64X64 },
76*fb1b10abSAndroid Build Coastguard Worker   { // PARTITION_HORZ
77*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4, BLOCK_INVALID,
78*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
79*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32 },
80*fb1b10abSAndroid Build Coastguard Worker   { // PARTITION_VERT
81*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8, BLOCK_INVALID,
82*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
83*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64 },
84*fb1b10abSAndroid Build Coastguard Worker   { // PARTITION_SPLIT
85*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X4, BLOCK_INVALID,
86*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_8X8, BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,
87*fb1b10abSAndroid Build Coastguard Worker     BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32 }
88*fb1b10abSAndroid Build Coastguard Worker };
89*fb1b10abSAndroid Build Coastguard Worker 
90*fb1b10abSAndroid Build Coastguard Worker const TX_SIZE max_txsize_lookup[BLOCK_SIZES] = {
91*fb1b10abSAndroid Build Coastguard Worker   TX_4X4,   TX_4X4,   TX_4X4,   TX_8X8,   TX_8X8,   TX_8X8,  TX_16X16,
92*fb1b10abSAndroid Build Coastguard Worker   TX_16X16, TX_16X16, TX_32X32, TX_32X32, TX_32X32, TX_32X32
93*fb1b10abSAndroid Build Coastguard Worker };
94*fb1b10abSAndroid Build Coastguard Worker 
95*fb1b10abSAndroid Build Coastguard Worker const BLOCK_SIZE txsize_to_bsize[TX_SIZES] = {
96*fb1b10abSAndroid Build Coastguard Worker   BLOCK_4X4,    // TX_4X4
97*fb1b10abSAndroid Build Coastguard Worker   BLOCK_8X8,    // TX_8X8
98*fb1b10abSAndroid Build Coastguard Worker   BLOCK_16X16,  // TX_16X16
99*fb1b10abSAndroid Build Coastguard Worker   BLOCK_32X32,  // TX_32X32
100*fb1b10abSAndroid Build Coastguard Worker };
101*fb1b10abSAndroid Build Coastguard Worker 
102*fb1b10abSAndroid Build Coastguard Worker const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
103*fb1b10abSAndroid Build Coastguard Worker   TX_4X4,    // ONLY_4X4
104*fb1b10abSAndroid Build Coastguard Worker   TX_8X8,    // ALLOW_8X8
105*fb1b10abSAndroid Build Coastguard Worker   TX_16X16,  // ALLOW_16X16
106*fb1b10abSAndroid Build Coastguard Worker   TX_32X32,  // ALLOW_32X32
107*fb1b10abSAndroid Build Coastguard Worker   TX_32X32,  // TX_MODE_SELECT
108*fb1b10abSAndroid Build Coastguard Worker };
109*fb1b10abSAndroid Build Coastguard Worker 
110*fb1b10abSAndroid Build Coastguard Worker const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES][2][2] = {
111*fb1b10abSAndroid Build Coastguard Worker   //  ss_x == 0    ss_x == 0        ss_x == 1      ss_x == 1
112*fb1b10abSAndroid Build Coastguard Worker   //  ss_y == 0    ss_y == 1        ss_y == 0      ss_y == 1
113*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_4X4, BLOCK_INVALID }, { BLOCK_INVALID, BLOCK_INVALID } },
114*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_4X8, BLOCK_4X4 }, { BLOCK_INVALID, BLOCK_INVALID } },
115*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_8X4, BLOCK_INVALID }, { BLOCK_4X4, BLOCK_INVALID } },
116*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_8X8, BLOCK_8X4 }, { BLOCK_4X8, BLOCK_4X4 } },
117*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_8X16, BLOCK_8X8 }, { BLOCK_INVALID, BLOCK_4X8 } },
118*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_16X8, BLOCK_INVALID }, { BLOCK_8X8, BLOCK_8X4 } },
119*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_16X16, BLOCK_16X8 }, { BLOCK_8X16, BLOCK_8X8 } },
120*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_16X32, BLOCK_16X16 }, { BLOCK_INVALID, BLOCK_8X16 } },
121*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_32X16, BLOCK_INVALID }, { BLOCK_16X16, BLOCK_16X8 } },
122*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_32X32, BLOCK_32X16 }, { BLOCK_16X32, BLOCK_16X16 } },
123*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_32X64, BLOCK_32X32 }, { BLOCK_INVALID, BLOCK_16X32 } },
124*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_64X32, BLOCK_INVALID }, { BLOCK_32X32, BLOCK_32X16 } },
125*fb1b10abSAndroid Build Coastguard Worker   { { BLOCK_64X64, BLOCK_64X32 }, { BLOCK_32X64, BLOCK_32X32 } },
126*fb1b10abSAndroid Build Coastguard Worker };
127*fb1b10abSAndroid Build Coastguard Worker 
128*fb1b10abSAndroid Build Coastguard Worker const TX_SIZE uv_txsize_lookup[BLOCK_SIZES][TX_SIZES][2][2] = {
129*fb1b10abSAndroid Build Coastguard Worker   //  ss_x == 0    ss_x == 0        ss_x == 1      ss_x == 1
130*fb1b10abSAndroid Build Coastguard Worker   //  ss_y == 0    ss_y == 1        ss_y == 0      ss_y == 1
131*fb1b10abSAndroid Build Coastguard Worker   {
132*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_4X4
133*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
134*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
135*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
136*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
137*fb1b10abSAndroid Build Coastguard Worker   },
138*fb1b10abSAndroid Build Coastguard Worker   {
139*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_4X8
140*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
141*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
142*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
143*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
144*fb1b10abSAndroid Build Coastguard Worker   },
145*fb1b10abSAndroid Build Coastguard Worker   {
146*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_8X4
147*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
148*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
149*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
150*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
151*fb1b10abSAndroid Build Coastguard Worker   },
152*fb1b10abSAndroid Build Coastguard Worker   {
153*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_8X8
154*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
155*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
156*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
157*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_4X4, TX_4X4 } },
158*fb1b10abSAndroid Build Coastguard Worker   },
159*fb1b10abSAndroid Build Coastguard Worker   {
160*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_8X16
161*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
162*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
163*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
164*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_4X4, TX_4X4 } },
165*fb1b10abSAndroid Build Coastguard Worker   },
166*fb1b10abSAndroid Build Coastguard Worker   {
167*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_16X8
168*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
169*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_4X4 } },
170*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_8X8 } },
171*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_4X4 }, { TX_8X8, TX_8X8 } },
172*fb1b10abSAndroid Build Coastguard Worker   },
173*fb1b10abSAndroid Build Coastguard Worker   {
174*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_16X16
175*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
176*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
177*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
178*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_8X8 }, { TX_8X8, TX_8X8 } },
179*fb1b10abSAndroid Build Coastguard Worker   },
180*fb1b10abSAndroid Build Coastguard Worker   {
181*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_16X32
182*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
183*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
184*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
185*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_8X8, TX_8X8 } },
186*fb1b10abSAndroid Build Coastguard Worker   },
187*fb1b10abSAndroid Build Coastguard Worker   {
188*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_32X16
189*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
190*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
191*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
192*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_8X8 }, { TX_16X16, TX_8X8 } },
193*fb1b10abSAndroid Build Coastguard Worker   },
194*fb1b10abSAndroid Build Coastguard Worker   {
195*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_32X32
196*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
197*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
198*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
199*fb1b10abSAndroid Build Coastguard Worker       { { TX_32X32, TX_16X16 }, { TX_16X16, TX_16X16 } },
200*fb1b10abSAndroid Build Coastguard Worker   },
201*fb1b10abSAndroid Build Coastguard Worker   {
202*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_32X64
203*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
204*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
205*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
206*fb1b10abSAndroid Build Coastguard Worker       { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
207*fb1b10abSAndroid Build Coastguard Worker   },
208*fb1b10abSAndroid Build Coastguard Worker   {
209*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_64X32
210*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
211*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
212*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
213*fb1b10abSAndroid Build Coastguard Worker       { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
214*fb1b10abSAndroid Build Coastguard Worker   },
215*fb1b10abSAndroid Build Coastguard Worker   {
216*fb1b10abSAndroid Build Coastguard Worker       // BLOCK_64X64
217*fb1b10abSAndroid Build Coastguard Worker       { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
218*fb1b10abSAndroid Build Coastguard Worker       { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
219*fb1b10abSAndroid Build Coastguard Worker       { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
220*fb1b10abSAndroid Build Coastguard Worker       { { TX_32X32, TX_32X32 }, { TX_32X32, TX_32X32 } },
221*fb1b10abSAndroid Build Coastguard Worker   },
222*fb1b10abSAndroid Build Coastguard Worker };
223*fb1b10abSAndroid Build Coastguard Worker 
224*fb1b10abSAndroid Build Coastguard Worker // Generates 4 bit field in which each bit set to 1 represents
225*fb1b10abSAndroid Build Coastguard Worker // a blocksize partition  1111 means we split 64x64, 32x32, 16x16
226*fb1b10abSAndroid Build Coastguard Worker // and 8x8.  1000 means we just split the 64x64 to 32x32
227*fb1b10abSAndroid Build Coastguard Worker const struct {
228*fb1b10abSAndroid Build Coastguard Worker   PARTITION_CONTEXT above;
229*fb1b10abSAndroid Build Coastguard Worker   PARTITION_CONTEXT left;
230*fb1b10abSAndroid Build Coastguard Worker } partition_context_lookup[BLOCK_SIZES] = {
231*fb1b10abSAndroid Build Coastguard Worker   { 15, 15 },  // 4X4   - {0b1111, 0b1111}
232*fb1b10abSAndroid Build Coastguard Worker   { 15, 14 },  // 4X8   - {0b1111, 0b1110}
233*fb1b10abSAndroid Build Coastguard Worker   { 14, 15 },  // 8X4   - {0b1110, 0b1111}
234*fb1b10abSAndroid Build Coastguard Worker   { 14, 14 },  // 8X8   - {0b1110, 0b1110}
235*fb1b10abSAndroid Build Coastguard Worker   { 14, 12 },  // 8X16  - {0b1110, 0b1100}
236*fb1b10abSAndroid Build Coastguard Worker   { 12, 14 },  // 16X8  - {0b1100, 0b1110}
237*fb1b10abSAndroid Build Coastguard Worker   { 12, 12 },  // 16X16 - {0b1100, 0b1100}
238*fb1b10abSAndroid Build Coastguard Worker   { 12, 8 },   // 16X32 - {0b1100, 0b1000}
239*fb1b10abSAndroid Build Coastguard Worker   { 8, 12 },   // 32X16 - {0b1000, 0b1100}
240*fb1b10abSAndroid Build Coastguard Worker   { 8, 8 },    // 32X32 - {0b1000, 0b1000}
241*fb1b10abSAndroid Build Coastguard Worker   { 8, 0 },    // 32X64 - {0b1000, 0b0000}
242*fb1b10abSAndroid Build Coastguard Worker   { 0, 8 },    // 64X32 - {0b0000, 0b1000}
243*fb1b10abSAndroid Build Coastguard Worker   { 0, 0 },    // 64X64 - {0b0000, 0b0000}
244*fb1b10abSAndroid Build Coastguard Worker };
245*fb1b10abSAndroid Build Coastguard Worker 
246*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BETTER_HW_COMPATIBILITY && CONFIG_VP9_HIGHBITDEPTH
247*fb1b10abSAndroid Build Coastguard Worker const uint8_t need_top_left[INTRA_MODES] = {
248*fb1b10abSAndroid Build Coastguard Worker   0,  // DC_PRED
249*fb1b10abSAndroid Build Coastguard Worker   0,  // V_PRED
250*fb1b10abSAndroid Build Coastguard Worker   0,  // H_PRED
251*fb1b10abSAndroid Build Coastguard Worker   0,  // D45_PRED
252*fb1b10abSAndroid Build Coastguard Worker   1,  // D135_PRED
253*fb1b10abSAndroid Build Coastguard Worker   1,  // D117_PRED
254*fb1b10abSAndroid Build Coastguard Worker   1,  // D153_PRED
255*fb1b10abSAndroid Build Coastguard Worker   0,  // D207_PRED
256*fb1b10abSAndroid Build Coastguard Worker   0,  // D63_PRED
257*fb1b10abSAndroid Build Coastguard Worker   1,  // TM_PRED
258*fb1b10abSAndroid Build Coastguard Worker };
259*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_BETTER_HW_COMPATIBILITY && CONFIG_VP9_HIGHBITDEPTH
260