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 * ih264e_globals.c 24 * 25 * @brief 26 * Contains definitions of global variables used across the encoder 27 * 28 * @author 29 * ittiam 30 * 31 * @par List of functions 32 * 33 * 34 * @remarks 35 * 36 ******************************************************************************* 37 */ 38 39 /*****************************************************************************/ 40 /* File Includes */ 41 /*****************************************************************************/ 42 43 /* User include files */ 44 #include "ih264_typedefs.h" 45 #include "ih264_defs.h" 46 #include "ih264e_defs.h" 47 #include "ih264e_globals.h" 48 49 /*****************************************************************************/ 50 /* Extern global definitions */ 51 /*****************************************************************************/ 52 53 /** 54 ****************************************************************************** 55 * @brief lamda for varying quantizer scales that would be used to 56 * compute the RD cost while deciding on the MB modes. 57 * input : qp 58 * output : lambda 59 * @remarks lambda = 0.85 * pow(2, (qp - 12)/3), when SSD is used as metric 60 * for computing distortion (Bit rate estimation for cost function of H.264/ 61 * AVC by Mohd Golam Sarwer et. al.) If the use of distortion metric is SAD 62 * rather than SSD in the stage of encoding, consider sqrt(lambda) simply to 63 * adjust lambda for the lack of squaring operation in the error computation 64 * (from rate distortion optimization for video compression by sullivan). 65 ****************************************************************************** 66 */ 67 const UWORD16 gu2_qp_lambda[52]= 68 { 69 0, 0, 0, 0, 0, 0, 0, 1, 70 1, 1, 1, 1, 1, 1, 1, 1, 71 1, 2, 2, 2, 2, 3, 3, 3, 72 4, 4, 5, 5, 6, 7, 7, 8, 73 9, 10, 12, 13, 15, 17, 19, 21, 74 23, 26, 30, 33, 37, 42, 47, 53, 75 59, 66, 74, 83, 76 }; 77 78 /** 79 ****************************************************************************** 80 * @brief Lamda for varying quantizer scales that would be used to 81 * compute the RD cost while deciding on the MB modes. 82 * input : qp 83 * output : lambda 84 * @remarks lambda = pow(2, (qp - 12)/6) 85 ****************************************************************************** 86 */ 87 const UWORD8 gu1_qp0[52]= 88 { 89 0, 0, 0, 0, 0, 0, 0, 0, 90 0, 0, 0, 0, 1, 1, 1, 1, 91 2, 2, 2, 2, 3, 3, 3, 4, 92 4, 4, 5, 6, 6, 7, 8, 9, 93 10, 11, 13, 14, 16, 18, 20, 23, 94 25, 29, 32, 36, 40, 45, 51, 57, 95 64, 72, 81, 91, 96 }; 97 98 /** 99 ****************************************************************************** 100 * @brief unsigned exp. goulumb codelengths to assign cost to a coefficient of 101 * mb types. 102 * input : Integer 103 * output : codelength 104 * @remarks Refer sec. 9-1 in h264 specification 105 ****************************************************************************** 106 */ 107 const UWORD8 u1_uev_codelength[32] = 108 { 109 1, 3, 3, 5, 5, 5, 5, 7, 110 7, 7, 7, 7, 7, 7, 7, 9, 111 9, 9, 9, 9, 9, 9, 9, 9, 112 9, 9, 9, 9, 9, 9, 9, 11, 113 }; 114 115 116 /** 117 ****************************************************************************** 118 * @brief Look up table to assign cost to a coefficient of a residual block 119 * basing on its surrounding coefficients 120 * input : Numbers of T1's 121 * output : coeff_cost 122 * @remarks Refer Section 2.3 Elimination of single coefficients in inter 123 * macroblocks in document JVT-O079 124 ****************************************************************************** 125 */ 126 const UWORD8 gu1_coeff_cost[6] = 127 { 128 3, 2, 2, 1, 1, 1 129 }; 130 131 /** 132 ****************************************************************************** 133 * @brief Indices map to raster scan for luma 4x4 block 134 * input : scan index 135 * output : scan location 136 * @remarks None 137 ****************************************************************************** 138 */ 139 const UWORD8 gu1_luma_scan_order[16] = 140 { 141 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 142 }; 143 144 /** 145 ****************************************************************************** 146 * @brief Indices map to raster scan for chroma AC block 147 * input : scan index 148 * output : scan location 149 * @remarks None 150 ****************************************************************************** 151 */ 152 const UWORD8 gu1_chroma_scan_order[15] = 153 { 154 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 155 }; 156 157 /** 158 ****************************************************************************** 159 * @brief Indices map to raster scan for luma 4x4 dc block 160 * input : scan index 161 * output : scan location 162 * @remarks : None 163 ****************************************************************************** 164 */ 165 const UWORD8 gu1_luma_scan_order_dc[16] = 166 { 167 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 168 }; 169 170 /** 171 ****************************************************************************** 172 * @brief Indices map to raster scan for chroma 2x2 dc block 173 * input : scan index 174 * output : scan location 175 * @remarks None 176 ****************************************************************************** 177 */ 178 const UWORD8 gu1_chroma_scan_order_dc[4] = 179 { 180 0, 1, 2, 3 181 }; 182 183 /** 184 ****************************************************************************** 185 * @brief choice of motion vectors to be used during mv prediction 186 * input : formatted reference idx comparison metric 187 * output : mv prediction has to be median or a simple straight forward selec 188 * tion from neighbors. 189 * @remarks If only one of the candidate blocks has a reference frame equal to 190 the current block then use the same block as the final predictor. A simple 191 look up table to assist this mv prediction condition 192 ****************************************************************************** 193 */ 194 const WORD8 gi1_mv_pred_condition[8] = 195 { 196 -1, 0, 1, -1, 2, -1, -1, -1 197 }; 198 199 200 /******************************************************************************* 201 * Translation of MPEG QP to H264 QP 202 ******************************************************************************/ 203 /* 204 * Note : RC library models QP and bits assuming the QP to be MPEG2. 205 * Since MPEG qp varies linearly, when the relationship is computed, 206 * it learns that delta(qp) => delta(bits). Now what we are doing by the 207 * transation of qp is that 208 * QPrc = a + b*2^(QPen) 209 * By not considering the weight matrix in both MPEG and H264 we in effect 210 * only changing the relation to 211 * QPrc = c + d*2^(QPen) 212 * This will only entatil changin the RC model parameters, and this will 213 * not affect rc relation at all 214 * 215 * 216 * We have MPEG qp which varies from 0-228. The quantization factor has a linear 217 * relation ship with the size of quantized values 218 * 219 * We also have H264 Qp, which varies such that for a change in QP of 6 , we 220 * double the corresponding scaling factor. Hence the scaling is linear in terms 221 * of 2^(QPh/6) 222 * 223 * Now we want to have translation between QPm and QPh. Hence we can write 224 * 225 * QPm = a + b*2^(QPh/6) 226 * 227 * Appling boundary condition that 228 * 1) QPm = 0.625 if QPh = 0 229 * 2) QPm = 224 if QPh = 51, 230 * 231 * we will have 232 * a = 0.0063, b = 0.6187 233 * 234 * Hence the relatiohship is 235 * QPm = a + b*2^(Qph/6) 236 * QPh = 6*log((Qpm - a)/b) 237 * 238 * 239 * Unrounded values for gau1_h264_to_mpeg2_qmap[H264_QP_ELEM] = 240 * 241 * 0.625 0.70077 0.78581 0.88127 0.98843 1.10870 242 * 1.24370 1.39523 1.56533 1.75625 1.97055 2.21110 243 * 2.48110 2.78417 3.12435 3.50620 3.93480 4.41589 244 * 4.95590 5.56204 6.24241 7.00609 7.86330 8.82548 245 * 9.90550 11.11778 12.47851 14.00588 15.72030 17.64467 246 * 19.80470 22.22925 24.95072 28.00547 31.43430 35.28304 247 * 39.60310 44.45221 49.89514 56.00463 62.86230 70.55978 248 * 79.19990 88.89811 99.78398 112.00296 125.71830 141.11325 249 * 158.39350 177.78992 199.56167 223.99963 250 * 251 * 252 * 253 * Unrounded values for gau1_mpeg2_to_h264_qmap[MPEG2_QP_ELEM] 254 * 255 * 0 4.1014 10.1288 13.6477 16.1425 18.0768 19.6568 256 * 20.9925 22.1493 23.1696 24.0822 24.9078 25.6614 26.3546 257 * 26.9964 27.5938 28.1527 28.6777 29.1726 29.6408 30.0850 258 * 30.5074 30.9102 31.2951 31.6636 32.0171 32.3567 32.6834 259 * 32.9983 33.3021 33.5957 33.8795 34.1544 34.4208 34.6793 260 * 34.9303 35.1742 35.4114 35.6423 35.8671 36.0863 36.3001 261 * 36.5087 36.7124 36.9115 37.1060 37.2963 37.4825 37.6648 262 * 37.8433 38.0182 38.1896 38.3577 38.5226 38.6844 38.8433 263 * 38.9993 39.1525 39.3031 39.4511 39.5966 39.7397 39.8804 264 * 40.0189 40.1553 40.2895 40.4217 40.5518 40.6801 40.8065 265 * 40.9310 41.0538 41.1749 41.2943 41.4121 41.5283 41.6430 266 * 41.7561 41.8678 41.9781 42.0870 42.1946 42.3008 42.4057 267 * 42.5094 42.6118 42.7131 42.8132 42.9121 43.0099 43.1066 268 * 43.2023 43.2969 43.3905 43.4831 43.5747 43.6653 43.7550 269 * 43.8438 43.9317 44.0187 44.1049 44.1901 44.2746 44.3582 270 * 44.4411 44.5231 44.6044 44.6849 44.7647 44.8438 44.9221 271 * 44.9998 45.0767 45.1530 45.2286 45.3035 45.3779 45.4515 272 * 45.5246 45.5970 45.6689 45.7401 45.8108 45.8809 45.9504 273 * 46.0194 46.0878 46.1557 46.2231 46.2899 46.3563 46.4221 274 * 46.4874 46.5523 46.6166 46.6805 46.7439 46.8069 46.8694 275 * 46.9314 46.9930 47.0542 47.1150 47.1753 47.2352 47.2947 276 * 47.3538 47.4125 47.4708 47.5287 47.5862 47.6433 47.7001 277 * 47.7565 47.8125 47.8682 47.9235 47.9785 48.0331 48.0874 278 * 48.1413 48.1949 48.2482 48.3011 48.3537 48.4060 48.4580 279 * 48.5097 48.5611 48.6122 48.6629 48.7134 48.7636 48.8135 280 * 48.8631 48.9124 48.9615 49.0102 49.0587 49.1069 49.1549 281 * 49.2026 49.2500 49.2972 49.3441 49.3908 49.4372 49.4834 282 * 49.5293 49.5750 49.6204 49.6656 49.7106 49.7553 49.7998 283 * 49.8441 49.8882 49.9320 49.9756 50.0190 50.0622 50.1051 284 * 50.1479 50.1904 50.2327 50.2749 50.3168 50.3585 50.4000 285 * 50.4413 50.4825 50.5234 50.5641 50.6047 50.6450 50.6852 286 * 50.7252 50.7650 50.8046 50.8440 50.8833 50.9224 50.9613 287 * 51.0000 288 */ 289 290 const UWORD8 gau1_h264_to_mpeg2_qmap[H264_QP_ELEM] = 291 { 292 1, 1, 1, 1, 1, 1, 1, 1, 293 2, 2, 2, 2, 2, 3, 3, 4, 294 4, 4, 5, 6, 6, 7, 8, 9, 295 10, 11, 12, 14, 16, 18, 20, 22, 296 25, 28, 31, 35, 40, 44, 50, 56, 297 63, 71, 79, 89, 100, 112, 126, 141, 298 158, 178, 200, 224 299 }; 300 301 const UWORD8 gau1_mpeg2_to_h264_qmap[MPEG2_QP_ELEM] = 302 { 303 0, 4, 10, 14, 16, 18, 20, 21, 304 22, 23, 24, 25, 26, 26, 27, 28, 305 28, 29, 29, 30, 30, 31, 31, 31, 306 32, 32, 32, 33, 33, 33, 34, 34, 307 34, 34, 35, 35, 35, 35, 36, 36, 308 36, 36, 37, 37, 37, 37, 37, 37, 309 38, 38, 38, 38, 38, 39, 39, 39, 310 39, 39, 39, 39, 40, 40, 40, 40, 311 40, 40, 40, 41, 41, 41, 41, 41, 312 41, 41, 41, 42, 42, 42, 42, 42, 313 42, 42, 42, 42, 43, 43, 43, 43, 314 43, 43, 43, 43, 43, 43, 43, 44, 315 44, 44, 44, 44, 44, 44, 44, 44, 316 44, 44, 45, 45, 45, 45, 45, 45, 317 45, 45, 45, 45, 45, 45, 45, 46, 318 46, 46, 46, 46, 46, 46, 46, 46, 319 46, 46, 46, 46, 46, 46, 47, 47, 320 47, 47, 47, 47, 47, 47, 47, 47, 321 47, 47, 47, 47, 47, 47, 48, 48, 322 48, 48, 48, 48, 48, 48, 48, 48, 323 48, 48, 48, 48, 48, 48, 48, 48, 324 49, 49, 49, 49, 49, 49, 49, 49, 325 49, 49, 49, 49, 49, 49, 49, 49, 326 49, 49, 49, 49, 49, 50, 50, 50, 327 50, 50, 50, 50, 50, 50, 50, 50, 328 50, 50, 50, 50, 50, 50, 50, 50, 329 50, 50, 50, 50, 51, 51, 51, 51, 330 51, 51, 51, 51, 51, 51, 51, 51, 331 51 332 }; 333 334