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 * ih264_trans_data.c 25*495ae853SAndroid Build Coastguard Worker * 26*495ae853SAndroid Build Coastguard Worker * @brief 27*495ae853SAndroid Build Coastguard Worker * Contains definition of global variables for H264 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_trans_data.h" 44*495ae853SAndroid Build Coastguard Worker 45*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 46*495ae853SAndroid Build Coastguard Worker /* Global definitions */ 47*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 48*495ae853SAndroid Build Coastguard Worker 49*495ae853SAndroid Build Coastguard Worker /** 50*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 51*495ae853SAndroid Build Coastguard Worker * @brief Scale Table for quantizing 4x4 subblock. To quantize a given 4x4 DCT 52*495ae853SAndroid Build Coastguard Worker * transformed block, the coefficient at index location (i,j) is scaled by one of 53*495ae853SAndroid Build Coastguard Worker * the constants in this table and right shift the result by (QP_BITS_h264_4x4 + 54*495ae853SAndroid Build Coastguard Worker * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. 55*495ae853SAndroid Build Coastguard Worker * 56*495ae853SAndroid Build Coastguard Worker * input : qp%6, index location (i,j) 57*495ae853SAndroid Build Coastguard Worker * output : scale constant. 58*495ae853SAndroid Build Coastguard Worker * 59*495ae853SAndroid Build Coastguard Worker * @remarks 16 constants for each index position of the subblock and 6 for each 60*495ae853SAndroid Build Coastguard Worker * qp%6 in the range 0-5 inclusive. 61*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 62*495ae853SAndroid Build Coastguard Worker */ 63*495ae853SAndroid Build Coastguard Worker const UWORD16 gu2_quant_scale_matrix_4x4[96] = 64*495ae853SAndroid Build Coastguard Worker { 65*495ae853SAndroid Build Coastguard Worker 13107, 8066, 13107, 8066, 66*495ae853SAndroid Build Coastguard Worker 8066, 5243, 8066, 5243, 67*495ae853SAndroid Build Coastguard Worker 13107, 8066, 13107, 8066, 68*495ae853SAndroid Build Coastguard Worker 8066, 5243, 8066, 5243, 69*495ae853SAndroid Build Coastguard Worker 70*495ae853SAndroid Build Coastguard Worker 11916, 7490, 11916, 7490, 71*495ae853SAndroid Build Coastguard Worker 7490, 4660, 7490, 4660, 72*495ae853SAndroid Build Coastguard Worker 11916, 7490, 11916, 7490, 73*495ae853SAndroid Build Coastguard Worker 7490, 4660, 7490, 4660, 74*495ae853SAndroid Build Coastguard Worker 75*495ae853SAndroid Build Coastguard Worker 10082, 6554, 10082, 6554, 76*495ae853SAndroid Build Coastguard Worker 6554, 4194, 6554, 4194, 77*495ae853SAndroid Build Coastguard Worker 10082, 6554, 10082, 6554, 78*495ae853SAndroid Build Coastguard Worker 6554, 4194, 6554, 4194, 79*495ae853SAndroid Build Coastguard Worker 80*495ae853SAndroid Build Coastguard Worker 9362, 5825, 9362, 5825, 81*495ae853SAndroid Build Coastguard Worker 5825, 3647, 5825, 3647, 82*495ae853SAndroid Build Coastguard Worker 9362, 5825, 9362, 5825, 83*495ae853SAndroid Build Coastguard Worker 5825, 3647, 5825, 3647, 84*495ae853SAndroid Build Coastguard Worker 85*495ae853SAndroid Build Coastguard Worker 8192, 5243, 8192, 5243, 86*495ae853SAndroid Build Coastguard Worker 5243, 3355, 5243, 3355, 87*495ae853SAndroid Build Coastguard Worker 8192, 5243, 8192, 5243, 88*495ae853SAndroid Build Coastguard Worker 5243, 3355, 5243, 3355, 89*495ae853SAndroid Build Coastguard Worker 90*495ae853SAndroid Build Coastguard Worker 7282, 4559, 7282, 4559, 91*495ae853SAndroid Build Coastguard Worker 4559, 2893, 4559, 2893, 92*495ae853SAndroid Build Coastguard Worker 7282, 4559, 7282, 4559, 93*495ae853SAndroid Build Coastguard Worker 4559, 2893, 4559, 2893, 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 Round Factor for quantizing subblock. While quantizing a given 4x4 DCT 99*495ae853SAndroid Build Coastguard Worker * transformed block, the coefficient at index location (i,j) is scaled by one of 100*495ae853SAndroid Build Coastguard Worker * the constants in the table gu2_forward_quant_scalar_4x4 and then right shift 101*495ae853SAndroid Build Coastguard Worker * the result by (QP_BITS_h264_4x4 + floor(qp/6)). 102*495ae853SAndroid Build Coastguard Worker * Before right shifting a round factor is added. 103*495ae853SAndroid Build Coastguard Worker * The round factor can be any value [a * (1 << (QP_BITS_h264_4x4 + floor(qp/6)))] 104*495ae853SAndroid Build Coastguard Worker * for 'a' lies in the range 0-0.5. 105*495ae853SAndroid Build Coastguard Worker * Here qp is the quantization parameter used to quantize the mb. 106*495ae853SAndroid Build Coastguard Worker * 107*495ae853SAndroid Build Coastguard Worker * input : qp/6 108*495ae853SAndroid Build Coastguard Worker * output : round factor. 109*495ae853SAndroid Build Coastguard Worker * 110*495ae853SAndroid Build Coastguard Worker * @remarks The round factor is constructed by setting a = 1/3 111*495ae853SAndroid Build Coastguard Worker * 112*495ae853SAndroid Build Coastguard Worker * round factor constructed by setting a = 1/3 113*495ae853SAndroid Build Coastguard Worker { 114*495ae853SAndroid Build Coastguard Worker 10922, 21845, 43690, 87381, 115*495ae853SAndroid Build Coastguard Worker 174762, 349525, 699050, 1398101, 116*495ae853SAndroid Build Coastguard Worker 2796202, 117*495ae853SAndroid Build Coastguard Worker } 118*495ae853SAndroid Build Coastguard Worker * round factor constructed by setting a = 0.49 119*495ae853SAndroid Build Coastguard Worker { 120*495ae853SAndroid Build Coastguard Worker 16056, 32112, 64225, 121*495ae853SAndroid Build Coastguard Worker 128450, 256901, 513802, 122*495ae853SAndroid Build Coastguard Worker 1027604, 2055208, 4110417, 123*495ae853SAndroid Build Coastguard Worker } 124*495ae853SAndroid Build Coastguard Worker * round factor constructed by setting a = 0.5 125*495ae853SAndroid Build Coastguard Worker { 126*495ae853SAndroid Build Coastguard Worker 16384, 32768, 65536, 127*495ae853SAndroid Build Coastguard Worker 131072, 262144, 524288, 128*495ae853SAndroid Build Coastguard Worker 1048576, 2097152, 4194304, 129*495ae853SAndroid Build Coastguard Worker } 130*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 131*495ae853SAndroid Build Coastguard Worker */ 132*495ae853SAndroid Build Coastguard Worker const UWORD32 gu4_forward_quant_round_factor_4x4[9] = 133*495ae853SAndroid Build Coastguard Worker { 134*495ae853SAndroid Build Coastguard Worker 10922, 21845, 43690, 87381, 135*495ae853SAndroid Build Coastguard Worker 174762, 349525, 699050, 1398101, 136*495ae853SAndroid Build Coastguard Worker 2796202, 137*495ae853SAndroid Build Coastguard Worker }; 138*495ae853SAndroid Build Coastguard Worker 139*495ae853SAndroid Build Coastguard Worker /** 140*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 141*495ae853SAndroid Build Coastguard Worker * @brief Threshold Table. Quantizing the given DCT coefficient is done only if 142*495ae853SAndroid Build Coastguard Worker * it exceeds the threshold value presented in this table. 143*495ae853SAndroid Build Coastguard Worker * 144*495ae853SAndroid Build Coastguard Worker * input : qp/6, qp%6, index location (i,j) 145*495ae853SAndroid Build Coastguard Worker * output : Threshold constant. 146*495ae853SAndroid Build Coastguard Worker * 147*495ae853SAndroid Build Coastguard Worker * @remarks 16 constants for each index position of the subblock and 6 for each 148*495ae853SAndroid Build Coastguard Worker * qp%6 in the range 0-5 inclusive and 9 for each qp/6 in the range 0-51. 149*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 150*495ae853SAndroid Build Coastguard Worker */ 151*495ae853SAndroid Build Coastguard Worker const UWORD16 gu2_forward_quant_threshold_4x4[96] = 152*495ae853SAndroid Build Coastguard Worker { 153*495ae853SAndroid Build Coastguard Worker 426, 693, 426, 693, 154*495ae853SAndroid Build Coastguard Worker 693, 1066, 693, 1066, 155*495ae853SAndroid Build Coastguard Worker 426, 693, 426, 693, 156*495ae853SAndroid Build Coastguard Worker 693, 1066, 693, 1066, 157*495ae853SAndroid Build Coastguard Worker 158*495ae853SAndroid Build Coastguard Worker 469, 746, 469, 746, 159*495ae853SAndroid Build Coastguard Worker 746, 1200, 746, 1200, 160*495ae853SAndroid Build Coastguard Worker 469, 746, 469, 746, 161*495ae853SAndroid Build Coastguard Worker 746, 1200, 746, 1200, 162*495ae853SAndroid Build Coastguard Worker 163*495ae853SAndroid Build Coastguard Worker 554, 853, 554, 853, 164*495ae853SAndroid Build Coastguard Worker 853, 1333, 853, 1333, 165*495ae853SAndroid Build Coastguard Worker 554, 853, 554, 853, 166*495ae853SAndroid Build Coastguard Worker 853, 1333, 853, 1333, 167*495ae853SAndroid Build Coastguard Worker 168*495ae853SAndroid Build Coastguard Worker 597, 960, 597, 960, 169*495ae853SAndroid Build Coastguard Worker 960, 1533, 960, 1533, 170*495ae853SAndroid Build Coastguard Worker 597, 960, 597, 960, 171*495ae853SAndroid Build Coastguard Worker 960, 1533, 960, 1533, 172*495ae853SAndroid Build Coastguard Worker 173*495ae853SAndroid Build Coastguard Worker 682, 1066, 682, 1066, 174*495ae853SAndroid Build Coastguard Worker 1066, 1666, 1066, 1666, 175*495ae853SAndroid Build Coastguard Worker 682, 1066, 682, 1066, 176*495ae853SAndroid Build Coastguard Worker 1066, 1666, 1066, 1666, 177*495ae853SAndroid Build Coastguard Worker 178*495ae853SAndroid Build Coastguard Worker 767, 1226, 767, 1226, 179*495ae853SAndroid Build Coastguard Worker 1226, 1933, 1226, 1933, 180*495ae853SAndroid Build Coastguard Worker 767, 1226, 767, 1226, 181*495ae853SAndroid Build Coastguard Worker 1226, 1933, 1226, 1933, 182*495ae853SAndroid Build Coastguard Worker }; 183*495ae853SAndroid Build Coastguard Worker 184*495ae853SAndroid Build Coastguard Worker /** 185*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 186*495ae853SAndroid Build Coastguard Worker * @brief Scale Table for quantizing 8x8 subblock. To quantize a given 8x8 DCT 187*495ae853SAndroid Build Coastguard Worker * transformed block, the coefficient at index location (i,j) is scaled by one of 188*495ae853SAndroid Build Coastguard Worker * the constants in this table and right shift the result by (QP_BITS_h264_8x8 + 189*495ae853SAndroid Build Coastguard Worker * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. 190*495ae853SAndroid Build Coastguard Worker * 191*495ae853SAndroid Build Coastguard Worker * input : qp%6, index location (i,j) 192*495ae853SAndroid Build Coastguard Worker * output : scale constant. 193*495ae853SAndroid Build Coastguard Worker * 194*495ae853SAndroid Build Coastguard Worker * @remarks 64 constants for each index position of the subblock and 6 for each 195*495ae853SAndroid Build Coastguard Worker * qp%6 in the range 0-5 inclusive. 196*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 197*495ae853SAndroid Build Coastguard Worker */ 198*495ae853SAndroid Build Coastguard Worker const UWORD16 gu2_quant_scale_matrix_8x8 [384] = 199*495ae853SAndroid Build Coastguard Worker { 200*495ae853SAndroid Build Coastguard Worker 13107, 12222, 16777, 12222, 13107, 12222, 16777, 12222, 201*495ae853SAndroid Build Coastguard Worker 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428, 202*495ae853SAndroid Build Coastguard Worker 16777, 15481, 20972, 15481, 16777, 15481, 20972, 15481, 203*495ae853SAndroid Build Coastguard Worker 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428, 204*495ae853SAndroid Build Coastguard Worker 13107, 12222, 16777, 12222, 13107, 12222, 16777, 12222, 205*495ae853SAndroid Build Coastguard Worker 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428, 206*495ae853SAndroid Build Coastguard Worker 16777, 15481, 20972, 15481, 16777, 15481, 20972, 15481, 207*495ae853SAndroid Build Coastguard Worker 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428, 208*495ae853SAndroid Build Coastguard Worker 209*495ae853SAndroid Build Coastguard Worker 11916, 11058, 14980, 11058, 11916, 11058, 14980, 11058, 210*495ae853SAndroid Build Coastguard Worker 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826, 211*495ae853SAndroid Build Coastguard Worker 14980, 14290, 19174, 14290, 14980, 14290, 19174, 14290, 212*495ae853SAndroid Build Coastguard Worker 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826, 213*495ae853SAndroid Build Coastguard Worker 11916, 11058, 14980, 11058, 11916, 11058, 14980, 11058, 214*495ae853SAndroid Build Coastguard Worker 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826, 215*495ae853SAndroid Build Coastguard Worker 14980, 14290, 19174, 14290, 14980, 14290, 19174, 14290, 216*495ae853SAndroid Build Coastguard Worker 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826, 217*495ae853SAndroid Build Coastguard Worker 218*495ae853SAndroid Build Coastguard Worker 10082, 9675, 12710, 9675, 10082, 9675, 12710, 9675, 219*495ae853SAndroid Build Coastguard Worker 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943, 220*495ae853SAndroid Build Coastguard Worker 12710, 11985, 15978, 11985, 12710, 11985, 15978, 11985, 221*495ae853SAndroid Build Coastguard Worker 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943, 222*495ae853SAndroid Build Coastguard Worker 10082, 9675, 12710, 9675, 10082, 9675, 12710, 9675, 223*495ae853SAndroid Build Coastguard Worker 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943, 224*495ae853SAndroid Build Coastguard Worker 12710, 11985, 15978, 11985, 12710, 11985, 15978, 11985, 225*495ae853SAndroid Build Coastguard Worker 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943, 226*495ae853SAndroid Build Coastguard Worker 227*495ae853SAndroid Build Coastguard Worker 9362, 8931, 11984, 8931, 9362, 8931, 11984, 8931, 228*495ae853SAndroid Build Coastguard Worker 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228, 229*495ae853SAndroid Build Coastguard Worker 11984, 11259, 14913, 11259, 11984, 11259, 14913, 11259, 230*495ae853SAndroid Build Coastguard Worker 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228, 231*495ae853SAndroid Build Coastguard Worker 9362, 8931, 11984, 8931, 9362, 8931, 11984, 8931, 232*495ae853SAndroid Build Coastguard Worker 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228, 233*495ae853SAndroid Build Coastguard Worker 11984, 11259, 14913, 11259, 11984, 11259, 14913, 11259, 234*495ae853SAndroid Build Coastguard Worker 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228, 235*495ae853SAndroid Build Coastguard Worker 236*495ae853SAndroid Build Coastguard Worker 8192, 7740, 10486, 7740, 8192, 7740, 10486, 7740, 237*495ae853SAndroid Build Coastguard Worker 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346, 238*495ae853SAndroid Build Coastguard Worker 10486, 9777, 13159, 9777, 10486, 9777, 13159, 9777, 239*495ae853SAndroid Build Coastguard Worker 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346, 240*495ae853SAndroid Build Coastguard Worker 8192, 7740, 10486, 7740, 8192, 7740, 10486, 7740, 241*495ae853SAndroid Build Coastguard Worker 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346, 242*495ae853SAndroid Build Coastguard Worker 10486, 9777, 13159, 9777, 10486, 9777, 13159, 9777, 243*495ae853SAndroid Build Coastguard Worker 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346, 244*495ae853SAndroid Build Coastguard Worker 245*495ae853SAndroid Build Coastguard Worker 7282, 6830, 9118, 6830, 7282, 6830, 9118, 6830, 246*495ae853SAndroid Build Coastguard Worker 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, 247*495ae853SAndroid Build Coastguard Worker 9118, 8640, 11570, 8640, 9118, 8640, 11570, 8640, 248*495ae853SAndroid Build Coastguard Worker 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, 249*495ae853SAndroid Build Coastguard Worker 7282, 6830, 9118, 6830, 7282, 6830, 9118, 6830, 250*495ae853SAndroid Build Coastguard Worker 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, 251*495ae853SAndroid Build Coastguard Worker 9118, 8640, 11570, 8640, 9118, 8640, 11570, 8640, 252*495ae853SAndroid Build Coastguard Worker 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, 253*495ae853SAndroid Build Coastguard Worker }; 254*495ae853SAndroid Build Coastguard Worker 255*495ae853SAndroid Build Coastguard Worker /** 256*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 257*495ae853SAndroid Build Coastguard Worker * @brief Specification of QPc as a function of qPi 258*495ae853SAndroid Build Coastguard Worker * input : qp luma 259*495ae853SAndroid Build Coastguard Worker * output : qp chroma. 260*495ae853SAndroid Build Coastguard Worker * @remarks Refer Table 8-15 of h264 specification. 261*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 262*495ae853SAndroid Build Coastguard Worker */ 263*495ae853SAndroid Build Coastguard Worker const UWORD8 gu1_qpc_fqpi[52] = 264*495ae853SAndroid Build Coastguard Worker { 265*495ae853SAndroid Build Coastguard Worker 0, 1, 2, 3, 4, 5, 6, 7, 266*495ae853SAndroid Build Coastguard Worker 8, 9, 10, 11, 12, 13, 14, 15, 267*495ae853SAndroid Build Coastguard Worker 16, 17, 18, 19, 20, 21, 22, 23, 268*495ae853SAndroid Build Coastguard Worker 24, 25, 26, 27, 28, 29, 29, 30, 269*495ae853SAndroid Build Coastguard Worker 31, 32, 32, 33, 34, 34, 35, 35, 270*495ae853SAndroid Build Coastguard Worker 36, 36, 37, 37, 37, 38, 38, 38, 271*495ae853SAndroid Build Coastguard Worker 39, 39, 39, 39, 272*495ae853SAndroid Build Coastguard Worker }; 273