codec: Add bit ordering tables from specs for HR,FR,EFR & AMR

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
diff --git a/src/codec/gsm690.c b/src/codec/gsm690.c
new file mode 100644
index 0000000..e5b9bd4
--- /dev/null
+++ b/src/codec/gsm690.c
@@ -0,0 +1,210 @@
+/* GSM 06.90 - GSM AMR Codec */
+
+/*
+ * (C) 2010 Sylvain Munaut <tnt@246tNt.com>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdint.h>
+
+/*
+ * These table map between the raw encoder parameter output and
+ * the format used before channel coding. Both in GSM and in various
+ * file/network format (same tables used in several specs).
+ */
+
+/* AMR 12.2 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 7
+	 * It's also TS 26.101 Table B.8
+	 */
+uint16_t gsm690_12_2_bitorder[244] = {
+	  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
+	 10,  11,  12,  13,  14,  23,  15,  16,  17,  18,
+	 19,  20,  21,  22,  24,  25,  26,  27,  28,  38,
+	141,  39, 142,  40, 143,  41, 144,  42, 145,  43,
+	146,  44, 147,  45, 148,  46, 149,  47,  97, 150,
+	200,  48,  98, 151, 201,  49,  99, 152, 202,  86,
+	136, 189, 239,  87, 137, 190, 240,  88, 138, 191,
+	241,  91, 194,  92, 195,  93, 196,  94, 197,  95,
+	198,  29,  30,  31,  32,  33,  34,  35,  50, 100,
+	153, 203,  89, 139, 192, 242,  51, 101, 154, 204,
+	 55, 105, 158, 208,  90, 140, 193, 243,  59, 109,
+	162, 212,  63, 113, 166, 216,  67, 117, 170, 220,
+	 36,  37,  54,  53,  52,  58,  57,  56,  62,  61,
+	 60,  66,  65,  64,  70,  69,  68, 104, 103, 102,
+	108, 107, 106, 112, 111, 110, 116, 115, 114, 120,
+	119, 118, 157, 156, 155, 161, 160, 159, 165, 164,
+	163, 169, 168, 167, 173, 172, 171, 207, 206, 205,
+	211, 210, 209, 215, 214, 213, 219, 218, 217, 223,
+	222, 221,  73,  72,  71,  76,  75,  74,  79,  78,
+	 77,  82,  81,  80,  85,  84,  83, 123, 122, 121,
+	126, 125, 124, 129, 128, 127, 132, 131, 130, 135,
+	134, 133, 176, 175, 174, 179, 178, 177, 182, 181,
+	180, 185, 184, 183, 188, 187, 186, 226, 225, 224,
+	229, 228, 227, 232, 231, 230, 235, 234, 233, 238,
+	237, 236,  96, 199,
+};
+
+/* AMR 10.2 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 8
+	 * It's also TS 26.101 Table B.7
+	 */
+uint16_t gsm690_10_2_bitorder[204] = {
+	  7,   6,   5,   4,   3,   2,   1,   0,  16,  15,
+	 14,  13,  12,  11,  10,   9,   8,  26,  27,  28,
+	 29,  30,  31, 115, 116, 117, 118, 119, 120,  72,
+	 73, 161, 162,  65,  68,  69, 108, 111, 112, 154,
+	157, 158, 197, 200, 201,  32,  33, 121, 122,  74,
+	 75, 163, 164,  66, 109, 155, 198,  19,  23,  21,
+	 22,  18,  17,  20,  24,  25,  37,  36,  35,  34,
+	 80,  79,  78,  77, 126, 125, 124, 123, 169, 168,
+	167, 166,  70,  67,  71, 113, 110, 114, 159, 156,
+	160, 202, 199, 203,  76, 165,  81,  82,  92,  91,
+	 93,  83,  95,  85,  84,  94, 101, 102,  96, 104,
+	 86, 103,  87,  97, 127, 128, 138, 137, 139, 129,
+	141, 131, 130, 140, 147, 148, 142, 150, 132, 149,
+	133, 143, 170, 171, 181, 180, 182, 172, 184, 174,
+	173, 183, 190, 191, 185, 193, 175, 192, 176, 186,
+	 38,  39,  49,  48,  50,  40,  52,  42,  41,  51,
+	 58,  59,  53,  61,  43,  60,  44,  54, 194, 179,
+	189, 196, 177, 195, 178, 187, 188, 151, 136, 146,
+	153, 134, 152, 135, 144, 145, 105,  90, 100, 107,
+	 88, 106,  89,  98,  99,  62,  47,  57,  64,  45,
+	 63,  46,  55,  56,
+};
+
+/* AMR 7.95 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 9
+	 * It's also TS 26.101 Table B.6
+	 */
+uint16_t gsm690_7_95_bitorder[159] = {
+	  8,   7,   6,   5,   4,   3,   2,  14,  16,   9,
+	 10,  12,  13,  15,  11,  17,  20,  22,  24,  23,
+	 19,  18,  21,  56,  88, 122, 154,  57,  89, 123,
+	155,  58,  90, 124, 156,  52,  84, 118, 150,  53,
+	 85, 119, 151,  27,  93,  28,  94,  29,  95,  30,
+	 96,  31,  97,  61, 127,  62, 128,  63, 129,  59,
+	 91, 125, 157,  32,  98,  64, 130,   1,   0,  25,
+	 26,  33,  99,  34, 100,  65, 131,  66, 132,  54,
+	 86, 120, 152,  60,  92, 126, 158,  55,  87, 121,
+	153, 117, 116, 115,  46,  78, 112, 144,  43,  75,
+	109, 141,  40,  72, 106, 138,  36,  68, 102, 134,
+	114, 149, 148, 147, 146,  83,  82,  81,  80,  51,
+	 50,  49,  48,  47,  45,  44,  42,  39,  35,  79,
+	 77,  76,  74,  71,  67, 113, 111, 110, 108, 105,
+	101, 145, 143, 142, 140, 137, 133,  41,  73, 107,
+	139,  37,  69, 103, 135,  38,  70, 104, 136,
+};
+
+/* AMR 7.4 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 10
+	 * It's also TS 26.101 Table B.5
+	 */
+uint16_t gsm690_7_4_bitorder[148] = {
+	  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
+	 10,  11,  12,  13,  14,  15,  16,  26,  87,  27,
+	 88,  28,  89,  29,  90,  30,  91,  51,  80, 112,
+	141,  52,  81, 113, 142,  54,  83, 115, 144,  55,
+	 84, 116, 145,  58, 119,  59, 120,  21,  22,  23,
+	 17,  18,  19,  31,  60,  92, 121,  56,  85, 117,
+	146,  20,  24,  25,  50,  79, 111, 140,  57,  86,
+	118, 147,  49,  78, 110, 139,  48,  77,  53,  82,
+	114, 143, 109, 138,  47,  76, 108, 137,  32,  33,
+	 61,  62,  93,  94, 122, 123,  41,  42,  43,  44,
+	 45,  46,  70,  71,  72,  73,  74,  75, 102, 103,
+	104, 105, 106, 107, 131, 132, 133, 134, 135, 136,
+	 34,  63,  95, 124,  35,  64,  96, 125,  36,  65,
+	 97, 126,  37,  66,  98, 127,  38,  67,  99, 128,
+	 39,  68, 100, 129,  40,  69, 101, 130,
+};
+
+/* AMR 6.7 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 11
+	 * It's also TS 26.101 Table B.4
+	 */
+uint16_t gsm690_6_7_bitorder[134] = {
+	  0,   1,   4,   3,   5,   6,  13,   7,   2,   8,
+	  9,  11,  15,  12,  14,  10,  28,  82,  29,  83,
+	 27,  81,  26,  80,  30,  84,  16,  55, 109,  56,
+	110,  31,  85,  57, 111,  48,  73, 102, 127,  32,
+	 86,  51,  76, 105, 130,  52,  77, 106, 131,  58,
+	112,  33,  87,  19,  23,  53,  78, 107, 132,  21,
+	 22,  18,  17,  20,  24,  25,  50,  75, 104, 129,
+	 47,  72, 101, 126,  54,  79, 108, 133,  46,  71,
+	100, 125, 128, 103,  74,  49,  45,  70,  99, 124,
+	 42,  67,  96, 121,  39,  64,  93, 118,  38,  63,
+	 92, 117,  35,  60,  89, 114,  34,  59,  88, 113,
+	 44,  69,  98, 123,  43,  68,  97, 122,  41,  66,
+	 95, 120,  40,  65,  94, 119,  37,  62,  91, 116,
+	 36,  61,  90, 115,
+};
+
+/* AMR 5.9 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 12
+	 * It's also TS 26.101 Table B.3
+	 */
+uint16_t gsm690_5_9_bitorder[118] = {
+	  0,   1,   4,   5,   3,   6,   7,   2,  13,  15,
+	  8,   9,  11,  12,  14,  10,  16,  28,  74,  29,
+	 75,  27,  73,  26,  72,  30,  76,  51,  97,  50,
+	 71,  96, 117,  31,  77,  52,  98,  49,  70,  95,
+	116,  53,  99,  32,  78,  33,  79,  48,  69,  94,
+	115,  47,  68,  93, 114,  46,  67,  92, 113,  19,
+	 21,  23,  22,  18,  17,  20,  24, 111,  43,  89,
+	110,  64,  65,  44,  90,  25,  45,  66,  91, 112,
+	 54, 100,  40,  61,  86, 107,  39,  60,  85, 106,
+	 36,  57,  82, 103,  35,  56,  81, 102,  34,  55,
+	 80, 101,  42,  63,  88, 109,  41,  62,  87, 108,
+	 38,  59,  84, 105,  37,  58,  83, 104,
+};
+
+/* AMR 5.15 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 13
+	 * It's also TS 26.101 Table B.2
+	 */
+uint16_t gsm690_5_15_bitorder[103] = {
+	  7,   6,   5,   4,   3,   2,   1,   0,  15,  14,
+	 13,  12,  11,  10,   9,   8,  23,  24,  25,  26,
+	 27,  46,  65,  84,  45,  44,  43,  64,  63,  62,
+	 83,  82,  81, 102, 101, 100,  42,  61,  80,  99,
+	 28,  47,  66,  85,  18,  41,  60,  79,  98,  29,
+	 48,  67,  17,  20,  22,  40,  59,  78,  97,  21,
+	 30,  49,  68,  86,  19,  16,  87,  39,  38,  58,
+	 57,  77,  35,  54,  73,  92,  76,  96,  95,  36,
+	 55,  74,  93,  32,  51,  33,  52,  70,  71,  89,
+	 90,  31,  50,  69,  88,  37,  56,  75,  94,  34,
+	 53,  72,  91,
+};
+
+/* AMR 4.75 kbits - subjective importance bit ordering */
+	/* This array encodes GSM 05.03 Table 14
+	 * It's also TS 26.101 Table B.1
+	 */
+uint16_t gsm690_4_75_bitorder[95] = {
+	  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
+	 10,  11,  12,  13,  14,  15,  23,  24,  25,  26,
+	 27,  28,  48,  49,  61,  62,  82,  83,  47,  46,
+	 45,  44,  81,  80,  79,  78,  17,  18,  20,  22,
+	 77,  76,  75,  74,  29,  30,  43,  42,  41,  40,
+	 38,  39,  16,  19,  21,  50,  51,  59,  60,  63,
+	 64,  72,  73,  84,  85,  93,  94,  32,  33,  35,
+	 36,  53,  54,  56,  57,  66,  67,  69,  70,  87,
+	 88,  90,  91,  34,  55,  68,  89,  37,  58,  71,
+	 92,  31,  52,  65,  86,
+};