xref: /aosp_15_r20/external/libavc/encoder/ih264e_globals.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker 
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker *  ih264e_globals.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker *  Contains definitions of global variables used across the encoder
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker *  ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @remarks
33*495ae853SAndroid Build Coastguard Worker *
34*495ae853SAndroid Build Coastguard Worker *******************************************************************************
35*495ae853SAndroid Build Coastguard Worker */
36*495ae853SAndroid Build Coastguard Worker 
37*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
38*495ae853SAndroid Build Coastguard Worker /* File Includes                                                             */
39*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
40*495ae853SAndroid Build Coastguard Worker 
41*495ae853SAndroid Build Coastguard Worker /* User Include Files */
42*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
43*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
44*495ae853SAndroid Build Coastguard Worker #include "ih264e_defs.h"
45*495ae853SAndroid Build Coastguard Worker #include "ih264e_globals.h"
46*495ae853SAndroid Build Coastguard Worker 
47*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
48*495ae853SAndroid Build Coastguard Worker /* Global definitions                                                        */
49*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
50*495ae853SAndroid Build Coastguard Worker 
51*495ae853SAndroid Build Coastguard Worker /**
52*495ae853SAndroid Build Coastguard Worker ******************************************************************************
53*495ae853SAndroid Build Coastguard Worker * @brief  lambda for varying quantizer scales that would be used to
54*495ae853SAndroid Build Coastguard Worker * compute the RD cost while deciding on the MB modes.
55*495ae853SAndroid Build Coastguard Worker * input  : qp
56*495ae853SAndroid Build Coastguard Worker * output : lambda
57*495ae853SAndroid Build Coastguard Worker * @remarks lambda = 0.85 * pow(2, (qp - 12)/3), when SSD is used as metric
58*495ae853SAndroid Build Coastguard Worker * for computing distortion (Bit rate estimation for cost function of H.264/
59*495ae853SAndroid Build Coastguard Worker * AVC by Mohd Golam Sarwer et. al.)  If the use of distortion metric is SAD
60*495ae853SAndroid Build Coastguard Worker * rather than SSD in the stage of encoding, consider sqrt(lambda) simply to
61*495ae853SAndroid Build Coastguard Worker * adjust lambda for the lack of squaring operation in the error computation
62*495ae853SAndroid Build Coastguard Worker * (from rate distortion optimization for video compression by sullivan).
63*495ae853SAndroid Build Coastguard Worker ******************************************************************************
64*495ae853SAndroid Build Coastguard Worker */
65*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_qp_lambdaIP[52]=
66*495ae853SAndroid Build Coastguard Worker {
67*495ae853SAndroid Build Coastguard Worker        0,      0,      0,      0,      0,      0,      0,      1,
68*495ae853SAndroid Build Coastguard Worker        1,      1,      1,      1,      1,      1,      1,      1,
69*495ae853SAndroid Build Coastguard Worker        1,      2,      2,      2,      2,      3,      3,      3,
70*495ae853SAndroid Build Coastguard Worker        4,      4,      5,      5,      6,      7,      7,      8,
71*495ae853SAndroid Build Coastguard Worker        9,     10,     12,     13,     15,     17,     19,     21,
72*495ae853SAndroid Build Coastguard Worker       23,     26,     30,     33,     37,     42,     47,     53,
73*495ae853SAndroid Build Coastguard Worker       59,     66,     74,     83,
74*495ae853SAndroid Build Coastguard Worker };
75*495ae853SAndroid Build Coastguard Worker 
76*495ae853SAndroid Build Coastguard Worker /**
77*495ae853SAndroid Build Coastguard Worker ******************************************************************************
78*495ae853SAndroid Build Coastguard Worker * @brief  lambda for varying quantizer scales that would be used to
79*495ae853SAndroid Build Coastguard Worker * compute the RD cost while deciding on the MB modes.
80*495ae853SAndroid Build Coastguard Worker * input  : qp
81*495ae853SAndroid Build Coastguard Worker * output : lambda
82*495ae853SAndroid Build Coastguard Worker * @remarks lambda = max(2, min(4, pow(2, (qp - 12)/6))) * gu1_qp_lambdaIP[]
83*495ae853SAndroid Build Coastguard Worker ******************************************************************************
84*495ae853SAndroid Build Coastguard Worker */
85*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_qp_lambdaB[52]=
86*495ae853SAndroid Build Coastguard Worker {
87*495ae853SAndroid Build Coastguard Worker         0,       0,       0,       0,       1,       1,       1,       1,
88*495ae853SAndroid Build Coastguard Worker         1,       1,       1,       1,       1,       1,       2,       2,
89*495ae853SAndroid Build Coastguard Worker         2,       2,       3,       3,       3,       4,       4,       5,
90*495ae853SAndroid Build Coastguard Worker         5,       6,       7,       8,      10,      11,      13,      15,
91*495ae853SAndroid Build Coastguard Worker        17,      20,      22,      26,      30,      33,      37,      42,
92*495ae853SAndroid Build Coastguard Worker        47,      53,      59,      66,      74,      83,      94,     105,
93*495ae853SAndroid Build Coastguard Worker       118,     132,     149,     167,
94*495ae853SAndroid Build Coastguard Worker };
95*495ae853SAndroid Build Coastguard Worker 
96*495ae853SAndroid Build Coastguard Worker /**
97*495ae853SAndroid Build Coastguard Worker ******************************************************************************
98*495ae853SAndroid Build Coastguard Worker * @brief  Lamda for varying quantizer scales that would be used to
99*495ae853SAndroid Build Coastguard Worker * compute the RD cost while deciding on the MB modes.
100*495ae853SAndroid Build Coastguard Worker * input  : qp
101*495ae853SAndroid Build Coastguard Worker * output : lambda
102*495ae853SAndroid Build Coastguard Worker * @remarks lambda = pow(2, (qp - 12)/6)
103*495ae853SAndroid Build Coastguard Worker ******************************************************************************
104*495ae853SAndroid Build Coastguard Worker */
105*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_qp0[52]=
106*495ae853SAndroid Build Coastguard Worker {
107*495ae853SAndroid Build Coastguard Worker        0,      0,      0,      0,      0,      0,      0,      0,
108*495ae853SAndroid Build Coastguard Worker        0,      0,      0,      0,      1,      1,      1,      1,
109*495ae853SAndroid Build Coastguard Worker        2,      2,      2,      2,      3,      3,      3,      4,
110*495ae853SAndroid Build Coastguard Worker        4,      4,      5,      6,      6,      7,      8,      9,
111*495ae853SAndroid Build Coastguard Worker       10,     11,     13,     14,     16,     18,     20,     23,
112*495ae853SAndroid Build Coastguard Worker       25,     29,     32,     36,     40,     45,     51,     57,
113*495ae853SAndroid Build Coastguard Worker       64,     72,     81,     91,
114*495ae853SAndroid Build Coastguard Worker };
115*495ae853SAndroid Build Coastguard Worker 
116*495ae853SAndroid Build Coastguard Worker /**
117*495ae853SAndroid Build Coastguard Worker ******************************************************************************
118*495ae853SAndroid Build Coastguard Worker * @brief  unsigned exp. goulumb codelengths to assign cost to a coefficient of
119*495ae853SAndroid Build Coastguard Worker * mb types.
120*495ae853SAndroid Build Coastguard Worker * input  : Integer
121*495ae853SAndroid Build Coastguard Worker * output : codelength
122*495ae853SAndroid Build Coastguard Worker * @remarks Refer sec. 9-1 in h264 specification
123*495ae853SAndroid Build Coastguard Worker ******************************************************************************
124*495ae853SAndroid Build Coastguard Worker */
125*495ae853SAndroid Build Coastguard Worker const UWORD8 u1_uev_codelength[32] =
126*495ae853SAndroid Build Coastguard Worker {
127*495ae853SAndroid Build Coastguard Worker      1,      3,      3,      5,      5,      5,      5,      7,
128*495ae853SAndroid Build Coastguard Worker      7,      7,      7,      7,      7,      7,      7,      9,
129*495ae853SAndroid Build Coastguard Worker      9,      9,      9,      9,      9,      9,      9,      9,
130*495ae853SAndroid Build Coastguard Worker      9,      9,      9,      9,      9,      9,      9,      11,
131*495ae853SAndroid Build Coastguard Worker };
132*495ae853SAndroid Build Coastguard Worker 
133*495ae853SAndroid Build Coastguard Worker /**
134*495ae853SAndroid Build Coastguard Worker ******************************************************************************
135*495ae853SAndroid Build Coastguard Worker * @brief  Look up table to assign cost to a coefficient of a residual block
136*495ae853SAndroid Build Coastguard Worker * basing on its surrounding coefficients
137*495ae853SAndroid Build Coastguard Worker * input  : Numbers of T1's
138*495ae853SAndroid Build Coastguard Worker * output : coeff_cost
139*495ae853SAndroid Build Coastguard Worker * @remarks Refer Section 2.3 Elimination of single coefficients in inter
140*495ae853SAndroid Build Coastguard Worker * macroblocks in document JVT-O079
141*495ae853SAndroid Build Coastguard Worker ******************************************************************************
142*495ae853SAndroid Build Coastguard Worker */
143*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_coeff_cost[6] =
144*495ae853SAndroid Build Coastguard Worker {
145*495ae853SAndroid Build Coastguard Worker      3, 2, 2, 1, 1, 1
146*495ae853SAndroid Build Coastguard Worker };
147*495ae853SAndroid Build Coastguard Worker 
148*495ae853SAndroid Build Coastguard Worker /**
149*495ae853SAndroid Build Coastguard Worker ******************************************************************************
150*495ae853SAndroid Build Coastguard Worker * @brief  Indices map to raster scan for luma 4x4 block
151*495ae853SAndroid Build Coastguard Worker * input  : scan index
152*495ae853SAndroid Build Coastguard Worker * output : scan location
153*495ae853SAndroid Build Coastguard Worker * @remarks None
154*495ae853SAndroid Build Coastguard Worker ******************************************************************************
155*495ae853SAndroid Build Coastguard Worker */
156*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_luma_scan_order[16] =
157*495ae853SAndroid Build Coastguard Worker {
158*495ae853SAndroid Build Coastguard Worker      0,  1,  4,  8,  5,  2,  3,  6,  9,  12, 13, 10, 7,  11, 14, 15
159*495ae853SAndroid Build Coastguard Worker };
160*495ae853SAndroid Build Coastguard Worker 
161*495ae853SAndroid Build Coastguard Worker /**
162*495ae853SAndroid Build Coastguard Worker ******************************************************************************
163*495ae853SAndroid Build Coastguard Worker * @brief  Indices map to raster scan for chroma AC block
164*495ae853SAndroid Build Coastguard Worker * input  : scan index
165*495ae853SAndroid Build Coastguard Worker * output : scan location
166*495ae853SAndroid Build Coastguard Worker * @remarks None
167*495ae853SAndroid Build Coastguard Worker ******************************************************************************
168*495ae853SAndroid Build Coastguard Worker */
169*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_chroma_scan_order[15] =
170*495ae853SAndroid Build Coastguard Worker {
171*495ae853SAndroid Build Coastguard Worker      1,  4,  8,  5,  2,  3,  6,  9,  12, 13, 10, 7,  11, 14, 15
172*495ae853SAndroid Build Coastguard Worker };
173*495ae853SAndroid Build Coastguard Worker 
174*495ae853SAndroid Build Coastguard Worker /**
175*495ae853SAndroid Build Coastguard Worker ******************************************************************************
176*495ae853SAndroid Build Coastguard Worker * @brief  Indices map to raster scan for luma 4x4 dc block
177*495ae853SAndroid Build Coastguard Worker * input  : scan index
178*495ae853SAndroid Build Coastguard Worker * output : scan location
179*495ae853SAndroid Build Coastguard Worker * @remarks : None
180*495ae853SAndroid Build Coastguard Worker ******************************************************************************
181*495ae853SAndroid Build Coastguard Worker */
182*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_luma_scan_order_dc[16] =
183*495ae853SAndroid Build Coastguard Worker {
184*495ae853SAndroid Build Coastguard Worker      0, 1,  4,  8,  5,  2,  3,  6,  9,  12, 13, 10, 7,  11, 14, 15
185*495ae853SAndroid Build Coastguard Worker };
186*495ae853SAndroid Build Coastguard Worker 
187*495ae853SAndroid Build Coastguard Worker /**
188*495ae853SAndroid Build Coastguard Worker ******************************************************************************
189*495ae853SAndroid Build Coastguard Worker * @brief  Indices map to raster scan for chroma 2x2 dc block
190*495ae853SAndroid Build Coastguard Worker * input  : scan index
191*495ae853SAndroid Build Coastguard Worker * output : scan location
192*495ae853SAndroid Build Coastguard Worker * @remarks None
193*495ae853SAndroid Build Coastguard Worker ******************************************************************************
194*495ae853SAndroid Build Coastguard Worker */
195*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_chroma_scan_order_dc[4] =
196*495ae853SAndroid Build Coastguard Worker {
197*495ae853SAndroid Build Coastguard Worker      0, 1,  2,  3
198*495ae853SAndroid Build Coastguard Worker };
199*495ae853SAndroid Build Coastguard Worker 
200*495ae853SAndroid Build Coastguard Worker /**
201*495ae853SAndroid Build Coastguard Worker ******************************************************************************
202*495ae853SAndroid Build Coastguard Worker * @brief  choice of motion vectors to be used during mv prediction
203*495ae853SAndroid Build Coastguard Worker * input  : formatted reference idx comparison metric
204*495ae853SAndroid Build Coastguard Worker * output : mv prediction has to be median or a simple straight forward selec
205*495ae853SAndroid Build Coastguard Worker * tion from neighbors.
206*495ae853SAndroid Build Coastguard Worker * @remarks If only one of the candidate blocks has a reference frame equal to
207*495ae853SAndroid Build Coastguard Worker     the current block then use the same block as the final predictor. A simple
208*495ae853SAndroid Build Coastguard Worker     look up table to assist this mv prediction condition
209*495ae853SAndroid Build Coastguard Worker ******************************************************************************
210*495ae853SAndroid Build Coastguard Worker */
211*495ae853SAndroid Build Coastguard Worker const WORD8 gi1_mv_pred_condition[8] =
212*495ae853SAndroid Build Coastguard Worker {
213*495ae853SAndroid Build Coastguard Worker      -1,    0,    1,    -1,    2,    -1,    -1,    -1
214*495ae853SAndroid Build Coastguard Worker };
215*495ae853SAndroid Build Coastguard Worker 
216*495ae853SAndroid Build Coastguard Worker /**
217*495ae853SAndroid Build Coastguard Worker ******************************************************************************
218*495ae853SAndroid Build Coastguard Worker * @brief  Translation of Qstep <-> QP
219*495ae853SAndroid Build Coastguard Worker * Qstep(QP) = Qstep(QP%6) * (2 ^ floor(QP/6))
220*495ae853SAndroid Build Coastguard Worker * Qstep(QP, n = 0) {0.625, 0.6875, 0.8125, 0.875, 1.0, 1.125} for QP[0-5]
221*495ae853SAndroid Build Coastguard Worker * @remarks QPRange[0-51] & QstepRange[1 - 224].
222*495ae853SAndroid Build Coastguard Worker ******************************************************************************
223*495ae853SAndroid Build Coastguard Worker */
224*495ae853SAndroid Build Coastguard Worker const UWORD8 gau1_h264_to_mpeg2_qmap[H264_QP_ELEM] =
225*495ae853SAndroid Build Coastguard Worker {
226*495ae853SAndroid Build Coastguard Worker      1,    1,    1,    1,    1,    1,    1,    1,
227*495ae853SAndroid Build Coastguard Worker      2,    2,    2,    2,    3,    3,    3,    4,
228*495ae853SAndroid Build Coastguard Worker      4,    5,    5,    6,    7,    7,    8,    9,
229*495ae853SAndroid Build Coastguard Worker     10,   11,   13,   14,   16,   18,   20,   22,
230*495ae853SAndroid Build Coastguard Worker     26,   28,   32,   36,   40,   44,   52,   56,
231*495ae853SAndroid Build Coastguard Worker     64,   72,   80,   88,  104,  112,  128,  144,
232*495ae853SAndroid Build Coastguard Worker     160,  176,  208,  224,
233*495ae853SAndroid Build Coastguard Worker };
234*495ae853SAndroid Build Coastguard Worker const UWORD8 gau1_mpeg2_to_h264_qmap[MPEG2_QP_ELEM] =
235*495ae853SAndroid Build Coastguard Worker {
236*495ae853SAndroid Build Coastguard Worker      0,    4,   10,   13,   16,   18,   19,   21,
237*495ae853SAndroid Build Coastguard Worker     22,   23,   24,   25,   25,   26,   27,   27,
238*495ae853SAndroid Build Coastguard Worker     28,   28,   29,   30,   30,   30,   31,   31,
239*495ae853SAndroid Build Coastguard Worker     31,   32,   32,   32,   33,   33,   33,   34,
240*495ae853SAndroid Build Coastguard Worker     34,   34,   34,   35,   35,   36,   36,   36,
241*495ae853SAndroid Build Coastguard Worker     36,   36,   36,   37,   37,   37,   37,   37,
242*495ae853SAndroid Build Coastguard Worker     37,   38,   38,   38,   38,   38,   38,   39,
243*495ae853SAndroid Build Coastguard Worker     39,   39,   39,   39,   39,   40,   40,   40,
244*495ae853SAndroid Build Coastguard Worker     40,   40,   40,   40,   40,   41,   41,   41,
245*495ae853SAndroid Build Coastguard Worker     41,   42,   42,   42,   42,   42,   42,   42,
246*495ae853SAndroid Build Coastguard Worker     42,   42,   42,   42,   42,   43,   43,   43,
247*495ae853SAndroid Build Coastguard Worker     43,   43,   43,   43,   43,   43,   43,   43,
248*495ae853SAndroid Build Coastguard Worker     43,   44,   44,   44,   44,   44,   44,   44,
249*495ae853SAndroid Build Coastguard Worker     44,   44,   44,   44,   44,   45,   45,   45,
250*495ae853SAndroid Build Coastguard Worker     45,   45,   45,   45,   45,   45,   45,   45,
251*495ae853SAndroid Build Coastguard Worker     45,   46,   46,   46,   46,   46,   46,   46,
252*495ae853SAndroid Build Coastguard Worker     46,   46,   46,   46,   46,   46,   46,   46,
253*495ae853SAndroid Build Coastguard Worker     46,   47,   47,   47,   47,   47,   47,   47,
254*495ae853SAndroid Build Coastguard Worker     47,   48,   48,   48,   48,   48,   48,   48,
255*495ae853SAndroid Build Coastguard Worker     48,   48,   48,   48,   48,   48,   48,   48,
256*495ae853SAndroid Build Coastguard Worker     48,   48,   48,   48,   48,   48,   48,   48,
257*495ae853SAndroid Build Coastguard Worker     48,   49,   49,   49,   49,   49,   49,   49,
258*495ae853SAndroid Build Coastguard Worker     49,   49,   49,   49,   49,   49,   49,   49,
259*495ae853SAndroid Build Coastguard Worker     49,   49,   49,   49,   49,   49,   49,   49,
260*495ae853SAndroid Build Coastguard Worker     49,   50,   50,   50,   50,   50,   50,   50,
261*495ae853SAndroid Build Coastguard Worker     50,   50,   50,   50,   50,   50,   50,   50,
262*495ae853SAndroid Build Coastguard Worker     50,   50,   50,   50,   50,   50,   50,   50,
263*495ae853SAndroid Build Coastguard Worker     50,   51,   51,   51,   51,   51,   51,   51,
264*495ae853SAndroid Build Coastguard Worker     51,   51,   51,   51,   51,   51,   51,   51,
265*495ae853SAndroid Build Coastguard Worker     51,   51,   51,   51,   51,   51,   51,   51,
266*495ae853SAndroid Build Coastguard Worker     51,   52,   52,   52,   52,   52,   52,   52,
267*495ae853SAndroid Build Coastguard Worker     52,   52,   52,   52,   52,   52,   52,   52,
268*495ae853SAndroid Build Coastguard Worker };
269*495ae853SAndroid Build Coastguard Worker 
270