Home | History | Annotate | Download | only in common
      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