Clean-up in forward update to use mapping tables
authorDeb Mukherjee <debargha@google.com>
Tue, 2 Jul 2013 19:48:20 +0000 (12:48 -0700)
committerDeb Mukherjee <debargha@google.com>
Tue, 2 Jul 2013 19:48:20 +0000 (12:48 -0700)
Uses mapping tables instead of complicated modulo/division
operations for prob mapping for forward updates.

No bit-stream or output change.

Change-Id: Ifd9ce8ac1437835c305c94f64c18273c7a68f546

vp9/decoder/vp9_dsubexp.c
vp9/encoder/vp9_subexp.c

index 0f204df..8cc64f7 100644 (file)
@@ -47,14 +47,35 @@ static int merge_index(int v, int n, int modulus) {
 }
 
 static int inv_remap_prob(int v, int m) {
-  const int n = 255;
+  static int inv_map_table[MAX_PROB - 1] = {
+    // generated by:
+    //   inv_map_table[j] = merge_index(j, MAX_PROB - 1, MODULUS_PARAM);
+      6,  19,  32,  45,  58,  71,  84,  97, 110, 123, 136, 149, 162, 175, 188,
+    201, 214, 227, 240, 253,   0,   1,   2,   3,   4,   5,   7,   8,   9,  10,
+     11,  12,  13,  14,  15,  16,  17,  18,  20,  21,  22,  23,  24,  25,  26,
+     27,  28,  29,  30,  31,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
+     43,  44,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  59,
+     60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  72,  73,  74,  75,
+     76,  77,  78,  79,  80,  81,  82,  83,  85,  86,  87,  88,  89,  90,  91,
+     92,  93,  94,  95,  96,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107,
+    108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124,
+    125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 137, 138, 139, 140,
+    141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156,
+    157, 158, 159, 160, 161, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+    173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189,
+    190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 202, 203, 204, 205,
+    206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 218, 219, 220, 221,
+    222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+    238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
 
-  v = merge_index(v, n - 1, MODULUS_PARAM);
+  };
+  // v = merge_index(v, MAX_PROBS - 1, MODULUS_PARAM);
+  v = inv_map_table[v];
   m--;
-  if ((m << 1) <= n) {
+  if ((m << 1) <= MAX_PROB) {
     return 1 + inv_recenter_nonneg(v + 1, m);
   } else {
-    return n - inv_recenter_nonneg(v + 1, n - 1 - m);
+    return MAX_PROB - inv_recenter_nonneg(v + 1, MAX_PROB - 1 - m);
   }
 }
 
index 044e8e0..01e04d5 100644 (file)
@@ -49,17 +49,36 @@ static int recenter_nonneg(int v, int m) {
 }
 
 static int remap_prob(int v, int m) {
-  const int n = 255;
-  const int modulus = MODULUS_PARAM;
   int i;
+  static int map_table[MAX_PROB - 1] = {
+    // generated by:
+    //   map_table[j] = split_index(j, MAX_PROB - 1, MODULUS_PARAM);
+     20,  21,  22,  23,  24,  25,   0,  26,  27,  28,  29,  30,  31,  32,  33,
+     34,  35,  36,  37,   1,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
+     48,  49,   2,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
+      3,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,   4,  74,
+     75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,   5,  86,  87,  88,
+     89,  90,  91,  92,  93,  94,  95,  96,  97,   6,  98,  99, 100, 101, 102,
+    103, 104, 105, 106, 107, 108, 109,   7, 110, 111, 112, 113, 114, 115, 116,
+    117, 118, 119, 120, 121,   8, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+    131, 132, 133,   9, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+    145,  10, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,  11,
+    158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,  12, 170, 171,
+    172, 173, 174, 175, 176, 177, 178, 179, 180, 181,  13, 182, 183, 184, 185,
+    186, 187, 188, 189, 190, 191, 192, 193,  14, 194, 195, 196, 197, 198, 199,
+    200, 201, 202, 203, 204, 205,  15, 206, 207, 208, 209, 210, 211, 212, 213,
+    214, 215, 216, 217,  16, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+    228, 229,  17, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+     18, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,  19,
+  };
   v--;
   m--;
-  if ((m << 1) <= n)
+  if ((m << 1) <= MAX_PROB)
     i = recenter_nonneg(v, m) - 1;
   else
-    i = recenter_nonneg(n - 1 - v, n - 1 - m) - 1;
+    i = recenter_nonneg(MAX_PROB - 1 - v, MAX_PROB - 1 - m) - 1;
 
-  i = split_index(i, n - 1, modulus);
+  i = map_table[i];
   return i;
 }