• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /******************************************************************************
2   *
3   * Copyright (C) 2015 The Android Open Source Project
4   *
5   * Licensed under the Apache License, Version 2.0 (the "License");
6   * you may not use this file except in compliance with the License.
7   * You may obtain a copy of the License at:
8   *
9   * http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   *
17   *****************************************************************************
18   * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19  */
20  /**
21   *******************************************************************************
22   * @file
23   *  ih264_trans_data.c
24   *
25   * @brief
26   *  Contains definition of global variables for H264 encoder
27   *
28   * @author
29   *  Ittiam
30   *
31   * @remarks
32   *
33   *******************************************************************************
34   */
35  
36  #include "ih264_typedefs.h"
37  #include "ih264_trans_data.h"
38  
39  /*****************************************************************************/
40  /* Extern global definitions                                                 */
41  /*****************************************************************************/
42  
43  /*
44   * Since we don't have a division operation in neon
45   * we will multiply by LCM of 16,6,10 and scale accordingly
46   * so care that to get the actual transform you need to divide by LCM
47   * LCM = 240
48   */
49  
50  const UWORD16 g_scal_coff_h264_4x4[16] ={
51          15,40,40,40,
52          40,24,40,24,
53          15,40,40,15,
54          40,24,40,24};
55  
56  
57  
58  const UWORD16 g_scal_coff_h264_8x8[16]=
59          {
60                  16,  15,   20,   15,
61                  15,  14,   19,   14,
62                  20,  19,   25,   19,
63                  15,  14,   19,   14
64          };
65  /*
66   * The scaling is by an 8x8 matrix, but due its 4x4 symmetry we can use
67   * a 4x4 matrix for scaling
68   * now since divide is to be avoided, we will compute 1/ values and scale it up
69   * to preserve information since our data is max 10 bit +1 sign bit we can shift a maximum of 21 bits up
70   * hence multiply the matrix as such
71  {16.000   15.059   20.227   15.059
72  15.059   14.173   19.051   14.173
73  20.227   19.051   25.600   19.051
74  15.059   14.173   19.051   14.173};
75  {512,   544,    405,    544,
76  544,    578,    430,    578,
77  405,    430,    320,    430,
78  544,    578,    430,    578};*/
79  
80  
81  /**
82   ******************************************************************************
83   * @brief  Scale Table for quantizing 4x4 subblock. To quantize a given 4x4 DCT
84   * transformed block, the coefficient at index location (i,j) is scaled by one of
85   * the constants in this table and right shift the result by (QP_BITS_h264_4x4 +
86   * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
87   *
88   * input   : qp%6, index location (i,j)
89   * output  : scale constant.
90   *
91   * @remarks 16 constants for each index position of the subblock and 6 for each
92   * qp%6 in the range 0-5 inclusive.
93   ******************************************************************************
94   */
95  const UWORD16 gu2_quant_scale_matrix_4x4[96] =
96  {
97       13107,   8066,  13107,   8066,
98        8066,   5243,   8066,   5243,
99       13107,   8066,  13107,   8066,
100        8066,   5243,   8066,   5243,
101  
102       11916,   7490,  11916,   7490,
103        7490,   4660,   7490,   4660,
104       11916,   7490,  11916,   7490,
105        7490,   4660,   7490,   4660,
106  
107       10082,   6554,  10082,   6554,
108        6554,   4194,   6554,   4194,
109       10082,   6554,  10082,   6554,
110        6554,   4194,   6554,   4194,
111  
112        9362,   5825,   9362,   5825,
113        5825,   3647,   5825,   3647,
114        9362,   5825,   9362,   5825,
115        5825,   3647,   5825,   3647,
116  
117        8192,   5243,   8192,   5243,
118        5243,   3355,   5243,   3355,
119        8192,   5243,   8192,   5243,
120        5243,   3355,   5243,   3355,
121  
122        7282,   4559,   7282,   4559,
123        4559,   2893,   4559,   2893,
124        7282,   4559,   7282,   4559,
125        4559,   2893,   4559,   2893,
126  
127  };
128  
129  /**
130   ******************************************************************************
131   * @brief  Round Factor for quantizing subblock. While quantizing a given 4x4 DCT
132   * transformed block, the coefficient at index location (i,j) is scaled by one of
133   * the constants in the table gu2_forward_quant_scalar_4x4 and then right shift
134   * the result by (QP_BITS_h264_4x4 + floor(qp/6)).
135   * Before right shifting a round factor is added.
136   * The round factor can be any value [a * (1 << (QP_BITS_h264_4x4 + floor(qp/6)))]
137   * for 'a' lies in the range 0-0.5.
138   * Here qp is the quantization parameter used to quantize the mb.
139   *
140   * input   : qp/6
141   * output  : round factor.
142   *
143   * @remarks The round factor is constructed by setting a = 1/3
144   *
145   * round factor constructed by setting a = 1/3
146   {
147        10922,     21845,     43690,     87381,
148        174762,    349525,    699050,   1398101,
149        2796202,
150   }
151   *
152   * round factor constructed by setting a = 0.49
153   *{
154           16056,     32112,     64225,
155           128450,    256901,    513802,
156           1027604,   2055208,   4110417,
157   };
158  
159    * round factor constructed by setting a = 0.5
160        16384,     32768,     65536,
161        131072,    262144,    524288,
162       1048576,   2097152,   4194304,
163  
164   ******************************************************************************
165   */
166  const UWORD32 gu4_forward_quant_round_factor_4x4[9] =
167  {
168          10922,     21845,     43690,     87381,
169          174762,    349525,    699050,   1398101,
170          2796202,
171  };
172  
173  
174  
175  /**
176   ******************************************************************************
177   * @brief  Threshold Table. Quantizing the given DCT coefficient is done only if
178   * it exceeds the threshold value presented in this table.
179   *
180   * input   : qp/6, qp%6, index location (i,j)
181   * output  : Threshold constant.
182   *
183   * @remarks 16 constants for each index position of the subblock and 6 for each
184   * qp%6 in the range 0-5 inclusive and 9 for each qp/6 in the range 0-51.
185   ******************************************************************************
186   */
187  const UWORD16 gu2_forward_quant_threshold_4x4[96] =
188  {
189          426,    693,    426,    693,
190          693,   1066,    693,   1066,
191          426,    693,    426,    693,
192          693,   1066,    693,   1066,
193  
194          469,    746,    469,    746,
195          746,   1200,    746,   1200,
196          469,    746,    469,    746,
197          746,   1200,    746,   1200,
198  
199          554,    853,    554,    853,
200          853,   1333,    853,   1333,
201          554,    853,    554,    853,
202          853,   1333,    853,   1333,
203  
204          597,    960,    597,    960,
205          960,   1533,    960,   1533,
206          597,    960,    597,    960,
207          960,   1533,    960,   1533,
208  
209          682,   1066,    682,   1066,
210         1066,   1666,   1066,   1666,
211          682,   1066,    682,   1066,
212         1066,   1666,   1066,   1666,
213  
214          767,   1226,    767,   1226,
215         1226,   1933,   1226,   1933,
216          767,   1226,    767,   1226,
217         1226,   1933,   1226,   1933,
218  };
219  
220  /**
221   ******************************************************************************
222   * @brief  Scale Table for quantizing 8x8 subblock. To quantize a given 8x8 DCT
223   * transformed block, the coefficient at index location (i,j) is scaled by one of
224   * the constants in this table and right shift the result by (QP_BITS_h264_8x8 +
225   * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
226   *
227   * input   : qp%6, index location (i,j)
228   * output  : scale constant.
229   *
230   * @remarks 64 constants for each index position of the subblock and 6 for each
231   * qp%6 in the range 0-5 inclusive.
232   ******************************************************************************
233   */
234  const UWORD16 gu2_quant_scale_matrix_8x8 [384] =
235  {
236        13107,  12222,  16777,  12222,  13107,  12222,  16777,  12222,
237        12222,  11428,  15481,  11428,  12222,  11428,  15481,  11428,
238        16777,  15481,  20972,  15481,  16777,  15481,  20972,  15481,
239        12222,  11428,  15481,  11428,  12222,  11428,  15481,  11428,
240        13107,  12222,  16777,  12222,  13107,  12222,  16777,  12222,
241        12222,  11428,  15481,  11428,  12222,  11428,  15481,  11428,
242        16777,  15481,  20972,  15481,  16777,  15481,  20972,  15481,
243        12222,  11428,  15481,  11428,  12222,  11428,  15481,  11428,
244  
245        11916,  11058,  14980,  11058,  11916,  11058,  14980,  11058,
246        11058,  10826,  14290,  10826,  11058,  10826,  14290,  10826,
247        14980,  14290,  19174,  14290,  14980,  14290,  19174,  14290,
248        11058,  10826,  14290,  10826,  11058,  10826,  14290,  10826,
249        11916,  11058,  14980,  11058,  11916,  11058,  14980,  11058,
250        11058,  10826,  14290,  10826,  11058,  10826,  14290,  10826,
251        14980,  14290,  19174,  14290,  14980,  14290,  19174,  14290,
252        11058,  10826,  14290,  10826,  11058,  10826,  14290,  10826,
253  
254        10082,   9675,  12710,   9675,  10082,   9675,  12710,   9675,
255         9675,   8943,  11985,   8943,   9675,   8943,  11985,   8943,
256        12710,  11985,  15978,  11985,  12710,  11985,  15978,  11985,
257         9675,   8943,  11985,   8943,   9675,   8943,  11985,   8943,
258        10082,   9675,  12710,   9675,  10082,   9675,  12710,   9675,
259         9675,   8943,  11985,   8943,   9675,   8943,  11985,   8943,
260        12710,  11985,  15978,  11985,  12710,  11985,  15978,  11985,
261         9675,   8943,  11985,   8943,   9675,   8943,  11985,   8943,
262  
263         9362,   8931,  11984,   8931,   9362,   8931,  11984,   8931,
264         8931,   8228,  11259,   8228,   8931,   8228,  11259,   8228,
265        11984,  11259,  14913,  11259,  11984,  11259,  14913,  11259,
266         8931,   8228,  11259,   8228,   8931,   8228,  11259,   8228,
267         9362,   8931,  11984,   8931,   9362,   8931,  11984,   8931,
268         8931,   8228,  11259,   8228,   8931,   8228,  11259,   8228,
269        11984,  11259,  14913,  11259,  11984,  11259,  14913,  11259,
270         8931,   8228,  11259,   8228,   8931,   8228,  11259,   8228,
271  
272         8192,   7740,  10486,   7740,   8192,   7740,  10486,   7740,
273         7740,   7346,   9777,   7346,   7740,   7346,   9777,   7346,
274        10486,   9777,  13159,   9777,  10486,   9777,  13159,   9777,
275         7740,   7346,   9777,   7346,   7740,   7346,   9777,   7346,
276         8192,   7740,  10486,   7740,   8192,   7740,  10486,   7740,
277         7740,   7346,   9777,   7346,   7740,   7346,   9777,   7346,
278        10486,   9777,  13159,   9777,  10486,   9777,  13159,   9777,
279         7740,   7346,   9777,   7346,   7740,   7346,   9777,   7346,
280  
281         7282,   6830,   9118,   6830,   7282,   6830,   9118,   6830,
282         6830,   6428,   8640,   6428,   6830,   6428,   8640,   6428,
283         9118,   8640,  11570,   8640,   9118,   8640,  11570,   8640,
284         6830,   6428,   8640,   6428,   6830,   6428,   8640,   6428,
285         7282,   6830,   9118,   6830,   7282,   6830,   9118,   6830,
286         6830,   6428,   8640,   6428,   6830,   6428,   8640,   6428,
287         9118,   8640,  11570,   8640,   9118,   8640,  11570,   8640,
288         6830,   6428,   8640,   6428,   6830,   6428,   8640,   6428,
289  
290  };
291  
292  
293  /**
294   ******************************************************************************
295   * @brief  Specification of QPc as a function of qPi
296   *
297   * input   : qp luma
298   * output  : qp chroma.
299   *
300   * @remarks Refer Table 8-15 of h264 specification.
301   ******************************************************************************
302   */
303  const UWORD8 gu1_qpc_fqpi[52] =
304  {
305       0,     1,     2,     3,     4,     5,     6,     7,
306       8,     9,    10,    11,    12,    13,    14,    15,
307      16,    17,    18,    19,    20,    21,    22,    23,
308      24,    25,    26,    27,    28,    29,    29,    30,
309      31,    32,    32,    33,    34,    34,    35,    35,
310      36,    36,    37,    37,    37,    38,    38,    38,
311      39,    39,    39,    39,
312  };
313