diff options
Diffstat (limited to 'encoder/ih264e_globals.c')
-rw-r--r-- | encoder/ih264e_globals.c | 187 |
1 files changed, 132 insertions, 55 deletions
diff --git a/encoder/ih264e_globals.c b/encoder/ih264e_globals.c index e2b46a4..28d3faf 100644 --- a/encoder/ih264e_globals.c +++ b/encoder/ih264e_globals.c @@ -196,66 +196,143 @@ const WORD8 gi1_mv_pred_condition[8] = -1, 0, 1, -1, 2, -1, -1, -1 }; -/** -****************************************************************************** -* @brief maps the h264 quantizer to the mpeg2 quantizer scale -* input : h264 qp -* output : equivalent mpeg 2 qp -* @remarks mpeg2qscale = 2 ^ [((h264qp - 12) / 6) + 1] -****************************************************************************** -*/ + +/******************************************************************************* + * Translation of MPEG QP to H264 QP + ******************************************************************************/ +/* + * Note : RC library models QP and bits assuming the QP to be MPEG2. + * Since MPEG qp varies linearly, when the relationship is computed, + * it learns that delta(qp) => delta(bits). Now what we are doing by the + * transation of qp is that + * QPrc = a + b*2^(QPen) + * By not considering the weight matrix in both MPEG and H264 we in effect + * only changing the relation to + * QPrc = c + d*2^(QPen) + * This will only entatil changin the RC model parameters, and this will + * not affect rc relation at all + * + * + * We have MPEG qp which varies from 0-228. The quantization factor has a linear + * relation ship with the size of quantized values + * + * We also have H264 Qp, which varies such that for a change in QP of 6 , we + * double the corresponding scaling factor. Hence the scaling is linear in terms + * of 2^(QPh/6) + * + * Now we want to have translation between QPm and QPh. Hence we can write + * + * QPm = a + b*2^(QPh/6) + * + * Appling boundary condition that + * 1) QPm = 1 if QPh = 0 + * 2) QPm = 228 if QPh = 51, + * + * we will have + * a = -0.372, b = 0.628 + * + * Hence the relatiohship is + * QPm = a + b*2^(Qph/6) + * QPh = 6*log((Qpm - a)/b) + * + * + * Unrounded values for gau1_h264_to_mpeg2_qmap[H264_QP_ELEM] = + * + * 0.33291 0.41923 0.51613 0.62489 0.74697 0.88400 + * 1.03781 1.21046 1.40425 1.62178 1.86594 2.14000 + * 2.44762 2.79292 3.18050 3.61555 4.10388 4.65200 + * 5.26725 5.95784 6.73301 7.60310 8.57975 9.67600 + * 10.90650 12.28769 13.83802 15.57821 17.53150 19.72400 + * 22.18500 24.94737 28.04804 31.52841 35.43500 39.82000 + * 44.74199 50.26675 56.46807 63.42882 71.24200 80.01200 + * 89.85599 100.90549 113.30814 127.22965 142.85601 160.39600 + * 180.08398 202.18299 226.98829 + * + * Unrounded values for gau1_mpeg2_to_h264_qmap[MPEG2_QP_ELEM] + * + * -4.5328 6.7647 11.5036 14.5486 16.7967 18.5797 20.0575 + * 21.3193 22.4204 23.3971 24.2747 25.0715 25.8010 26.4738 + * 27.0981 27.6804 28.2259 28.7391 29.2236 29.6824 30.1181 + * 30.5329 30.9287 31.3072 31.6699 32.0180 32.3526 32.6748 + * 32.9854 33.2852 33.5750 33.8554 34.1270 34.3904 34.6460 + * 34.8942 35.1355 35.3703 35.5989 35.8216 36.0387 36.2505 + * 36.4572 36.6591 36.8564 37.0494 37.2381 37.4228 37.6036 + * 37.7807 37.9543 38.1244 38.2913 38.4550 38.6157 38.7735 + * 38.9284 39.0806 39.2302 39.3772 39.5218 39.6640 39.8039 + * 39.9416 40.0771 40.2106 40.3420 40.4714 40.5990 40.7247 + * 40.8486 40.9707 41.0911 41.2099 41.3271 41.4427 41.5568 + * 41.6694 41.7806 41.8903 41.9987 42.1057 42.2115 42.3159 + * 42.4191 42.5211 42.6219 42.7216 42.8201 42.9175 43.0138 + * 43.1091 43.2033 43.2965 43.3887 43.4799 43.5702 43.6596 + * 43.7480 43.8356 43.9223 44.0081 44.0930 44.1772 44.2605 + * 44.3431 44.4248 44.5058 44.5861 44.6656 44.7444 44.8224 + * 44.8998 44.9765 45.0525 45.1279 45.2026 45.2766 45.3501 + * 45.4229 45.4951 45.5667 45.6378 45.7082 45.7781 45.8474 + * 45.9162 45.9844 46.0521 46.1193 46.1859 46.2521 46.3177 + * 46.3829 46.4475 46.5117 46.5754 46.6386 46.7014 46.7638 + * 46.8256 46.8871 46.9481 47.0087 47.0689 47.1286 47.1880 + * 47.2469 47.3054 47.3636 47.4213 47.4787 47.5357 47.5923 + * 47.6486 47.7045 47.7600 47.8152 47.8700 47.9245 47.9787 + * 48.0325 48.0859 48.1391 48.1919 48.2444 48.2966 48.3485 + * 48.4000 48.4513 48.5022 48.5529 48.6033 48.6533 48.7031 + * 48.7526 48.8018 48.8508 48.8995 48.9478 48.9960 49.0438 + * 49.0914 49.1388 49.1858 49.2327 49.2792 49.3256 49.3716 + * 49.4175 49.4630 49.5084 49.5535 49.5984 49.6430 49.6875 + * 49.7317 49.7756 49.8194 49.8629 49.9062 49.9493 49.9922 + * 50.0348 50.0773 50.1196 50.1616 50.2034 50.2451 50.2865 + * 50.3278 50.3688 50.4097 50.4503 50.4908 50.5311 50.5712 + * 50.6111 50.6508 50.6904 50.7298 50.7690 50.8080 50.8468 + * 50.8855 50.9240 50.9623 51.0004 51.0384 + * + */ + const UWORD8 gau1_h264_to_mpeg2_qmap[H264_QP_ELEM] = { - 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 3, 3, 4, - 4, 4, 5, 6, 6, 7, 8, 9, - 10, 11, 13, 14, 16, 18, 20, 23, - 25, 29, 32, 36, 40, 45, 51, 57, - 64, 72, 81, 91, 102, 114, 128, 144, - 161, 181, 203, 228, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, + 2, 3, 3, 4, 4, 5, + 5, 6, 7, 8, 9, 10, + 11, 12, 14, 16, 18, 20, + 22, 25, 28, 32, 35, 40, + 45, 50, 56, 63, 71, 80, + 90, 101, 113, 127, 143, 160, + 180, 202, 227 }; -/** -****************************************************************************** -* @brief maps the mpeg2 quantizer to the h264 quantizer scale -* input : mpeg2 qp -* output : equivalent h264qp -* @remarks MPEG-2 dequantization: (2*QFij + k)*Wij*qscale/32 -* k = 0 (for intra) k = sign(QFij) -* H.264 dequantization: (QFij*R(QP%6,i,j))>>(6 - QP/6) -* -* Excluding the portion of R(QP%6,i,j) that is due to -* the DCT scale factors, the 6 entries after dividing by 64 (2^6) -* correspond to dequant values of -* 2.5, 2.8125, 3.125, 3.5625, 3.9375, 4.4375. -* (a=0.5 b=sqrt(2/5) - refer to JVT-B038.doc) -* -* Assuming that h264Qp=12 corresponds to MPEG2 qscale of 2 -* (the actual mapping seems to be to MPEG2 qscale of 2.5), -* and the fact that the effective h264 quantizer changes by -* a factor of 2 for every 6 steps, the following mapping is -* obtained: -* h264qp = 6*(log2(mpeg2qscale/2)) + 12. -* -* Note that the quant matrix entry assumed for the above -* equality is 16. Hence when the mpeg2 quant matrix entries -* are all 16, this lookup can be used as is (which is the -* default inter quant matrix in mpeg-2). -****************************************************************************** -*/ const UWORD8 gau1_mpeg2_to_h264_qmap[MPEG2_QP_ELEM] = { - 0, 4, 10, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 26, 27, 27, - 28, 29, 29, 29, 30, 30, 31, 31, 32, 32, 32, 33, 33, 33, 33, 34, - 34, 34, 35, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 37, - 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, - 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 0, 7, 12, 15, 17, 19, 20, + 21, 22, 23, 24, 25, 26, 26, + 27, 28, 28, 29, 29, 30, 30, + 31, 31, 31, 32, 32, 32, 33, + 33, 33, 34, 34, 34, 34, 35, + 35, 35, 35, 36, 36, 36, 36, + 36, 37, 37, 37, 37, 37, 38, + 38, 38, 38, 38, 38, 39, 39, + 39, 39, 39, 39, 40, 40, 40, + 40, 40, 40, 40, 40, 41, 41, + 41, 41, 41, 41, 41, 41, 42, + 42, 42, 42, 42, 42, 42, 42, + 42, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 44, 44, + 44, 44, 44, 44, 44, 44, 44, + 44, 44, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, + 45, 45, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, + 46, 46, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 48, 48, + 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, + 48, 48, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, + 49, 49, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 51, 51, + 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51 }; |