Added support for Main Profile toolsets in encoder.

Added support for CABAC entropy coding.
Added support for B slices.
Fixed an issue in rate control constant QP mode.

Change-Id: Ib759d35e8e943f941aa9b8bbff0362d92c619994
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 @@
      -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
 };