+static const uint8_t offset_table[] = { 2, 4, 10, 20 };
+static const int8_t sign_table[64][4] = {
+ { 0, 0, 0, 0 },
+ { -1, 1, 0, 0 },
+ { 1, -1, 0, 0 },
+ { -1, 0, 1, 0 },
+ { -1, 1, 1, 0 },
+ { 0, -1, 1, 0 },
+ { 1, -1, 1, 0 },
+ { -1, -1, 1, 0 },
+ { 1, 0, -1, 0 },
+ { 0, 1, -1, 0 },
+ { 1, 1, -1, 0 },
+ { -1, 1, -1, 0 },
+ { 1, -1, -1, 0 },
+ { -1, 0, 0, 1 },
+ { -1, 1, 0, 1 },
+ { 0, -1, 0, 1 },
+
+ { 0, 0, 0, 0 },
+ { 1, -1, 0, 1 },
+ { -1, -1, 0, 1 },
+ { -1, 0, 1, 1 },
+ { -1, 1, 1, 1 },
+ { 0, -1, 1, 1 },
+ { 1, -1, 1, 1 },
+ { -1, -1, 1, 1 },
+ { 0, 0, -1, 1 },
+ { 1, 0, -1, 1 },
+ { -1, 0, -1, 1 },
+ { 0, 1, -1, 1 },
+ { 1, 1, -1, 1 },
+ { -1, 1, -1, 1 },
+ { 0, -1, -1, 1 },
+ { 1, -1, -1, 1 },
+
+ { 0, 0, 0, 0 },
+ { -1, -1, -1, 1 },
+ { 1, 0, 0, -1 },
+ { 0, 1, 0, -1 },
+ { 1, 1, 0, -1 },
+ { -1, 1, 0, -1 },
+ { 1, -1, 0, -1 },
+ { 0, 0, 1, -1 },
+ { 1, 0, 1, -1 },
+ { -1, 0, 1, -1 },
+ { 0, 1, 1, -1 },
+ { 1, 1, 1, -1 },
+ { -1, 1, 1, -1 },
+ { 0, -1, 1, -1 },
+ { 1, -1, 1, -1 },
+ { -1, -1, 1, -1 },
+
+ { 0, 0, 0, 0 },
+ { 1, 0, -1, -1 },
+ { 0, 1, -1, -1 },
+ { 1, 1, -1, -1 },
+ { -1, 1, -1, -1 },
+ { 1, -1, -1, -1 }
+};
+
+static const int8_t luma_adjust[] = { -4, -3, -2, -1, 1, 2, 3, 4 };
+
+static const int8_t chroma_adjust[2][8] = {
+ { 1, 1, 0, -1, -1, -1, 0, 1 },
+ { 0, 1, 1, 1, 0, -1, -1, -1 }
+};
+
+const uint8_t chroma_vals[] = {
+ 20, 28, 36, 44, 52, 60, 68, 76,
+ 84, 92, 100, 106, 112, 116, 120, 124,
+ 128, 132, 136, 140, 144, 150, 156, 164,
+ 172, 180, 188, 196, 204, 212, 220, 228
+};
+